{"version":3,"file":"js/137.a459765f.js","mappings":"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","sources":["webpack://tva-div-template/./node_modules/desandro-matches-selector/matches-selector.js","webpack://tva-div-template/./node_modules/ev-emitter/ev-emitter.js","webpack://tva-div-template/./node_modules/fizzy-ui-utils/utils.js","webpack://tva-div-template/./node_modules/flickity-imagesloaded/flickity-imagesloaded.js","webpack://tva-div-template/./node_modules/flickity/js/add-remove-cell.js","webpack://tva-div-template/./node_modules/flickity/js/animate.js","webpack://tva-div-template/./node_modules/flickity/js/cell.js","webpack://tva-div-template/./node_modules/flickity/js/drag.js","webpack://tva-div-template/./node_modules/flickity/js/flickity.js","webpack://tva-div-template/./node_modules/flickity/js/index.js","webpack://tva-div-template/./node_modules/flickity/js/lazyload.js","webpack://tva-div-template/./node_modules/flickity/js/page-dots.js","webpack://tva-div-template/./node_modules/flickity/js/player.js","webpack://tva-div-template/./node_modules/flickity/js/prev-next-button.js","webpack://tva-div-template/./node_modules/flickity/js/slide.js","webpack://tva-div-template/./node_modules/get-size/get-size.js","webpack://tva-div-template/./node_modules/imagesloaded/imagesloaded.js","webpack://tva-div-template/./node_modules/unidragger/unidragger.js","webpack://tva-div-template/./node_modules/unipointer/unipointer.js","webpack://tva-div-template/./src/utilities/analytics-functions.js","webpack://tva-div-template/./src/components/general/ButtonPrimary.vue","webpack://tva-div-template/./src/components/general/ButtonPrimary.vue?8599","webpack://tva-div-template/./src/components/sections/CTASection.vue","webpack://tva-div-template/./src/components/sections/CTASection.vue?58cb","webpack://tva-div-template/./src/components/general/TvaBackgroundVideo.vue","webpack://tva-div-template/./src/components/general/TvaBackgroundVideo.vue?8bd1","webpack://tva-div-template/./src/components/general/NavCard.vue","webpack://tva-div-template/./src/components/general/NavCard.vue?9754","webpack://tva-div-template/./src/components/sections/HubMultimedialeSection.vue","webpack://tva-div-template/./src/components/sections/HubMultimedialeSection.vue?b386","webpack://tva-div-template/./src/components/general/CtaBar.vue","webpack://tva-div-template/./src/components/general/ButtonDownload.vue","webpack://tva-div-template/./src/components/general/MultimediaPDFCard.vue","webpack://tva-div-template/./src/components/general/MultimediaPDFCard.vue?06db","webpack://tva-div-template/./src/components/general/HubMultimedialeHero.vue","webpack://tva-div-template/./src/components/general/SquareIcon.vue","webpack://tva-div-template/./src/components/general/ButtonSecondaryIcon.vue","webpack://tva-div-template/./src/components/general/ButtonSecondaryIcon.vue?6d2b","webpack://tva-div-template/./src/components/general/ButtonScroll.vue","webpack://tva-div-template/./src/components/general/PageHeroContent.vue","webpack://tva-div-template/./src/components/general/PageHeroContent.vue?9f82","webpack://tva-div-template/./src/components/sections/PageHero.vue","webpack://tva-div-template/./src/components/sections/PageHero.vue?b4a8","webpack://tva-div-template/./src/components/general/RoundIconButton.vue","webpack://tva-div-template/./src/components/general/MediaInfo.vue","webpack://tva-div-template/./src/components/general/SquareIconButton.vue","webpack://tva-div-template/./src/components/general/SquareIconButton.vue?de24","webpack://tva-div-template/./src/components/general/TvaModal.vue","webpack://tva-div-template/./src/components/general/TvaModal.vue?1014","webpack://tva-div-template/./src/components/general/VideoModal.vue","webpack://tva-div-template/./src/components/general/VideoModal.vue?e283","webpack://tva-div-template/./src/components/sections/VideoSection.vue","webpack://tva-div-template/./src/components/sections/VideoSection.vue?f731","webpack://tva-div-template/./src/components/general/CardTemplate.vue","webpack://tva-div-template/./src/components/general/CardTemplate.vue?4384","webpack://tva-div-template/./src/components/general/ArchiveCard.vue","webpack://tva-div-template/./src/components/general/PDFCard.vue","webpack://tva-div-template/./src/components/general/LabelTag.vue","webpack://tva-div-template/./src/components/general/ImageCardContent.vue","webpack://tva-div-template/./src/components/general/ImageCard.vue","webpack://tva-div-template/./src/components/general/FlickitySlider.vue","webpack://tva-div-template/./src/components/general/FlickitySlider.vue?7499","webpack://tva-div-template/./src/components/sections/CardSlider.vue","webpack://tva-div-template/./src/components/sections/CardSlider.vue?7c9d","webpack://tva-div-template/./src/components/general/MediaTime.vue","webpack://tva-div-template/./src/components/general/MediaTime.vue?8d4c","webpack://tva-div-template/./src/components/general/VideoCardContent.vue","webpack://tva-div-template/./src/components/general/VideoCard.vue","webpack://tva-div-template/./src/components/general/VideoCard.vue?d715","webpack://tva-div-template/./src/components/general/CtaExtra.vue","webpack://tva-div-template/./src/components/sections/VideoSlider.vue","webpack://tva-div-template/./src/components/general/InterviewSideBar.vue","webpack://tva-div-template/./src/components/general/TextTitle.vue","webpack://tva-div-template/./src/components/general/TextBlock.vue","webpack://tva-div-template/./src/components/general/TvaScrollBar.vue","webpack://tva-div-template/./src/components/general/TvaScrollBar.vue?9293","webpack://tva-div-template/./src/components/general/InterviewContent.vue","webpack://tva-div-template/./src/components/general/InterviewContent.vue?e782","webpack://tva-div-template/./src/components/general/InterviewModal.vue","webpack://tva-div-template/./src/components/general/InterviewModal.vue?ce31","webpack://tva-div-template/./src/components/sections/InterviewSlider.vue","webpack://tva-div-template/./src/components/sections/InterviewSlider.vue?f7ef","webpack://tva-div-template/./src/components/charts/map/SDGPanelRow.vue","webpack://tva-div-template/./src/components/charts/map/SDGPanelRow.vue?ff65","webpack://tva-div-template/./src/components/charts/map/SDGPanelContent.vue","webpack://tva-div-template/./src/components/general/CountrySideBar.vue","webpack://tva-div-template/./src/components/general/CountrySideBar.vue?bb1e","webpack://tva-div-template/./src/components/general/CountryModalFooter.vue","webpack://tva-div-template/./src/components/general/CountryContent.vue","webpack://tva-div-template/./src/components/general/CountryContent.vue?c58f","webpack://tva-div-template/./src/components/general/CountryModal.vue","webpack://tva-div-template/./src/components/general/CountryModal.vue?db4a","webpack://tva-div-template/./src/components/sections/CountrySlider.vue","webpack://tva-div-template/./src/components/sections/CountrySlider.vue?ea82","webpack://tva-div-template/./src/components/general/SocialSharing.vue","webpack://tva-div-template/./src/components/general/SocialSharing.vue?e265","webpack://tva-div-template/./src/components/general/HomeHeroContent.vue","webpack://tva-div-template/./src/components/general/HomeHeroContent.vue?e484","webpack://tva-div-template/./src/components/sections/HomeHero.vue","webpack://tva-div-template/./src/components/sections/HomeHero.vue?87d4","webpack://tva-div-template/./src/components/general/TextQuote.vue","webpack://tva-div-template/./src/components/sections/InterviewSection.vue","webpack://tva-div-template/./src/components/sections/InterviewSection.vue?7165","webpack://tva-div-template/./src/components/sections/TextSection.vue","webpack://tva-div-template/./src/components/sections/TextSection.vue?1790","webpack://tva-div-template/./src/components/sections/TextSectionGrey.vue","webpack://tva-div-template/./src/components/sections/TextSectionWhite.vue","webpack://tva-div-template/./src/components/sections/TextSectionOverflow.vue","webpack://tva-div-template/./src/components/sections/ImageSection.vue","webpack://tva-div-template/./src/components/sections/ImageSection.vue?fcc1","webpack://tva-div-template/./src/components/sections/BGVideoSection.vue","webpack://tva-div-template/./src/components/sections/BGVideoSection.vue?1523","webpack://tva-div-template/./src/components/general/KPIItem.vue","webpack://tva-div-template/./src/components/general/KPIItem.vue?0527","webpack://tva-div-template/./src/components/general/KPIList.vue","webpack://tva-div-template/./src/components/sections/KPISection.vue","webpack://tva-div-template/./src/components/sections/KPISection.vue?5d89","webpack://tva-div-template/./src/components/general/PodcastPanel.vue","webpack://tva-div-template/./src/components/general/PodcastPanel.vue?91d5","webpack://tva-div-template/./src/components/sections/PodcastSection.vue","webpack://tva-div-template/./src/components/sections/PodcastSection.vue?fb94","webpack://tva-div-template/./src/components/charts/map/MapViz.vue","webpack://tva-div-template/./src/components/charts/map/MapViz.vue?7b33","webpack://tva-div-template/./src/components/charts/map/SDGButton.vue","webpack://tva-div-template/./src/components/charts/map/MapSDGs.vue","webpack://tva-div-template/./src/components/charts/map/MapTop.vue","webpack://tva-div-template/./src/components/charts/map/MapTooltip.vue","webpack://tva-div-template/./src/components/charts/map/SDGPanel.vue","webpack://tva-div-template/./src/components/charts/map/SDGPanel.vue?c2ee","webpack://tva-div-template/./src/components/charts/map/MapSection.vue","webpack://tva-div-template/./src/components/charts/map/MapSection.vue?17ac","webpack://tva-div-template/./src/components/charts/strategy-infograph/StrategySVG.vue","webpack://tva-div-template/./src/components/charts/strategy-infograph/StrategySVGMobile.vue","webpack://tva-div-template/./src/components/charts/strategy-infograph/StrategyButton.vue","webpack://tva-div-template/./src/components/charts/strategy-infograph/StrategyItem.vue","webpack://tva-div-template/./src/components/charts/strategy-infograph/StrategyItem.vue?d315","webpack://tva-div-template/./src/components/charts/strategy-infograph/StrategyModal.vue","webpack://tva-div-template/./src/components/charts/strategy-infograph/StrategyModal.vue?0330","webpack://tva-div-template/./src/components/charts/strategy-infograph/StrategyInfograph.vue","webpack://tva-div-template/./src/components/charts/strategy-infograph/StrategyInfograph.vue?c35a","webpack://tva-div-template/./src/components/general/FooterLink.vue","webpack://tva-div-template/./src/components/general/NavFooter.vue","webpack://tva-div-template/./src/components/general/NavFooter.vue?e29d","webpack://tva-div-template/./src/views/PageView.vue","webpack://tva-div-template/./src/views/PageView.vue?9107","webpack://tva-div-template/./node_modules/wavesurfer.js/dist/wavesurfer.js"],"sourcesContent":["/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n  /*global define: false, module: false */\n  'use strict';\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.matchesSelector = factory();\n  }\n\n}( window, function factory() {\n  'use strict';\n\n  var matchesMethod = ( function() {\n    var ElemProto = window.Element.prototype;\n    // check for the standard method name first\n    if ( ElemProto.matches ) {\n      return 'matches';\n    }\n    // check un-prefixed\n    if ( ElemProto.matchesSelector ) {\n      return 'matchesSelector';\n    }\n    // check vendor prefixes\n    var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n    for ( var i=0; i < prefixes.length; i++ ) {\n      var prefix = prefixes[i];\n      var method = prefix + 'MatchesSelector';\n      if ( ElemProto[ method ] ) {\n        return method;\n      }\n    }\n  })();\n\n  return function matchesSelector( elem, selector ) {\n    return elem[ matchesMethod ]( selector );\n  };\n\n}));\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /* globals define, module, window */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD - RequireJS\n    define( factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS - Browserify, Webpack\n    module.exports = factory();\n  } else {\n    // Browser globals\n    global.EvEmitter = factory();\n  }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // set events hash\n  var events = this._events = this._events || {};\n  // set listeners array\n  var listeners = events[ eventName ] = events[ eventName ] || [];\n  // only add once\n  if ( listeners.indexOf( listener ) == -1 ) {\n    listeners.push( listener );\n  }\n\n  return this;\n};\n\nproto.once = function( eventName, listener ) {\n  if ( !eventName || !listener ) {\n    return;\n  }\n  // add event\n  this.on( eventName, listener );\n  // set once flag\n  // set onceEvents hash\n  var onceEvents = this._onceEvents = this._onceEvents || {};\n  // set onceListeners object\n  var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n  // set flag\n  onceListeners[ listener ] = true;\n\n  return this;\n};\n\nproto.off = function( eventName, listener ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  var index = listeners.indexOf( listener );\n  if ( index != -1 ) {\n    listeners.splice( index, 1 );\n  }\n\n  return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n  var listeners = this._events && this._events[ eventName ];\n  if ( !listeners || !listeners.length ) {\n    return;\n  }\n  // copy over to avoid interference if .off() in listener\n  listeners = listeners.slice(0);\n  args = args || [];\n  // once stuff\n  var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n  for ( var i=0; i < listeners.length; i++ ) {\n    var listener = listeners[i]\n    var isOnce = onceListeners && onceListeners[ listener ];\n    if ( isOnce ) {\n      // remove listener\n      // remove before trigger to prevent recursion\n      this.off( eventName, listener );\n      // unset once flag\n      delete onceListeners[ listener ];\n    }\n    // trigger listener\n    listener.apply( this, args );\n  }\n\n  return this;\n};\n\nproto.allOff = function() {\n  delete this._events;\n  delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'desandro-matches-selector/matches-selector'\n    ], function( matchesSelector ) {\n      return factory( window, matchesSelector );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('desandro-matches-selector')\n    );\n  } else {\n    // browser global\n    window.fizzyUIUtils = factory(\n      window,\n      window.matchesSelector\n    );\n  }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n  return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n  if ( Array.isArray( obj ) ) {\n    // use object if already an array\n    return obj;\n  }\n  // return empty array if undefined or null. #6\n  if ( obj === null || obj === undefined ) {\n    return [];\n  }\n\n  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n  if ( isArrayLike ) {\n    // convert nodeList to array\n    return arraySlice.call( obj );\n  }\n\n  // array of single index\n  return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n  var index = ary.indexOf( obj );\n  if ( index != -1 ) {\n    ary.splice( index, 1 );\n  }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n  while ( elem.parentNode && elem != document.body ) {\n    elem = elem.parentNode;\n    if ( matchesSelector( elem, selector ) ) {\n      return elem;\n    }\n  }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n  if ( typeof elem == 'string' ) {\n    return document.querySelector( elem );\n  }\n  return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n  // make array of elems\n  elems = utils.makeArray( elems );\n  var ffElems = [];\n\n  elems.forEach( function( elem ) {\n    // check that elem is an actual element\n    if ( !( elem instanceof HTMLElement ) ) {\n      return;\n    }\n    // add elem if no selector\n    if ( !selector ) {\n      ffElems.push( elem );\n      return;\n    }\n    // filter & find items if we have a selector\n    // filter\n    if ( matchesSelector( elem, selector ) ) {\n      ffElems.push( elem );\n    }\n    // find children\n    var childElems = elem.querySelectorAll( selector );\n    // concat childElems to filterFound array\n    for ( var i=0; i < childElems.length; i++ ) {\n      ffElems.push( childElems[i] );\n    }\n  });\n\n  return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n  threshold = threshold || 100;\n  // original method\n  var method = _class.prototype[ methodName ];\n  var timeoutName = methodName + 'Timeout';\n\n  _class.prototype[ methodName ] = function() {\n    var timeout = this[ timeoutName ];\n    clearTimeout( timeout );\n\n    var args = arguments;\n    var _this = this;\n    this[ timeoutName ] = setTimeout( function() {\n      method.apply( _this, args );\n      delete _this[ timeoutName ];\n    }, threshold );\n  };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n  var readyState = document.readyState;\n  if ( readyState == 'complete' || readyState == 'interactive' ) {\n    // do async to allow for other scripts to run. metafizzy/flickity#441\n    setTimeout( callback );\n  } else {\n    document.addEventListener( 'DOMContentLoaded', callback );\n  }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n  return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n    return $1 + '-' + $2;\n  }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n  utils.docReady( function() {\n    var dashedNamespace = utils.toDashed( namespace );\n    var dataAttr = 'data-' + dashedNamespace;\n    var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n    var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n    var elems = utils.makeArray( dataAttrElems )\n      .concat( utils.makeArray( jsDashElems ) );\n    var dataOptionsAttr = dataAttr + '-options';\n    var jQuery = window.jQuery;\n\n    elems.forEach( function( elem ) {\n      var attr = elem.getAttribute( dataAttr ) ||\n        elem.getAttribute( dataOptionsAttr );\n      var options;\n      try {\n        options = attr && JSON.parse( attr );\n      } catch ( error ) {\n        // log error, do not initialize\n        if ( console ) {\n          console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n          ': ' + error );\n        }\n        return;\n      }\n      // initialize\n      var instance = new WidgetClass( elem, options );\n      // make available via $().data('namespace')\n      if ( jQuery ) {\n        jQuery.data( elem, namespace, instance );\n      }\n    });\n\n  });\n};\n\n// -----  ----- //\n\nreturn utils;\n\n}));\n","/*!\n * Flickity imagesLoaded v2.0.0\n * enables imagesLoaded option for Flickity\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'flickity/js/index',\n      'imagesloaded/imagesloaded'\n    ], function( Flickity, imagesLoaded ) {\n      return factory( window, Flickity, imagesLoaded );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('flickity'),\n      require('imagesloaded')\n    );\n  } else {\n    // browser global\n    window.Flickity = factory(\n      window,\n      window.Flickity,\n      window.imagesLoaded\n    );\n  }\n\n}( window, function factory( window, Flickity, imagesLoaded ) {\n'use strict';\n\nFlickity.createMethods.push('_createImagesLoaded');\n\nvar proto = Flickity.prototype;\n\nproto._createImagesLoaded = function() {\n  this.on( 'activate', this.imagesLoaded );\n};\n\nproto.imagesLoaded = function() {\n  if ( !this.options.imagesLoaded ) {\n    return;\n  }\n  var _this = this;\n  function onImagesLoadedProgress( instance, image ) {\n    var cell = _this.getParentCell( image.img );\n    _this.cellSizeChange( cell && cell.element );\n    if ( !_this.options.freeScroll ) {\n      _this.positionSliderAtSelected();\n    }\n  }\n  imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n}));\n","// add, remove cell\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      'fizzy-ui-utils/utils',\n    ], function( Flickity, utils ) {\n      return factory( window, Flickity, utils );\n    } );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('./flickity'),\n        require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n        window,\n        window.Flickity,\n        window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n  var fragment = document.createDocumentFragment();\n  cells.forEach( function( cell ) {\n    fragment.appendChild( cell.element );\n  } );\n  return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n  var cells = this._makeCells( elems );\n  if ( !cells || !cells.length ) {\n    return;\n  }\n  var len = this.cells.length;\n  // default to append\n  index = index === undefined ? len : index;\n  // add cells with document fragment\n  var fragment = getCellsFragment( cells );\n  // append to slider\n  var isAppend = index == len;\n  if ( isAppend ) {\n    this.slider.appendChild( fragment );\n  } else {\n    var insertCellElement = this.cells[ index ].element;\n    this.slider.insertBefore( fragment, insertCellElement );\n  }\n  // add to this.cells\n  if ( index === 0 ) {\n    // prepend, add to start\n    this.cells = cells.concat( this.cells );\n  } else if ( isAppend ) {\n    // append, add to end\n    this.cells = this.cells.concat( cells );\n  } else {\n    // insert in this.cells\n    var endCells = this.cells.splice( index, len - index );\n    this.cells = this.cells.concat( cells ).concat( endCells );\n  }\n\n  this._sizeCells( cells );\n  this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n  this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n  this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n  var cells = this.getCells( elems );\n  if ( !cells || !cells.length ) {\n    return;\n  }\n\n  var minCellIndex = this.cells.length - 1;\n  // remove cells from collection & DOM\n  cells.forEach( function( cell ) {\n    cell.remove();\n    var index = this.cells.indexOf( cell );\n    minCellIndex = Math.min( index, minCellIndex );\n    utils.removeFrom( this.cells, cell );\n  }, this );\n\n  this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n  var cell = this.getCell( elem );\n  if ( !cell ) {\n    return;\n  }\n  cell.getSize();\n\n  var index = this.cells.indexOf( cell );\n  this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n * @param {Boolean} isPositioningSlider - Positions slider after selection\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n  var prevSelectedElem = this.selectedElement;\n  this._positionCells( changedCellIndex );\n  this._getWrapShiftCells();\n  this.setGallerySize();\n  // update selectedIndex\n  // try to maintain position & select previous selected element\n  var cell = this.getCell( prevSelectedElem );\n  if ( cell ) {\n    this.selectedIndex = this.getCellSlideIndex( cell );\n  }\n  this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n  this.emitEvent( 'cellChange', [ changedCellIndex ] );\n  // position slider\n  this.select( this.selectedIndex );\n  // do not position slider after lazy load\n  if ( isPositioningSlider ) {\n    this.positionSliderAtSelected();\n  }\n};\n\n// -----  ----- //\n\nreturn Flickity;\n\n} ) );\n","// animate\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'fizzy-ui-utils/utils',\n    ], function( utils ) {\n      return factory( window, utils );\n    } );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.animatePrototype = factory(\n        window,\n        window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n  if ( this.isAnimating ) {\n    return;\n  }\n\n  this.isAnimating = true;\n  this.restingFrames = 0;\n  this.animate();\n};\n\nproto.animate = function() {\n  this.applyDragForce();\n  this.applySelectedAttraction();\n\n  var previousX = this.x;\n\n  this.integratePhysics();\n  this.positionSlider();\n  this.settle( previousX );\n  // animate next frame\n  if ( this.isAnimating ) {\n    var _this = this;\n    requestAnimationFrame( function animateFrame() {\n      _this.animate();\n    } );\n  }\n};\n\nproto.positionSlider = function() {\n  var x = this.x;\n  // wrap position around\n  if ( this.options.wrapAround && this.cells.length > 1 ) {\n    x = utils.modulo( x, this.slideableWidth );\n    x -= this.slideableWidth;\n    this.shiftWrapCells( x );\n  }\n\n  this.setTranslateX( x, this.isAnimating );\n  this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n  x += this.cursorPosition;\n  // reverse if right-to-left and using transform\n  x = this.options.rightToLeft ? -x : x;\n  var translateX = this.getPositionValue( x );\n  // use 3D transforms for hardware acceleration on iOS\n  // but use 2D when settled, for better font-rendering\n  this.slider.style.transform = is3d ?\n    'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n  var firstSlide = this.slides[0];\n  if ( !firstSlide ) {\n    return;\n  }\n  var positionX = -this.x - firstSlide.target;\n  var progress = positionX / this.slidesWidth;\n  this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n  if ( !this.cells.length ) {\n    return;\n  }\n  this.x = -this.selectedSlide.target;\n  this.velocity = 0; // stop wobble\n  this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n  if ( this.options.percentPosition ) {\n    // percent position, round to 2 digits, like 12.34%\n    return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n  } else {\n    // pixel positioning\n    return Math.round( position ) + 'px';\n  }\n};\n\nproto.settle = function( previousX ) {\n  // keep track of frames where x hasn't moved\n  var isResting = !this.isPointerDown &&\n      Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n  if ( isResting ) {\n    this.restingFrames++;\n  }\n  // stop animating if resting for 3 or more frames\n  if ( this.restingFrames > 2 ) {\n    this.isAnimating = false;\n    delete this.isFreeScrolling;\n    // render position with translateX when settled\n    this.positionSlider();\n    this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n  }\n};\n\nproto.shiftWrapCells = function( x ) {\n  // shift before cells\n  var beforeGap = this.cursorPosition + x;\n  this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n  // shift after cells\n  var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n  this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n  for ( var i = 0; i < cells.length; i++ ) {\n    var cell = cells[i];\n    var cellShift = gap > 0 ? shift : 0;\n    cell.wrapShift( cellShift );\n    gap -= cell.size.outerWidth;\n  }\n};\n\nproto._unshiftCells = function( cells ) {\n  if ( !cells || !cells.length ) {\n    return;\n  }\n  for ( var i = 0; i < cells.length; i++ ) {\n    cells[i].wrapShift( 0 );\n  }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n  this.x += this.velocity;\n  this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n  this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n  return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n  // my thanks to Steven Wittens, who simplified this math greatly\n  return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n  if ( !this.isDraggable || !this.isPointerDown ) {\n    return;\n  }\n  // change the position to drag position by applying force\n  var dragVelocity = this.dragX - this.x;\n  var dragForce = dragVelocity - this.velocity;\n  this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n  // do not attract if pointer down or no slides\n  var dragDown = this.isDraggable && this.isPointerDown;\n  if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n    return;\n  }\n  var distance = this.selectedSlide.target * -1 - this.x;\n  var force = distance * this.options.selectedAttraction;\n  this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// Flickity.Cell\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'get-size/get-size',\n    ], function( getSize ) {\n      return factory( window, getSize );\n    } );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('get-size')\n    );\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.Cell = factory(\n        window,\n        window.getSize\n    );\n  }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n  this.element = elem;\n  this.parent = parent;\n\n  this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n  this.element.style.position = 'absolute';\n  this.element.setAttribute( 'aria-hidden', 'true' );\n  this.x = 0;\n  this.shift = 0;\n  this.element.style[ this.parent.originSide ] = 0;\n};\n\nproto.destroy = function() {\n  // reset style\n  this.unselect();\n  this.element.style.position = '';\n  var side = this.parent.originSide;\n  this.element.style[ side ] = '';\n  this.element.style.transform = '';\n  this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n  this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n  this.x = x;\n  this.updateTarget();\n  this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n  var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n  this.target = this.x + this.size[ marginProperty ] +\n    this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n  // render position of cell with in slider\n  var sideOffset = this.parent.originSide === 'left' ? 1 : -1;\n\n  var adjustedX = this.parent.options.percentPosition ?\n    x * sideOffset * ( this.parent.size.innerWidth / this.size.width ) :\n    x * sideOffset;\n\n  this.element.style.transform = 'translateX(' +\n    this.parent.getPositionValue( adjustedX ) + ')';\n};\n\nproto.select = function() {\n  this.element.classList.add('is-selected');\n  this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n  this.element.classList.remove('is-selected');\n  this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n  this.shift = shift;\n  this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n  this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n","// drag\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      'unidragger/unidragger',\n      'fizzy-ui-utils/utils',\n    ], function( Flickity, Unidragger, utils ) {\n      return factory( window, Flickity, Unidragger, utils );\n    } );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('./flickity'),\n        require('unidragger'),\n        require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    window.Flickity = factory(\n        window,\n        window.Flickity,\n        window.Unidragger,\n        window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n  draggable: '>1',\n  dragThreshold: 3,\n} );\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// --------------------------  -------------------------- //\n\nproto._createDrag = function() {\n  this.on( 'activate', this.onActivateDrag );\n  this.on( 'uiChange', this._uiChangeDrag );\n  this.on( 'deactivate', this.onDeactivateDrag );\n  this.on( 'cellChange', this.updateDraggable );\n  // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n  this.handles = [ this.viewport ];\n  this.bindHandles();\n  this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n  this.unbindHandles();\n  this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n  // disable dragging if less than 2 slides. #278\n  if ( this.options.draggable == '>1' ) {\n    this.isDraggable = this.slides.length > 1;\n  } else {\n    this.isDraggable = this.options.draggable;\n  }\n  if ( this.isDraggable ) {\n    this.element.classList.add('is-draggable');\n  } else {\n    this.element.classList.remove('is-draggable');\n  }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n  this.options.draggable = true;\n  this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n  this.options.draggable = false;\n  this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n  delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    this._pointerDownDefault( event, pointer );\n    return;\n  }\n  var isOkay = this.okayPointerDown( event );\n  if ( !isOkay ) {\n    return;\n  }\n\n  this._pointerDownPreventDefault( event );\n  this.pointerDownFocus( event );\n  // blur\n  if ( document.activeElement != this.element ) {\n    // do not blur if already focused\n    this.pointerDownBlur();\n  }\n\n  // stop if it was moving\n  this.dragX = this.x;\n  this.viewport.classList.add('is-pointer-down');\n  // track scrolling\n  this.pointerDownScroll = getScrollPosition();\n  window.addEventListener( 'scroll', this );\n\n  this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n  // track start event position\n  // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n  this.pointerDownPointer = {\n    pageX: pointer.pageX,\n    pageY: pointer.pageY,\n  };\n  // bind move and end events\n  this._bindPostStartEvents( event );\n  this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n  INPUT: true,\n  TEXTAREA: true,\n  SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n  var isFocusNode = focusNodes[ event.target.nodeName ];\n  if ( !isFocusNode ) {\n    this.focus();\n  }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n  var isTouchStart = event.type == 'touchstart';\n  var isTouchPointer = event.pointerType == 'touch';\n  var isFocusNode = focusNodes[ event.target.nodeName ];\n  if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n    event.preventDefault();\n  }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n  return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n  delete this.isTouchScrolling;\n  this.viewport.classList.remove('is-pointer-down');\n  this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n  this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n  window.removeEventListener( 'scroll', this );\n  delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  this.dragStartPosition = this.x;\n  this.startAnimation();\n  window.removeEventListener( 'scroll', this );\n  this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n  var moveVector = this._dragPointerMove( event, pointer );\n  this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n  this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  event.preventDefault();\n\n  this.previousDragX = this.dragX;\n  // reverse if right-to-left\n  var direction = this.options.rightToLeft ? -1 : 1;\n  if ( this.options.wrapAround ) {\n    // wrap around move. #589\n    moveVector.x %= this.slideableWidth;\n  }\n  var dragX = this.dragStartPosition + moveVector.x * direction;\n\n  if ( !this.options.wrapAround && this.slides.length ) {\n    // slow drag\n    var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n    dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n    var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n    dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n  }\n\n  this.dragX = dragX;\n\n  this.dragMoveTime = new Date();\n  this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n  if ( !this.isDraggable ) {\n    return;\n  }\n  if ( this.options.freeScroll ) {\n    this.isFreeScrolling = true;\n  }\n  // set selectedIndex based on where flick will end up\n  var index = this.dragEndRestingSelect();\n\n  if ( this.options.freeScroll && !this.options.wrapAround ) {\n    // if free-scroll & not wrap around\n    // do not free-scroll if going outside of bounding slides\n    // so bounding slides can attract slider, and keep it in bounds\n    var restingX = this.getRestingPosition();\n    this.isFreeScrolling = -restingX > this.slides[0].target &&\n      -restingX < this.getLastSlide().target;\n  } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n    // boost selection if selected index has not changed\n    index += this.dragEndBoostSelect();\n  }\n  delete this.previousDragX;\n  // apply selection\n  // TODO refactor this, selecting here feels weird\n  // HACK, set flag so dragging stays in correct direction\n  this.isDragSelect = this.options.wrapAround;\n  this.select( index );\n  delete this.isDragSelect;\n  this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n  var restingX = this.getRestingPosition();\n  // how far away from selected slide\n  var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n  // get closet resting going up and going down\n  var positiveResting = this._getClosestResting( restingX, distance, 1 );\n  var negativeResting = this._getClosestResting( restingX, distance, -1 );\n  // use closer resting for wrap-around\n  var index = positiveResting.distance < negativeResting.distance ?\n    positiveResting.index : negativeResting.index;\n  return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n  var index = this.selectedIndex;\n  var minDistance = Infinity;\n  var condition = this.options.contain && !this.options.wrapAround ?\n    // if contain, keep going if distance is equal to minDistance\n    function( dist, minDist ) {\n      return dist <= minDist;\n    } : function( dist, minDist ) {\n      return dist < minDist;\n    };\n  while ( condition( distance, minDistance ) ) {\n    // measure distance to next cell\n    index += increment;\n    minDistance = distance;\n    distance = this.getSlideDistance( -restingX, index );\n    if ( distance === null ) {\n      break;\n    }\n    distance = Math.abs( distance );\n  }\n  return {\n    distance: minDistance,\n    // selected was previous index\n    index: index - increment,\n  };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n  var len = this.slides.length;\n  // wrap around if at least 2 slides\n  var isWrapAround = this.options.wrapAround && len > 1;\n  var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n  var slide = this.slides[ slideIndex ];\n  if ( !slide ) {\n    return null;\n  }\n  // add distance for wrap-around slides\n  var wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n  return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n  // do not boost if no previousDragX or dragMoveTime\n  if ( this.previousDragX === undefined || !this.dragMoveTime ||\n    // or if drag was held for 100 ms\n    new Date() - this.dragMoveTime > 100 ) {\n    return 0;\n  }\n\n  var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n  var delta = this.previousDragX - this.dragX;\n  if ( distance > 0 && delta > 0 ) {\n    // boost to next if moving towards the right, and positive velocity\n    return 1;\n  } else if ( distance < 0 && delta < 0 ) {\n    // boost to previous if moving towards the left, and negative velocity\n    return -1;\n  }\n  return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n  // get clickedCell, if cell was clicked\n  var clickedCell = this.getParentCell( event.target );\n  var cellElem = clickedCell && clickedCell.element;\n  var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n  this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n  var scroll = getScrollPosition();\n  var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n  var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n  // cancel click/tap if scroll is too much\n  if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n    this._pointerDone();\n  }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n  return {\n    x: window.pageXOffset,\n    y: window.pageYOffset,\n  };\n}\n\n// -----  ----- //\n\nreturn Flickity;\n\n} ) );\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'ev-emitter/ev-emitter',\n      'get-size/get-size',\n      'fizzy-ui-utils/utils',\n      './cell',\n      './slide',\n      './animate',\n    ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n      return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n    } );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('ev-emitter'),\n        require('get-size'),\n        require('fizzy-ui-utils'),\n        require('./cell'),\n        require('./slide'),\n        require('./animate')\n    );\n  } else {\n    // browser global\n    var _Flickity = window.Flickity;\n\n    window.Flickity = factory(\n        window,\n        window.EvEmitter,\n        window.getSize,\n        window.fizzyUIUtils,\n        _Flickity.Cell,\n        _Flickity.Slide,\n        _Flickity.animatePrototype\n    );\n  }\n\n}( window, function factory( window, EvEmitter, getSize,\n    utils, Cell, Slide, animatePrototype ) {\n\n/* eslint-enable max-params */\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n  elems = utils.makeArray( elems );\n  while ( elems.length ) {\n    toElem.appendChild( elems.shift() );\n  }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n  var queryElement = utils.getQueryElement( element );\n  if ( !queryElement ) {\n    if ( console ) {\n      console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n    }\n    return;\n  }\n  this.element = queryElement;\n  // do not initialize twice on same element\n  if ( this.element.flickityGUID ) {\n    var instance = instances[ this.element.flickityGUID ];\n    if ( instance ) instance.option( options );\n    return instance;\n  }\n\n  // add jQuery\n  if ( jQuery ) {\n    this.$element = jQuery( this.element );\n  }\n  // options\n  this.options = utils.extend( {}, this.constructor.defaults );\n  this.option( options );\n\n  // kick things off\n  this._create();\n}\n\nFlickity.defaults = {\n  accessibility: true,\n  // adaptiveHeight: false,\n  cellAlign: 'center',\n  // cellSelector: undefined,\n  // contain: false,\n  freeScrollFriction: 0.075, // friction when free-scrolling\n  friction: 0.28, // friction when selecting\n  namespaceJQueryEvents: true,\n  // initialIndex: 0,\n  percentPosition: true,\n  resize: true,\n  selectedAttraction: 0.025,\n  setGallerySize: true,\n  // watchCSS: false,\n  // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n  // add id for Flickity.data\n  var id = this.guid = ++GUID;\n  this.element.flickityGUID = id; // expando\n  instances[ id ] = this; // associate via id\n  // initial properties\n  this.selectedIndex = 0;\n  // how many frames slider has been in same position\n  this.restingFrames = 0;\n  // initial physics properties\n  this.x = 0;\n  this.velocity = 0;\n  this.originSide = this.options.rightToLeft ? 'right' : 'left';\n  // create viewport & slider\n  this.viewport = document.createElement('div');\n  this.viewport.className = 'flickity-viewport';\n  this._createSlider();\n\n  if ( this.options.resize || this.options.watchCSS ) {\n    window.addEventListener( 'resize', this );\n  }\n\n  // add listeners from on option\n  for ( var eventName in this.options.on ) {\n    var listener = this.options.on[ eventName ];\n    this.on( eventName, listener );\n  }\n\n  Flickity.createMethods.forEach( function( method ) {\n    this[ method ]();\n  }, this );\n\n  if ( this.options.watchCSS ) {\n    this.watchCSS();\n  } else {\n    this.activate();\n  }\n\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n  utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n  if ( this.isActive ) {\n    return;\n  }\n  this.isActive = true;\n  this.element.classList.add('flickity-enabled');\n  if ( this.options.rightToLeft ) {\n    this.element.classList.add('flickity-rtl');\n  }\n\n  this.getSize();\n  // move initial cell elements so they can be loaded as cells\n  var cellElems = this._filterFindCellElements( this.element.children );\n  moveElements( cellElems, this.slider );\n  this.viewport.appendChild( this.slider );\n  this.element.appendChild( this.viewport );\n  // get cells from children\n  this.reloadCells();\n\n  if ( this.options.accessibility ) {\n    // allow element to focusable\n    this.element.tabIndex = 0;\n    // listen for key presses\n    this.element.addEventListener( 'keydown', this );\n  }\n\n  this.emitEvent('activate');\n  this.selectInitialIndex();\n  // flag for initial activation, for using initialIndex\n  this.isInitActivated = true;\n  // ready event. #493\n  this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n  // slider element does all the positioning\n  var slider = document.createElement('div');\n  slider.className = 'flickity-slider';\n  slider.style[ this.originSide ] = 0;\n  this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n  return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n  // collection of item elements\n  this.cells = this._makeCells( this.slider.children );\n  this.positionCells();\n  this._getWrapShiftCells();\n  this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n  var cellElems = this._filterFindCellElements( elems );\n\n  // create new Flickity for collection\n  var cells = cellElems.map( function( cellElem ) {\n    return new Cell( cellElem, this );\n  }, this );\n\n  return cells;\n};\n\nproto.getLastCell = function() {\n  return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n  return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n  // size all cells\n  this._sizeCells( this.cells );\n  // position all cells\n  this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n  index = index || 0;\n  // also measure maxCellHeight\n  // start 0 if positioning all cells\n  this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n  var cellX = 0;\n  // get cellX\n  if ( index > 0 ) {\n    var startCell = this.cells[ index - 1 ];\n    cellX = startCell.x + startCell.size.outerWidth;\n  }\n  var len = this.cells.length;\n  for ( var i = index; i < len; i++ ) {\n    var cell = this.cells[i];\n    cell.setPosition( cellX );\n    cellX += cell.size.outerWidth;\n    this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n  }\n  // keep track of cellX for wrap-around\n  this.slideableWidth = cellX;\n  // slides\n  this.updateSlides();\n  // contain slides target\n  this._containSlides();\n  // update slidesWidth\n  this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n  cells.forEach( function( cell ) {\n    cell.getSize();\n  } );\n};\n\n// --------------------------  -------------------------- //\n\nproto.updateSlides = function() {\n  this.slides = [];\n  if ( !this.cells.length ) {\n    return;\n  }\n\n  var slide = new Slide( this );\n  this.slides.push( slide );\n  var isOriginLeft = this.originSide == 'left';\n  var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n  var canCellFit = this._getCanCellFit();\n\n  this.cells.forEach( function( cell, i ) {\n    // just add cell if first cell in slide\n    if ( !slide.cells.length ) {\n      slide.addCell( cell );\n      return;\n    }\n\n    var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n      ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n    if ( canCellFit.call( this, i, slideWidth ) ) {\n      slide.addCell( cell );\n    } else {\n      // doesn't fit, new slide\n      slide.updateTarget();\n\n      slide = new Slide( this );\n      this.slides.push( slide );\n      slide.addCell( cell );\n    }\n  }, this );\n  // last slide\n  slide.updateTarget();\n  // update .selectedSlide\n  this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n  var groupCells = this.options.groupCells;\n  if ( !groupCells ) {\n    return function() {\n      return false;\n    };\n  } else if ( typeof groupCells == 'number' ) {\n    // group by number. 3 -> [0,1,2], [3,4,5], ...\n    var number = parseInt( groupCells, 10 );\n    return function( i ) {\n      return ( i % number ) !== 0;\n    };\n  }\n  // default, group by width of slide\n  // parse '75%\n  var percentMatch = typeof groupCells == 'string' &&\n    groupCells.match( /^(\\d+)%$/ );\n  var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n  return function( i, slideWidth ) {\n    /* eslint-disable-next-line no-invalid-this */\n    return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n  };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n  this.positionCells();\n  this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n  this.size = getSize( this.element );\n  this.setCellAlign();\n  this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n  // cell align, then based on origin side\n  center: {\n    left: 0.5,\n    right: 0.5,\n  },\n  left: {\n    left: 0,\n    right: 1,\n  },\n  right: {\n    right: 0,\n    left: 1,\n  },\n};\n\nproto.setCellAlign = function() {\n  var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n  this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n  if ( this.options.setGallerySize ) {\n    var height = this.options.adaptiveHeight && this.selectedSlide ?\n      this.selectedSlide.height : this.maxCellHeight;\n    this.viewport.style.height = height + 'px';\n  }\n};\n\nproto._getWrapShiftCells = function() {\n  // only for wrap-around\n  if ( !this.options.wrapAround ) {\n    return;\n  }\n  // unshift previous cells\n  this._unshiftCells( this.beforeShiftCells );\n  this._unshiftCells( this.afterShiftCells );\n  // get before cells\n  // initial gap\n  var gapX = this.cursorPosition;\n  var cellIndex = this.cells.length - 1;\n  this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n  // get after cells\n  // ending gap between last cell and end of gallery viewport\n  gapX = this.size.innerWidth - this.cursorPosition;\n  // start cloning at first cell, working forwards\n  this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n  // keep adding cells until the cover the initial gap\n  var cells = [];\n  while ( gapX > 0 ) {\n    var cell = this.cells[ cellIndex ];\n    if ( !cell ) {\n      break;\n    }\n    cells.push( cell );\n    cellIndex += increment;\n    gapX -= cell.size.outerWidth;\n  }\n  return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n  if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n    return;\n  }\n  var isRightToLeft = this.options.rightToLeft;\n  var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n  var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n  var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n  // content is less than gallery size\n  var isContentSmaller = contentWidth < this.size.innerWidth;\n  // bounds\n  var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n  var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n  // contain each cell target\n  this.slides.forEach( function( slide ) {\n    if ( isContentSmaller ) {\n      // all cells fit inside gallery\n      slide.target = contentWidth * this.cellAlign;\n    } else {\n      // contain to bounds\n      slide.target = Math.max( slide.target, beginBound );\n      slide.target = Math.min( slide.target, endBound );\n    }\n  }, this );\n};\n\n// -----  ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n  var emitArgs = event ? [ event ].concat( args ) : args;\n  this.emitEvent( type, emitArgs );\n\n  if ( jQuery && this.$element ) {\n    // default trigger with type if no event\n    type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n    var $event = type;\n    if ( event ) {\n      // create jQuery event\n      var jQEvent = new jQuery.Event( event );\n      jQEvent.type = type;\n      $event = jQEvent;\n    }\n    this.$element.trigger( $event, args );\n  }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n  if ( !this.isActive ) {\n    return;\n  }\n  index = parseInt( index, 10 );\n  this._wrapSelect( index );\n\n  if ( this.options.wrapAround || isWrap ) {\n    index = utils.modulo( index, this.slides.length );\n  }\n  // bail if invalid index\n  if ( !this.slides[ index ] ) {\n    return;\n  }\n  var prevIndex = this.selectedIndex;\n  this.selectedIndex = index;\n  this.updateSelectedSlide();\n  if ( isInstant ) {\n    this.positionSliderAtSelected();\n  } else {\n    this.startAnimation();\n  }\n  if ( this.options.adaptiveHeight ) {\n    this.setGallerySize();\n  }\n  // events\n  this.dispatchEvent( 'select', null, [ index ] );\n  // change event if new index\n  if ( index != prevIndex ) {\n    this.dispatchEvent( 'change', null, [ index ] );\n  }\n  // old v1 event name, remove in v3\n  this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n  var len = this.slides.length;\n  var isWrapping = this.options.wrapAround && len > 1;\n  if ( !isWrapping ) {\n    return index;\n  }\n  var wrapIndex = utils.modulo( index, len );\n  // go to shortest\n  var delta = Math.abs( wrapIndex - this.selectedIndex );\n  var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n  var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n  if ( !this.isDragSelect && backWrapDelta < delta ) {\n    index += len;\n  } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n    index -= len;\n  }\n  // wrap position so slider is within normal area\n  if ( index < 0 ) {\n    this.x -= this.slideableWidth;\n  } else if ( index >= len ) {\n    this.x += this.slideableWidth;\n  }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n  this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n  this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n  var slide = this.slides[ this.selectedIndex ];\n  // selectedIndex could be outside of slides, if triggered before resize()\n  if ( !slide ) {\n    return;\n  }\n  // unselect previous selected slide\n  this.unselectSelectedSlide();\n  // update new selected slide\n  this.selectedSlide = slide;\n  slide.select();\n  this.selectedCells = slide.cells;\n  this.selectedElements = slide.getCellElements();\n  // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n  // Remove in v3?\n  this.selectedCell = slide.cells[0];\n  this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n  if ( this.selectedSlide ) {\n    this.selectedSlide.unselect();\n  }\n};\n\nproto.selectInitialIndex = function() {\n  var initialIndex = this.options.initialIndex;\n  // already activated, select previous selectedIndex\n  if ( this.isInitActivated ) {\n    this.select( this.selectedIndex, false, true );\n    return;\n  }\n  // select with selector string\n  if ( initialIndex && typeof initialIndex == 'string' ) {\n    var cell = this.queryCell( initialIndex );\n    if ( cell ) {\n      this.selectCell( initialIndex, false, true );\n      return;\n    }\n  }\n\n  var index = 0;\n  // select with number\n  if ( initialIndex && this.slides[ initialIndex ] ) {\n    index = initialIndex;\n  }\n  // select instantly\n  this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n  // get cell\n  var cell = this.queryCell( value );\n  if ( !cell ) {\n    return;\n  }\n\n  var index = this.getCellSlideIndex( cell );\n  this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n  // get index of slides that has cell\n  for ( var i = 0; i < this.slides.length; i++ ) {\n    var slide = this.slides[i];\n    var index = slide.cells.indexOf( cell );\n    if ( index != -1 ) {\n      return i;\n    }\n  }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n  // loop through cells to get the one that matches\n  for ( var i = 0; i < this.cells.length; i++ ) {\n    var cell = this.cells[i];\n    if ( cell.element == elem ) {\n      return cell;\n    }\n  }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n  elems = utils.makeArray( elems );\n  var cells = [];\n  elems.forEach( function( elem ) {\n    var cell = this.getCell( elem );\n    if ( cell ) {\n      cells.push( cell );\n    }\n  }, this );\n  return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n  return this.cells.map( function( cell ) {\n    return cell.element;\n  } );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n  // first check if elem is cell\n  var cell = this.getCell( elem );\n  if ( cell ) {\n    return cell;\n  }\n  // try to get parent cell elem\n  elem = utils.getParent( elem, '.flickity-slider > *' );\n  return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n  if ( !adjCount ) {\n    return this.selectedSlide.getCellElements();\n  }\n  index = index === undefined ? this.selectedIndex : index;\n\n  var len = this.slides.length;\n  if ( 1 + ( adjCount * 2 ) >= len ) {\n    return this.getCellElements();\n  }\n\n  var cellElems = [];\n  for ( var i = index - adjCount; i <= index + adjCount; i++ ) {\n    var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n    var slide = this.slides[ slideIndex ];\n    if ( slide ) {\n      cellElems = cellElems.concat( slide.getCellElements() );\n    }\n  }\n  return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n  if ( typeof selector == 'number' ) {\n    // use number as index\n    return this.cells[ selector ];\n  }\n  if ( typeof selector == 'string' ) {\n    // do not select invalid selectors from hash: #123, #/. #791\n    if ( selector.match( /^[#.]?[\\d/]/ ) ) {\n      return;\n    }\n    // use string as selector, get element\n    selector = this.element.querySelector( selector );\n  }\n  // get cell from element\n  return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n  this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n  // HACK iOS does not allow touch events to bubble up?!\n  if ( event.type != 'touchstart' ) {\n    event.preventDefault();\n  }\n  this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n  this.watchCSS();\n  this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n  // #1177 disable resize behavior when animating or dragging for iOS 15\n  if ( !this.isActive || this.isAnimating || this.isDragging ) {\n    return;\n  }\n  this.getSize();\n  // wrap values\n  if ( this.options.wrapAround ) {\n    this.x = utils.modulo( this.x, this.slideableWidth );\n  }\n  this.positionCells();\n  this._getWrapShiftCells();\n  this.setGallerySize();\n  this.emitEvent('resize');\n  // update selected index for group slides, instant\n  // TODO: position can be lost between groups of various numbers\n  var selectedElement = this.selectedElements && this.selectedElements[0];\n  this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n  var watchOption = this.options.watchCSS;\n  if ( !watchOption ) {\n    return;\n  }\n\n  var afterContent = getComputedStyle( this.element, ':after' ).content;\n  // activate if :after { content: 'flickity' }\n  if ( afterContent.indexOf('flickity') != -1 ) {\n    this.activate();\n  } else {\n    this.deactivate();\n  }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n  // only work if element is in focus\n  var isNotFocused = document.activeElement && document.activeElement != this.element;\n  if ( !this.options.accessibility || isNotFocused ) {\n    return;\n  }\n\n  var handler = Flickity.keyboardHandlers[ event.keyCode ];\n  if ( handler ) {\n    handler.call( this );\n  }\n};\n\nFlickity.keyboardHandlers = {\n  // left arrow\n  37: function() {\n    var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n    this.uiChange();\n    this[ leftMethod ]();\n  },\n  // right arrow\n  39: function() {\n    var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n    this.uiChange();\n    this[ rightMethod ]();\n  },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n  // TODO remove scrollTo once focus options gets more support\n  // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n  //    #Browser_compatibility\n  var prevScrollY = window.pageYOffset;\n  this.element.focus({ preventScroll: true });\n  // hack to fix scroll jump after focus, #76\n  if ( window.pageYOffset != prevScrollY ) {\n    window.scrollTo( window.pageXOffset, prevScrollY );\n  }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n  if ( !this.isActive ) {\n    return;\n  }\n  this.element.classList.remove('flickity-enabled');\n  this.element.classList.remove('flickity-rtl');\n  this.unselectSelectedSlide();\n  // destroy cells\n  this.cells.forEach( function( cell ) {\n    cell.destroy();\n  } );\n  this.element.removeChild( this.viewport );\n  // move child elements back into element\n  moveElements( this.slider.children, this.element );\n  if ( this.options.accessibility ) {\n    this.element.removeAttribute('tabIndex');\n    this.element.removeEventListener( 'keydown', this );\n  }\n  // set flags\n  this.isActive = false;\n  this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n  this.deactivate();\n  window.removeEventListener( 'resize', this );\n  this.allOff();\n  this.emitEvent('destroy');\n  if ( jQuery && this.$element ) {\n    jQuery.removeData( this.element, 'flickity' );\n  }\n  delete this.element.flickityGUID;\n  delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n  elem = utils.getQueryElement( elem );\n  var id = elem && elem.flickityGUID;\n  return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n  jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n  jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Flickity v2.3.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      './drag',\n      './prev-next-button',\n      './page-dots',\n      './player',\n      './add-remove-cell',\n      './lazyload',\n    ], factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        require('./flickity'),\n        require('./drag'),\n        require('./prev-next-button'),\n        require('./page-dots'),\n        require('./player'),\n        require('./add-remove-cell'),\n        require('./lazyload')\n    );\n  }\n\n} )( window, function factory( Flickity ) {\n  return Flickity;\n} );\n","// lazyload\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      'fizzy-ui-utils/utils',\n    ], function( Flickity, utils ) {\n      return factory( window, Flickity, utils );\n    } );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('./flickity'),\n        require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n        window,\n        window.Flickity,\n        window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n  this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n  var lazyLoad = this.options.lazyLoad;\n  if ( !lazyLoad ) {\n    return;\n  }\n  // get adjacent cells, use lazyLoad option for adjacent count\n  var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n  var cellElems = this.getAdjacentCellElements( adjCount );\n  // get lazy images in those cells\n  var lazyImages = [];\n  cellElems.forEach( function( cellElem ) {\n    var lazyCellImages = getCellLazyImages( cellElem );\n    lazyImages = lazyImages.concat( lazyCellImages );\n  } );\n  // load lazy images\n  lazyImages.forEach( function( img ) {\n    new LazyLoader( img, this );\n  }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n  // check if cell element is lazy image\n  if ( cellElem.nodeName == 'IMG' ) {\n    var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n    var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n    var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n    if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n      return [ cellElem ];\n    }\n  }\n  // select lazy images in cell\n  var lazySelector = 'img[data-flickity-lazyload], ' +\n    'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n  var imgs = cellElem.querySelectorAll( lazySelector );\n  return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\n */\nfunction LazyLoader( img, flickity ) {\n  this.img = img;\n  this.flickity = flickity;\n  this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  // get src & srcset\n  var src = this.img.getAttribute('data-flickity-lazyload') ||\n    this.img.getAttribute('data-flickity-lazyload-src');\n  var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n  // set src & serset\n  this.img.src = src;\n  if ( srcset ) {\n    this.img.setAttribute( 'srcset', srcset );\n  }\n  // remove attr\n  this.img.removeAttribute('data-flickity-lazyload');\n  this.img.removeAttribute('data-flickity-lazyload-src');\n  this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n  this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n  this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n  // unbind events\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n\n  var cell = this.flickity.getParentCell( this.img );\n  var cellElem = cell && cell.element;\n  this.flickity.cellSizeChange( cellElem );\n\n  this.img.classList.add( className );\n  this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// -----  ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      'unipointer/unipointer',\n      'fizzy-ui-utils/utils',\n    ], function( Flickity, Unipointer, utils ) {\n      return factory( window, Flickity, Unipointer, utils );\n    } );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('./flickity'),\n        require('unipointer'),\n        require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n        window,\n        window.Flickity,\n        window.Unipointer,\n        window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n  this.parent = parent;\n  this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n  // create holder element\n  this.holder = document.createElement('ol');\n  this.holder.className = 'flickity-page-dots';\n  // create dots, array of elements\n  this.dots = [];\n  // events\n  this.handleClick = this.onClick.bind( this );\n  this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n  this.setDots();\n  this.holder.addEventListener( 'click', this.handleClick );\n  this.bindStartEvent( this.holder );\n  // add to DOM\n  this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n  this.holder.removeEventListener( 'click', this.handleClick );\n  this.unbindStartEvent( this.holder );\n  // remove from DOM\n  this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n  // get difference between number of slides and number of dots\n  var delta = this.parent.slides.length - this.dots.length;\n  if ( delta > 0 ) {\n    this.addDots( delta );\n  } else if ( delta < 0 ) {\n    this.removeDots( -delta );\n  }\n};\n\nPageDots.prototype.addDots = function( count ) {\n  var fragment = document.createDocumentFragment();\n  var newDots = [];\n  var length = this.dots.length;\n  var max = length + count;\n\n  for ( var i = length; i < max; i++ ) {\n    var dot = document.createElement('li');\n    dot.className = 'dot';\n    dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n    fragment.appendChild( dot );\n    newDots.push( dot );\n  }\n\n  this.holder.appendChild( fragment );\n  this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n  // remove from this.dots collection\n  var removeDots = this.dots.splice( this.dots.length - count, count );\n  // remove from DOM\n  removeDots.forEach( function( dot ) {\n    this.holder.removeChild( dot );\n  }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n  // remove selected class on previous\n  if ( this.selectedDot ) {\n    this.selectedDot.className = 'dot';\n    this.selectedDot.removeAttribute('aria-current');\n  }\n  // don't proceed if no dots\n  if ( !this.dots.length ) {\n    return;\n  }\n  this.selectedDot = this.dots[ this.parent.selectedIndex ];\n  this.selectedDot.className = 'dot is-selected';\n  this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n  var target = event.target;\n  // only care about dot clicks\n  if ( target.nodeName != 'LI' ) {\n    return;\n  }\n\n  this.parent.uiChange();\n  var index = this.dots.indexOf( target );\n  this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n  this.deactivate();\n  this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n  pageDots: true,\n} );\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n  if ( !this.options.pageDots ) {\n    return;\n  }\n  this.pageDots = new PageDots( this );\n  // events\n  this.on( 'activate', this.activatePageDots );\n  this.on( 'select', this.updateSelectedPageDots );\n  this.on( 'cellChange', this.updatePageDots );\n  this.on( 'resize', this.updatePageDots );\n  this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n  this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n  this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n  this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n  this.pageDots.deactivate();\n};\n\n// -----  ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'ev-emitter/ev-emitter',\n      'fizzy-ui-utils/utils',\n      './flickity',\n    ], function( EvEmitter, utils, Flickity ) {\n      return factory( EvEmitter, utils, Flickity );\n    } );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        require('ev-emitter'),\n        require('fizzy-ui-utils'),\n        require('./flickity')\n    );\n  } else {\n    // browser global\n    factory(\n        window.EvEmitter,\n        window.fizzyUIUtils,\n        window.Flickity\n    );\n  }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n  this.parent = parent;\n  this.state = 'stopped';\n  // visibility change event handler\n  this.onVisibilityChange = this.visibilityChange.bind( this );\n  this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n  if ( this.state == 'playing' ) {\n    return;\n  }\n  // do not play if page is hidden, start playing when page is visible\n  var isPageHidden = document.hidden;\n  if ( isPageHidden ) {\n    document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n    return;\n  }\n\n  this.state = 'playing';\n  // listen to visibility change\n  document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n  // start ticking\n  this.tick();\n};\n\nPlayer.prototype.tick = function() {\n  // do not tick if not playing\n  if ( this.state != 'playing' ) {\n    return;\n  }\n\n  var time = this.parent.options.autoPlay;\n  // default to 3 seconds\n  time = typeof time == 'number' ? time : 3000;\n  var _this = this;\n  // HACK: reset ticks if stopped and started within interval\n  this.clear();\n  this.timeout = setTimeout( function() {\n    _this.parent.next( true );\n    _this.tick();\n  }, time );\n};\n\nPlayer.prototype.stop = function() {\n  this.state = 'stopped';\n  this.clear();\n  // remove visibility change event\n  document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n  clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n  if ( this.state == 'playing' ) {\n    this.state = 'paused';\n    this.clear();\n  }\n};\n\nPlayer.prototype.unpause = function() {\n  // re-start play if paused\n  if ( this.state == 'paused' ) {\n    this.play();\n  }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n  var isPageHidden = document.hidden;\n  this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n  this.play();\n  document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n  pauseAutoPlayOnHover: true,\n} );\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n  this.player = new Player( this );\n\n  this.on( 'activate', this.activatePlayer );\n  this.on( 'uiChange', this.stopPlayer );\n  this.on( 'pointerDown', this.stopPlayer );\n  this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n  if ( !this.options.autoPlay ) {\n    return;\n  }\n  this.player.play();\n  this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n  this.player.play();\n};\n\nproto.stopPlayer = function() {\n  this.player.stop();\n};\n\nproto.pausePlayer = function() {\n  this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n  this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n  this.player.stop();\n  this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n  if ( !this.options.pauseAutoPlayOnHover ) {\n    return;\n  }\n  this.player.pause();\n  this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n  this.player.unpause();\n  this.element.removeEventListener( 'mouseleave', this );\n};\n\n// -----  ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","// prev/next buttons\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      './flickity',\n      'unipointer/unipointer',\n      'fizzy-ui-utils/utils',\n    ], function( Flickity, Unipointer, utils ) {\n      return factory( window, Flickity, Unipointer, utils );\n    } );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n        window,\n        require('./flickity'),\n        require('unipointer'),\n        require('fizzy-ui-utils')\n    );\n  } else {\n    // browser global\n    factory(\n        window,\n        window.Flickity,\n        window.Unipointer,\n        window.fizzyUIUtils\n    );\n  }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n  this.direction = direction;\n  this.parent = parent;\n  this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n  // properties\n  this.isEnabled = true;\n  this.isPrevious = this.direction == -1;\n  var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n  this.isLeft = this.direction == leftDirection;\n\n  var element = this.element = document.createElement('button');\n  element.className = 'flickity-button flickity-prev-next-button';\n  element.className += this.isPrevious ? ' previous' : ' next';\n  // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n  element.setAttribute( 'type', 'button' );\n  // init as disabled\n  this.disable();\n\n  element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n  // create arrow\n  var svg = this.createSVG();\n  element.appendChild( svg );\n  // events\n  this.parent.on( 'select', this.update.bind( this ) );\n  this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n  this.bindStartEvent( this.element );\n  this.element.addEventListener( 'click', this );\n  // add to DOM\n  this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n  // remove from DOM\n  this.parent.element.removeChild( this.element );\n  // click events\n  this.unbindStartEvent( this.element );\n  this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n  var svg = document.createElementNS( svgURI, 'svg' );\n  svg.setAttribute( 'class', 'flickity-button-icon' );\n  svg.setAttribute( 'viewBox', '0 0 100 100' );\n  var path = document.createElementNS( svgURI, 'path' );\n  var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n  path.setAttribute( 'd', pathMovements );\n  path.setAttribute( 'class', 'arrow' );\n  // rotate arrow\n  if ( !this.isLeft ) {\n    path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n  }\n  svg.appendChild( path );\n  return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n  // use shape as movement if string\n  if ( typeof shape == 'string' ) {\n    return shape;\n  }\n  // create movement string\n  return 'M ' + shape.x0 + ',50' +\n    ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n    ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n    ' L ' + shape.x3 + ',50 ' +\n    ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n    ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n    ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n  if ( !this.isEnabled ) {\n    return;\n  }\n  this.parent.uiChange();\n  var method = this.isPrevious ? 'previous' : 'next';\n  this.parent[ method ]();\n};\n\n// -----  ----- //\n\nPrevNextButton.prototype.enable = function() {\n  if ( this.isEnabled ) {\n    return;\n  }\n  this.element.disabled = false;\n  this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n  if ( !this.isEnabled ) {\n    return;\n  }\n  this.element.disabled = true;\n  this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n  // index of first or last slide, if previous or next\n  var slides = this.parent.slides;\n  // enable is wrapAround and at least 2 slides\n  if ( this.parent.options.wrapAround && slides.length > 1 ) {\n    this.enable();\n    return;\n  }\n  var lastIndex = slides.length ? slides.length - 1 : 0;\n  var boundIndex = this.isPrevious ? 0 : lastIndex;\n  var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n  this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n  this.deactivate();\n  this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n  prevNextButtons: true,\n  arrowShape: {\n    x0: 10,\n    x1: 60, y1: 50,\n    x2: 70, y2: 40,\n    x3: 30,\n  },\n} );\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n  if ( !this.options.prevNextButtons ) {\n    return;\n  }\n\n  this.prevButton = new PrevNextButton( -1, this );\n  this.nextButton = new PrevNextButton( 1, this );\n\n  this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n  this.prevButton.activate();\n  this.nextButton.activate();\n  this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n  this.prevButton.deactivate();\n  this.nextButton.deactivate();\n  this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// --------------------------  -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n","// slide\n( function( window, factory ) {\n  // universal module definition\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.Flickity = window.Flickity || {};\n    window.Flickity.Slide = factory();\n  }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n  this.parent = parent;\n  this.isOriginLeft = parent.originSide == 'left';\n  this.cells = [];\n  this.outerWidth = 0;\n  this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n  this.cells.push( cell );\n  this.outerWidth += cell.size.outerWidth;\n  this.height = Math.max( cell.size.outerHeight, this.height );\n  // first cell stuff\n  if ( this.cells.length == 1 ) {\n    this.x = cell.x; // x comes from first cell\n    var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n    this.firstMargin = cell.size[ beginMargin ];\n  }\n};\n\nproto.updateTarget = function() {\n  var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n  var lastCell = this.getLastCell();\n  var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n  var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n  this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n  return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n  this.cells.forEach( function( cell ) {\n    cell.select();\n  } );\n};\n\nproto.unselect = function() {\n  this.cells.forEach( function( cell ) {\n    cell.unselect();\n  } );\n};\n\nproto.getCellElements = function() {\n  return this.cells.map( function( cell ) {\n    return cell.element;\n  } );\n};\n\nreturn Slide;\n\n} ) );\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n  /* jshint strict: false */ /* globals define, module */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( factory );\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory();\n  } else {\n    // browser global\n    window.getSize = factory();\n  }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n  var num = parseFloat( value );\n  // not a percent like '100%', and a number\n  var isValid = value.indexOf('%') == -1 && !isNaN( num );\n  return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n  function( message ) {\n    console.error( message );\n  };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n  'paddingLeft',\n  'paddingRight',\n  'paddingTop',\n  'paddingBottom',\n  'marginLeft',\n  'marginRight',\n  'marginTop',\n  'marginBottom',\n  'borderLeftWidth',\n  'borderRightWidth',\n  'borderTopWidth',\n  'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n  var size = {\n    width: 0,\n    height: 0,\n    innerWidth: 0,\n    innerHeight: 0,\n    outerWidth: 0,\n    outerHeight: 0\n  };\n  for ( var i=0; i < measurementsLength; i++ ) {\n    var measurement = measurements[i];\n    size[ measurement ] = 0;\n  }\n  return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n  var style = getComputedStyle( elem );\n  if ( !style ) {\n    logError( 'Style returned ' + style +\n      '. Are you running this code in a hidden iframe on Firefox? ' +\n      'See https://bit.ly/getsizebug1' );\n  }\n  return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n  // setup once\n  if ( isSetup ) {\n    return;\n  }\n  isSetup = true;\n\n  // -------------------------- box sizing -------------------------- //\n\n  /**\n   * Chrome & Safari measure the outer-width on style.width on border-box elems\n   * IE11 & Firefox<29 measures the inner-width\n   */\n  var div = document.createElement('div');\n  div.style.width = '200px';\n  div.style.padding = '1px 2px 3px 4px';\n  div.style.borderStyle = 'solid';\n  div.style.borderWidth = '1px 2px 3px 4px';\n  div.style.boxSizing = 'border-box';\n\n  var body = document.body || document.documentElement;\n  body.appendChild( div );\n  var style = getStyle( div );\n  // round value for browser zoom. desandro/masonry#928\n  isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n  getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n  body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n  setup();\n\n  // use querySeletor if elem is string\n  if ( typeof elem == 'string' ) {\n    elem = document.querySelector( elem );\n  }\n\n  // do not proceed on non-objects\n  if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n    return;\n  }\n\n  var style = getStyle( elem );\n\n  // if hidden, everything is 0\n  if ( style.display == 'none' ) {\n    return getZeroSize();\n  }\n\n  var size = {};\n  size.width = elem.offsetWidth;\n  size.height = elem.offsetHeight;\n\n  var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n  // get all measurements\n  for ( var i=0; i < measurementsLength; i++ ) {\n    var measurement = measurements[i];\n    var value = style[ measurement ];\n    var num = parseFloat( value );\n    // any 'auto', 'medium' value will be 0\n    size[ measurement ] = !isNaN( num ) ? num : 0;\n  }\n\n  var paddingWidth = size.paddingLeft + size.paddingRight;\n  var paddingHeight = size.paddingTop + size.paddingBottom;\n  var marginWidth = size.marginLeft + size.marginRight;\n  var marginHeight = size.marginTop + size.marginBottom;\n  var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n  var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n  var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n  // overwrite width and height if we can get it from style\n  var styleWidth = getStyleSize( style.width );\n  if ( styleWidth !== false ) {\n    size.width = styleWidth +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n  }\n\n  var styleHeight = getStyleSize( style.height );\n  if ( styleHeight !== false ) {\n    size.height = styleHeight +\n      // add padding and border unless it's already including it\n      ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n  }\n\n  size.innerWidth = size.width - ( paddingWidth + borderWidth );\n  size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n  size.outerWidth = size.width + marginWidth;\n  size.outerHeight = size.height + marginHeight;\n\n  return size;\n}\n\nreturn getSize;\n\n});\n","/*!\n * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n  // universal module definition\n\n  /*global define: false, module: false, require: false */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'ev-emitter/ev-emitter'\n    ], function( EvEmitter ) {\n      return factory( window, EvEmitter );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('ev-emitter')\n    );\n  } else {\n    // browser global\n    window.imagesLoaded = factory(\n      window,\n      window.EvEmitter\n    );\n  }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// --------------------------  factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n'use strict';\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n  for ( var prop in b ) {\n    a[ prop ] = b[ prop ];\n  }\n  return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n  if ( Array.isArray( obj ) ) {\n    // use object if already an array\n    return obj;\n  }\n\n  var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n  if ( isArrayLike ) {\n    // convert nodeList to array\n    return arraySlice.call( obj );\n  }\n\n  // array of single index\n  return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n  // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n  if ( !( this instanceof ImagesLoaded ) ) {\n    return new ImagesLoaded( elem, options, onAlways );\n  }\n  // use elem as selector string\n  var queryElem = elem;\n  if ( typeof elem == 'string' ) {\n    queryElem = document.querySelectorAll( elem );\n  }\n  // bail if bad element\n  if ( !queryElem ) {\n    console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );\n    return;\n  }\n\n  this.elements = makeArray( queryElem );\n  this.options = extend( {}, this.options );\n  // shift arguments if no options set\n  if ( typeof options == 'function' ) {\n    onAlways = options;\n  } else {\n    extend( this.options, options );\n  }\n\n  if ( onAlways ) {\n    this.on( 'always', onAlways );\n  }\n\n  this.getImages();\n\n  if ( $ ) {\n    // add jQuery Deferred object\n    this.jqDeferred = new $.Deferred();\n  }\n\n  // HACK check async to allow time to bind listeners\n  setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.options = {};\n\nImagesLoaded.prototype.getImages = function() {\n  this.images = [];\n\n  // filter & find items if we have an item selector\n  this.elements.forEach( this.addElementImages, this );\n};\n\n/**\n * @param {Node} element\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n  // filter siblings\n  if ( elem.nodeName == 'IMG' ) {\n    this.addImage( elem );\n  }\n  // get background image on element\n  if ( this.options.background === true ) {\n    this.addElementBackgroundImages( elem );\n  }\n\n  // find children\n  // no non-element nodes, #143\n  var nodeType = elem.nodeType;\n  if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n    return;\n  }\n  var childImgs = elem.querySelectorAll('img');\n  // concat childElems to filterFound array\n  for ( var i=0; i < childImgs.length; i++ ) {\n    var img = childImgs[i];\n    this.addImage( img );\n  }\n\n  // get child background images\n  if ( typeof this.options.background == 'string' ) {\n    var children = elem.querySelectorAll( this.options.background );\n    for ( i=0; i < children.length; i++ ) {\n      var child = children[i];\n      this.addElementBackgroundImages( child );\n    }\n  }\n};\n\nvar elementNodeTypes = {\n  1: true,\n  9: true,\n  11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n  var style = getComputedStyle( elem );\n  if ( !style ) {\n    // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n    return;\n  }\n  // get url inside url(\"...\")\n  var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n  var matches = reURL.exec( style.backgroundImage );\n  while ( matches !== null ) {\n    var url = matches && matches[2];\n    if ( url ) {\n      this.addBackground( url, elem );\n    }\n    matches = reURL.exec( style.backgroundImage );\n  }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n  var loadingImage = new LoadingImage( img );\n  this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n  var background = new Background( url, elem );\n  this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n  var _this = this;\n  this.progressedCount = 0;\n  this.hasAnyBroken = false;\n  // complete if no images\n  if ( !this.images.length ) {\n    this.complete();\n    return;\n  }\n\n  function onProgress( image, elem, message ) {\n    // HACK - Chrome triggers event before object properties have changed. #83\n    setTimeout( function() {\n      _this.progress( image, elem, message );\n    });\n  }\n\n  this.images.forEach( function( loadingImage ) {\n    loadingImage.once( 'progress', onProgress );\n    loadingImage.check();\n  });\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n  this.progressedCount++;\n  this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n  // progress event\n  this.emitEvent( 'progress', [ this, image, elem ] );\n  if ( this.jqDeferred && this.jqDeferred.notify ) {\n    this.jqDeferred.notify( this, image );\n  }\n  // check if completed\n  if ( this.progressedCount == this.images.length ) {\n    this.complete();\n  }\n\n  if ( this.options.debug && console ) {\n    console.log( 'progress: ' + message, image, elem );\n  }\n};\n\nImagesLoaded.prototype.complete = function() {\n  var eventName = this.hasAnyBroken ? 'fail' : 'done';\n  this.isComplete = true;\n  this.emitEvent( eventName, [ this ] );\n  this.emitEvent( 'always', [ this ] );\n  if ( this.jqDeferred ) {\n    var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n    this.jqDeferred[ jqMethod ]( this );\n  }\n};\n\n// --------------------------  -------------------------- //\n\nfunction LoadingImage( img ) {\n  this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n  // If complete is true and browser supports natural sizes,\n  // try to check for image status manually.\n  var isComplete = this.getIsImageComplete();\n  if ( isComplete ) {\n    // report based on naturalWidth\n    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n    return;\n  }\n\n  // If none of the checks above matched, simulate loading on detached element.\n  this.proxyImage = new Image();\n  this.proxyImage.addEventListener( 'load', this );\n  this.proxyImage.addEventListener( 'error', this );\n  // bind to image as well for Firefox. #191\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  this.proxyImage.src = this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n  // check for non-zero, non-undefined naturalWidth\n  // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n  return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n  this.isLoaded = isLoaded;\n  this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\nLoadingImage.prototype.onload = function() {\n  this.confirm( true, 'onload' );\n  this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n  this.confirm( false, 'onerror' );\n  this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n  this.proxyImage.removeEventListener( 'load', this );\n  this.proxyImage.removeEventListener( 'error', this );\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n  this.url = url;\n  this.element = element;\n  this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n  this.img.addEventListener( 'load', this );\n  this.img.addEventListener( 'error', this );\n  this.img.src = this.url;\n  // check if image is already complete\n  var isComplete = this.getIsImageComplete();\n  if ( isComplete ) {\n    this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n    this.unbindEvents();\n  }\n};\n\nBackground.prototype.unbindEvents = function() {\n  this.img.removeEventListener( 'load', this );\n  this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n  this.isLoaded = isLoaded;\n  this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n  jQuery = jQuery || window.jQuery;\n  if ( !jQuery ) {\n    return;\n  }\n  // set local variable\n  $ = jQuery;\n  // $().imagesLoaded()\n  $.fn.imagesLoaded = function( options, callback ) {\n    var instance = new ImagesLoaded( this, options, callback );\n    return instance.jqDeferred.promise( $(this) );\n  };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// --------------------------  -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n","/*!\n * Unidragger v2.4.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /*jshint strict: false */ /*globals define, module, require */\n\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'unipointer/unipointer'\n    ], function( Unipointer ) {\n      return factory( window, Unipointer );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('unipointer')\n    );\n  } else {\n    // browser global\n    window.Unidragger = factory(\n      window,\n      window.Unipointer\n    );\n  }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n  this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n  this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n  // munge isAdd, default to true\n  isAdd = isAdd === undefined ? true : isAdd;\n  // bind each handle\n  var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n  var touchAction = isAdd ? this._touchActionValue : '';\n  for ( var i=0; i < this.handles.length; i++ ) {\n    var handle = this.handles[i];\n    this._bindStartEvent( handle, isAdd );\n    handle[ bindMethod ]( 'click', this );\n    // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n    if ( window.PointerEvent ) {\n      handle.style.touchAction = touchAction;\n    }\n  }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n  var isOkay = this.okayPointerDown( event );\n  if ( !isOkay ) {\n    return;\n  }\n  // track start event position\n  // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n  this.pointerDownPointer = {\n    pageX: pointer.pageX,\n    pageY: pointer.pageY,\n  };\n\n  event.preventDefault();\n  this.pointerDownBlur();\n  // bind move and end events\n  this._bindPostStartEvents( event );\n  this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n  TEXTAREA: true,\n  INPUT: true,\n  SELECT: true,\n  OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n  radio: true,\n  checkbox: true,\n  button: true,\n  submit: true,\n  image: true,\n  file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n  var isCursorNode = cursorNodes[ event.target.nodeName ];\n  var isClickType = clickTypes[ event.target.type ];\n  var isOkay = !isCursorNode || isClickType;\n  if ( !isOkay ) {\n    this._pointerReset();\n  }\n  return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n  var focused = document.activeElement;\n  // do not blur body for IE10, metafizzy/flickity#117\n  var canBlur = focused && focused.blur && focused != document.body;\n  if ( canBlur ) {\n    focused.blur();\n  }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n  var moveVector = this._dragPointerMove( event, pointer );\n  this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n  this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n  var moveVector = {\n    x: pointer.pageX - this.pointerDownPointer.pageX,\n    y: pointer.pageY - this.pointerDownPointer.pageY\n  };\n  // start drag if pointer has moved far enough to start drag\n  if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n    this._dragStart( event, pointer );\n  }\n  return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n  return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n  this.emitEvent( 'pointerUp', [ event, pointer ] );\n  this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n  if ( this.isDragging ) {\n    this._dragEnd( event, pointer );\n  } else {\n    // pointer didn't move enough for drag to start\n    this._staticClick( event, pointer );\n  }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n  this.isDragging = true;\n  // prevent clicks\n  this.isPreventingClicks = true;\n  this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n  this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n  // do not drag if not dragging yet\n  if ( !this.isDragging ) {\n    return;\n  }\n\n  this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n  event.preventDefault();\n  this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n  // set flags\n  this.isDragging = false;\n  // re-enable clicking async\n  setTimeout( function() {\n    delete this.isPreventingClicks;\n  }.bind( this ) );\n\n  this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n  this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n  if ( this.isPreventingClicks ) {\n    event.preventDefault();\n  }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n  // ignore emulated mouse up clicks\n  if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n    return;\n  }\n\n  this.staticClick( event, pointer );\n\n  // set flag for emulated clicks 300ms after touchend\n  if ( event.type != 'mouseup' ) {\n    this.isIgnoringMouseUp = true;\n    // reset flag after 300ms\n    setTimeout( function() {\n      delete this.isIgnoringMouseUp;\n    }.bind( this ), 400 );\n  }\n};\n\nproto.staticClick = function( event, pointer ) {\n  this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// -----  ----- //\n\nreturn Unidragger;\n\n}));\n","/*!\n * Unipointer v2.4.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n  // universal module definition\n  /* jshint strict: false */ /*global define, module, require */\n  if ( typeof define == 'function' && define.amd ) {\n    // AMD\n    define( [\n      'ev-emitter/ev-emitter'\n    ], function( EvEmitter ) {\n      return factory( window, EvEmitter );\n    });\n  } else if ( typeof module == 'object' && module.exports ) {\n    // CommonJS\n    module.exports = factory(\n      window,\n      require('ev-emitter')\n    );\n  } else {\n    // browser global\n    window.Unipointer = factory(\n      window,\n      window.EvEmitter\n    );\n  }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n  this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n  this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n  // munge isAdd, default to true\n  isAdd = isAdd === undefined ? true : isAdd;\n  var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n  // default to mouse events\n  var startEvent = 'mousedown';\n  if ( 'ontouchstart' in window ) {\n    // HACK prefer Touch Events as you can preventDefault on touchstart to\n    // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n    startEvent = 'touchstart';\n  } else if ( window.PointerEvent ) {\n    // Pointer Events\n    startEvent = 'pointerdown';\n  }\n  elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n  var method = 'on' + event.type;\n  if ( this[ method ] ) {\n    this[ method ]( event );\n  }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n  for ( var i=0; i < touches.length; i++ ) {\n    var touch = touches[i];\n    if ( touch.identifier == this.pointerIdentifier ) {\n      return touch;\n    }\n  }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n  // dismiss clicks from right or middle buttons\n  var button = event.button;\n  if ( button && ( button !== 0 && button !== 1 ) ) {\n    return;\n  }\n  this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n  this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n  this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n  // dismiss right click and other pointers\n  // button = 0 is okay, 1-4 not\n  if ( event.button || this.isPointerDown ) {\n    return;\n  }\n\n  this.isPointerDown = true;\n  // save pointer identifier to match up touch events\n  this.pointerIdentifier = pointer.pointerId !== undefined ?\n    // pointerId for pointer events, touch.indentifier for touch events\n    pointer.pointerId : pointer.identifier;\n\n  this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n  this._bindPostStartEvents( event );\n  this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n  mousedown: [ 'mousemove', 'mouseup' ],\n  touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n  pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n  if ( !event ) {\n    return;\n  }\n  // get proper events to match start event\n  var events = postStartEvents[ event.type ];\n  // bind events to node\n  events.forEach( function( eventName ) {\n    window.addEventListener( eventName, this );\n  }, this );\n  // save these arguments\n  this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n  // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n  if ( !this._boundPointerEvents ) {\n    return;\n  }\n  this._boundPointerEvents.forEach( function( eventName ) {\n    window.removeEventListener( eventName, this );\n  }, this );\n\n  delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n  this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerMove( event, event );\n  }\n};\n\nproto.ontouchmove = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerMove( event, touch );\n  }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n  this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n  this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n  this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerUp( event, event );\n  }\n};\n\nproto.ontouchend = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerUp( event, touch );\n  }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n  this._pointerDone();\n  this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n  this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n  this._pointerReset();\n  this._unbindPostStartEvents();\n  this.pointerDone();\n};\n\nproto._pointerReset = function() {\n  // reset properties\n  this.isPointerDown = false;\n  delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n  if ( event.pointerId == this.pointerIdentifier ) {\n    this._pointerCancel( event, event );\n  }\n};\n\nproto.ontouchcancel = function( event ) {\n  var touch = this.getTouch( event.changedTouches );\n  if ( touch ) {\n    this._pointerCancel( event, touch );\n  }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n  this._pointerDone();\n  this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n  this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// -----  ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n  return {\n    x: pointer.pageX,\n    y: pointer.pageY\n  };\n};\n\n// -----  ----- //\n\nreturn Unipointer;\n\n}));\n","const typeContent = {\n  pdf: {\n    event: \"click-download\",\n    eventDetail: \"PDF\",\n  },\n  video: {\n    event: \"click-video\",\n    eventDetail: \"Play\",\n  },\n  podcast: {\n    event: \"click-podcast\",\n    eventDetail: \"Play\",\n  },\n};\n\nexport function pushData(eventType, url, title, ctaLabel) {\n  window.digitalData.push({\n    event: typeContent[eventType].event,\n    pageEvent: {\n      eventInfo: {\n        eventDetail: typeContent[eventType].eventDetail,\n        contentTitle: title,\n        contentURL: url,\n        ...(ctaLabel ? { ctaLabel } : {}),\n      },\n    },\n  });\n}\n","<template>\n  <a\n    v-if=\"url\"\n    class=\"button-primary\"\n    :style=\"style\"\n    :href=\"url\"\n    target=\"_blank\"\n    @click=\"pushEvent\"\n  >\n    {{ label }}\n  </a>\n\n  <router-link\n    v-else-if=\"internalUrlParam\"\n    class=\"button-primary\"\n    :style=\"style\"\n    :to=\"{ name: 'page', params: { page: internalUrlParam || 'home' } }\"\n  >\n    {{ label }}\n  </router-link>\n\n  <button\n    v-else\n    class=\"button-primary\"\n    :style=\"style\"\n    @click=\"$emit('onClick')\"\n  >\n    {{ label }}\n  </button>\n</template>\n\n<script setup>\nimport { computed } from \"vue\";\nimport { pushData } from \"@/utilities/analytics-functions.js\";\n\nconst props = defineProps({\n  label: String,\n  black: Boolean,\n  white: Boolean,\n  url: String,\n  internalUrlParam: String,\n});\n\nconst style = computed(() => ({\n  \"--bg-color\": bgColor.value,\n  \"--hover-color\": hoverColor.value,\n  \"--text-color\": textColor.value,\n}));\n\nconst bgColor = computed(() => {\n  return props.white\n    ? `var(--white-10)`\n    : props.black\n    ? `var(--black-10)`\n    : `var(--primary-yellow)`;\n});\n\nconst hoverColor = computed(() => {\n  return props.white\n    ? `var(--white-25)`\n    : props.black\n    ? `var(--black-25)`\n    : `var(--primary-yellow-light)`;\n});\n\nconst textColor = computed(() => {\n  return props.white ? `var(--white-100)` : `var(--black-100)`;\n});\n\nfunction pushEvent() {\n  if (props.url && props.url.includes(\".pdf\")) {\n    pushData(\"pdf\", props.url, \"\", props.label);\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.button-primary {\n  @include link-l;\n\n  border-radius: 6px;\n  padding: 1rem toRem(36);\n  background-color: var(--bg-color);\n  color: var(--text-color);\n  width: fit-content;\n  transition: background-color 0.3s;\n\n  &:hover:not(:disabled) {\n    background-color: var(--hover-color);\n  }\n\n  .mobile & {\n    padding: 1rem 1.5rem;\n  }\n}\n</style>\n","import script from \"./ButtonPrimary.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ButtonPrimary.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./ButtonPrimary.vue?vue&type=style&index=0&id=5bfd8923&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5bfd8923\"]])\n\nexport default __exports__","<template>\n  <section class=\"cta-section\">\n    <div class=\"cta-section__top\">\n      <h2 class=\"cta-section__top__title\">{{ title }}</h2>\n      <div class=\"cta-section__top__pdf-title\">\n        {{ pdfTitle }}\n      </div>\n    </div>\n\n    <img\n      :src=\"`${$baseUrl}images/${$t('translation.' + currentPage)}_pdf-cover-${i18n.locale.value}.webp`\"\n      alt=\"\"\n      class=\"cta-section__image\"\n    />\n\n    <div class=\"cta-section__bottom\">\n      <ButtonPrimary\n        :label=\"\n          $t(\n            'general.ctas.' +\n              (currentPage === 'home' ? 'downloadPDF' : 'downloadChapterPDF')\n          )\n        \"\n        :url=\"pdfLink\"\n      />\n      <ButtonPrimary\n        :label=\"$t('general.ctas.toDownload')\"\n        internalUrlParam=\"download-multimedia\"\n        white\n      />\n    </div>\n  </section>\n</template>\n\n<script setup>\nimport { inject } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport ButtonPrimary from \"../general/ButtonPrimary.vue\";\n\ndefineProps({\n  title: String,\n  pdfTitle: String,\n  currentPage: String,\n  pdfLink: String,\n  pdfSize: String\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\nconst i18n = useI18n();\n</script>\n\n<style lang=\"scss\" scoped>\n.cta-section {\n  --section-padding-v-t: 14vh;\n  --section-padding-v-b: calc(var(--section-padding-v-t) * 0.5);\n\n  border-top: 1px solid var(--page-color);\n\n  .mobile &,\n  .tablet & {\n    --section-padding-v-t: 7vh;\n  }\n\n  position: relative;\n\n  &__top {\n    padding: var(--section-padding-v-t) 7vw var(--section-padding-v-b)\n      var(--page-padding-h);\n\n    .large &,\n    .desktop & {\n      width: 50%;\n    }\n\n    .mobile &,\n    .tablet & {\n      text-align: center;\n    }\n\n    &__title {\n      .large &,\n      .desktop & {\n        @include h-h-2;\n\n        margin-bottom: 1.65rem;\n      }\n\n      .mobile &,\n      .tablet & {\n        @include h-h-3;\n\n        margin-bottom: toRem(10);\n      }\n    }\n\n    &__pdf-title {\n      .large &,\n      .desktop & {\n        @include title-m;\n\n        margin-bottom: 1rem;\n      }\n\n      .mobile &,\n      .tablet & {\n        @include title-s;\n\n        margin-bottom: toRem(10);\n      }\n    }\n\n    &__pdf-size {\n      .mobile &,\n      .tablet & {\n        @include p-s;\n      }\n    }\n  }\n\n  &__bottom {\n    background-image: var(--page-gradient);\n    padding: var(--section-padding-v-b) var(--page-padding-h)\n      var(--section-padding-v-t);\n\n    .mobile &,\n    .tablet & {\n      margin-top: -2.5rem;\n      padding: calc(var(--section-padding-v-b) + 2.5rem) var(--page-padding-h)\n        var(--section-padding-v-t);\n    }\n\n    > * {\n      display: block;\n\n      .mobile &,\n      .tablet & {\n        margin: 0 auto;\n      }\n\n      &:not(:last-child) {\n        margin-bottom: 1.25rem;\n      }\n    }\n  }\n\n  &__image {\n    .desktop &,\n    .large & {\n      position: absolute;\n      top: var(--section-padding-v-t);\n      right: var(--page-padding-h);\n      height: calc(100% - var(--section-padding-v-t) * 2);\n    }\n\n    .mobile &,\n    .tablet & {\n      width: 80%;\n      display: block;\n      margin: 0 auto;\n    }\n  }\n}\n</style>\n","import script from \"./CTASection.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./CTASection.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./CTASection.vue?vue&type=style&index=0&id=1b014c04&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1b014c04\"]])\n\nexport default __exports__","<template>\n  <div class=\"tva-background-video\">\n    <video\n      ref=\"videoEl\"\n      @mouseenter=\"togglePlay()\"\n      @mouseleave=\"togglePlay()\"\n      :autoplay=\"autoPlay || smallscreen\"\n      :preload=\"preload\"\n      muted\n      loop\n      playsinline\n    >\n      <source\n        :src=\"`${$baseUrl}videos/${pathToVideo}.mp4#t=0.4`\"\n        :type=\"videoType\"\n      />\n    </video>\n  </div>\n</template>\n\n<script setup>\nimport { inject, ref, computed, watch } from \"@vue/runtime-core\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\n\nconst props = defineProps({\n  pathToVideo: {\n    type: String,\n    required: true,\n  },\n  videoType: {\n    type: String,\n    default: \"video/mp4\",\n  },\n  preload: {\n    type: String,\n    default: \"none\",\n  },\n  autoPlay: {\n    type: Boolean,\n    default: false,\n  },\n  playing: Boolean,\n});\n// to make this work in storybook we had to redefine the $baseUrl\nconst $baseUrl = inject(\"$baseUrl\");\nconst videoEl = ref(null);\n\nconst { $tvaMq } = useTvaMq();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n\nfunction togglePlay() {\n  if (videoEl && !props.autoPlay) {\n    if (props.playing) {\n      videoEl.value.play();\n    } else {\n      videoEl.value.pause();\n    }\n  }\n}\n\nwatch(() => props.playing, togglePlay);\n</script>\n\n<style lang=\"scss\" scoped>\n.tva-background-video {\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  position: absolute;\n\n  video {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    width: auto;\n    height: 100%;\n  }\n  // change aspect ratio according to video ratio\n  @media (min-aspect-ratio: 16/9) {\n    video {\n      width: 100%;\n      height: auto;\n    }\n  }\n}\n</style>\n","import script from \"./TvaBackgroundVideo.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TvaBackgroundVideo.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./TvaBackgroundVideo.vue?vue&type=style&index=0&id=33cf7c7d&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-33cf7c7d\"]])\n\nexport default __exports__","<template>\n  <router-link class=\"nav-card\" :to=\"{ params: { page } }\">\n    <TvaBackgroundVideo\n      class=\"nav-card__video\"\n      autoPlay\n      :pathToVideo=\"`${page}_${i18n.locale.value}-0`\"\n    />\n\n    <div class=\"nav-card__title\">\n      {{ $t(\"navigation.\" + page) }}\n    </div>\n\n    <ButtonSecondary\n      class=\"nav-card__button\"\n      :label=\"$t('general.ctas.toChapter')\"\n    />\n  </router-link>\n</template>\n\n<script setup>\nimport { useI18n } from \"vue-i18n\";\n\nimport ButtonSecondary from \"./ButtonSecondary.vue\";\nimport TvaBackgroundVideo from \"./TvaBackgroundVideo.vue\";\n\ndefineProps({\n  page: String,\n});\n\nconst i18n = useI18n();\n</script>\n\n<style lang=\"scss\" scoped>\n.nav-card {\n  @include gradient-overlay;\n\n  color: var(--white-100);\n  overflow: hidden;\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-end;\n  align-items: center;\n  padding: toRem(18) 1rem;\n  text-align: center;\n\n  .desktop &,\n  .large & {\n    aspect-ratio: 0.75;\n  }\n\n  .mobile &,\n  .tablet & {\n    aspect-ratio: 1.25;\n  }\n\n  &__title,\n  &__button {\n    position: relative;\n    z-index: 1;\n  }\n\n  &__video {\n    height: 100%;\n\n    .mobile &,\n    .tablet & {\n      ::v-deep(video) {\n        height: auto;\n      }\n    }\n\n    .tablet & {\n      ::v-deep(video) {\n        width: 100%;\n      }\n    }\n  }\n\n  &__title {\n    @include title-m;\n\n    // text-transform: capitalize;\n    margin-bottom: toRem(10);\n\n    &::first-letter {\n      text-transform: uppercase;\n    }\n  }\n}\n</style>\n","import script from \"./NavCard.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./NavCard.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./NavCard.vue?vue&type=style&index=0&id=82aacd8c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-82aacd8c\"]])\n\nexport default __exports__","<template>\n  <section class=\"hub-multimediale-section\">\n    <div class=\"hub-multimediale-section__top\">\n      <NavCard\n        v-for=\"page of pages\"\n        class=\"hub-multimediale-section__top__card\"\n        :key=\"page\"\n        :page=\"page\"\n      />\n    </div>\n\n    <div class=\"hub-multimediale-section__bottom\">\n      <h2 class=\"hub-multimediale-section__bottom__title\">\n        {{ title }}\n      </h2>\n\n      <p class=\"hub-multimediale-section__bottom__text\">\n        {{ introText }}\n      </p>\n\n      <ButtonPrimary :label=\"cta\" internalUrlParam=\"download-multimedia\" black />\n    </div>\n  </section>\n</template>\n\n<script setup>\nimport ButtonPrimary from \"../general/ButtonPrimary.vue\";\nimport NavCard from \"../general/NavCard.vue\";\n\nimport { computed } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\ndefineProps({\n  title: String,\n  introText: String,\n  cta: String,\n});\n\nconst { tm } = useI18n();\n\nconst pages = computed(() =>\n  Object.keys(tm(\"navigation\")).filter(\n    (page) => ![\"home\", \"download-multimedia\"].includes(page)\n  )\n);\n</script>\n\n<style lang=\"scss\" scoped>\n.hub-multimediale-section {\n  --card-overflow: 10rem;\n\n  &__top {\n    display: flex;\n    justify-content: space-between;\n    padding: 0 var(--page-padding-h);\n    margin-top: calc(var(--card-overflow) * -1);\n\n    .mobile &,\n    .tablet & {\n      flex-direction: column;\n    }\n\n    &__card {\n      .desktop &,\n      .large & {\n        width: 30%;\n      }\n\n      transform: translateY(var(--card-overflow));\n    }\n  }\n\n  &__bottom {\n    background-image: var(--gradient-giallo-2);\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    padding: calc(7vh + var(--card-overflow)) var(--page-padding-h) 7vh;\n    text-align: center;\n\n    &__title {\n      @include title-m;\n\n      margin-bottom: toRem(6);\n    }\n\n    &__text {\n      @include p-s;\n\n      margin-bottom: 1.25rem;\n      max-width: toRem(500);\n    }\n  }\n}\n</style>\n","import script from \"./HubMultimedialeSection.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./HubMultimedialeSection.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./HubMultimedialeSection.vue?vue&type=style&index=0&id=2b8bc4e2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2b8bc4e2\"]])\n\nexport default __exports__","import script from \"./CtaBar.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./CtaBar.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./CtaBar.vue?vue&type=style&index=0&id=9edca370&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-9edca370\"]])\n\nexport default __exports__","import script from \"./ButtonDownload.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ButtonDownload.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./ButtonDownload.vue?vue&type=style&index=0&id=7d29b6cd&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-7d29b6cd\"]])\n\nexport default __exports__","<template>\n  <a\n    class=\"pdf-multimedia-card\"\n    :href=\"pdfLink\"\n    target=\"_blank\"\n    @mouseenter=\"toggeHovered\"\n    @mouseleave=\"toggeHovered\"\n    @click=\"pushPdf\"\n  >\n    <img\n      :src=\"`${$baseUrl}images/${\n        smallscreen ? 'home' : 'download'\n      }_pdf-cover-${locale}.webp`\"\n      alt=\"\"\n      class=\"pdf-multimedia-card__img\"\n    />\n\n    <div class=\"pdf-multimedia-card__content\">\n      <ButtonDownload\n        class=\"pdf-multimedia-card__content__button hover-content\"\n        :label=\"cta\"\n      />\n      <div class=\"pdf-multimedia-card__content__title hover-content\">\n        {{ title }}\n      </div>\n      <CtaBar :cta=\"$t('general.ctas.download')\" :hovered=\"hovered\" />\n    </div>\n  </a>\n</template>\n\n<script setup>\nimport { ref, inject, computed } from \"vue\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\nimport { useI18n } from \"vue-i18n\";\nimport { pushData } from \"@/utilities/analytics-functions.js\";\n\nimport CtaBar from \"./CtaBar.vue\";\nimport ButtonDownload from \"./ButtonDownload.vue\";\n\nconst props = defineProps({\n  title: String,\n  cta: String,\n  pdfLink: String,\n});\n\nconst { locale } = useI18n();\nconst $baseUrl = inject(\"$baseUrl\");\nconst { $tvaMq } = useTvaMq();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n\nconst hovered = ref(false);\n\nfunction toggeHovered() {\n  hovered.value = !hovered.value;\n}\n\nfunction pushPdf() {\n  pushData(\"pdf\", props.pdfLink, \"\", props.cta);\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.pdf-multimedia-card {\n  @include gradient-overlay;\n\n  --card-width: var(--vw-no-scrollbar, 100vw) - var(--page-padding-h) * 2;\n\n  color: var(--white-100);\n  width: calc(var(--card-width));\n  height: calc(var(--card-width) * 0.45);\n  position: relative;\n  overflow: hidden;\n  // transform: translateY(50%);\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-end;\n  text-align: left;\n\n  &__img {\n    width: 100%;\n    position: absolute;\n    top: 50%;\n    transform: translateY(-50%);\n\n    .mobile & {\n      top: 0;\n      transform: translateY(0);\n    }\n  }\n\n  &__content {\n    position: relative;\n    z-index: 1;\n    width: 100%;\n\n    .hover-content {\n      padding-left: 1.5rem;\n      transition: transform 0.5s;\n    }\n\n    &__title {\n      @include title-l;\n\n      margin-top: 0.5rem;\n    }\n  }\n\n  &:hover {\n    .hover-content {\n      transform: translateY(calc(var(--cta-bar-height) * -0.5));\n    }\n  }\n}\n</style>\n","import script from \"./MultimediaPDFCard.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./MultimediaPDFCard.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./MultimediaPDFCard.vue?vue&type=style&index=0&id=2e7a3bf4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2e7a3bf4\"]])\n\nexport default __exports__","import script from \"./HubMultimedialeHero.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./HubMultimedialeHero.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./HubMultimedialeHero.vue?vue&type=style&index=0&id=82ecad98&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-82ecad98\"]])\n\nexport default __exports__","import script from \"./SquareIcon.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./SquareIcon.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./SquareIcon.vue?vue&type=style&index=0&id=57bee069&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-57bee069\"]])\n\nexport default __exports__","<template>\n  <a v-if=\"url\" class=\"button-secondary-icon\" :href=\"url\" target=\"_blank\" @click=\"pushEvent\">\n    <SquareIcon class=\"button-secondary-icon__icon\" :icon=\"icon\" />\n    {{ label }}\n  </a>\n\n  <router-link v-else class=\"button-secondary-icon\" :to=\"{name: 'page', params: {page: internalUrlParam || 'home'}}\">\n    <SquareIcon class=\"button-secondary-icon__icon\" :icon=\"icon\" />\n    {{ label }}\n  </router-link>\n</template>\n\n<script setup>\nimport { pushData } from \"@/utilities/analytics-functions.js\";\n\nimport SquareIcon from \"./SquareIcon.vue\";\n\nconst props = defineProps({\n  url: String,\n  internalUrlParam: Object,\n  label: String,\n  icon: Object,\n});\n\nfunction pushEvent() {\n  if (props.url && props.url.includes('.pdf')) {\n      pushData('pdf', props.url, '', props.label)\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.button-secondary-icon {\n  @include link-m;\n\n  color: var(--primary-yellow);\n  display: flex;\n  align-items: center;\n  gap: 0.8rem;\n\n  &__icon {\n    background-color: var(--primary-yellow);\n    border-radius: 2px;\n    width: 1.5rem;\n    aspect-ratio: 1;\n    flex-shrink: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n\n  &:hover {\n    color: var(--primary-yellow-light);\n\n    .button-secondary-icon__icon {\n      background-color: var(--primary-yellow-light);\n    }\n  }\n}\n</style>\n","import script from \"./ButtonSecondaryIcon.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ButtonSecondaryIcon.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./ButtonSecondaryIcon.vue?vue&type=style&index=0&id=3358f77e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3358f77e\"]])\n\nexport default __exports__","import script from \"./ButtonScroll.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ButtonScroll.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./ButtonScroll.vue?vue&type=style&index=0&id=cda061f2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-cda061f2\"]])\n\nexport default __exports__","<template>\n  <div class=\"page-hero-content\">\n    <div class=\"page-hero-content__top\">\n      <img\n        class=\"page-hero-content__icon\"\n        :src=\"`${$baseUrl}images/icon-${$t('translation.' + currentPage)}.svg`\"\n        alt=\"\"\n      />\n      <h1 class=\"page-hero-content__title\">\n        {{ title }}\n      </h1>\n    </div>\n\n    <p class=\"page-hero-content__text\">\n      {{ introText }}\n    </p>\n\n    <ButtonSecondaryIcon\n      :url=\"pdfLink\"\n      :label=\"$t('general.ctas.downloadChapterPDF')\"\n      :icon=\"download\"\n    />\n\n    <ButtonScroll\n      v-if=\"smallscreen\"\n      class=\"page-hero-content__scroll-btn\"\n      @onScroll=\"scrollDown\"\n    />\n  </div>\n</template>\n\n<script setup>\nimport { inject, computed } from \"vue\";\nimport { download } from \"@/assets/icons/icons.js\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\n\nimport ButtonSecondaryIcon from \"./ButtonSecondaryIcon.vue\";\nimport ButtonScroll from \"./ButtonScroll.vue\";\n\ndefineProps({\n  currentPage: String,\n  title: String,\n  introText: String,\n  pdfLink: String,\n});\n\n\nconst $baseUrl = inject(\"$baseUrl\");\nconst { $tvaMq } = useTvaMq();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n\nfunction scrollDown() {\n  const firstContentEl = document.getElementById(\"text-section-0\");\n\n  if (firstContentEl) {\n    firstContentEl.scrollIntoView({ behavior: \"smooth\" });\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.page-hero-content {\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  color: var(--white-100);\n\n  .desktop &,\n  .large & {\n    height: 100%;\n    padding-right: 5.4vw;\n    justify-content: center;\n  }\n\n  .mobile &,\n  .tablet & {\n    min-height: 50%;\n    padding: var(--page-padding-h);\n    padding-top: 7vh;\n  }\n\n  &__top {\n    .mobile & {\n      display: flex;\n      gap: 1rem;\n    }\n  }\n\n  &__icon {\n    width: toRem(68);\n    margin-bottom: 2rem;\n\n    .mobile &,\n    .tablet & {\n      width: toRem(55);\n      margin-bottom: 1.5rem;\n    }\n\n    .tablet & {\n      width: toRem(68);\n      margin-bottom: 1.25rem;\n    }\n  }\n\n  &__title {\n    .desktop &,\n    .large &,\n    .tablet & {\n      @include h-h-2;\n    }\n\n    .mobile & {\n      @include h-h-3;\n\n      line-height: 105%;\n      padding-right: 15vw;\n    }\n\n    margin-bottom: 0.25rem;\n  }\n\n  &__text {\n    @include p-s;\n\n    margin-bottom: 1.87rem;\n  }\n\n  &__scroll-btn {\n    position: absolute;\n    left: var(--page-padding-h);\n    bottom: 1.5rem;\n  }\n}\n</style>\n","import script from \"./PageHeroContent.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./PageHeroContent.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./PageHeroContent.vue?vue&type=style&index=0&id=cc1d7bc8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-cc1d7bc8\"]])\n\nexport default __exports__","<template>\n  <section class=\"page-hero\">\n    <TvaBackgroundVideo\n      class=\"page-hero__video\"\n      :pathToVideo=\"`${currentPage}_${i18n.locale.value}-0`\"\n      autoPlay\n    />\n    <PageHeroContent\n      class=\"page-hero__content\"\n      :currentPage=\"currentPage\"\n      :title=\"title\"\n      :introText=\"introText\"\n      :pdfLink=\"pdfLink\"\n    />\n  </section>\n</template>\n\n<script setup>\nimport { useI18n } from \"vue-i18n\";\n\nimport PageHeroContent from \"../general/PageHeroContent.vue\";\nimport TvaBackgroundVideo from \"../general/TvaBackgroundVideo.vue\";\n\ndefineProps({\n  currentPage: String,\n  title: String,\n  introText: String,\n  pdfLink: String,\n});\n\nconst i18n = useI18n();\n</script>\n\n<style lang=\"scss\" scoped>\n.page-hero {\n  width: 100%;\n  height: calc(var(--vh) * 100);\n  background-color: var(--page-color);\n\n  .desktop &,\n  .large & {\n    padding: 0 var(--page-padding-h);\n  }\n\n  .mobile &,\n  .padding & {\n    @include home-side-stripes;\n  }\n\n  &__content {\n    .desktop &,\n    .large & {\n      width: var(--left-space);\n    }\n  }\n\n  &__video {\n    top: 0;\n\n    ::v-deep(video) {\n      // left: calc(var(--page-padding-h) + var(--left-space));\n      // transform: translateY(-50%);\n    }\n\n    .desktop &,\n    .large & {\n      left: calc(var(--page-padding-h) + var(--left-space));\n      width: calc(100% - var(--page-padding-h) * 2 - var(--left-space));\n      height: calc(var(--vh) * 100);\n      // clip-path: polygon(41.5% 0, 85% 0%, 85% 100%, 41.5% 100%);\n    }\n\n    .mobile &,\n    .tablet & {\n      position: relative;\n      left: 0;\n      height: 50%;\n\n      ::v-deep(video) {\n        width: 100%;\n        height: auto;\n      }\n    }\n  }\n}\n</style>\n","import script from \"./PageHero.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./PageHero.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./PageHero.vue?vue&type=style&index=0&id=00aa34f5&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-00aa34f5\"]])\n\nexport default __exports__","import script from \"./RoundIconButton.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./RoundIconButton.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./RoundIconButton.vue?vue&type=style&index=0&id=5f28ea78&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5f28ea78\"]])\n\nexport default __exports__","import script from \"./MediaInfo.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./MediaInfo.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./MediaInfo.vue?vue&type=style&index=0&id=564e300e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-564e300e\"]])\n\nexport default __exports__","<template>\n  <button\n    class=\"square-icon-button\"\n    :style=\"{\n      '--bg-color': bgColor,\n      '--hover-color': hoverColor,\n      '--hover-icon-color': hoverIconColor,\n    }\"\n    :aria-label=\"ariaLabel\"\n    :disabled=\"disabled\"\n    @click=\"$emit('onClick')\"\n  >\n    <SquareIcon :icon=\"icon\" :white=\"white\" :black=\"black\" />\n  </button>\n</template>\n\n<script setup>\nimport { computed } from \"vue\";\n\nimport SquareIcon from \"./SquareIcon.vue\";\n\nconst props = defineProps({\n  ariaLabel: String,\n  icon: Object,\n  white: Boolean,\n  black: Boolean,\n  graph: Boolean,\n  disabled: Boolean,\n});\n\nconst bgColor = computed(() => {\n  return props.graph\n    ? `var(--white-100)`\n    : props.white || props.black\n    ? \"transparent\"\n    : `var(--primary-yellow)`;\n});\n\nconst hoverColor = computed(() => {\n  return props.white || props.black\n    ? `transparent`\n    : `var(--primary-yellow-light)`;\n});\n\nconst hoverIconColor = computed(() => {\n  return props.white ? `var(--white-100)` : `var(--black-100)`;\n});\n</script>\n\n<style lang=\"scss\" scoped>\n.square-icon-button {\n  background-color: var(--bg-color);\n  border-radius: 2px;\n  width: 1.5rem;\n  aspect-ratio: 1;\n  flex-shrink: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  .square-icon {\n    transition: background-color 0.3s;\n  }\n  \n\n  &:hover:not(:disabled) {\n    .square-icon {\n      background-color: var(--hover-color);\n\n      ::v-deep(.svg-icon path) {\n        fill: var(--hover-icon-color);\n      }\n    }\n  }\n\n  &:disabled {\n    opacity: 0.4;\n  }\n}\n</style>\n","import script from \"./SquareIconButton.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./SquareIconButton.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./SquareIconButton.vue?vue&type=style&index=0&id=40322bc1&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-40322bc1\"]])\n\nexport default __exports__","<template>\n  <Teleport v-if=\"show || animatingOut\" to=\"#page\">\n    <!-- Need to add show on teleport to be sure that page node mounted -->\n    <Transition name=\"fade\">\n      <div\n        v-if=\"modalShown\"\n        :class=\"['tva-modal-wrapper', { dark }]\"\n        :style=\"{ '--overlay-color': overlayColor || 'var(--black-60)' }\"\n      >\n        <div\n          class=\"tva-modal\"\n          role=\"dialog\"\n          ref=\"modalRef\"\n          aria-modal=\"true\"\n          :aria-labelledby=\"ariaLabelledbyId\"\n          @keydown.esc=\"$emit('onClose', true)\"\n        >\n          <SquareIconButton\n            class=\"tva-modal__close-btn\"\n            :icon=\"close\"\n            black\n            @onClick=\"$emit('onClose')\"\n          />\n          <slot></slot>\n        </div>\n      </div>\n    </Transition>\n  </Teleport>\n</template>\n\n<script setup>\nimport { watch } from \"vue\";\nimport { ref } from \"@vue/reactivity\";\nimport { onMounted, onBeforeUnmount } from \"@vue/runtime-core\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport SquareIconButton from \"./SquareIconButton.vue\";\n\nimport { close } from \"@/assets/icons/icons.js\";\n\nconst props = defineProps({\n  show: Boolean,\n  // Id of element that contains popup main title\n  ariaLabelledbyId: String,\n  overlayColor: String,\n  dark: Boolean,\n});\n\nconst emit = defineEmits([\"close\"]);\nconst modalRef = ref(null);\nconst modalShown = ref(false);\nconst animatingOut = ref(false);\n\nonClickOutside(modalRef, () => emit(\"onClose\", true));\n\nwatch(\n  () => props.show,\n  (shown) => {\n    if (shown) {\n      // Freeze page when popup in screen\n      document.body.style.overflow = \"hidden\";\n    } else {\n      animatingOut.value = true;\n      document.body.style.overflow = \"initial\";\n    }\n\n    // Timeout for modal boolean to enable animation\n    setTimeout(() => {\n      modalShown.value = shown;\n    }, 0);\n\n    setTimeout(() => {\n      animatingOut.value = false;\n    }, 500);\n  }\n);\n\nwatch(\n  () => modalRef.value,\n  () => focusFirstClickable()\n);\n\nonMounted(() => {\n  focusFirstClickable();\n});\n\nonBeforeUnmount(() => {\n  document.body.style.overflow = \"initial\";\n});\n\nfunction focusFirstClickable() {\n  if (modalRef.value) {\n    // Set focus to first clickable item (button)\n    // NB This should be customized when you use the popup\n    const firstClickableItem = modalRef.value.querySelectorAll(\"button\")[0];\n\n    if (firstClickableItem) {\n      firstClickableItem.focus();\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.tva-modal-wrapper {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: calc(var(--vh) * 100);\n  background-color: var(--overlay-color);\n  z-index: 10;\n\n  .tva-modal {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n\n    &__close-btn {\n      position: absolute;\n      top: 1.5rem;\n      right: 1.5rem;\n      z-index: 2;\n      background-color: var(--white-100);\n\n      .mobile &,\n      .tablet & {\n        right: 50%;\n        transform: translateX(50%);\n        top: 0.85rem;\n\n        &::before {\n          content: \"\";\n          width: 100vw;\n          height: 3.2rem;\n          position: absolute;\n          top: -0.85rem;\n          left: calc(-50vw + 50%);\n          background-color: var(--white-100);\n          z-index: -1;\n        }\n      }\n    }\n  }\n\n  &.dark .tva-modal {\n    .tva-modal__close-btn {\n      right: 50%;\n      transform: translateX(50%);\n      background-color: transparent;\n\n      &::before {\n        background-color: transparent;\n      }\n\n      ::v-deep(.svg-icon path) {\n        fill: var(--primary-yellow);\n      }\n\n      &:hover:not(:disabled) {\n        ::v-deep(.svg-icon path) {\n          fill: var(--primary-yellow-light);\n        }\n      }\n    }\n  }\n}\n</style>\n","import script from \"./TvaModal.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TvaModal.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./TvaModal.vue?vue&type=style&index=0&id=7ab22911&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-7ab22911\"]])\n\nexport default __exports__","<template>\n  <TvaModal\n    class=\"video-modal-wrapper\"\n    :show=\"show\"\n    dark\n    @onClose=\"$emit('onClose')\"\n  >\n    <div class=\"video-modal\">\n      <video-player\n        class=\"video-modal__player\"\n        :src=\"`${$baseUrl}videos/${videoPath}.mp4`\"\n        controls\n        disablePictureInPicture\n        @mounted=\"autoPlayVideo\"\n      />\n    </div>\n  </TvaModal>\n</template>\n\n<script setup>\nimport { inject } from \"vue\";\n\nimport TvaModal from \"./TvaModal.vue\";\n\nimport \"video.js/dist/video-js.css\";\n\ndefineProps({\n  show: Boolean,\n  videoPath: String,\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\n\nfunction autoPlayVideo(player) {\n  player.player.play();\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.video-modal {\n  width: 100vw;\n  height: calc(var(--vh) * 100);\n  background-color: var(--black-100);\n\n  &__player {\n    width: 70%;\n    max-height: 95%;\n    position: absolute;\n    left: 50%;\n    top: 50%;\n    transform: translate(-50%, -50%);\n\n    .mobile &,\n    .tablet & {\n      width: 100%;\n      height: 100vw;\n    }\n\n    ::v-deep(.vjs-control-bar) {\n      background-color: transparent;\n\n      .vjs-picture-in-picture-control {\n        display: none;\n      }\n\n      .vjs-icon-placeholder {\n        color: var(--primary-yellow);\n      }\n\n      .vjs-progress-holder,\n      .vjs-volume-bar.vjs-slider-horizontal,\n      .vjs-slider-bar,\n      .vjs-volume-level {\n        height: 2px;\n      }\n\n      .vjs-progress-holder,\n      .vjs-load-progress div {\n        background-color: var(--white-100);\n      }\n\n      .vjs-volume-level::before {\n        content: \"\";\n        width: 0.5rem;\n        height: 0.5rem;\n        top: 50%;\n        transform: translateY(-50%);\n        border-radius: 50%;\n        background-color: var(--white-100);\n      }\n\n      .vjs-slider-bar::before {\n        display: none;\n      }\n\n      .vjs-progress-holder .vjs-slider-bar {\n        background-color: var(--primary-yellow);\n      }\n    }\n  }\n}\n</style>\n","import script from \"./VideoModal.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./VideoModal.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./VideoModal.vue?vue&type=style&index=0&id=d385698a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-d385698a\"]])\n\nexport default __exports__","<template>\n  <section\n    class=\"video-section\"\n    @mouseenter=\"videoPlaying = true\"\n    @mouseleave=\"videoPlaying = false\"\n  >\n    <TvaBackgroundVideo\n      class=\"video-section__video\"\n      :pathToVideo=\"videoPath\"\n      :playing=\"videoPlaying\"\n    />\n    <RoundIconButton\n      v-if=\"smallscreen\"\n      class=\"video-section__play-btn\"\n      :icon=\"play\"\n      @onClick=\"showModal(true)\"\n    />\n\n    <div class=\"video-section__left\">\n      <MediaInfo\n        :title=\"title\"\n        :mediaType=\"$t('general.labels.video')\"\n        :introText=\"introText\"\n        :icon=\"play\"\n        :smallscreen=\"smallscreen\"\n        @playMedia=\"showModal(true)\"\n      />\n    </div>\n    <div v-if=\"!smallscreen\" class=\"video-section__right\" />\n\n    <VideoModal\n      :show=\"modalShown\"\n      :videoPath=\"videoPath\"\n      @onClose=\"showModal(false)\"\n    />\n  </section>\n</template>\n\n<script setup>\nimport { ref, computed, inject } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\nimport { pushData } from \"@/utilities/analytics-functions.js\";\n\nimport TvaBackgroundVideo from \"../general/TvaBackgroundVideo.vue\";\nimport MediaInfo from \"../general/MediaInfo.vue\";\nimport VideoModal from \"../general/VideoModal.vue\";\nimport RoundIconButton from \"../general/RoundIconButton.vue\";\n\nimport { play } from \"@/assets/icons/icons.js\";\n\nconst props = defineProps({\n  title: String,\n  introText: String,\n  videoFileName: String,\n  currentPage: String,\n  id: String,\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\nconst i18n = useI18n();\n\nconst { $tvaMq } = useTvaMq();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n\nconst modalShown = ref(false);\nconst videoPlaying = ref(false);\n\nconst videoPath = computed(() => {\n  const videoNr = props.id.split(\"-\")[props.id.split(\"-\").length - 1];\n  return `${props.currentPage}_${i18n.locale.value}-${videoNr}`;\n});\n\nfunction showModal(value) {\n  modalShown.value = value;\n  pushData(\"video\", `${$baseUrl}videos/${videoPath.value}.mp4`, props.title);\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.video-section {\n  position: relative;\n  overflow: hidden;\n\n  .desktop &,\n  .large & {\n    height: 80vh;\n    color: var(--white-100);\n  }\n\n  &__video {\n    height: auto;\n    aspect-ratio: 16/9;\n\n    .desktop &,\n    .large & {\n      top: 50%;\n      transform: translateY(-50%);\n    }\n\n    .mobile &,\n    .tablet & {\n      position: relative;\n    }\n  }\n\n  &__play-btn {\n    position: absolute;\n    left: 50%;\n    top: calc(100vw * 0.24);\n    transform: translate(-50%, -50%);\n  }\n\n  &__left,\n  &__right {\n    height: 100%;\n    background: var(--black-25);\n    backdrop-filter: blur(10px);\n  }\n\n  &__left {\n    display: flex;\n    align-items: center;\n\n    .desktop &,\n    .large & {\n      padding: 2rem 5vw 2rem var(--page-padding-h);\n      width: calc(var(--left-space) + var(--page-padding-h));\n    }\n\n    .mobile &,\n    .tablet & {\n      width: calc(100% - var(--page-padding-h) * 2);\n      background-color: var(--scala-grigi-gray-5);\n      margin: -2rem var(--page-padding-h) 0;\n      padding: var(--page-padding-h);\n      border: var(--section-border);\n      border-bottom: none;\n    }\n  }\n\n  &__right {\n    position: absolute;\n    top: 0;\n    right: 0;\n    width: var(--page-padding-h);\n  }\n}\n</style>\n","import script from \"./VideoSection.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./VideoSection.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./VideoSection.vue?vue&type=style&index=0&id=94ad9bea&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-94ad9bea\"]])\n\nexport default __exports__","<template>\n  <component\n    :is=\"url ? 'a' : 'button'\"\n    class=\"card-template\"\n    :style=\"\n      imagePath\n        ? {\n            backgroundImage: `\n        var(--gradient-black),\n        url(${$baseUrl}images/${imagePath}.webp)\n        `,\n          }\n        : {}\n    \"\n    :disabled=\"!cta\"\n    :href=\"url || null\"\n    :target=\"url ? '_blank' : null\"\n    @mouseenter=\"toggeHovered\"\n    @mouseleave=\"toggeHovered\"\n    @click=\"onClick\"\n  >\n    <div\n      :class=\"['card-template__content', { 'with-cta': cta && !smallscreen }]\"\n    >\n      <slot></slot>\n    </div>\n\n    <CtaBar v-if=\"cta\" :cta=\"cta\" :hovered=\"hovered\" />\n  </component>\n</template>\n\n<script setup>\nimport { inject, ref, computed } from \"vue\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\nimport { pushData } from \"@/utilities/analytics-functions.js\";\n\nimport CtaBar from \"./CtaBar.vue\";\n\nconst props = defineProps({\n  imagePath: {\n    type: String,\n  },\n  cta: String,\n  url: String,\n});\n\nconst emit = defineEmits([\"onClick\"]);\n\nconst $baseUrl = inject(\"$baseUrl\");\nconst { $tvaMq } = useTvaMq();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n\nconst hovered = ref(false);\n\nfunction toggeHovered() {\n  if (props.cta) {\n    hovered.value = !hovered.value;\n  }\n}\n\nfunction onClick() {\n  if (props.url) {\n    if (props.url.includes(\".pdf\")) {\n      pushData(\"pdf\", props.url, \"\", props.cta);\n    }\n  } else {\n    emit(\"onClick\");\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.card-template {\n  width: 100%;\n  max-width: var(--max-card-width);\n  background-position: 50%;\n  aspect-ratio: 0.82;\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n  justify-content: flex-end;\n  background-size: cover;\n  text-align: left;\n  position: relative;\n\n  &__content {\n    padding: 1.5rem;\n    transition: transform 0.5s;\n\n    &.with-cta {\n      transform: translateY(var(--cta-bar-height));\n    }\n  }\n\n  &:hover {\n    .with-cta.card-template__content {\n      transform: translateY(0);\n    }\n  }\n}\n</style>\n","import script from \"./CardTemplate.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./CardTemplate.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./CardTemplate.vue?vue&type=style&index=0&id=a04f32d2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-a04f32d2\"]])\n\nexport default __exports__","import script from \"./ArchiveCard.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ArchiveCard.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./ArchiveCard.vue?vue&type=style&index=0&id=01d07fba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-01d07fba\"]])\n\nexport default __exports__","import script from \"./PDFCard.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./PDFCard.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./PDFCard.vue?vue&type=style&index=0&id=a20b3616&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-a20b3616\"]])\n\nexport default __exports__","import script from \"./LabelTag.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./LabelTag.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./LabelTag.vue?vue&type=style&index=0&id=75c78406&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-75c78406\"]])\n\nexport default __exports__","import script from \"./ImageCardContent.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ImageCardContent.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./ImageCardContent.vue?vue&type=style&index=0&id=4ff47072&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4ff47072\"]])\n\nexport default __exports__","import script from \"./ImageCard.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ImageCard.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./ImageCard.vue?vue&type=style&index=0&id=7fe19d1e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-7fe19d1e\"]])\n\nexport default __exports__","<template>\n  <div :class=\"['tva-slider']\">\n    <div class=\"tva-slider-container\" ref=\"slider\">\n      <slot></slot>\n    </div>\n\n    <div\n      :class=\"['tva-arrows', { graph }]\"\n      :style=\"{ top: `calc(${arrowsPosition}% - ${arrowsSize / 2}px)` }\"\n    >\n      <SquareIconButton\n        v-for=\"(arrowDirection, i) of ['sx', 'dx']\"\n        :key=\"arrowDirection\"\n        :class=\"['tva-arrow', 'tva-arrow-' + arrowDirection, { graph }]\"\n        :icon=\"arrowDownSmall\"\n        :ariaLabel=\"arrowAriaLabels[i]\"\n        :black=\"!white\"\n        :white=\"white\"\n        :graph=\"graph\"\n        @onClick=\"manageClick(arrowDirection)\"\n      />\n    </div>\n  </div>\n</template>\n\n<script>\nimport Flickity from \"flickity-imagesloaded\";\nimport SquareIconButton from \"./SquareIconButton.vue\";\nimport { arrowDownSmall } from \"@/assets/icons/icons.js\";\n\nexport default {\n  components: {\n    SquareIconButton,\n  },\n  props: {\n    config: {\n      type: Object,\n      default: null,\n    },\n    white: Boolean,\n    graph: Boolean,\n  },\n  data() {\n    return {\n      arrowDownSmall,\n      isFlickity: false,\n      elementsCount: [],\n      index: 0,\n      arrowAriaLabels: [\"To previous\", \"To next\"],\n      fade: false,\n      options: {\n        draggable: \">1\",\n        prevNextButtons: false,\n        pageDots: false,\n        imagesLoaded: true,\n        lazyLoad: true,\n        adaptiveHeight: true,\n        fade: false,\n        contain: true,\n        cellAlign: \"left\",\n      },\n    };\n  },\n  created() {\n    this.setProps(this.config);\n  },\n  watch: {\n    config(config) {\n      this.setProps(config);\n    },\n  },\n  mounted() {\n    this.$nextTick(() => {\n      this.elementsCount = new Array(this.$refs.slider.childElementCount).fill(\n        0\n      );\n      this.createFlickity();\n\n      window.addEventListener(\"resize\", () => {\n        this.createFlickity();\n      });\n    });\n  },\n  methods: {\n    setProps(config) {\n      if (config) {\n        for (const [key, value] of Object.entries(config)) {\n          this[key] = value;\n        }\n      }\n    },\n    createFlickity() {\n      const elem = this.$refs.slider;\n\n      if (elem && !this.isFlickity) {\n        this.flkty = new Flickity(elem, this.options);\n\n        this.flkty.on(\"change\", (index) => {\n          this.index = index;\n          this.$emit(\"change\", index);\n        });\n\n        this.isFlickity = true;\n      } else if (!elem && this.isFlickity) {\n        this.flkty.destroy();\n        this.flkty = null;\n        this.isFlickity = false;\n      }\n    },\n    manageClick(arrowDirection) {\n      arrowDirection === \"sx\" ? this.goPrevious() : this.goNext();\n    },\n    goPrevious() {\n      this.flkty.previous();\n    },\n    goNext() {\n      this.flkty.next();\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\nimg {\n  height: 100%;\n}\n\n.tva-slider-container {\n  width: 100%;\n}\n.tva-slider {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n\n  .tva-arrows {\n    z-index: 1;\n    display: flex;\n    align-items: flex-start;\n    width: fit-content;\n    position: absolute;\n    top: -3.25rem;\n    right: 0;\n\n    .mobile & {\n      right: initial;\n      left: 0;\n    }\n\n    &.graph {\n      top: unset;\n      right: unset;\n      bottom: 0;\n      left: 0;\n\n      &::before {\n        content: \"\";\n        position: absolute;\n        top: 50%;\n        left: 0;\n        transform: translateX(toRem(-30));\n        width: var(--vw-no-scrollbar, 100vw);\n        height: 1px;\n        z-index: -1;\n        background-color: var(--scala-grigi-gray-3);\n      }\n    }\n\n    .tva-arrow {\n      &.tva-arrow-sx {\n        transform: rotate(90deg);\n        margin-right: 0.3rem;\n\n        &.graph {\n          margin-right: toRem(12);\n        }\n      }\n      &.tva-arrow-dx {\n        transform: rotate(-90deg);\n      }\n    }\n  }\n}\n</style>\n\n<style lang=\"scss\">\n/*! Flickity v2.2.0\nhttps://flickity.metafizzy.co\n---------------------------------------------- */\n\n.flickity-enabled {\n  position: relative;\n}\n\n.flickity-enabled:focus {\n  outline: none;\n}\n\n.flickity-viewport {\n  overflow: hidden;\n  position: relative;\n  height: 100%;\n  overflow: visible;\n}\n\n.flickity-slider {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n/* draggable */\n\n.flickity-enabled.is-draggable {\n  -webkit-tap-highlight-color: transparent;\n  tap-highlight-color: transparent;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.flickity-enabled.is-draggable .flickity-viewport {\n  cursor: move;\n  cursor: -webkit-grab;\n  cursor: grab;\n}\n\n.flickity-enabled.is-draggable .flickity-viewport.is-pointer-down {\n  cursor: -webkit-grabbing;\n  cursor: grabbing;\n}\n</style>\n","import { render } from \"./FlickitySlider.vue?vue&type=template&id=04af060b&scoped=true\"\nimport script from \"./FlickitySlider.vue?vue&type=script&lang=js\"\nexport * from \"./FlickitySlider.vue?vue&type=script&lang=js\"\n\nimport \"./FlickitySlider.vue?vue&type=style&index=0&id=04af060b&lang=scss&scoped=true\"\nimport \"./FlickitySlider.vue?vue&type=style&index=1&id=04af060b&lang=scss\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-04af060b\"]])\n\nexport default __exports__","<template>\n  <section class=\"card-slider\">\n    <h2 class=\"card-slider__title\">\n      {{ title }}\n    </h2>\n\n    <FlickitySlider :white=\"white\">\n      <component\n        v-for=\"(card, i) of cards\"\n        :class=\"['card-slider__card', { pdf: cardType.includes('PDF') }]\"\n        :key=\"card.title\"\n        :is=\"cardComponents[cardType]\"\n        v-bind=\"card\"\n        :cardType=\"generalCardLabel\"\n        clickable\n        @onClick=\"$emit('onCardClick', i)\"\n      />\n    </FlickitySlider>\n  </section>\n</template>\n\n<script setup>\nimport ArchiveCard from \"../general/ArchiveCard.vue\";\nimport PDFCard from \"../general/PDFCard.vue\";\nimport ImageCard from \"../general/ImageCard.vue\";\nimport FlickitySlider from \"../general/FlickitySlider.vue\";\n\ndefineProps({\n  cardType: String,\n  title: String,\n  generalCardLabel: String,\n  cards: {\n    type: Array,\n    default: () => [],\n  },\n  white: Boolean,\n});\n\n// TODO: New component for interview slider, that gets interview content from correct place\n\nconst cardComponents = {\n  ArchiveCard,\n  PDFCard,\n  ImageCard,\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.card-slider {\n  background-color: var(--page-color, var(--white-100));\n  padding: 7vh var(--page-padding-h);\n  position: relative;\n  // width: var(--vw-no-scrollbar, 100vw);\n  overflow: hidden;\n\n  :not(.download-multimedia) & {\n    color: var(--white-100);\n  }\n\n  .download-multimedia & {\n    color: var(--black-100);\n  }\n\n  &__title {\n    @include title-m;\n\n    margin-bottom: 1.75rem;\n\n    .download-multimedia & {\n      @include h-h-2;\n\n      margin-bottom: 1.25rem;\n    }\n\n    .mobile & {\n      margin-bottom: 3rem;\n    }\n  }\n\n  &__card {\n    margin: 0 0.5rem;\n\n    &.pdf {\n      // TODO: this doesnt work because overflow hidden on card\n\n      &:last-child {\n        margin: 0 0.5rem 0 1rem;\n      }\n\n      &:nth-last-child(2) {\n        margin: 0 1rem;\n      }\n\n      &:nth-last-child(3) {\n        margin: 0 1rem 0 0.5rem;\n      }\n\n      &:last-child,\n      &:nth-last-child(2) {\n        &::before {\n          content: \"\";\n          position: absolute;\n          top: 0;\n          left: -1rem;\n          height: 100%;\n          border-left: 1px solid var(--scala-grigi-gray-2);\n        }\n      }\n    }\n  }\n}\n</style>\n","import script from \"./CardSlider.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./CardSlider.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./CardSlider.vue?vue&type=style&index=0&id=c3a6e93c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-c3a6e93c\"]])\n\nexport default __exports__","<template>\n  <div class=\"media-time\">\n    <icon data=\"@icon/time.svg\" />\n    {{ formattedTime }}\n  </div>\n</template>\n\n<script setup>\nimport { computed } from \"vue\";\n\nconst props = defineProps({\n  durationInSeconds: {\n    type: Number,\n    default: 0,\n  },\n});\n\nconst formattedTime = computed(() => {\n  const hours = Math.floor(props.durationInSeconds / 3600);\n  const minutes = Math.floor((props.durationInSeconds % 3600) / 60);\n  const seconds = Math.floor(props.durationInSeconds % 60);\n\n  const formattedHours = hours.toString().padStart(2, \"0\");\n  const formattedMinutes = minutes.toString().padStart(2, \"0\");\n  const formattedSeconds = seconds.toString().padStart(2, \"0\");\n\n  return `${\n    hours == 0 ? \"\" : formattedHours + \":\"\n  }${formattedMinutes}:${formattedSeconds}`;\n});\n</script>\n\n<style lang=\"scss\" scoped>\n.media-time {\n  @include link-s;\n\n  padding: 1rem 0;\n  display: flex;\n  align-items: center;\n  gap: 0.5rem;\n}\n</style>\n","import script from \"./MediaTime.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./MediaTime.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./MediaTime.vue?vue&type=style&index=0&id=43f36eca&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-43f36eca\"]])\n\nexport default __exports__","import script from \"./VideoCardContent.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./VideoCardContent.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./VideoCardContent.vue?vue&type=style&index=0&id=e6bf9bb4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-e6bf9bb4\"]])\n\nexport default __exports__","<template>\n  <button\n    class=\"video-card\"\n    @click=\"showModal(true)\"\n    @mouseenter=\"videoPlaying = true\"\n    @mouseleave=\"videoPlaying = false\"\n  >\n    <TvaBackgroundVideo\n      :pathToVideo=\"videoFileName\"\n      :playing=\"videoPlaying\"\n      preload=\"metadata\"\n    />\n\n    <VideoCardContent\n      :title=\"title\"\n      :labels=\"labels\"\n      :duration=\"videoDuration\"\n    />\n    <RoundIconButton class=\"video-card__play-btn\" :icon=\"play\" white />\n\n    <VideoModal\n      :show=\"modalShown\"\n      :videoPath=\"videoFileName\"\n      @onClose=\"showModal(false)\"\n    />\n  </button>\n</template>\n\n<script setup>\nimport { ref, inject, computed, onMounted } from \"vue\";\nimport { pushData } from \"@/utilities/analytics-functions.js\";\n\nimport VideoCardContent from \"./VideoCardContent.vue\";\nimport TvaBackgroundVideo from \"./TvaBackgroundVideo.vue\";\nimport RoundIconButton from \"./RoundIconButton.vue\";\nimport VideoModal from \"../general/VideoModal.vue\";\n\nimport { play } from \"@/assets/icons/icons.js\";\n\nconst props = defineProps({\n  title: String,\n  labels: {\n    type: Array,\n    default: () => [],\n  },\n  videoFileName: String,\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\nconst modalShown = ref(false);\nconst videoDuration = ref(0);\nconst videoPlaying = ref(false);\n\nconst videoPath = computed(\n  () => `${$baseUrl}videos/${props.videoFileName}.mp4`\n);\n\nonMounted(() => getVideoDuration());\n\nfunction showModal(value) {\n  modalShown.value = value;\n  pushData(\"video\", videoPath.value, props.title);\n}\n\nfunction getVideoDuration() {\n  const videoEl = document.createElement(\"video\");\n  videoEl.src = videoPath.value;\n  videoEl.preload = \"metadata\";\n\n  videoEl.onloadedmetadata = function () {\n    window.URL.revokeObjectURL(videoPath.value);\n    videoDuration.value = videoEl.duration;\n  };\n\n  videoEl.remove();\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.video-card {\n  @include gradient-overlay;\n\n  .mobile & {\n    &::after {\n      background-image: linear-gradient(\n        180deg,\n        rgba(0, 0, 0, 0) 16.67%,\n        #000000 100%\n      );\n    }\n  }\n\n  color: var(--white-100);\n  width: toRem(608);\n  height: toRem(380);\n  display: flex;\n  flex-direction: column;\n  justify-content: flex-end;\n  text-align: left;\n\n  .mobile & {\n    width: 100%;\n    height: auto;\n    aspect-ratio: 1.2;\n  }\n\n  &__play-btn {\n    .desktop &,\n    .large & {\n      position: absolute;\n      top: 50%;\n      left: 50%;\n      transform: translate(-50%, -50%);\n    }\n\n    .mobile &,\n    .tablet & {\n      position: relative;\n      z-index: 1;\n      margin-left: 1.5rem;\n      margin-bottom: 0.5rem;\n    }\n  }\n}\n</style>\n","import script from \"./VideoCard.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./VideoCard.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./VideoCard.vue?vue&type=style&index=0&id=75535dce&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-75535dce\"]])\n\nexport default __exports__","import script from \"./CtaExtra.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./CtaExtra.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./CtaExtra.vue?vue&type=style&index=0&id=4aa95efa&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4aa95efa\"]])\n\nexport default __exports__","import script from \"./VideoSlider.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./VideoSlider.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./VideoSlider.vue?vue&type=style&index=0&id=28182aa6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-28182aa6\"]])\n\nexport default __exports__","import script from \"./InterviewSideBar.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./InterviewSideBar.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./InterviewSideBar.vue?vue&type=style&index=0&id=b1b39ae4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b1b39ae4\"]])\n\nexport default __exports__","import script from \"./TextTitle.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TextTitle.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./TextTitle.vue?vue&type=style&index=0&id=6ed9b446&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6ed9b446\"]])\n\nexport default __exports__","import script from \"./TextBlock.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TextBlock.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./TextBlock.vue?vue&type=style&index=0&id=52b77b3e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-52b77b3e\"]])\n\nexport default __exports__","<template>\n  <div :class=\"['scrollbar-wrapper', { horizontal }]\">\n    <div class=\"scrollbar-wrapper__scrollbar\">\n      <div\n        class=\"scrollbar-wrapper__scrollbar__progress\"\n        :style=\"{\n          ...(horizontal\n            ? { width: `${state.progress}%` }\n            : { height: `${state.progress}%` }),\n        }\"\n      ></div>\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport { onMounted, reactive } from \"@vue/runtime-core\";\n\nconst props = defineProps({\n  scrollContainerId: String,\n  // Set true for horizontal scrollbars\n  horizontal: Boolean,\n});\n\nconst state = reactive({\n  scrollContainer: null,\n  progress: 0,\n});\n\nonMounted(() => {\n  state.scrollContainer = document.getElementById(props.scrollContainerId);\n\n  if (state.scrollContainer) {\n    state.scrollContainer.classList.add(\"hide-scrollbar\");\n    state.scrollContainer.addEventListener(\"scroll\", handleScrolling);\n  }\n});\n\nfunction handleScrolling() {\n  if (state.scrollContainer) {\n    let scrollSize = state.scrollContainer.scrollHeight;\n    let clientSize = state.scrollContainer.clientHeight;\n    let scrollStart = state.scrollContainer.scrollTop;\n\n    if (props.horizontal) {\n      scrollSize = state.scrollContainer.scrollWidth;\n      clientSize = state.scrollContainer.clientWidth;\n      scrollStart = state.scrollContainer.scrollLeft;\n    }\n    const progress = scrollSize - clientSize;\n\n    state.progress = Math.floor((scrollStart * 100) / progress);\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.scrollbar-wrapper {\n  position: absolute;\n  width: 0.4rem;\n  height: var(--scrollbar-height, 85%);\n  top: calc(var(--modal-padding) * 1.5);\n  right: calc(var(--modal-padding) * 0.5 + 0.5rem);\n\n  &.horizontal {\n    height: 0.4rem;\n    width: var(--scrollbar-width, 100%);\n  }\n\n  &__scrollbar {\n    width: 100%;\n    height: 100%;\n    background: var(--scala-grigi-gray-5);\n\n    &__progress {\n      border-radius: 6px;\n      background: var(--primary-yellow);\n      opacity: 1;\n\n      .horizontal & {\n        height: 100%;\n      }\n    }\n  }\n\n  .mobile & {\n    height: 100%;\n  }\n}\n</style>\n\n<style lang=\"scss\">\n.hide-scrollbar {\n  -ms-overflow-style: none;\n  scrollbar-width: none;\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n}\n</style>\n","import script from \"./TvaScrollBar.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TvaScrollBar.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./TvaScrollBar.vue?vue&type=style&index=0&id=8c5564d2&lang=scss&scoped=true\"\nimport \"./TvaScrollBar.vue?vue&type=style&index=1&id=8c5564d2&lang=scss\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8c5564d2\"]])\n\nexport default __exports__","<template>\n  <div class=\"interview-content\" :id=\"scrollContainerId\">\n    <div class=\"interview-content__inner\">\n      <h1 class=\"interview-content__title\">{{ title }}</h1>\n\n      <section\n        v-for=\"question of content\"\n        :key=\"question.title\"\n        class=\"interview-content__section\"\n      >\n        <TextBlock\n          class=\"interview-content__section__question\"\n          :title=\"question.title\"\n          :paragraphs=\"question.paragraphs\"\n        />\n      </section>\n    </div>\n\n    <TvaScrollBar\n      v-if=\"withScrollbar && !smallscreen\"\n      :scrollContainerId=\"scrollContainerId\"\n    />\n  </div>\n</template>\n\n<script setup>\nimport TextBlock from \"./TextBlock.vue\";\nimport TvaScrollBar from \"./TvaScrollBar.vue\";\n\ndefineProps({\n  title: String,\n  content: {\n    type: Array,\n    default: () => [],\n  },\n  withScrollbar: {\n    type: Boolean,\n    default: true,\n  },\n  smallscreen: Boolean,\n});\n\nconst scrollContainerId = \"interview-container\";\n</script>\n\n<style lang=\"scss\" scoped>\n.interview-content {\n  --offset-top: 0;\n\n  padding: calc(var(--modal-padding) * 2);\n  height: calc(var(--vh) * 100 - var(--offset-top));\n  overflow: auto;\n\n  .mobile &,\n  .tablet & {\n    // This is about the size of the interviewee info box in mobile\n    --offset-top: #{toRem(175)};\n\n    padding: calc(var(--modal-padding) * 2) var(--modal-padding);\n  }\n\n  &__title {\n    .desktop &,\n    .large & {\n      @include title-l;\n\n      margin-bottom: 3.5vh;\n    }\n\n    .mobile &,\n    .tablet & {\n      @include title-s;\n\n      margin-bottom: 1rem;\n    }\n  }\n\n  &__section {\n    &:not(:last-child) {\n      border-bottom: 1px solid var(--scala-grigi-gray-3);\n    }\n\n    &__question {\n      padding: 2rem 0 !important;\n\n      .mobile &,\n      .tablet & {\n        ::v-deep(.text-title) {\n          @include title-xs;\n        }\n      }\n    }\n  }\n}\n</style>\n","import script from \"./InterviewContent.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./InterviewContent.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./InterviewContent.vue?vue&type=style&index=0&id=71f7327b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-71f7327b\"]])\n\nexport default __exports__","<template>\n  <TvaModal :show=\"show\" @onClose=\"$emit('onClose')\">\n    <article class=\"interview-modal\">\n      <InterviewSideBar\n        :cardSubscript=\"cardSubscript\"\n        :cardContent=\"cardContent\"\n        :imagePath=\"imagePath\"\n        :interviewGradient=\"interviewGradient\"\n        :smallscreen=\"smallscreen\"\n        :internalUrlParam=\"internalUrlParam\"\n        @onNavigate=\"$emit('onNavigate')\"\n      />\n      <InterviewContent :title=\"title\" :content=\"content\" :smallscreen=\"smallscreen\" />\n    </article>\n  </TvaModal>\n</template>\n\n<script setup>\nimport { computed } from \"vue\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\n\nimport TvaModal from \"./TvaModal.vue\";\nimport InterviewSideBar from \"./InterviewSideBar.vue\";\nimport InterviewContent from \"./InterviewContent.vue\";\n\ndefineProps({\n  show: Boolean,\n  cardSubscript: String,\n  cardContent: Object,\n  title: String,\n  content: Object,\n  interviewGradient: String,\n  imagePath: String,\n  internalUrlParam: String\n});\n\nconst { $tvaMq } = useTvaMq();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n</script>\n\n<style lang=\"scss\" scoped>\n.interview-modal {  \n  width:  100vw;\n  height: calc(var(--vh) * 100);\n  background-color: var(--white-100);\n\n  .desktop &, .large & {\n    display: flex;\n  }\n\n  .mobile &, .tablet & {\n    padding-top: toRem(52);\n  }\n}\n</style>\n","import script from \"./InterviewModal.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./InterviewModal.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./InterviewModal.vue?vue&type=style&index=0&id=812bc966&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-812bc966\"]])\n\nexport default __exports__","<template>\n  <div>\n    <CardSlider\n      cardType=\"ImageCard\"\n      :title=\"title\"\n      :generalCardLabel=\"$t('general.labels.interview')\"\n      :cards=\"interviewCards\"\n      @onCardClick=\"showModal\"\n    />\n\n    <InterviewModal\n      :show=\"modalContent\"\n      v-bind=\"modalContent\"\n      @onClose=\"showModal(null)\"\n      @onNavigate=\"navigateFromModal\"\n    />\n  </div>\n</template>\n\n<script setup>\nimport { computed, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport CardSlider from \"./CardSlider.vue\";\nimport InterviewModal from \"../general/InterviewModal.vue\";\n\nconst props = defineProps({\n  title: String,\n  currentPage: String\n});\n\nconst { t, tm, locale } = useI18n();\nconst modalContent = ref(null);\n\nconst interviewsPerPage = computed(() => tm(\"interviews\"));\n\nconst interviewContents = computed(() => {\n  return Object.entries(interviewsPerPage.value)\n    .map(([page, cards]) =>\n      cards.map((card, i) => {\n        // This keeps the images correct for English, since interviews are\n        // not the same between languages\n\n        const advanceNumbers = page == \"download\" && locale.value == \"en\";\n        return {\n          ...card,\n          interviewGradient: `var(--diag-gradient-${card.relatedPage || page})`,\n\n          cardContent: {\n            imagePath: `${t('translation.' + page)}_interviste-${i + (advanceNumbers ? 2 : 1)}`,\n            internalUrlParam: card.relatedPage || (page == \"download\" ? props.currentPage : page),\n            ...card.cardContent,\n          },\n        };\n      })\n    )\n    .flat(2);\n});\n\nconst interviewCards = computed(() => {\n  return interviewContents.value.map((content) => content.cardContent);\n});\n\nfunction showModal(cardIndex) {\n  modalContent.value = interviewContents.value[cardIndex];\n}\n\nfunction navigateFromModal() {\n  if (\n    modalContent.value.cardContent.internalUrlParam === props.currentPage\n  ) {\n    modalContent.value = null;\n\n    // Wait until fade animation is done before scrolling\n  setTimeout(() => {\n    window.scrollTo({top: 0, behavior: 'smooth'});\n  }, 500)\n  }\n  \n\n  \n  \n}\n</script>\n\n<style lang=\"scss\" scoped></style>\n","import script from \"./InterviewSlider.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./InterviewSlider.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n  <div class=\"sdg-panel-row\">\n    <div class=\"sdg-panel-row__sector\">{{ sector }}</div>\n\n    <div class=\"sdg-panel-row__sdgs\">\n      <img\n        v-for=\"goalNr of SDGs\"\n        :key=\"'goal-' + goalNr\"\n        class=\"sdg-panel-row__sdgs__sdg\"\n        :src=\"`${$baseUrl}images/SDGs/goal-${goalNr}.webp`\"\n        alt=\"\"\n      />\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport { inject } from \"vue\";\n\ndefineProps({\n  sector: String,\n  SDGs: {\n    type: Array,\n    default: () => [],\n  },\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\n</script>\n\n<style lang=\"scss\" scoped>\n.sdg-panel-row {\n  display: flex;\n  align-items: center;\n  padding: 0.5rem 0;\n  \n  &:not(:last-child) {\n    border-bottom: 1px solid var(--white-25);\n  }\n\n  &__sector {\n    @include dida-s;\n\n    width: var(--column-1-width);\n    padding-right: 1.5rem;\n  }\n\n  &__sdgs {\n    display: flex;\n    gap: 0.5rem;\n\n    &__sdg {\n      width: 2.5rem;\n      height: 2.5rem;\n    }\n  }\n}\n</style>\n","import script from \"./SDGPanelRow.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./SDGPanelRow.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./SDGPanelRow.vue?vue&type=style&index=0&id=64fb6441&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-64fb6441\"]])\n\nexport default __exports__","import script from \"./SDGPanelContent.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./SDGPanelContent.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./SDGPanelContent.vue?vue&type=style&index=0&id=f68d3e2a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f68d3e2a\"]])\n\nexport default __exports__","<template>\n  <aside class=\"country-side-bar\">\n    <div class=\"country-side-bar__super-title\">\n      {{ $t(\"general.labels.developedIn\") }}\n    </div>\n\n    <SDGPanelContent\n      class=\"country-side-bar__panel\"\n      :country=\"$t(`countryMapData.${countryCode}.name`)\"\n      :sectors=\"$tm(`countryMapData.${countryCode}.sectors`)\"\n      :text=\"cardSubscript\"\n      :columnLabels=\"$tm('gemeral.labels.SDGLegend')\"\n    />\n\n    <ButtonScroll\n      class=\"country-side-bar__scroll-btn\"\n      v-if=\"smallscreen\"\n      @onScroll=\"scrollDown\"\n    />\n  </aside>\n</template>\n\n<script setup>\nimport SDGPanelContent from \"../charts/map/SDGPanelContent.vue\";\nimport ButtonScroll from \"./ButtonScroll.vue\";\n\ndefineProps({\n  smallscreen: Boolean,\n  cardSubscript: String,\n  countryCode: String,\n});\n\nfunction scrollDown() {\n  const firstContentEl = document.getElementById(\"country-content\");\n\n  if (firstContentEl) {\n    firstContentEl.scrollIntoView({ behavior: \"smooth\" });\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.country-side-bar {\n  color: var(--white-100);\n  background-image: var(--diag-gradient-alleanze-per-lo-sviluppo);\n  padding: var(--modal-padding);\n\n  .desktop &,\n  .large & {\n    height: 100%;\n    min-width: toRem(450);\n  }\n\n  .mobile &,\n  .tablet & {\n    --column-1-width: 100%;\n\n    padding-top: 1.5rem;\n    padding-bottom: 1.5rem;\n    margin-top: -0.4rem;\n  }\n\n  &__super-title {\n    @include dida-xs;\n\n    font-style: italic;\n    margin-bottom: 0.25rem;\n  }\n\n  &__panel {\n    padding-right: 3vw;\n  }\n\n  &__scroll-btn {\n    margin-top: 0.5rem;\n  }\n}\n</style>\n","import script from \"./CountrySideBar.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./CountrySideBar.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./CountrySideBar.vue?vue&type=style&index=0&id=06b37ca4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-06b37ca4\"]])\n\nexport default __exports__","import script from \"./CountryModalFooter.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./CountryModalFooter.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./CountryModalFooter.vue?vue&type=style&index=0&id=b1b06832&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b1b06832\"]])\n\nexport default __exports__","<template>\n  <div id=\"country-content\" class=\"country-content\">\n    <img\n      v-if=\"!smallscreen\"\n      :src=\"`${$baseUrl}images/${imagePath}.webp`\"\n      alt=\"\"\n      class=\"country-content__img\"\n    />\n\n    <div class=\"country-content__content-wrapper\">\n      <InterviewContent\n        class=\"country-content__content\"\n        :title=\"title\"\n        :content=\"content\"\n        :withScrollbar=\"false\"\n      />\n    </div>\n\n    <CountryModalFooter\n      :projectAmount=\"projectAmount\"\n      :currentProjectIndex=\"currentProjectIndex\"\n      @onNavigate=\"$emit('onNavigate', $event)\"\n    />\n  </div>\n</template>\n\n<script setup>\nimport { inject } from \"vue\";\n\nimport InterviewContent from \"./InterviewContent.vue\";\nimport CountryModalFooter from \"./CountryModalFooter.vue\";\n\ndefineProps({\n  countryCode: String,\n  title: String,\n  imagePath: String,\n  content: Object,\n  projectAmount: Number,\n  currentProjectIndex: Number,\n  smallscreen: Boolean,\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\n</script>\n\n<style lang=\"scss\" scoped>\n.country-content {\n  --footer-height: #{toRem(71)};\n  --padding-top: 40%;\n\n  position: relative;\n\n  &__img {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 50%;\n    object-fit: cover;\n  }\n\n  &__content-wrapper {\n    position: relative;\n    z-index: 1;\n\n    .desktop &,\n    .large & {\n      padding: var(--padding-top) 7vw 0;\n      height: calc(100% - var(--footer-height));\n      overflow: auto;\n    }\n\n    .country-content__content {\n      padding: 0;\n      overflow: initial;\n\n      .desktop &,\n      .large & {\n        height: calc(100% - var(--padding-top));\n      }\n\n      ::v-deep(.interview-content__inner) {\n        background-color: var(--white-100);\n\n        .desktop &,\n        .large & {\n          padding: 2.5rem;\n          border: 1px solid var(--page-color);\n          border-bottom: none;\n        }\n\n        .mobile &,\n        .tablet & {\n          padding: 2.5rem var(--page-padding-h);\n        }\n      }\n    }\n  }\n}\n</style>\n","import script from \"./CountryContent.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./CountryContent.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./CountryContent.vue?vue&type=style&index=0&id=1f9ada27&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1f9ada27\"]])\n\nexport default __exports__","<template>\n  <TvaModal :show=\"show\" @onClose=\"$emit('onClose')\">\n    <article class=\"country-modal\">\n      <img\n        v-if=\"smallscreen\"\n        :src=\"`${$baseUrl}images/${imagePath}.webp`\"\n        alt=\"\"\n        class=\"country-modal__img\"\n      />\n      <CountrySideBar\n        :cardSubscript=\"cardSubscript\"\n        :countryCode=\"countryCode\"\n        :smallscreen=\"smallscreen\"\n      />\n      <CountryContent\n        :title=\"title\"\n        :content=\"content\"\n        :countryCode=\"countryCode\"\n        :projectAmount=\"projectAmount\"\n        :currentProjectIndex=\"currentProjectIndex\"\n        :imagePath=\"imagePath\"\n        :smallscreen=\"smallscreen\"\n        @onNavigate=\"$emit('onNavigate', $event)\"\n      />\n    </article>\n  </TvaModal>\n</template>\n\n<script setup>\nimport { computed, inject } from \"vue\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\n\nimport TvaModal from \"./TvaModal.vue\";\nimport CountrySideBar from \"./CountrySideBar.vue\";\nimport CountryContent from \"./CountryContent.vue\";\n\ndefineProps({\n  show: Boolean,\n  cardSubscript: String,\n  countryCode: String,\n  title: String,\n  imagePath: String,\n  content: Object,\n  projectAmount: Number,\n  currentProjectIndex: Number,\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\nconst { $tvaMq } = useTvaMq();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n</script>\n\n<style lang=\"scss\" scoped>\n.country-modal {\n  width: 100vw;\n  height: calc(var(--vh) * 100);\n  background-color: var(--white-100);\n\n  .desktop &,\n  .large & {\n    display: flex;\n  }\n\n  .mobile &,\n  .tablet & {\n    padding-top: toRem(52);\n    overflow: scroll;\n  }\n\n  &__img {\n    width: 100%;\n    height: 25%;\n    object-fit: cover;\n  }\n\n  > :first-child {\n    .desktop &,\n    .large & {\n      width: 30%;\n    }\n  }\n\n  > :last-child {\n    .desktop &,\n    .large & {\n      width: 70%;\n    }\n  }\n}\n</style>\n","import script from \"./CountryModal.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./CountryModal.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./CountryModal.vue?vue&type=style&index=0&id=0d6c2f21&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-0d6c2f21\"]])\n\nexport default __exports__","<template>\n  <div>\n    <CardSlider\n      cardType=\"ImageCard\"\n      :title=\"title\"\n      :generalCardLabel=\"$t('general.labels.project')\"\n      :cards=\"countryCards\"\n      white\n      @onCardClick=\"showModal\"\n    />\n\n    <CountryModal\n      :show=\"!!countryContents[currentProjectIndex]\"\n      v-bind=\"countryContents[currentProjectIndex]\"\n      :imagePath=\"`${$t('translation.' + currentPage)}_project-cover-${currentProjectIndex + 1}`\"\n      :projectAmount=\"countryCards.length\"\n      :currentProjectIndex=\"currentProjectIndex\"\n      @onClose=\"showModal(-1)\"\n      @onNavigate=\"toProject\"\n    />\n  </div>\n</template>\n\n<script setup>\nimport { computed, ref } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport CardSlider from \"./CardSlider.vue\";\nimport CountryModal from \"../general/CountryModal.vue\";\n\nconst props = defineProps({\n  title: String,\n  currentPage: String,\n});\n\nconst { t, tm } = useI18n();\nconst currentProjectIndex = ref(-1);\n\nconst countryContents = computed(() => tm(\"countryModalData\"));\n\nconst countryCards = computed(() => {\n  return countryContents.value.map((content, i) => ({\n    ...content.cardContent,\n    imagePath: `${t('translation.' + props.currentPage)}_project-card-${i + 1}`,\n  }));\n});\n\nfunction showModal(cardIndex) {\n  currentProjectIndex.value = cardIndex;\n}\n\nfunction toProject(navigation) {\n  currentProjectIndex.value = currentProjectIndex.value + navigation;\n}\n</script>\n\n<style lang=\"scss\" scoped></style>\n","import script from \"./CountrySlider.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./CountrySlider.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n  <div class=\"social-share\">\n    <button\n      v-for=\"item of $tm('metaContent.socialMedia')\"\n      class=\"social-share__button\"\n      :key=\"item.social\"\n      :aria-label=\"item.social\"\n      :icon=\"icons[item.social]\"\n    >\n      <ShareNetwork\n        :network=\"item.social\"\n        :url=\"socialUrl\"\n        :title=\"$t('metaContent.title')\"\n        :description=\"$t('metaContent.description')\"\n      >\n        <icon\n          class=\"social-share__content__icon\"\n          :data=\"icons[item.social]\"\n          width=\"0.75rem\"\n          height=\"0.75rem\"\n          :color=\"`var(--${smallscreen ? 'white' : 'white'}-100)`\"\n        />\n      </ShareNetwork>\n    </button>\n  </div>\n</template>\n\n<script setup>\nimport { facebook, twitter, linkedin } from \"@/assets/icons/icons.js\";\n\ndefineProps({\n  smallscreen: Boolean,\n});\n\n// TODO: what should this be?\nconst socialUrl = window.location.href;\nconst icons = { facebook, twitter, linkedin };\n</script>\n\n<style lang=\"scss\" scoped>\n.social-share {\n  position: relative;\n  display: flex;\n  gap: 0.5rem;\n\n  .mobile &,\n  .tablet & {\n    justify-content: center;\n    gap: 1.75rem;\n    .social-share__button {\n      border-color: var(--white-100);\n    }\n  }\n\n  &__button {\n    border-radius: 50%;\n    width: toRem(32);\n    height: toRem(32);\n    border: 1px solid var(--scala-grigi-gray-2);\n    backdrop-filter: blur(10px);\n    display: flex;\n    justify-content: center;\n    transition: border-color 0.3s;\n\n    &:hover {\n      border-color: var(--white-100);\n    }\n  }\n}\n</style>\n","import script from \"./SocialSharing.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./SocialSharing.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./SocialSharing.vue?vue&type=style&index=0&id=184ad2ef&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-184ad2ef\"]])\n\nexport default __exports__","<template>\n  <div class=\"home-content\">\n    <LanguageSwitcher v-if=\"!smallscreen\" :languages=\"languages\" />\n\n    <div class=\"home-content__mid\">\n      <img\n        :src=\"`${$baseUrl}images/logo-white.svg`\"\n        alt=\"\"\n        class=\"home-content__mid__logo\"\n      />\n\n      <h1 class=\"home-content__mid__title\">\n        {{ title }}\n        <div class=\"home-content__mid__title__sub\">\n          {{ subtitle }}\n        </div>\n      </h1>\n\n      <SocialSharing\n        class=\"home-content__mid__sharing\"\n        :smallscreen=\"smallscreen\"\n      />\n    </div>\n\n    <ButtonScroll @onScroll=\"scrollDown\" />\n  </div>\n</template>\n\n<script setup>\nimport { inject } from \"vue\";\n\nimport SocialSharing from \"./SocialSharing.vue\";\nimport ButtonScroll from \"./ButtonScroll.vue\";\nimport LanguageSwitcher from \"./LanguageSwitcher.vue\";\n\ndefineProps({\n  title: String,\n  subtitle: String,\n  languages: {\n    type: Array,\n    default: () => [],\n  },\n  smallscreen: Boolean,\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\n\nfunction scrollDown() {\n  const firstContentEl = document.getElementById(\"text-section-0\");\n\n  if (firstContentEl) {\n    firstContentEl.scrollIntoView({ behavior: \"smooth\" });\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.home-content {\n  position: relative;\n  background-color: var(--black-25);\n  backdrop-filter: blur(5px);\n  border-left: 1px solid var(--white-100);\n  border-right: 1px solid var(--white-100);\n  color: var(--white-100);\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n\n  .desktop &,\n  .large & {\n    margin-left: var(--page-padding-h);\n    width: var(--left-space);\n    height: 100%;\n    padding: 1.5rem 2rem 1.5rem 3.5vw;\n    align-items: flex-start;\n  }\n\n  .tablet &,\n  .mobile & {\n  \n    color: var(--white-100);\n    background: linear-gradient(115.66deg, #025E6B 18.8%, #4FA1AD 84.48%);\n    height: 50%;\n    text-align: center;\n    align-items: center;\n    padding: 3vh 1.5rem 2vh 1.5rem;\n    .home-content__mid {\n      &__logo {\n      margin-bottom: toRem(15);\n    }\n    }\n  }\n\n  .mobile & {\n    padding: 3vh 1.5rem;\n  }\n\n  &__mid {\n    &__logo {\n      margin-bottom: toRem(35);\n    }\n\n    &__title {\n      @include h-h-1;\n\n      max-width: toRem(240);\n\n      &__sub {\n        @include dida-m;\n\n        font-family: \"Open Sans\";\n        margin-top: 0.25rem;\n\n        .desktop &,\n        .large & {\n          margin-bottom: toRem(35);\n        }\n\n        .mobile &,\n        .tablet & {\n          margin-bottom: 1.25rem;\n        }\n      }\n    }\n\n    &__sharing {\n      margin-bottom: 0.5rem;\n    }\n\n    .tablet &,\n    .mobile & {\n      &__sharing {\n        margin-top: toRem(35);\n      }\n    }\n  }\n}\n</style>\n","import script from \"./HomeHeroContent.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./HomeHeroContent.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./HomeHeroContent.vue?vue&type=style&index=0&id=1fea30b6&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-1fea30b6\"]])\n\nexport default __exports__","<template>\n  <section class=\"home-hero\" id=\"home-hero\">\n    <TvaBackgroundVideo\n      class=\"home-hero__video\"\n      :pathToVideo=\"`home_${i18n.locale.value}-0`\"\n      autoPlay\n    />\n    <HomeHeroContent\n      class=\"home-hero__content\"\n      :title=\"title\"\n      :subtitle=\"subtitle\"\n      :languages=\"languages\"\n      :smallscreen=\"smallscreen\"\n    />\n  </section>\n</template>\n\n<script setup>\nimport { computed } from \"vue\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\nimport { useI18n } from \"vue-i18n\";\n\nimport HomeHeroContent from \"../general/HomeHeroContent.vue\";\nimport TvaBackgroundVideo from \"../general/TvaBackgroundVideo.vue\";\n\ndefineProps({\n  title: String,\n  subtitle: String,\n  languages: {\n    type: Array,\n    default: () => [],\n  },\n});\n\nconst { $tvaMq } = useTvaMq();\nconst i18n = useI18n();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n</script>\n\n<style lang=\"scss\" scoped>\n.home-hero {\n  width: 100%;\n  height: calc(var(--vh) * 100);\n\n  &__video {\n    .desktop &,\n    .large & {\n      height: calc(var(--vh) * 100);\n    }\n  }\n\n  .mobile &,\n  .tablet & {\n    @include home-side-stripes;\n    &::before,\n    &::after {\n      height: 45%;\n    }\n\n    display: flex;\n    flex-direction: column;\n    justify-content: flex-end;\n\n    &__video {\n      top: 0;\n      height: 45%;\n    }\n    &__content {\n      height: 55%;\n    }\n  }\n}\n</style>\n","import script from \"./HomeHero.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./HomeHero.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./HomeHero.vue?vue&type=style&index=0&id=97a98b92&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-97a98b92\"]])\n\nexport default __exports__","import script from \"./TextQuote.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TextQuote.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./TextQuote.vue?vue&type=style&index=0&id=5a1d105b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5a1d105b\"]])\n\nexport default __exports__","<template>\n  <section class=\"interview-section\">\n    <div class=\"interview-section__outer\">\n      <ImageCard\n        class=\"interview-section__outer__img\"\n        v-bind=\"$tm(`${interviewPath}.cardContent`)\"\n        :cardType=\"$t('general.labels.interview')\"\n        :imagePath=\"imagePath\"\n        @onClick=\"showModal(true)\"\n      />\n\n      <p\n        class=\"interview-section__outer__card-text\"\n        v-html=\"$t(`${interviewPath}.cardSubscript`)\"\n      />\n    </div>\n\n    <div class=\"interview-section__inner\">\n      <TextQuote\n        class=\"interview-section__inner__text\"\n        :paragraphs=\"paragraphs\"\n      />\n      <ButtonPrimary\n        :label=\"$t('general.ctas.readInterview')\"\n        @onClick=\"showModal(true)\"\n      />\n    </div>\n\n    <InterviewModal\n      :show=\"modalShown\"\n      :cardSubscript=\"$t(`${interviewPath}.cardSubscript`)\"\n      :cardContent=\"$tm(`${interviewPath}.cardContent`)\"\n      :title=\"$tm(`${interviewPath}.title`)\"\n      :content=\"$tm(`${interviewPath}.content`)\"\n      :imagePath=\"imagePath\"\n      :internalUrlParam=\"currentPage\"\n      @onClose=\"showModal(false)\"\n      @onNavigate=\"navigateFromModal\"\n    />\n  </section>\n</template>\n\n<script setup>\nimport { ref, computed } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport ButtonPrimary from \"../general/ButtonPrimary.vue\";\nimport ImageCard from \"../general/ImageCard.vue\";\nimport TextQuote from \"../general/TextQuote.vue\";\nimport InterviewModal from \"../general/InterviewModal.vue\";\n\nconst props = defineProps({\n  id: String,\n  currentPage: String,\n  paragraphs: {\n    type: Array,\n    default: () => [],\n  },\n});\n\nconst { t } = useI18n();\n\nconst modalShown = ref(false);\nconst interviewIndex = computed(\n  () => props.id.split(\"-\")[props.id.split(\"-\").length - 1]\n);\n\nconst interviewPath = computed(() => {\n  return `interviews.${props.currentPage}[${interviewIndex.value}]`;\n});\n\nconst imagePath = computed(() => {\n  return `${t(\"translation.\" + props.currentPage)}_interviste-${\n    +interviewIndex.value + 1\n  }`;\n});\n\nfunction showModal(value) {\n  modalShown.value = value;\n}\n\nfunction navigateFromModal() {\n  modalShown.value = false;\n\n  // Wait until fade animation is done before scrolling\n  setTimeout(() => {\n    window.scrollTo({ top: 0, behavior: \"smooth\" });\n  }, 500);\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.interview-section {\n  color: var(--white-100);\n  padding: 0 var(--page-padding-h);\n  background-image: var(--page-gradient);\n  display: flex;\n  position: relative;\n  z-index: 1;\n\n  .mobile &,\n  .tablet & {\n    flex-direction: column;\n  }\n\n  .mobile & {\n    --max-card-width: 100%;\n  }\n\n  &__outer {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-end;\n\n    .desktop &,\n    .large & {\n      transform: translateY(-2.5rem);\n      width: var(--left-space);\n      flex-shrink: 0;\n    }\n\n    &__img {\n      .mobile &,\n      .tablet & {\n        margin-top: -2rem;\n      }\n\n      .tablet & {\n        margin-left: toRem(48);\n      }\n    }\n\n    &__card-text {\n      max-width: var(--max-card-width);\n      padding-top: 1.5rem;\n      padding-right: 2rem;\n\n      .mobile &,\n      .tablet & {\n        @include p-s;\n\n        padding: var(--page-padding-h);\n        border-left: 1px solid var(--white-100);\n        border-right: 1px solid var(--white-100);\n      }\n\n      .tablet & {\n        max-width: 100%;\n        border: none;\n      }\n    }\n\n    .tablet & {\n      align-items: flex-start;\n      border-right: 1px solid var(--white-100);\n      border-left: 1px solid var(--white-100);\n    }\n  }\n\n  &__inner {\n    border-left: 1px solid var(--white-100);\n    border-right: 1px solid var(--white-100);\n    position: relative;\n\n    .desktop &,\n    .large & {\n      padding: toRem(100) toRem(53);\n    }\n\n    .mobile &,\n    .tablet & {\n      padding: var(--page-padding-h);\n      padding-bottom: 2rem;\n\n      &::before {\n        content: \"\";\n        position: absolute;\n        top: 0;\n        left: var(--page-padding-h);\n        background-color: var(--white-40);\n        width: calc(100% - var(--page-padding-h) * 2);\n        height: 1px;\n      }\n    }\n\n    &__text {\n      margin-bottom: 1.75rem;\n    }\n  }\n}\n</style>\n","import script from \"./InterviewSection.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./InterviewSection.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./InterviewSection.vue?vue&type=style&index=0&id=5ebf9254&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5ebf9254\"]])\n\nexport default __exports__","<template>\n  <section\n    ref=\"textSectionEl\"\n    :class=\"[\n      'text-section',\n      {\n        home: isHome,\n        page: !isHome,\n        grey,\n        overflow: overflow && sectionCroppedHeight,\n        top: top && overflow,\n        'no-lines': noLines,\n      },\n    ]\"\n    :style=\"{\n      '--section-height': sectionCroppedHeight + 'px',\n      '--overflow-amount': overflowAmount + 'px',\n    }\"\n  >\n    <component\n      v-if=\"sideComponent\"\n      class=\"text-section__side-component\"\n      :is=\"textComponents[sideComponent.component]\"\n      v-bind=\"sideComponent.content\"\n      isSideComponent\n    />\n\n    <div class=\"text-section__inner-content\">\n      <component\n        v-for=\"component of components\"\n        :key=\"component.id\"\n        :is=\"textComponents[component.component]\"\n        v-bind=\"component.content\"\n        @vnodeMounted=\"childMounted\"\n        inTextSection\n      />\n    </div>\n  </section>\n</template>\n\n<script setup>\nimport { computed, ref, watch } from \"vue\";\nimport { useElementBounding } from \"@vueuse/core\";\n\nimport TextBlock from \"../general/TextBlock.vue\";\nimport TextQuote from \"../general/TextQuote.vue\";\nimport TextTitle from \"../general/TextTitle.vue\";\n\nconst textComponents = {\n  TextBlock,\n  TextQuote,\n  TextTitle,\n};\n\nconst props = defineProps({\n  components: {\n    type: Array,\n    default: () => [],\n  },\n  sideComponent: Object,\n  currentPage: String,\n  grey: Boolean,\n  noLines: Boolean,\n  overflow: Boolean,\n  top: Boolean,\n});\n\nconst overflowAmount = 100;\nconst textSectionEl = ref(null);\nconst sectionCroppedHeight = ref(0);\nconst mountedChildren = ref([]);\n\nconst { height } = useElementBounding(textSectionEl);\n\nconst isHome = computed(() => props.currentPage === \"home\");\n\nwatch(\n  () => mountedChildren.value,\n  () => {\n    if (\n      props.overflow &&\n      mountedChildren.value.length === props.components.length\n    ) {\n      sectionCroppedHeight.value = height.value - overflowAmount;\n    }\n  }\n);\n\nfunction childMounted() {\n  mountedChildren.value = [...mountedChildren.value, true];\n}\n</script>\n\n<style lang=\"scss\">\n.text-section + .text-section {\n    .text-section__inner-content, .text-section__side-component {\n      padding-top: 0 !important;\n    }\n  }\n</style>\n\n<style lang=\"scss\" scoped>\n.text-section {\n  position: relative;\n  padding-left: calc(var(--page-padding-h) + var(--left-space));\n  padding-right: var(--page-padding-h);\n  background-color: var(--white-100);\n  z-index: 1;\n  width: 100%; // We set this mostly so that it is never larger!\n\n  \n\n  &.home:not(.no-lines),\n  .mobile &,\n  .tablet & {\n    &::before {\n      content: \"\";\n      position: absolute;\n      width: 1rem;\n      height: 100%;\n      left: var(--page-padding-h);\n      border-left: 1px solid var(--page-color, var(--scala-grigi-gray-3));\n    }\n  }\n\n  &.grey {\n    background-color: var(--scala-grigi-gray-5);\n\n    .mobile & {\n      border-top: 1px solid var(--scala-grigi-gray-2);\n    }\n\n    .text-section__inner-content {\n      background-color: var(--scala-grigi-gray-5);\n    }\n\n    .text-section__inner-content > * {\n      background-color: var(--scala-grigi-gray-5);\n    }\n  }\n\n  &.no-lines {\n    --page-color: transparent;\n\n    &.grey {\n      --page-color: var(--scala-grigi-gray-5);\n    }\n  }\n\n  &.overflow {\n    .desktop &,\n    .large & {\n      height: var(--section-height);\n      overflow: visible;\n\n      .text-section__inner-content {\n        border-bottom: 1px solid var(--page-color, var(--scala-grigi-gray-3));\n      }\n    }\n\n    &.top {\n      .desktop &,\n      .large & {\n        .text-section__inner-content {\n          transform: translateY(calc(var(--overflow-amount) * -1));\n          border-top: 1px solid var(--page-color, var(--scala-grigi-gray-3));\n        }\n      }\n    }\n  }\n\n  &__side-component {\n    padding-top: 3vh;\n\n    .desktop &,\n    .large & {\n      position: absolute;\n      left: var(--page-padding-h);\n      max-width: var(--left-space);\n      top: toRem(50);\n      padding-right: 1rem;\n    }\n\n    .mobile &,\n    .tablet & {\n      position: relative;\n      border-right: 1px solid var(--page-color, var(--scala-grigi-gray-3));\n      padding-top: 5vh;\n      padding-bottom: 0;\n    }\n  }\n\n  &__inner-content {\n    background-color: var(--white-100);\n    border-left: 1px solid var(--page-color, var(--scala-grigi-gray-3));\n\n    .page & {\n      border-right: 1px solid var(--page-color, var(--scala-grigi-gray-3));\n    }\n\n    .desktop &,\n    .large & {\n      padding-top: 3vh;\n    }\n\n    .mobile &,\n    .tablet & {\n      border-right: 1px solid var(--page-color, var(--scala-grigi-gray-3));\n      border-left: none;\n      padding-bottom: 1.5rem;\n    }\n\n    > * {\n      background-color: var(--white-100);\n\n      &:not(:first-child) {\n        .desktop &,\n        .large & {\n          padding-top: 1.5rem;\n        }\n      }\n\n      &:not(:last-child) {\n        .desktop &,\n        .large & {\n          padding-bottom: 1.5rem;\n        }\n      }\n    }\n  }\n}\n</style>\n","import script from \"./TextSection.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TextSection.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./TextSection.vue?vue&type=style&index=0&id=223c36ff&lang=scss\"\nimport \"./TextSection.vue?vue&type=style&index=1&id=223c36ff&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-223c36ff\"]])\n\nexport default __exports__","import script from \"./TextSectionGrey.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TextSectionGrey.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","import script from \"./TextSectionWhite.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TextSectionWhite.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","import script from \"./TextSectionOverflow.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./TextSectionOverflow.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n  <img\n    class=\"image-section\"\n    :src=\"`${$baseUrl}images/${imageName || 'shinsekai'}.webp`\"\n    alt=\"\"\n  />\n</template>\n\n<script setup>\nimport { inject } from \"vue\";\n\ndefineProps({\n  imageName: String,\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\n</script>\n\n<style lang=\"scss\" scoped>\n.image-section {\n  width: 100%;\n  height: 80vh;\n  object-fit: cover;\n}\n</style>\n","import script from \"./ImageSection.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./ImageSection.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./ImageSection.vue?vue&type=style&index=0&id=94de4128&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-94de4128\"]])\n\nexport default __exports__","<template>\n  <TvaBackgroundVideo\n    class=\"bg-video-section\"\n    autoPlay\n    :pathToVideo=\"videoPath\"\n  />\n</template>\n\n<script setup>\nimport { computed } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport TvaBackgroundVideo from \"../general/TvaBackgroundVideo.vue\";\n\nconst props = defineProps({\n  currentPage: String,\n  id: String,\n});\n\nconst i18n = useI18n();\n\nconst videoPath = computed(() => {\n  const videoNr = props.id.split(\"-\")[props.id.split(\"-\").length - 1];\n  return `${props.currentPage}_bg-${i18n.locale.value}-${videoNr}`;\n});\n</script>\n\n<style lang=\"scss\" scoped>\n.bg-video-section {\n  width: 100%;\n  position: relative;\n\n  .desktop &,\n  .large & {\n    height: 80vh;\n  }\n\n  ::v-deep(video) {\n    width: 100%;\n    height: auto;\n\n    .tablet &, .mobile & {\n      position: relative;\n      top: 0;\n      left: 0;\n      transform: initial;\n\n    }\n  }\n}\n</style>\n","import script from \"./BGVideoSection.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./BGVideoSection.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./BGVideoSection.vue?vue&type=style&index=0&id=312c63ca&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-312c63ca\"]])\n\nexport default __exports__","<template>\n  <li\n    class=\"kpi-item\"\n    :style=\"{\n      '--padding-factor-left': currentPageIndex > midPageIndex ? 0.75 : 0.25,\n      '--padding-factor-right': currentPageIndex < midPageIndex ? 0.75 : 0.25,\n    }\"\n  >\n    <div class=\"kpi-item__value\">{{ value }}</div>\n    <div class=\"kpi-item__label\">{{ label }}</div>\n  </li>\n</template>\n\n<script setup>\nimport { computed } from \"vue\";\n\nconst props = defineProps({\n  label: String,\n  value: String,\n  currentPageIndex: Number,\n  totalPages: Number,\n});\n\nconst midPageIndex = computed(() => Math.floor(props.totalPages / 2));\n</script>\n\n<style lang=\"scss\" scoped>\n.kpi-item {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 9.5vh 1rem;\n  text-align: center;\n\n  .desktop &,\n  .large & {\n    &:first-child {\n      padding-left: calc(var(--page-padding-h) * var(--padding-factor-left));\n    }\n\n    &:last-child {\n      padding-right: calc(var(--page-padding-h) * var(--padding-factor-right));\n    }\n  }\n\n  .mobile &,\n  .tablet & {\n    border-bottom: 1px solid var(--scala-grigi-gray-3);\n  }\n\n  &__value {\n    @include kpi-l;\n\n    color: var(--page-color);\n  }\n\n  &__label {\n    @include dida-s;\n\n    max-width: toRem(190);\n  }\n\n  &:not(:last-child) {\n    .desktop &,\n    .large & {\n      border-right: 1px solid var(--scala-grigi-gray-3);\n    }\n  }\n}\n</style>\n","import script from \"./KPIItem.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./KPIItem.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./KPIItem.vue?vue&type=style&index=0&id=15188514&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-15188514\"]])\n\nexport default __exports__","import script from \"./KPIList.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./KPIList.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./KPIList.vue?vue&type=style&index=0&id=dd92bf68&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-dd92bf68\"]])\n\nexport default __exports__","<template>\n  <section class=\"kpi-section\">\n    <KPIList\n      v-for=\"row of kpiRows\"\n      :key=\"row.title\"\n      :title=\"row.title\"\n      :items=\"row.items\"\n      :currentPageIndex=\"currentPageIndex\"\n      :totalPages=\"pageLinks.length\"\n    />\n  </section>\n</template>\n\n<script setup>\nimport { useI18n } from \"vue-i18n\";\nimport { computed } from 'vue';\n\nimport KPIList from \"../general/KPIList.vue\";\n\n\nconst props = defineProps({\n  kpiRows: {\n    type: Array,\n    default: () => [],\n  },\n  currentPage: String\n});\n\nconst { tm } = useI18n();\nconst pageLinks = computed(() => Object.keys(tm('navigation')));\nconst currentPageIndex = computed(() => pageLinks.value.indexOf(props.currentPage))\n</script>\n\n<style lang=\"scss\" scoped>\n.kpi-section {\n  position: relative;\n  border-top: 1px solid var(--page-color);\n}\n</style>\n","import script from \"./KPISection.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./KPISection.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./KPISection.vue?vue&type=style&index=0&id=a09a64ca&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-a09a64ca\"]])\n\nexport default __exports__","<template>\n  <div class=\"podcast-panel\">\n    <SquareIconButton\n      class=\"podcast-panel__close-btn\"\n      :icon=\"close\"\n      white\n      @onClick=\"$emit('onClose')\"\n    />\n\n    <div class=\"podcast-panel__super-title\">\n      {{ interviewee }}\n    </div>\n    <div class=\"podcast-panel__title\">\n      {{ title }}\n    </div>\n    <button class=\"podcast-panel__play-btn\" @click=\"toggleAudio\">\n      <icon :data=\"playing ? pause : play\" color=\"var(--primary-yellow)\" />\n    </button>\n\n    <div id=\"waveform\" class=\"podcast-panel__wave\" />\n\n    <div class=\"podcast-panel__metadata\">\n      <div>{{ duration }}</div>\n      <div>{{ currentTime }}</div>\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport { computed, onMounted, onBeforeUnmount, inject, ref } from \"vue\";\nimport WaveSurfer from \"wavesurfer.js\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\nimport { play, pause, close } from \"@/assets/icons/icons.js\";\n\nimport SquareIconButton from \"./SquareIconButton.vue\";\n\nconst $baseUrl = inject(\"$baseUrl\");\nconst { $tvaMq } = useTvaMq();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n\nconst wavesurfer = ref(null);\nconst playing = ref(true);\n\nconst durationInSeconds = ref(0);\nconst duration = computed(() => secondsToMinuteString(durationInSeconds.value));\n\nconst currentTimeInSeconds = ref(0);\nconst currentTime = computed(() =>\n  secondsToMinuteString(currentTimeInSeconds.value)\n);\n\nconst props = defineProps({\n  title: String,\n  audioFileName: String,\n  interviewee: String,\n});\n\nonMounted(() => {\n  wavesurfer.value = WaveSurfer.create({\n    container: \"#waveform\",\n    waveColor: \"#ffd50080\",\n    progressColor: \"#ffd500\",\n    barWidth: smallscreen.value ? 1 : 3,\n    barHeight: 1, // the height of the wave\n    height: smallscreen.value ? 50 : 60,\n    barGap: null, // the optional spacing between bars of the wave, if not provided will be calculated in legacy format\n  });\n\n  wavesurfer.value.load(`${$baseUrl}audio/${props.audioFileName}.mp3`);\n\n  wavesurfer.value.on(\"ready\", function () {\n    durationInSeconds.value = wavesurfer.value.backend.buffer.duration;\n\n    duration.value = secondsToMinuteString(\n      wavesurfer.value.backend.buffer.duration\n    );\n    wavesurfer.value.play();\n  });\n\n  wavesurfer.value.on(\"audioprocess\", function () {\n    currentTimeInSeconds.value = wavesurfer.value.getCurrentTime();\n  });\n});\n\nonBeforeUnmount(() => wavesurfer.value.stop());\n\nfunction toggleAudio() {\n  if (playing.value) {\n    wavesurfer.value.pause();\n  } else {\n    wavesurfer.value.play();\n  }\n  playing.value = !playing.value;\n}\n\nfunction secondsToMinuteString(timeInSeconds) {\n  const minutes = Math.floor(timeInSeconds / 60);\n  const seconds = Math.floor(minutes ? timeInSeconds % 60 : timeInSeconds);\n\n  return `${minutes.toString().padStart(2, \"0\")}:${seconds\n    .toString()\n    .padStart(2, \"0\")}`;\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.podcast-panel {\n  --panel-padding: #{toRem(26)};\n  --wave-height: 60px;\n\n  background-color: var(--black-100);\n  position: fixed;\n  z-index: 2;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  min-height: 20vh;\n  color: var(--white-100);\n  text-align: center;\n  padding: var(--panel-padding) 0;\n\n  .desktop &,\n  .large & {\n    z-index: 6;\n  }\n\n  &__close-btn {\n    position: absolute;\n    right: 1.5rem;\n    top: 1.5rem;\n    z-index: 1;\n\n    .mobile &,\n    .tablet & {\n      right: 0.5rem;\n      top: 0.5rem;\n    }\n\n    ::v-deep(.svg-icon path) {\n      fill: var(--white-100);\n    }\n  }\n\n  &__super-title {\n    @include dida-s;\n\n    opacity: 0.7;\n  }\n\n  &__title {\n    @include title-s;\n    padding-bottom: 1rem;\n  }\n\n  &__play-btn {\n    position: absolute;\n    top: calc(var(--panel-padding) + var(--wave-height) * 0.5 + 3.25rem);\n    left: calc(25% - 3rem);\n\n    .mobile & {\n      top: calc(var(--panel-padding) + var(--wave-height) * 0.5 + 4.75rem);\n      left: 1.5rem;\n    }\n  }\n\n  &__wave {\n    cursor: pointer;\n\n    .desktop &,\n    .large & {\n      width: 50%;\n      min-width: toRem(420);\n      margin: 0 auto;\n    }\n\n    .mobile &,\n    .tablet & {\n      width: calc(100% - 5rem);\n      margin: 0 1.5rem 0 auto;\n    }\n  }\n\n  &__metadata {\n    padding-top: 0.75rem;\n    margin: 0 auto;\n    display: flex;\n    justify-content: space-between;\n    font-family: \"EniTabBold\";\n    font-size: toRem(12);\n    line-height: toRem(13);\n    letter-spacing: -0.005em;\n\n    .desktop &,\n    .large & {\n      width: 50%;\n      min-width: toRem(420);\n    }\n\n    .mobile &,\n    .tablet & {\n      width: 100%;\n      padding: 0 1.5rem;\n    }\n  }\n}\n</style>\n","import script from \"./PodcastPanel.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./PodcastPanel.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./PodcastPanel.vue?vue&type=style&index=0&id=f5975828&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f5975828\"]])\n\nexport default __exports__","<template>\n  <section class=\"podcast-section\">\n    <div class=\"podcast-section__content\">\n      <MediaInfo\n        class=\"podcast-section__content__info\"\n        :title=\"title\"\n        :mediaType=\"$t('general.labels.podcast')\"\n        :introText=\"introText\"\n        :icon=\"audio\"\n        iconSize=\"1.4rem\"\n        @playMedia=\"playMedia\"\n      >\n        <MediaTime :durationInSeconds=\"audioDuration\" />\n      </MediaInfo>\n\n      <CtaExtra\n        v-if=\"currentPage === 'download-multimedia'\"\n        class=\"podcast-section__content__extra\"\n        black\n        :internalUrlParam=\"relatedPage\"\n      />\n    </div>\n\n    <Transition name=\"fade\">\n      <PodcastPanel\n        v-if=\"playing\"\n        :title=\"title\"\n        :audioFileName=\"audioFileName\"\n        :interviewee=\"interviewee\"\n        @onClose=\"playing = false\"\n      />\n    </Transition>\n  </section>\n</template>\n\n<script setup>\nimport { ref, onMounted, inject, computed } from \"vue\";\nimport { pushData } from \"@/utilities/analytics-functions.js\";\n\nimport MediaInfo from \"../general/MediaInfo.vue\";\nimport MediaTime from \"../general/MediaTime.vue\";\nimport CtaExtra from \"../general/CtaExtra.vue\";\nimport PodcastPanel from \"../general/PodcastPanel.vue\";\n\nimport { audio } from \"@/assets/icons/icons.js\";\n\nconst props = defineProps({\n  title: String,\n  introText: String,\n  interviewee: String,\n  currentPage: String,\n  relatedPage: String\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\nconst playing = ref(false);\nconst audioDuration = ref(0);\n\n// const audioFileName = computed(() => `${props.currentPage}_podcast`)\nconst audioFileName = computed(() => `eccellenza-operativa_podcast`);\n\nonMounted(() => getPodcastDuration());\n\nfunction playMedia() {\n  playing.value = true;\n  pushData(\n    \"podcast\",\n    `${$baseUrl}audio/${audioFileName.value}.mp3`,\n    props.title\n  );\n}\n\nfunction getPodcastDuration() {\n  const audioEl = new Audio(`${$baseUrl}audio/${audioFileName.value}.mp3`);\n\n  audioEl.onloadeddata = () => {\n    audioDuration.value = audioEl.duration;\n  };\n\n  audioEl.remove();\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.podcast-section {\n  --podcast-border: 1px solid var(--scala-grigi-gray-2);\n\n  padding: 0 var(--page-padding-h);\n  background: var(--page-gradient);\n  color: var(--white-100);\n\n  .download-multimedia & {\n    background: var(--white-100);\n    border-top: var(--podcast-border);\n    border-bottom: var(--podcast-border);\n    color: var(--black-100);\n  }\n\n  &__content {\n    padding: 7vh 2.5rem;\n\n    .download-multimedia & {\n      padding: 7vh 5vw;\n      border-left: var(--podcast-border);\n      border-right: var(--podcast-border);\n    }\n\n    &__info {\n      padding-bottom: 1.75rem;\n      max-width: toRem(400);\n    }\n\n    &__duration {\n      margin-bottom: 1rem;\n    }\n\n    &__extra {\n      border-top: var(--podcast-border);\n      padding-top: 1.75rem;\n    }\n  }\n}\n</style>\n","import script from \"./PodcastSection.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./PodcastSection.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./PodcastSection.vue?vue&type=style&index=0&id=573658de&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-573658de\"]])\n\nexport default __exports__","<template>\n  <svg\n    width=\"1253\"\n    height=\"690\"\n    viewBox=\"0 0 1253 690\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <g\n      id=\"enifor-projects-map\"\n      opacity=\"0.8\"\n      filter=\"url(#filter0_d_5378_24279)\"\n    >\n      <image :href=\"`${$baseUrl}images/mapviz.webp`\" height=\"690\" width=\"1253\" />\n      <g id=\"country-circles\">\n        <circle id=\"MX\" cx=\"251.914\" cy=\"328.078\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"GB\" cx=\"583.66\" cy=\"191.668\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"IT\" cx=\"623.881\" cy=\"251.889\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"ME\" cx=\"654\" cy=\"242\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"AL\" cx=\"665\" cy=\"255\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"DZ\" cx=\"600.051\" cy=\"303.488\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"LY\" cx=\"648.029\" cy=\"309.826\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"TN\" cx=\"626\" cy=\"280\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"EG\" cx=\"693.439\" cy=\"312.447\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"IQ\" cx=\"739.176\" cy=\"285.193\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"LB\" cx=\"715\" cy=\"284\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"CY\" cx=\"700\" cy=\"276\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"KZ\" cx=\"814.008\" cy=\"220.352\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"TM\" cx=\"789.396\" cy=\"258.373\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"OM\" cx=\"787.344\" cy=\"336.414\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"CI\" cx=\"573.986\" cy=\"383.826\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"GH\" cx=\"591.902\" cy=\"382.395\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"NG\" cx=\"617.629\" cy=\"377.92\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"GA\" cx=\"630.113\" cy=\"413.361\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"CD\" cx=\"647.461\" cy=\"416.836\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"AO\" cx=\"650.271\" cy=\"456.004\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"MZ\" cx=\"713.924\" cy=\"480.162\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"KE\" cx=\"721.166\" cy=\"409.119\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"PK\" cx=\"821.838\" cy=\"300.92\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"MM\" cx=\"914.322\" cy=\"331.846\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"VN\" cx=\"957.627\" cy=\"356.141\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"ID\" cx=\"940.723\" cy=\"422.373\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"TL\" cx=\"1051.19\" cy=\"422.615\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"AE\" cx=\"780.48\" cy=\"318.5\" r=\"8\" fill=\"#A42456\" />\n        <circle id=\"BH\" cx=\"763\" cy=\"312\" r=\"8\" fill=\"#A42456\" />\n      </g>\n    </g>\n    <defs>\n      <filter\n        id=\"filter0_d_5378_24279\"\n        x=\"0.75\"\n        y=\"0.75\"\n        width=\"1251.55\"\n        height=\"688.664\"\n        filterUnits=\"userSpaceOnUse\"\n        color-interpolation-filters=\"sRGB\"\n      >\n        <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\n        <feColorMatrix\n          in=\"SourceAlpha\"\n          type=\"matrix\"\n          values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n          result=\"hardAlpha\"\n        />\n        <feOffset />\n        <feGaussianBlur stdDeviation=\"10\" />\n        <feComposite in2=\"hardAlpha\" operator=\"out\" />\n        <feColorMatrix\n          type=\"matrix\"\n          values=\"0 0 0 0 0.580392 0 0 0 0 0.745098 0 0 0 0 0.788235 0 0 0 0.8 0\"\n        />\n        <feBlend\n          mode=\"normal\"\n          in2=\"BackgroundImageFix\"\n          result=\"effect1_dropShadow_5378_24279\"\n        />\n        <feBlend\n          mode=\"normal\"\n          in=\"SourceGraphic\"\n          in2=\"effect1_dropShadow_5378_24279\"\n          result=\"shape\"\n        />\n      </filter>\n    </defs>\n  </svg>\n</template>\n\n<script>\nexport default {\n  computed: {\n    circleSize() {\n      return this.mobile || this.tablet ? \"8\" : \"5\";\n    },\n    mobile() {\n      return this.$tvaMq === \"mobile\";\n    },\n    tablet() {\n      return this.$tvaMq === \"tablet\";\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\nimage {\n  pointer-events: none;\n}\n\n.bg-countries {\n  opacity: 0.8;\n}\n\n.country:not(.sdg-unselected):not(.unselected):hover {\n  cursor: pointer;\n}\n\ncircle {\n  // pointer-events: none;\n  transition: opacity 0.5s;\n\n  &.unselected,\n  &.sdg-unselected {\n    opacity: 0.2;\n  }\n\n  &:not(.sdg-unselected):not(.unselected):hover {\n    cursor: pointer;\n  }\n}\n\n.st0 {\n  fill: none;\n}\n.st1 {\n  fill: none;\n  stroke: #a51a3a;\n  stroke-width: 0.75;\n  stroke-linejoin: round;\n}\n.st2 {\n  display: none;\n}\n.st3 {\n  display: inline;\n  fill: url(#SVGID_1_);\n}\n.st4 {\n  display: inline;\n  fill: url(#SVGID_00000132794681086533295930000003934505473079789203_);\n}\n.st5 {\n  display: inline;\n  fill: url(#SVGID_00000131342079514149972610000003686148607868985499_);\n}\n.st6 {\n  opacity: 0.55;\n  fill: #fffefa;\n}\n.st7 {\n  fill: none;\n  stroke: #fffefa;\n  stroke-width: 0.3;\n}\n.st8 {\n  opacity: 0.55;\n}\n.st9 {\n  fill: #fffefa;\n}\n.st10 {\n  fill: #fffefa;\n  stroke: #fffefa;\n  stroke-width: 0.3;\n}\n.st11 {\n  opacity: 0.1;\n  fill: none;\n  stroke: #f5f5f5;\n  enable-background: new;\n}\n.st12 {\n  fill: url(#SVGID_00000139973609809049775480000012966113135209944251_);\n}\n.st13 {\n  fill: url(#SVGID_00000160879437753706963210000017551374254959965837_);\n}\n.st14 {\n  fill: url(#SVGID_00000173119719876634150480000009212957972400490166_);\n}\n.st15 {\n  fill: url(#SVGID_00000150100820449491388520000015715049858631587978_);\n}\n.st16 {\n  fill: url(#SVGID_00000155113149419676272760000014561372947658618009_);\n}\n.st17 {\n  fill: url(#SVGID_00000031888241601329972650000000221616653482462594_);\n}\n.st18 {\n  fill: url(#SVGID_00000182529862585921503380000015179010417258490247_);\n}\n.st19 {\n  fill: url(#SVGID_00000085931477186089639700000017622440908706714021_);\n}\n.st20 {\n  fill: url(#SVGID_00000073712115015496300670000017476590061330966178_);\n}\n.st21 {\n  fill: url(#SVGID_00000085934140305378593330000005529540060710876828_);\n}\n.st22 {\n  fill: url(#SVGID_00000044159300510033631240000012909147125487849098_);\n}\n.st23 {\n  fill: url(#SVGID_00000102527484460506778130000001509456009761893533_);\n}\n.st24 {\n  fill: url(#SVGID_00000009578083817597084960000014701799809830463405_);\n}\n.st25 {\n  fill: url(#SVGID_00000142895157448656662790000017425790064778837690_);\n}\n.st26 {\n  fill: url(#SVGID_00000090267961168284528130000007051284862963084222_);\n}\n.st27 {\n  fill: url(#SVGID_00000170986444981039666490000007954466538007895200_);\n}\n.st28 {\n  fill: #ffd300;\n}\n.st29 {\n  fill: url(#SVGID_00000038397972750692239020000013227917696705127043_);\n}\n.st30 {\n  fill: url(#SVGID_00000101782438442358903780000006548228045821072769_);\n}\n.st31 {\n  fill: url(#SVGID_00000169537067854332752010000018393629942409571748_);\n}\n.st32 {\n  fill: url(#SVGID_00000011027199742922435100000002074687641757715131_);\n}\n.st33 {\n  fill: url(#SVGID_00000134948077477845303600000009768452652192760763_);\n}\n.st34 {\n  fill: url(#SVGID_00000034091861937466824310000009539240868575307649_);\n}\n.st35 {\n  fill: url(#SVGID_00000026854085229240748930000016529448952893387168_);\n}\n.st36 {\n  fill: url(#SVGID_00000125593405500459547840000010772713938316278193_);\n}\n.st37 {\n  fill: url(#SVGID_00000040535097483183715230000015916106754248896683_);\n}\n.st38 {\n  fill: url(#SVGID_00000146461458459685244950000002518263632166204856_);\n}\n.st39 {\n  fill: url(#SVGID_00000087381637449899858560000011945291307539901327_);\n}\n.st40 {\n  fill: url(#SVGID_00000004517756694234133720000008786826868041846927_);\n}\n.st41 {\n  fill: url(#SVGID_00000052820381266036204210000001762585511532347326_);\n}\n.st42 {\n  fill: url(#SVGID_00000121978214084571742960000008454433858931417023_);\n}\n.st43 {\n  fill: url(#SVGID_00000116947403454261062930000013239121068784192168_);\n}\n.st44 {\n  fill: url(#SVGID_00000029738053513860462990000009646973677912068794_);\n}\n.st45 {\n  fill: url(#SVGID_00000005268797330039296450000007541695689450809533_);\n}\n.st46 {\n  fill: url(#SVGID_00000151534725318312696160000000118039243099266965_);\n}\n.st47 {\n  fill: url(#SVGID_00000001657885722139839020000001104139788163509660_);\n}\n.st48 {\n  fill: url(#SVGID_00000095337203017202667910000004185722165165595326_);\n}\n.st49 {\n  fill: url(#SVGID_00000005256270219051479480000010335677446693676691_);\n}\n.st50 {\n  fill: url(#SVGID_00000127029909329308674660000001421937076241235864_);\n}\n.st51 {\n  fill: url(#SVGID_00000013887051747058570660000001913531020122575249_);\n}\n.st52 {\n  fill: url(#SVGID_00000159432049169577824160000015352179159776875429_);\n}\n.st53 {\n  fill: url(#SVGID_00000012465698276840256870000017056385747351847043_);\n}\n.st54 {\n  fill: url(#SVGID_00000005247004079704664460000007285938146950033341_);\n}\n.st55 {\n  fill: url(#SVGID_00000009548363807038247410000000370518928336933812_);\n}\n.st56 {\n  fill: url(#SVGID_00000088832083392213755490000011924106435195113628_);\n}\n.st57 {\n  fill: url(#SVGID_00000018215783804091631380000005494995724215042483_);\n}\n.st58 {\n  fill: url(#SVGID_00000164506255413378246240000005064896161588063933_);\n}\n.st59 {\n  fill: url(#SVGID_00000034809108404580259980000017463236445372188062_);\n}\n.st60 {\n  fill: url(#SVGID_00000047770874767910133600000013411770919521426846_);\n}\n.st61 {\n  fill: url(#SVGID_00000022527026552712962330000014323585289866625965_);\n}\n.st62 {\n  fill: url(#SVGID_00000148628016406759740010000017086302118838639247_);\n}\n.st63 {\n  fill: url(#SVGID_00000182517000311553493010000011076416338850879904_);\n}\n.st64 {\n  fill: url(#SVGID_00000034057378341066520290000000261691642787431567_);\n}\n.st65 {\n  fill: url(#SVGID_00000142891007695380696220000015045933946304932782_);\n}\n.st66 {\n  fill: url(#SVGID_00000118398793610004206030000017278290933704750513_);\n}\n.st67 {\n  fill: url(#SVGID_00000183955607644589464800000004733988355757383561_);\n}\n.st68 {\n  fill: url(#SVGID_00000123402471060359924590000005344486199530786228_);\n}\n.st69 {\n  fill: url(#SVGID_00000052065876551926260510000010081615854421595539_);\n}\n.st70 {\n  fill: url(#SVGID_00000119094238550360543750000000950225505320521107_);\n}\n.st71 {\n  fill: url(#SVGID_00000175293420212351478970000007576900936105633172_);\n}\n.st72 {\n  fill: url(#SVGID_00000170987892838240569900000004655061185624827543_);\n}\n</style>\n","import { render } from \"./MapViz.vue?vue&type=template&id=48ee44c4&scoped=true\"\nimport script from \"./MapViz.vue?vue&type=script&lang=js\"\nexport * from \"./MapViz.vue?vue&type=script&lang=js\"\n\nimport \"./MapViz.vue?vue&type=style&index=0&id=48ee44c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-48ee44c4\"]])\n\nexport default __exports__","import script from \"./SDGButton.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./SDGButton.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./SDGButton.vue?vue&type=style&index=0&id=00193952&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-00193952\"]])\n\nexport default __exports__","import script from \"./MapSDGs.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./MapSDGs.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./MapSDGs.vue?vue&type=style&index=0&id=7d9ba28a&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-7d9ba28a\"]])\n\nexport default __exports__","import script from \"./MapTop.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./MapTop.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./MapTop.vue?vue&type=style&index=0&id=05ae70fc&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-05ae70fc\"]])\n\nexport default __exports__","import script from \"./MapTooltip.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./MapTooltip.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./MapTooltip.vue?vue&type=style&index=0&id=5ad3a48e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-5ad3a48e\"]])\n\nexport default __exports__","<template>\n  <aside ref=\"modalRef\" class=\"sdg-panel\">\n    <SDGPanelContent\n      class=\"sdg-panel__content\"\n      :country=\"country\"\n      :sectors=\"sectors\"\n      :columnLabels=\"columnLabels\"\n      :text=\"text\"\n    />\n\n    <button\n      v-if=\"smallscreen\"\n      class=\"sdg-panel__close-btn\"\n      @click=\"$emit('onClose')\"\n    >\n      <span>{{ $t(\"general.labels.close\") }}</span>\n    </button>\n  </aside>\n</template>\n\n<script setup>\nimport { ref } from \"vue\";\nimport { onClickOutside } from \"@vueuse/core\";\n\nimport SDGPanelContent from \"./SDGPanelContent.vue\";\n\ndefineProps({\n  country: String,\n  sectors: {\n    type: Array,\n    default: () => [],\n  },\n  columnLabels: Object,\n  text: String,\n  smallscreen: Boolean,\n});\n\nconst emit = defineEmits([\"onClose\"]);\nconst modalRef = ref(null);\n\nonClickOutside(modalRef, (event) => emit(\"onClose\", event));\n</script>\n\n<style lang=\"scss\" scoped>\n.sdg-panel {\n  --close-tab: #{toRem(30)};\n\n  background-image: var(--page-gradient);\n  padding: calc(var(--modal-padding) * 0.5) var(--modal-padding);\n  color: var(--white-100);\n  position: absolute;\n  bottom: 0;\n  right: 0;\n  z-index: 1;\n\n  .desktop &,\n  .large & {\n    width: toRem(570);\n    height: toRem(588);\n  }\n\n  .mobile &,\n  .tablet & {\n    width: calc(100vw - var(--close-tab));\n    height: 100%;\n    padding: 2rem var(--modal-padding);\n  }\n\n  &__content {\n    --column-width: 8rem;\n    --sector-width: #{toRem(270)};\n\n    height: 100%;\n  }\n\n  &__close-btn {\n    width: var(--close-tab);\n    padding: 0.5rem;\n    font-family: \"EniTabBold\";\n    font-size: 1rem;\n    line-height: toRem(19);\n    text-transform: uppercase;\n    background-color: #8a2f56;\n    position: absolute;\n    right: 100%;\n    top: 50%;\n    transform: translateY(-50%) rotate(180deg);\n\n    span {\n      writing-mode: vertical-rl;\n    }\n  }\n}\n</style>\n","import script from \"./SDGPanel.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./SDGPanel.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./SDGPanel.vue?vue&type=style&index=0&id=2851d7e2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-2851d7e2\"]])\n\nexport default __exports__","<template>\n  <section\n    class=\"map-section\"\n    :style=\"{ '--transation-x': mapTranslationX + 'px' }\"\n  >\n    <MapTop\n      :title=\"title\"\n      :cta=\"cta\"\n      :dropdownPlaceholder=\"dropdownPlaceholder\"\n      :SDGLegend=\"SDGLegend\"\n      :selectedSDG=\"selectedSDG\"\n      :smallscreen=\"smallscreen\"\n      @onSDGSelect=\"filterSDGs\"\n    />\n\n    <div class=\"map-section__map-wrapper\" ref=\"mapEl\">\n      <MapViz class=\"map-section__map\" />\n    </div>\n\n    <MapTooltip\n      v-if=\"hoveredCountryCode || selectedCountryCode\"\n      class=\"map-section__tooltip\"\n      :position=\"tooltipPosition\"\n      :country=\"$t(`countryMapData.${hoveredCountryCode}.name`)\"\n    />\n\n    <Transition name=\"slide-left\">\n      <SDGPanel\n        v-if=\"selectedCountryCode\"\n        :country=\"countryData[selectedCountryCode].name\"\n        :sectors=\"countryData[selectedCountryCode].sectors\"\n        :columnLabels=\"$tm('general.labels.SDGLegend')\"\n        :text=\"countryText\"\n        :smallscreen=\"smallscreen\"\n        @onClose=\"showSidePanel($event, null)\"\n      />\n    </Transition>\n  </section>\n</template>\n\n<script setup>\nimport { onMounted, ref, computed } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\n\nimport MapViz from \"./MapViz.vue\";\nimport MapTop from \"./MapTop.vue\";\nimport MapTooltip from \"./MapTooltip.vue\";\nimport SDGPanel from \"./SDGPanel.vue\";\n\nconst props = defineProps({\n  title: String,\n  cta: String,\n  SDGLegend: Object,\n  countryCodes: Object,\n  dropdownPlaceholder: String,\n});\n\nconst { tm } = useI18n();\n\nconst { $tvaMq } = useTvaMq();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n\n// const mapSectionEl = ref(null);\nconst hoveredCountryCode = ref(null);\nconst selectedCountryCode = ref(null);\nconst tooltipPosition = ref({ x: 0, y: 0 });\nconst countryElements = ref([]);\nconst circleElements = ref([]);\nconst mapTranslationX = ref(0);\nconst selectedSDG = ref(null);\nconst mapEl = ref(null);\nconst codesWithSDG = ref([]);\n\nconst countryData = computed(() => tm(\"countryMapData\"));\n\nconst countryText = computed(() => {\n  if (selectedCountryCode.value) {\n    const countryModalContent = tm(\"countryModalData\").find(\n      (country) => country.countryCode === selectedCountryCode.value\n    );\n    return countryModalContent?.cardSubscript || \"\";\n  }\n\n  return \"\";\n});\n\nonMounted(() => {\n  if (smallscreen.value && mapEl.value) {\n    mapEl.value.scroll(window.innerWidth * 1.25, 0);\n  }\n\n  props.countryCodes.map((code) => {\n    const countryEl = document.getElementById(code.toLowerCase());\n    const circleEl = document.getElementById(code);\n\n    if (countryEl) {\n      makeElementInteractive(countryEl, code);\n\n      countryEl.classList.add(\"country\");\n      countryElements.value.push(countryEl);\n    }\n\n    if (circleEl) {\n      makeElementInteractive(circleEl, code);\n\n      circleElements.value.push(circleEl);\n    }\n  });\n});\n\nfunction makeElementInteractive(el, code) {\n  el.addEventListener(\"click\", (e) => showSidePanel(e, code));\n\n  el.addEventListener(\"mousemove\", (event) => toggleTooltip(event, code));\n\n  el.addEventListener(\"mouseleave\", (event) => toggleTooltip(event, null));\n}\n\nfunction showSidePanel(mouseEvent, countryCode) {\n  // If clicking on other country, don't open panel\n  if (mouseEvent && [\"circle\", \"path\"].includes(mouseEvent.target.nodeName)) {\n    mouseEvent.stopPropagation();\n  }\n  // If a country code has already been selected, only reset showing panel\n  if (selectedCountryCode.value) {\n    countryCode = null;\n  }\n\n  selectedCountryCode.value = countryCode;\n  hoveredCountryCode.value = countryCode;\n\n  circleElements.value.forEach((circle) => {\n    if (countryCode && circle.id !== countryCode) {\n      circle.classList.add(\"unselected\");\n    } else if (!countryCode) {\n      circle.classList.remove(\"unselected\");\n    }\n  });\n\n  countryElements.value.forEach((country) => {\n    if (countryCode && country.id.toUpperCase() !== countryCode) {\n      country.classList.add(\"unselected\");\n    } else if (!countryCode) {\n      country.classList.remove(\"unselected\");\n    }\n  });\n\n  // Make sure that clicked datapoint is always at fixed end from left side of screen\n  if (mouseEvent && countryCode && !smallscreen.value) {\n    const xOffset = mouseEvent.offsetX;\n    mapTranslationX.value = -(xOffset - 100);\n  } else {\n    mapTranslationX.value = 0;\n  }\n}\n\nfunction toggleTooltip(mouseEvent, countryCode) {\n  if (!selectedCountryCode.value) {\n    if (\n      !codesWithSDG.value.length ||\n      codesWithSDG.value.includes(countryCode)\n    ) {\n      hoveredCountryCode.value = countryCode;\n    } else {\n      hoveredCountryCode.value = null;\n    }\n\n    if (countryCode) {\n      tooltipPosition.value = { x: mouseEvent.offsetX, y: mouseEvent.offsetY };\n    }\n  }\n}\n\nfunction filterSDGs(SDG, fromShowSidePanel = false) {\n  if (!fromShowSidePanel) showSidePanel(null, null);\n\n  // If clicked svg has already been selected, reset to normal state\n  if (!SDG || (selectedSDG.value && selectedSDG.value.id === SDG.id)) {\n    circleElements.value.forEach((circleEl) => {\n      circleEl.style.fill = `#A42456`;\n      circleEl.classList.remove(\"sdg-unselected\");\n    });\n\n    selectedSDG.value = null;\n    codesWithSDG.value = [];\n  } else {\n    codesWithSDG.value = Object.entries(countryData.value)\n      // eslint-disable-next-line\n      .filter(([_, data]) =>\n        data.sectors.find((sector) => sector.id === SDG.id)\n      )\n      .map(([countryCode]) => countryCode);\n\n    circleElements.value.forEach((circleEl) => {\n      if (codesWithSDG.value.includes(circleEl.id)) {\n        circleEl.style.fill = `var(--sviluppo-${SDG.id})`;\n        circleEl.style.stroke = `var(--scala-grigi-gray-1)`;\n        circleEl.classList.remove(\"sdg-unselected\");\n      } else {\n        circleEl.classList.add(\"sdg-unselected\");\n        circleEl.style.fill = `var(--black-100)`;\n        circleEl.style.stroke = \"\";\n      }\n    });\n\n    countryElements.value.forEach((countryEl) => {\n      if (codesWithSDG.value.includes(countryEl.id.toUpperCase())) {\n        countryEl.classList.remove(\"sdg-unselected\");\n      } else {\n        countryEl.classList.add(\"sdg-unselected\");\n      }\n    });\n\n    selectedSDG.value = SDG;\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.map-section {\n  position: relative;\n  background: radial-gradient(\n    56.36% 56.36% at 50% 52.79%,\n    #bbd6dd 18.23%,\n    #89b8c3 100%\n  );\n  min-height: toRem(620);\n  height: calc(var(--vh) * 95);\n  padding: 0 calc(var(--page-padding-h) * 0.75);\n\n  .mobile &,\n  .tablet & {\n    padding: 0;\n\n    &__map-wrapper {\n      height: 100%;\n      overflow: auto;\n    }\n  }\n\n  &__map {\n    .desktop &,\n    .large & {\n      width: 100%;\n      transform: translateX(var(--transation-x));\n      transition: transform 1s;\n    }\n\n    .mobile &,\n    .tablet & {\n      width: auto;\n      height: 90%;\n      transform: translateY(10%);\n    }\n  }\n}\n</style>\n","import script from \"./MapSection.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./MapSection.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./MapSection.vue?vue&type=style&index=0&id=01ec59d4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-01ec59d4\"]])\n\nexport default __exports__","import script from \"./StrategySVG.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./StrategySVG.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","import script from \"./StrategySVGMobile.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./StrategySVGMobile.vue?vue&type=script&setup=true&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","import script from \"./StrategyButton.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./StrategyButton.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./StrategyButton.vue?vue&type=style&index=0&id=870e97c4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-870e97c4\"]])\n\nexport default __exports__","<template>\n  <div class=\"strategy-item\">\n    <img\n      class=\"strategy-item__icon\"\n      :src=\"`${$baseUrl}images/strategy-chart/${iconName}.svg`\"\n      alt=\"\"\n    />\n\n    <div>\n      <span class=\"strategy-item__value\">\n        {{ value }}\n      </span>\n      <span v-if=\"unit\" class=\"strategy-item__unit\">\n        {{ unit }}\n      </span>\n    </div>\n\n    <div v-if=\"description\" class=\"strategy-item__description\">\n      {{ description }}\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport { inject } from \"@vue/runtime-core\";\n\ndefineProps({\n  iconName: String,\n  value: String,\n  unit: String,\n  description: String,\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\n</script>\n\n<style lang=\"scss\" scoped>\n.strategy-item {\n  flex-grow: 1;\n  width: toRem(110);\n\n  .mobile & {\n    min-height: toRem(130);\n  }\n\n  &__icon {\n    width: 1.75rem;\n    height: 1.75rem;\n  }\n\n  &__value {\n    @include kpi-s;\n\n    line-height: 130%;\n  }\n\n  &__unit {\n    font-family: \"EniTabBold\";\n    font-size: toRem(14);\n    line-height: toRem(15);\n    letter-spacing: -0.005em;\n    margin-left: 0.25rem;\n  }\n\n  &__description {\n    @include dida-xs;\n\n    line-height: 150%;\n    font-weight: 400;\n  }\n}\n</style>\n","import script from \"./StrategyItem.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./StrategyItem.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./StrategyItem.vue?vue&type=style&index=0&id=8ba675e4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-8ba675e4\"]])\n\nexport default __exports__","<template>\n  <TvaModal :show=\"show\" @onClose=\"$emit('onClose')\">\n    <div class=\"strategy-modal\">\n      <TextTitle class=\"strategy-modal__title\" :title=\"title\" modal />\n\n      <div class=\"strategy-modal__content\">\n        <div class=\"strategy-modal__content__top\">\n          <p\n            v-for=\"paragraph of paragraphsWithImages\"\n            :key=\"paragraph.slice(0, 10)\"\n            v-html=\"paragraph\"\n          />\n        </div>\n\n        <TextBlock class=\"strategy-modal__content__bottom\" v-bind=\"bottom\" />\n\n        <div class=\"strategy-modal__content__images\">\n          <img\n            v-for=\"index in 18\"\n            :key=\"'goal-' + index\"\n            :src=\"`${$baseUrl}images/SDGs/goal-${index}.webp`\"\n            class=\"strategy-modal__content__images__image\"\n          />\n        </div>\n      </div>\n    </div>\n  </TvaModal>\n</template>\n\n<script setup>\nimport { inject, computed } from \"vue\";\n\nimport TvaModal from \"../../general/TvaModal.vue\";\nimport TextTitle from \"../../general/TextTitle.vue\";\nimport TextBlock from \"../../general/TextBlock.vue\";\n\nconst props = defineProps({\n  show: Boolean,\n  title: String,\n  bottom: Object,\n  paragraphs: {\n    type: Array,\n    default: () => [],\n  },\n  content: Object,\n});\n\nconst $baseUrl = inject(\"$baseUrl\");\n\nconst paragraphsWithImages = computed(() =>\n  props.paragraphs.map((p) => {\n    return p\n      .replaceAll(\"<\", `<img alt='' src='${$baseUrl}images/SDGs/goal-nr-`)\n      .replaceAll(\">\", `.svg' />`);\n  })\n);\n</script>\n\n<style lang=\"scss\" scoped>\n.strategy-modal {\n  display: flex;\n  padding: 0 var(--page-padding-h);\n  width: 100vw;\n  height: calc(var(--vh) * 100);\n  background-color: var(--white-100);\n\n  .mobile &,\n  .tablet & {\n    flex-direction: column;\n  }\n\n  &__title {\n    flex-shrink: 0;\n    padding: 5vh var(--modal-padding) 0 0;\n\n    .desktop &,\n    .large & {\n      border-right: 1px solid var(--scala-grigi-gray-3);\n    }\n\n    .mobile &,\n    .tablet & {\n      padding: 4rem 0 3vh;\n      border-bottom: 1px solid var(--scala-grigi-gray-3);\n    }\n  }\n\n  &__content {\n    padding: 5vh 1rem 0 var(--modal-padding);\n    height: 100%;\n    max-height: calc(var(--vh) * 100);\n    overflow: auto;\n\n    &__top {\n      .mobile &,\n      .tablet & {\n        @include p-s;\n      }\n\n      ::v-deep(img) {\n        width: 1.5rem;\n        transform: translateY(10%);\n\n        .mobile &,\n        .tablet & {\n          width: 1.25rem;\n        }\n      }\n    }\n\n    &__bottom {\n      padding: 0 !important;\n      padding-top: 4vh !important;\n\n      ::v-deep(.text-title) {\n        @include dida-m;\n\n        padding-bottom: 0;\n      }\n\n      ::v-deep(.text-block__paragraph) {\n        @include p-xs;\n        line-height: 19.07px;\n        margin-top: toRem(12);\n\n        .mobile &,\n        .tablet & {\n          @include p-s;\n        }\n      }\n    }\n\n    &__images {\n      display: grid;\n      grid-template-columns: repeat(9, 1fr);\n      grid-template-rows: repeat(2, 1fr);\n      grid-column-gap: 17px;\n      grid-row-gap: 12px;\n      width: 100%;\n      margin-top: toRem(20);\n      margin-bottom: 2rem;\n\n      &__image {\n        max-width: 100%;\n        height: auto;\n      }\n\n      .mobile &,\n      .tablet & {\n        grid-template-columns: repeat(6, 1fr);\n        grid-template-rows: repeat(3, 1fr);\n        grid-column-gap: 8px;\n        grid-row-gap: 8px;\n        padding-bottom: toRem(20);\n      }\n    }\n  }\n\n  // .mobile &,\n  // .tablet & {\n  //   &__content {\n  //     // flex-direction: column;\n  //     // overflow: auto;\n  //     // padding: 0;\n\n  //     > :first-child {\n  //       width: 100%;\n  //       padding: var(--page-padding-h);\n  //     }\n\n  //     > :last-child {\n  //       width: 100%;\n  //     }\n  //   }\n  // }\n}\n</style>\n","import script from \"./StrategyModal.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./StrategyModal.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./StrategyModal.vue?vue&type=style&index=0&id=569d16c8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-569d16c8\"]])\n\nexport default __exports__","<template>\n  <section class=\"strategy-infograph\">\n    <h2 class=\"strategy-infograph__title\">{{ title }}</h2>\n    <p class=\"strategy-infograph__sub-title\">{{ subTitle }}</p>\n\n    <div class=\"strategy-infograph__graph\">\n      <TvaBackgroundVideo\n        class=\"strategy-infograph__graph__video\"\n        :pathToVideo=\"`line-animation_${smallscreen ? 'mobile' : 'desktop'}`\"\n        autoPlay\n      />\n\n      <component\n        :is=\"smallscreen ? StrategySVGMobile : StrategySVG\"\n        :language=\"i18n.locale.value\"\n        class=\"strategy-infograph__graph__svg\"\n      >\n        <SquareIconButton :icon=\"plus\" @onClick=\"showStrategyModal(true)\" />\n      </component>\n    </div>\n\n    <div class=\"strategy-infograph__buttons\">\n      <StrategyButton\n        v-for=\"option of buttonOptions\"\n        :key=\"option\"\n        :label=\"option\"\n        :selected=\"option === selectedOption\"\n        @onClick=\"selectedOption = option\"\n      />\n    </div>\n\n    <!-- <transition name=\"fade\" mode=\"out-in\"> -->\n    <div class=\"strategy-infograph__bottom\" :key=\"selectedOption\">\n      <template v-if=\"smallscreen\">\n        <FlickitySlider :key=\"selectedOption + i18n.locale.value\" graph>\n          <StrategyItem\n            v-for=\"item of selectedItems\"\n            :key=\"item.iconName + item.value\"\n            :iconName=\"item.iconName\"\n            :value=\"item.value\"\n            :unit=\"item.unit\"\n            :description=\"item.description\"\n            class=\"strategy-infograph__bottom__item\"\n          />\n        </FlickitySlider>\n      </template>\n\n      <template v-else>\n        <StrategyItem\n          v-for=\"item of selectedItems\"\n          :key=\"item.iconName + item.value\"\n          :iconName=\"item.iconName\"\n          :value=\"item.value\"\n          :unit=\"item.unit\"\n          :description=\"item.description\"\n          class=\"strategy-infograph__bottom__item\"\n        />\n      </template>\n    </div>\n    <!-- </transition> -->\n\n    <div class=\"strategy-infograph__note\">\n      {{ note }}\n    </div>\n\n    <StrategyModal\n      v-bind=\"modalContent\"\n      :show=\"modalShown\"\n      @onClose=\"showStrategyModal(false)\"\n    />\n  </section>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted } from \"vue\";\nimport useTvaMq from \"@/plugins/tvaMq.js\";\nimport { useI18n } from \"vue-i18n\";\n\nimport StrategySVG from \"./StrategySVG.vue\";\nimport StrategySVGMobile from \"./StrategySVGMobile.vue\";\nimport StrategyButton from \"./StrategyButton.vue\";\nimport StrategyItem from \"./StrategyItem.vue\";\nimport StrategyModal from \"./StrategyModal.vue\";\n\nimport TvaBackgroundVideo from \"../../general/TvaBackgroundVideo.vue\";\nimport SquareIconButton from \"../../general/SquareIconButton.vue\";\n\nimport { plus } from \"@/assets/icons/icons.js\";\nimport FlickitySlider from \"../../general/FlickitySlider.vue\";\n\nconst props = defineProps({\n  options: {\n    type: Array,\n    default: () => [],\n  },\n  note: String,\n  title: String,\n  subTitle: String,\n  modalContent: Object,\n});\n\nconst { $tvaMq } = useTvaMq();\nconst i18n = useI18n();\nconst smallscreen = computed(() => [\"tablet\", \"mobile\"].includes($tvaMq.value));\n\nconst selectedOption = ref(\"\");\nconst modalShown = ref(false);\n\nconst buttonOptions = computed(() => Object.keys(props.options));\nconst selectedItems = computed(() => props.options[selectedOption.value]);\n\nonMounted(() => {\n  selectedOption.value = buttonOptions.value[0];\n});\n\nfunction showStrategyModal(value) {\n  modalShown.value = value;\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.strategy-infograph {\n  position: relative;\n  padding-top: 5vh;\n\n  .desktop &,\n  .large & {\n    margin-left: calc(var(--page-padding-h) * -0.5);\n  }\n\n  &__title {\n    .desktop &,\n    .large & {\n      @include title-l;\n\n      text-align: center;\n    }\n\n    .mobile &,\n    .tablet & {\n      @include title-s;\n    }\n\n    background: linear-gradient(180deg, #27569e 0%, #5384c2 100%);\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n    text-fill-color: transparent;\n    margin: toRem(22) 1.25rem 0.25rem;\n  }\n\n  &__sub-title {\n    @include dida-s;\n\n    margin: 0 1.25rem toRem(22);\n\n    .desktop &,\n    .large & {\n      text-align: center;\n    }\n  }\n\n  &__graph {\n    --padding-for-video: 5%;\n\n    width: fit-content;\n    max-width: 100%;\n    margin: 0 auto;\n    position: relative;\n    padding-bottom: var(--padding-for-video);\n\n    .mobile &,\n    .tablet & {\n      padding-left: var(--page-padding-h);\n      padding-right: var(--page-padding-h);\n    }\n\n    &__video {\n      height: 50%;\n      bottom: 0;\n      left: 50%;\n      transform: translate(-50%, calc(var(--padding-for-video) * 2));\n\n      .desktop &,\n      .large & {\n        width: toRem(600);\n      }\n\n      .mobile &,\n      .tablet & {\n        width: 100%;\n      }\n\n      ::v-deep(video) {\n        width: 100%;\n      }\n    }\n\n    &__svg {\n      position: relative;\n      z-index: 1;\n      max-width: 100%;\n    }\n  }\n\n  &__buttons {\n    position: relative;\n    z-index: 1;\n    display: flex;\n    justify-content: center;\n    gap: 0.15rem;\n  }\n\n  &__bottom {\n    position: relative;\n    border-top: 1px solid var(--scala-grigi-gray-3);\n    border-bottom: 1px solid var(--scala-grigi-gray-3);\n    display: flex;\n    justify-content: space-between;\n    gap: 1.5rem;\n    margin-top: -1rem;\n\n    .desktop &,\n    .large & {\n      height: toRem(240);\n      max-width: 100%;\n      overflow: auto;\n      padding: toRem(28) calc(var(--page-padding-h) - 3rem) toRem(72)\n        calc(var(--page-padding-h) - 3rem);\n    }\n\n    .mobile &,\n    .tablet & {\n      overflow: hidden;\n      height: toRem(250);\n      padding-left: toRem(30);\n      padding-bottom: toRem(43);\n\n      ::v-deep(.flickity-slider) {\n        align-items: stretch;\n      }\n\n      &__item {\n        max-width: toRem(110);\n\n        &:not(:first-child) {\n          margin-left: toRem(10);\n        }\n      }\n    }\n  }\n\n  &__note {\n    @include p-xs;\n\n    position: absolute;\n    left: calc(var(--page-padding-h) - 3rem);\n    bottom: 2rem;\n\n    .mobile &,\n    .tablet & {\n      left: toRem(30);\n      bottom: 1rem;\n    }\n  }\n}\n</style>\n","import script from \"./StrategyInfograph.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./StrategyInfograph.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./StrategyInfograph.vue?vue&type=style&index=0&id=3e67f121&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-3e67f121\"]])\n\nexport default __exports__","import script from \"./FooterLink.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./FooterLink.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./FooterLink.vue?vue&type=style&index=0&id=090c275c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-090c275c\"]])\n\nexport default __exports__","<template>\n  <nav class=\"nav-footer\">\n    <FooterLink\n      v-for=\"link of currentLinks\"\n      :key=\"link.title\"\n      :title=\"link.title\"\n      :label=\"link.label\"\n      :param=\"link.param\"\n    />\n  </nav>\n</template>\n\n<script setup>\nimport { computed } from \"vue\";\nimport { useI18n } from \"vue-i18n\";\n\nimport FooterLink from \"./FooterLink.vue\";\n\nconst props = defineProps({\n  currentPage: String,\n  allLinks: {\n    type: Array,\n    default: () => [],\n  },\n});\n\nconst { t } = useI18n();\n\nconst currentLinks = computed(() => {\n  const currentPageIndex = props.allLinks.indexOf(props.currentPage);\n  const prevPage = props.allLinks[currentPageIndex - 1];\n  const nextPage = props.allLinks[currentPageIndex + 1];\n\n  return [\n    {\n      param: prevPage,\n      title: t(\"footer.navLabels.prev\"),\n      label: t(`navigation.${prevPage}`),\n    },\n    // TODO: Other label for hub multimediale\n    {\n      param: nextPage,\n      title: t(\"footer.navLabels.next\"),\n      label: t(`navigation.${nextPage}`),\n    },\n  ];\n});\n</script>\n\n<style lang=\"scss\" scoped>\n.nav-footer {\n  background-color: var(--black-100);\n  border-bottom: 1px solid var(--white-100);\n  display: flex;\n\n  .desktop &,\n  .large & {\n    padding: 1.5rem var(--page-padding-h);\n  }\n\n  .mobile &,\n  .tablet & {\n    flex-direction: column;\n  }\n}\n</style>\n","import script from \"./NavFooter.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./NavFooter.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./NavFooter.vue?vue&type=style&index=0&id=57139a46&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-57139a46\"]])\n\nexport default __exports__","<template>\n  <main\n    id=\"page\"\n    :class=\"['page-view', currentPage]\"\n    :style=\"{\n      '--page-color': `var(--${currentPage})`,\n      '--page-gradient': `var(--diag-gradient-${currentPage})`,\n    }\"\n  >\n    <template v-if=\"currentPage\">\n      <component\n        v-for=\"component of pages[currentPage]\"\n        :key=\"currentPage + component.id\"\n        :is=\"pageComponents[component.component]\"\n        :currentPage=\"currentPage\"\n        :id=\"component.id\"\n        v-bind=\"component.content\"\n      />\n    </template>\n\n    <NavFooter\n      v-if=\"showFooter\"\n      :currentPage=\"currentPage\"\n      :allLinks=\"pageLinks\"\n    />\n  </main>\n</template>\n\n<script setup>\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { useI18n } from \"vue-i18n\";\n\nimport CTASection from \"../components/sections/CTASection.vue\";\nimport HubMultimedialeSection from \"../components/sections/HubMultimedialeSection.vue\";\nimport HubMultimedialeHero from \"../components/general/HubMultimedialeHero.vue\";\nimport PageHero from \"../components/sections/PageHero.vue\";\nimport VideoSection from \"../components/sections/VideoSection.vue\";\nimport CardSlider from \"../components/sections/CardSlider.vue\";\nimport VideoSlider from \"../components/sections/VideoSlider.vue\";\nimport InterviewSlider from \"../components/sections/InterviewSlider.vue\";\nimport CountrySlider from \"../components/sections/CountrySlider.vue\";\nimport HomeHero from \"../components/sections/HomeHero.vue\";\nimport InterviewSection from \"../components/sections/InterviewSection.vue\";\nimport TextSection from \"../components/sections/TextSection.vue\";\nimport TextSectionGrey from \"../components/sections/TextSectionGrey.vue\";\nimport TextSectionWhite from \"../components/sections/TextSectionWhite.vue\";\nimport TextSectionOverflow from \"../components/sections/TextSectionOverflow.vue\";\nimport ImageSection from \"../components/sections/ImageSection.vue\";\nimport BGVideoSection from \"../components/sections/BGVideoSection.vue\";\nimport KPISection from \"../components/sections/KPISection.vue\";\nimport PodcastSection from \"../components/sections/PodcastSection.vue\";\n\nimport ChartRoadTo2050 from \"../components/charts/info-road-2050/ChartRoadTo2050.vue\";\nimport MapSection from \"../components/charts/map/MapSection.vue\";\nimport StrategyInfograph from \"../components/charts/strategy-infograph/StrategyInfograph.vue\";\nimport NavFooter from \"../components/general/NavFooter.vue\";\n\nconst route = useRoute();\nconst { tm } = useI18n();\n\nconst pageComponents = {\n  CTASection,\n  HubMultimedialeSection,\n  PageHero,\n  VideoSection,\n  CardSlider,\n  VideoSlider,\n  InterviewSlider,\n  CountrySlider,\n  HomeHero,\n  InterviewSection,\n  TextSection,\n  TextSectionGrey,\n  TextSectionOverflow,\n  TextSectionWhite,\n  ImageSection,\n  BGVideoSection,\n  KPISection,\n  ChartRoadTo2050,\n  HubMultimedialeHero,\n  PodcastSection,\n  MapSection,\n  StrategyInfograph,\n};\n\nconst currentPage = ref(\"\");\n\nconst pages = computed(() => tm(\"pages\"));\nconst pageLinks = computed(() => Object.keys(pages.value));\n\nconst showFooter = computed(\n  () => ![\"home\", \"download-multimedia\"].includes(route.params.page)\n);\n\nonMounted(() => {\n  \n  currentPage.value = route.params.page;\n});\n\nwatch(\n  () => route.params.page,\n  () => {\n    currentPage.value = route.params.page;\n  }\n);\n\n</script>\n\n<style lang=\"scss\" scoped>\n// \n</style>\n","import script from \"./PageView.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./PageView.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./PageView.vue?vue&type=style&index=0&id=b0957fe8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/Users/pontiroli/Desktop/Repositories/eni/dist/eni-dist-eni-for-2022-hub-e-longform/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-b0957fe8\"]])\n\nexport default __exports__","/*!\n * wavesurfer.js 6.6.3 (2023-04-04)\n * https://wavesurfer-js.org\n * @license BSD-3-Clause\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"WaveSurfer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"WaveSurfer\"] = factory();\n\telse\n\t\troot[\"WaveSurfer\"] = factory();\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./src/drawer.canvasentry.js\":\n/*!***********************************!*\\\n  !*** ./src/drawer.canvasentry.js ***!\n  \\***********************************/\n/***/ ((module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\nvar _style = _interopRequireDefault(__webpack_require__(/*! ./util/style */ \"./src/util/style.js\"));\nvar _getId = _interopRequireDefault(__webpack_require__(/*! ./util/get-id */ \"./src/util/get-id.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * The `CanvasEntry` class represents an element consisting of a wave `canvas`\n * and an (optional) progress wave `canvas`.\n *\n * The `MultiCanvas` renderer uses one or more `CanvasEntry` instances to\n * render a waveform, depending on the zoom level.\n */\nvar CanvasEntry = /*#__PURE__*/function () {\n  function CanvasEntry() {\n    _classCallCheck(this, CanvasEntry);\n    /**\n     * The wave node\n     *\n     * @type {HTMLCanvasElement}\n     */\n    this.wave = null;\n    /**\n     * The wave canvas rendering context\n     *\n     * @type {CanvasRenderingContext2D}\n     */\n    this.waveCtx = null;\n    /**\n     * The (optional) progress wave node\n     *\n     * @type {HTMLCanvasElement}\n     */\n    this.progress = null;\n    /**\n     * The (optional) progress wave canvas rendering context\n     *\n     * @type {CanvasRenderingContext2D}\n     */\n    this.progressCtx = null;\n    /**\n     * Start of the area the canvas should render, between 0 and 1\n     *\n     * @type {number}\n     */\n    this.start = 0;\n    /**\n     * End of the area the canvas should render, between 0 and 1\n     *\n     * @type {number}\n     */\n    this.end = 1;\n    /**\n     * Unique identifier for this entry\n     *\n     * @type {string}\n     */\n    this.id = (0, _getId.default)(typeof this.constructor.name !== 'undefined' ? this.constructor.name.toLowerCase() + '_' : 'canvasentry_');\n    /**\n     * Canvas 2d context attributes\n     *\n     * @type {object}\n     */\n    this.canvasContextAttributes = {};\n  }\n\n  /**\n   * Store the wave canvas element and create the 2D rendering context\n   *\n   * @param {HTMLCanvasElement} element The wave `canvas` element.\n   */\n  _createClass(CanvasEntry, [{\n    key: \"initWave\",\n    value: function initWave(element) {\n      this.wave = element;\n      this.waveCtx = this.wave.getContext('2d', this.canvasContextAttributes);\n    }\n\n    /**\n     * Store the progress wave canvas element and create the 2D rendering\n     * context\n     *\n     * @param {HTMLCanvasElement} element The progress wave `canvas` element.\n     */\n  }, {\n    key: \"initProgress\",\n    value: function initProgress(element) {\n      this.progress = element;\n      this.progressCtx = this.progress.getContext('2d', this.canvasContextAttributes);\n    }\n\n    /**\n     * Update the dimensions\n     *\n     * @param {number} elementWidth Width of the entry\n     * @param {number} totalWidth Total width of the multi canvas renderer\n     * @param {number} width The new width of the element\n     * @param {number} height The new height of the element\n     */\n  }, {\n    key: \"updateDimensions\",\n    value: function updateDimensions(elementWidth, totalWidth, width, height) {\n      // where the canvas starts and ends in the waveform, represented as a\n      // decimal between 0 and 1\n      this.start = this.wave.offsetLeft / totalWidth || 0;\n      this.end = this.start + elementWidth / totalWidth;\n\n      // set wave canvas dimensions\n      this.wave.width = width;\n      this.wave.height = height;\n      var elementSize = {\n        width: elementWidth + 'px'\n      };\n      (0, _style.default)(this.wave, elementSize);\n      if (this.hasProgressCanvas) {\n        // set progress canvas dimensions\n        this.progress.width = width;\n        this.progress.height = height;\n        (0, _style.default)(this.progress, elementSize);\n      }\n    }\n\n    /**\n     * Clear the wave and progress rendering contexts\n     */\n  }, {\n    key: \"clearWave\",\n    value: function clearWave() {\n      // wave\n      this.waveCtx.clearRect(0, 0, this.waveCtx.canvas.width, this.waveCtx.canvas.height);\n\n      // progress\n      if (this.hasProgressCanvas) {\n        this.progressCtx.clearRect(0, 0, this.progressCtx.canvas.width, this.progressCtx.canvas.height);\n      }\n    }\n\n    /**\n     * Set the fill styles for wave and progress\n     * @param {string|string[]} waveColor Fill color for the wave canvas,\n     * or an array of colors to apply as a gradient\n     * @param {?string|string[]} progressColor Fill color for the progress canvas,\n     * or an array of colors to apply as a gradient\n     */\n  }, {\n    key: \"setFillStyles\",\n    value: function setFillStyles(waveColor, progressColor) {\n      this.waveCtx.fillStyle = this.getFillStyle(this.waveCtx, waveColor);\n      if (this.hasProgressCanvas) {\n        this.progressCtx.fillStyle = this.getFillStyle(this.progressCtx, progressColor);\n      }\n    }\n\n    /**\n     * Utility function to handle wave color arguments\n     *\n     * When the color argument type is a string or CanvasGradient instance,\n     * it will be returned as is. Otherwise, it will be treated as an array,\n     * and a new CanvasGradient will be returned\n     *\n     * @since 6.0.0\n     * @param {CanvasRenderingContext2D} ctx Rendering context of target canvas\n     * @param {string|string[]|CanvasGradient} color Either a single fill color\n     *     for the wave canvas, an existing CanvasGradient instance, or an array\n     *     of colors to apply as a gradient\n     * @returns {string|CanvasGradient} Returns a string fillstyle value, or a\n     *     canvas gradient\n     */\n  }, {\n    key: \"getFillStyle\",\n    value: function getFillStyle(ctx, color) {\n      if (typeof color == 'string' || color instanceof CanvasGradient) {\n        return color;\n      }\n      var waveGradient = ctx.createLinearGradient(0, 0, 0, ctx.canvas.height);\n      color.forEach(function (value, index) {\n        return waveGradient.addColorStop(index / color.length, value);\n      });\n      return waveGradient;\n    }\n\n    /**\n     * Set the canvas transforms for wave and progress\n     *\n     * @param {boolean} vertical Whether to render vertically\n     */\n  }, {\n    key: \"applyCanvasTransforms\",\n    value: function applyCanvasTransforms(vertical) {\n      if (vertical) {\n        // Reflect the waveform across the line y = -x\n        this.waveCtx.setTransform(0, 1, 1, 0, 0, 0);\n        if (this.hasProgressCanvas) {\n          this.progressCtx.setTransform(0, 1, 1, 0, 0, 0);\n        }\n      }\n    }\n\n    /**\n     * Draw a rectangle for wave and progress\n     *\n     * @param {number} x X start position\n     * @param {number} y Y start position\n     * @param {number} width Width of the rectangle\n     * @param {number} height Height of the rectangle\n     * @param {number} radius Radius of the rectangle\n     */\n  }, {\n    key: \"fillRects\",\n    value: function fillRects(x, y, width, height, radius) {\n      this.fillRectToContext(this.waveCtx, x, y, width, height, radius);\n      if (this.hasProgressCanvas) {\n        this.fillRectToContext(this.progressCtx, x, y, width, height, radius);\n      }\n    }\n\n    /**\n     * Draw the actual rectangle on a `canvas` element\n     *\n     * @param {CanvasRenderingContext2D} ctx Rendering context of target canvas\n     * @param {number} x X start position\n     * @param {number} y Y start position\n     * @param {number} width Width of the rectangle\n     * @param {number} height Height of the rectangle\n     * @param {number} radius Radius of the rectangle\n     */\n  }, {\n    key: \"fillRectToContext\",\n    value: function fillRectToContext(ctx, x, y, width, height, radius) {\n      if (!ctx) {\n        return;\n      }\n      if (radius) {\n        this.drawRoundedRect(ctx, x, y, width, height, radius);\n      } else {\n        ctx.fillRect(x, y, width, height);\n      }\n    }\n\n    /**\n     * Draw a rounded rectangle on Canvas\n     *\n     * @param {CanvasRenderingContext2D} ctx Canvas context\n     * @param {number} x X-position of the rectangle\n     * @param {number} y Y-position of the rectangle\n     * @param {number} width Width of the rectangle\n     * @param {number} height Height of the rectangle\n     * @param {number} radius Radius of the rectangle\n     *\n     * @return {void}\n     * @example drawRoundedRect(ctx, 50, 50, 5, 10, 3)\n     */\n  }, {\n    key: \"drawRoundedRect\",\n    value: function drawRoundedRect(ctx, x, y, width, height, radius) {\n      if (height === 0) {\n        return;\n      }\n      // peaks are float values from -1 to 1. Use absolute height values in\n      // order to correctly calculate rounded rectangle coordinates\n      if (height < 0) {\n        height *= -1;\n        y -= height;\n      }\n      ctx.beginPath();\n      ctx.moveTo(x + radius, y);\n      ctx.lineTo(x + width - radius, y);\n      ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n      ctx.lineTo(x + width, y + height - radius);\n      ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n      ctx.lineTo(x + radius, y + height);\n      ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n      ctx.lineTo(x, y + radius);\n      ctx.quadraticCurveTo(x, y, x + radius, y);\n      ctx.closePath();\n      ctx.fill();\n    }\n\n    /**\n     * Render the actual wave and progress lines\n     *\n     * @param {number[]} peaks Array with peaks data\n     * @param {number} absmax Maximum peak value (absolute)\n     * @param {number} halfH Half the height of the waveform\n     * @param {number} offsetY Offset to the top\n     * @param {number} start The x-offset of the beginning of the area that\n     * should be rendered\n     * @param {number} end The x-offset of the end of the area that\n     * should be rendered\n     */\n  }, {\n    key: \"drawLines\",\n    value: function drawLines(peaks, absmax, halfH, offsetY, start, end) {\n      this.drawLineToContext(this.waveCtx, peaks, absmax, halfH, offsetY, start, end);\n      if (this.hasProgressCanvas) {\n        this.drawLineToContext(this.progressCtx, peaks, absmax, halfH, offsetY, start, end);\n      }\n    }\n\n    /**\n     * Render the actual waveform line on a `canvas` element\n     *\n     * @param {CanvasRenderingContext2D} ctx Rendering context of target canvas\n     * @param {number[]} peaks Array with peaks data\n     * @param {number} absmax Maximum peak value (absolute)\n     * @param {number} halfH Half the height of the waveform\n     * @param {number} offsetY Offset to the top\n     * @param {number} start The x-offset of the beginning of the area that\n     * should be rendered\n     * @param {number} end The x-offset of the end of the area that\n     * should be rendered\n     */\n  }, {\n    key: \"drawLineToContext\",\n    value: function drawLineToContext(ctx, peaks, absmax, halfH, offsetY, start, end) {\n      if (!ctx) {\n        return;\n      }\n      var length = peaks.length / 2;\n      var first = Math.round(length * this.start);\n\n      // use one more peak value to make sure we join peaks at ends -- unless,\n      // of course, this is the last canvas\n      var last = Math.round(length * this.end) + 1;\n      var canvasStart = first;\n      var canvasEnd = last;\n      var scale = this.wave.width / (canvasEnd - canvasStart - 1);\n\n      // optimization\n      var halfOffset = halfH + offsetY;\n      var absmaxHalf = absmax / halfH;\n      ctx.beginPath();\n      ctx.moveTo((canvasStart - first) * scale, halfOffset);\n      ctx.lineTo((canvasStart - first) * scale, halfOffset - Math.round((peaks[2 * canvasStart] || 0) / absmaxHalf));\n      var i, peak, h;\n      for (i = canvasStart; i < canvasEnd; i++) {\n        peak = peaks[2 * i] || 0;\n        h = Math.round(peak / absmaxHalf);\n        ctx.lineTo((i - first) * scale + this.halfPixel, halfOffset - h);\n      }\n\n      // draw the bottom edge going backwards, to make a single\n      // closed hull to fill\n      var j = canvasEnd - 1;\n      for (j; j >= canvasStart; j--) {\n        peak = peaks[2 * j + 1] || 0;\n        h = Math.round(peak / absmaxHalf);\n        ctx.lineTo((j - first) * scale + this.halfPixel, halfOffset - h);\n      }\n      ctx.lineTo((canvasStart - first) * scale, halfOffset - Math.round((peaks[2 * canvasStart + 1] || 0) / absmaxHalf));\n      ctx.closePath();\n      ctx.fill();\n    }\n\n    /**\n     * Destroys this entry\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.waveCtx = null;\n      this.wave = null;\n      this.progressCtx = null;\n      this.progress = null;\n    }\n\n    /**\n     * Return image data of the wave `canvas` element\n     *\n     * When using a `type` of `'blob'`, this will return a `Promise` that\n     * resolves with a `Blob` instance.\n     *\n     * @param {string} format='image/png' An optional value of a format type.\n     * @param {number} quality=0.92 An optional value between 0 and 1.\n     * @param {string} type='dataURL' Either 'dataURL' or 'blob'.\n     * @return {string|Promise} When using the default `'dataURL'` `type` this\n     * returns a data URL. When using the `'blob'` `type` this returns a\n     * `Promise` that resolves with a `Blob` instance.\n     */\n  }, {\n    key: \"getImage\",\n    value: function getImage(format, quality, type) {\n      var _this = this;\n      if (type === 'blob') {\n        return new Promise(function (resolve) {\n          _this.wave.toBlob(resolve, format, quality);\n        });\n      } else if (type === 'dataURL') {\n        return this.wave.toDataURL(format, quality);\n      }\n    }\n  }]);\n  return CanvasEntry;\n}();\nexports[\"default\"] = CanvasEntry;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/drawer.js\":\n/*!***********************!*\\\n  !*** ./src/drawer.js ***!\n  \\***********************/\n/***/ ((module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\nvar util = _interopRequireWildcard(__webpack_require__(/*! ./util */ \"./src/util/index.js\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/**\n * Parent class for renderers\n *\n * @extends {Observer}\n */\nvar Drawer = /*#__PURE__*/function (_util$Observer) {\n  _inherits(Drawer, _util$Observer);\n  var _super = _createSuper(Drawer);\n  /**\n   * @param {HTMLElement} container The container node of the wavesurfer instance\n   * @param {WavesurferParams} params The wavesurfer initialisation options\n   */\n  function Drawer(container, params) {\n    var _this;\n    _classCallCheck(this, Drawer);\n    _this = _super.call(this);\n    _this.container = util.withOrientation(container, params.vertical);\n    /**\n     * @type {WavesurferParams}\n     */\n    _this.params = params;\n    /**\n     * The width of the renderer\n     * @type {number}\n     */\n    _this.width = 0;\n    /**\n     * The height of the renderer\n     * @type {number}\n     */\n    _this.height = params.height * _this.params.pixelRatio;\n    _this.lastPos = 0;\n    /**\n     * The `<wave>` element which is added to the container\n     * @type {HTMLElement}\n     */\n    _this.wrapper = null;\n    return _this;\n  }\n\n  /**\n   * Alias of `util.style`\n   *\n   * @param {HTMLElement} el The element that the styles will be applied to\n   * @param {Object} styles The map of propName: attribute, both are used as-is\n   * @return {HTMLElement} el\n   */\n  _createClass(Drawer, [{\n    key: \"style\",\n    value: function style(el, styles) {\n      return util.style(el, styles);\n    }\n\n    /**\n     * Create the wrapper `<wave>` element, style it and set up the events for\n     * interaction\n     */\n  }, {\n    key: \"createWrapper\",\n    value: function createWrapper() {\n      this.wrapper = util.withOrientation(this.container.appendChild(document.createElement('wave')), this.params.vertical);\n      this.style(this.wrapper, {\n        display: 'block',\n        position: 'relative',\n        userSelect: 'none',\n        webkitUserSelect: 'none',\n        height: this.params.height + 'px'\n      });\n      if (this.params.fillParent || this.params.scrollParent) {\n        this.style(this.wrapper, {\n          width: '100%',\n          cursor: this.params.hideCursor ? 'none' : 'auto',\n          overflowX: this.params.hideScrollbar ? 'hidden' : 'auto',\n          overflowY: 'hidden'\n        });\n      }\n      this.setupWrapperEvents();\n    }\n\n    /**\n     * Handle click event\n     *\n     * @param {Event} e Click event\n     * @param {?boolean} noPrevent Set to true to not call `e.preventDefault()`\n     * @return {number} Playback position from 0 to 1\n     */\n  }, {\n    key: \"handleEvent\",\n    value: function handleEvent(e, noPrevent) {\n      !noPrevent && e.preventDefault();\n      var clientX = util.withOrientation(e.targetTouches ? e.targetTouches[0] : e, this.params.vertical).clientX;\n      var bbox = this.wrapper.getBoundingClientRect();\n      var nominalWidth = this.width;\n      var parentWidth = this.getWidth();\n      var progressPixels = this.getProgressPixels(bbox, clientX);\n      var progress;\n      if (!this.params.fillParent && nominalWidth < parentWidth) {\n        progress = progressPixels * (this.params.pixelRatio / nominalWidth) || 0;\n      } else {\n        progress = (progressPixels + this.wrapper.scrollLeft) / this.wrapper.scrollWidth || 0;\n      }\n      return util.clamp(progress, 0, 1);\n    }\n  }, {\n    key: \"getProgressPixels\",\n    value: function getProgressPixels(wrapperBbox, clientX) {\n      if (this.params.rtl) {\n        return wrapperBbox.right - clientX;\n      } else {\n        return clientX - wrapperBbox.left;\n      }\n    }\n  }, {\n    key: \"setupWrapperEvents\",\n    value: function setupWrapperEvents() {\n      var _this2 = this;\n      this.wrapper.addEventListener('click', function (e) {\n        var orientedEvent = util.withOrientation(e, _this2.params.vertical);\n        var scrollbarHeight = _this2.wrapper.offsetHeight - _this2.wrapper.clientHeight;\n        if (scrollbarHeight !== 0) {\n          // scrollbar is visible.  Check if click was on it\n          var bbox = _this2.wrapper.getBoundingClientRect();\n          if (orientedEvent.clientY >= bbox.bottom - scrollbarHeight) {\n            // ignore mousedown as it was on the scrollbar\n            return;\n          }\n        }\n        if (_this2.params.interact) {\n          _this2.fireEvent('click', e, _this2.handleEvent(e));\n        }\n      });\n      this.wrapper.addEventListener('dblclick', function (e) {\n        if (_this2.params.interact) {\n          _this2.fireEvent('dblclick', e, _this2.handleEvent(e));\n        }\n      });\n      this.wrapper.addEventListener('scroll', function (e) {\n        return _this2.fireEvent('scroll', e);\n      });\n    }\n\n    /**\n     * Draw peaks on the canvas\n     *\n     * @param {number[]|Number.<Array[]>} peaks Can also be an array of arrays\n     * for split channel rendering\n     * @param {number} length The width of the area that should be drawn\n     * @param {number} start The x-offset of the beginning of the area that\n     * should be rendered\n     * @param {number} end The x-offset of the end of the area that should be\n     * rendered\n     */\n  }, {\n    key: \"drawPeaks\",\n    value: function drawPeaks(peaks, length, start, end) {\n      if (!this.setWidth(length)) {\n        this.clearWave();\n      }\n      this.params.barWidth ? this.drawBars(peaks, 0, start, end) : this.drawWave(peaks, 0, start, end);\n    }\n\n    /**\n     * Scroll to the beginning\n     */\n  }, {\n    key: \"resetScroll\",\n    value: function resetScroll() {\n      if (this.wrapper !== null) {\n        this.wrapper.scrollLeft = 0;\n      }\n    }\n\n    /**\n     * Recenter the view-port at a certain percent of the waveform\n     *\n     * @param {number} percent Value from 0 to 1 on the waveform\n     */\n  }, {\n    key: \"recenter\",\n    value: function recenter(percent) {\n      var position = this.wrapper.scrollWidth * percent;\n      this.recenterOnPosition(position, true);\n    }\n\n    /**\n     * Recenter the view-port on a position, either scroll there immediately or\n     * in steps of 5 pixels\n     *\n     * @param {number} position X-offset in pixels\n     * @param {boolean} immediate Set to true to immediately scroll somewhere\n     */\n  }, {\n    key: \"recenterOnPosition\",\n    value: function recenterOnPosition(position, immediate) {\n      var scrollLeft = this.wrapper.scrollLeft;\n      var half = ~~(this.wrapper.clientWidth / 2);\n      var maxScroll = this.wrapper.scrollWidth - this.wrapper.clientWidth;\n      var target = position - half;\n      var offset = target - scrollLeft;\n      if (maxScroll == 0) {\n        // no need to continue if scrollbar is not there\n        return;\n      }\n\n      // if the cursor is currently visible...\n      if (!immediate && -half <= offset && offset < half) {\n        // set rate at which waveform is centered\n        var rate = this.params.autoCenterRate;\n\n        // make rate depend on width of view and length of waveform\n        rate /= half;\n        rate *= maxScroll;\n        offset = Math.max(-rate, Math.min(rate, offset));\n        target = scrollLeft + offset;\n      }\n\n      // limit target to valid range (0 to maxScroll)\n      target = Math.max(0, Math.min(maxScroll, target));\n      // no use attempting to scroll if we're not moving\n      if (target != scrollLeft) {\n        this.wrapper.scrollLeft = target;\n      }\n    }\n\n    /**\n     * Get the current scroll position in pixels\n     *\n     * @return {number} Horizontal scroll position in pixels\n     */\n  }, {\n    key: \"getScrollX\",\n    value: function getScrollX() {\n      var x = 0;\n      if (this.wrapper) {\n        var pixelRatio = this.params.pixelRatio;\n        x = Math.round(this.wrapper.scrollLeft * pixelRatio);\n\n        // In cases of elastic scroll (safari with mouse wheel) you can\n        // scroll beyond the limits of the container\n        // Calculate and floor the scrollable extent to make sure an out\n        // of bounds value is not returned\n        // Ticket #1312\n        if (this.params.scrollParent) {\n          var maxScroll = ~~(this.wrapper.scrollWidth * pixelRatio - this.getWidth());\n          x = Math.min(maxScroll, Math.max(0, x));\n        }\n      }\n      return x;\n    }\n\n    /**\n     * Get the width of the container\n     *\n     * @return {number} The width of the container\n     */\n  }, {\n    key: \"getWidth\",\n    value: function getWidth() {\n      return Math.round(this.container.clientWidth * this.params.pixelRatio);\n    }\n\n    /**\n     * Set the width of the container\n     *\n     * @param {number} width The new width of the container\n     * @return {boolean} Whether the width of the container was updated or not\n     */\n  }, {\n    key: \"setWidth\",\n    value: function setWidth(width) {\n      if (this.width == width) {\n        return false;\n      }\n      this.width = width;\n      if (this.params.fillParent || this.params.scrollParent) {\n        this.style(this.wrapper, {\n          width: ''\n        });\n      } else {\n        var newWidth = ~~(this.width / this.params.pixelRatio) + 'px';\n        this.style(this.wrapper, {\n          width: newWidth\n        });\n      }\n      this.updateSize();\n      return true;\n    }\n\n    /**\n     * Set the height of the container\n     *\n     * @param {number} height The new height of the container.\n     * @return {boolean} Whether the height of the container was updated or not\n     */\n  }, {\n    key: \"setHeight\",\n    value: function setHeight(height) {\n      if (height == this.height) {\n        return false;\n      }\n      this.height = height;\n      this.style(this.wrapper, {\n        height: ~~(this.height / this.params.pixelRatio) + 'px'\n      });\n      this.updateSize();\n      return true;\n    }\n\n    /**\n     * Called by wavesurfer when progress should be rendered\n     *\n     * @param {number} progress From 0 to 1\n     */\n  }, {\n    key: \"progress\",\n    value: function progress(_progress) {\n      var minPxDelta = 1 / this.params.pixelRatio;\n      var pos = Math.round(_progress * this.width) * minPxDelta;\n      if (pos < this.lastPos || pos - this.lastPos >= minPxDelta) {\n        this.lastPos = pos;\n        if (this.params.scrollParent && this.params.autoCenter) {\n          var newPos = ~~(this.wrapper.scrollWidth * _progress);\n          this.recenterOnPosition(newPos, this.params.autoCenterImmediately);\n        }\n        this.updateProgress(pos);\n      }\n    }\n\n    /**\n     * This is called when wavesurfer is destroyed\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.unAll();\n      if (this.wrapper) {\n        if (this.wrapper.parentNode == this.container.domElement) {\n          this.container.removeChild(this.wrapper.domElement);\n        }\n        this.wrapper = null;\n      }\n    }\n\n    /* Renderer-specific methods */\n\n    /**\n     * Called after cursor related params have changed.\n     *\n     * @abstract\n     */\n  }, {\n    key: \"updateCursor\",\n    value: function updateCursor() {}\n\n    /**\n     * Called when the size of the container changes so the renderer can adjust\n     *\n     * @abstract\n     */\n  }, {\n    key: \"updateSize\",\n    value: function updateSize() {}\n\n    /**\n     * Draw a waveform with bars\n     *\n     * @abstract\n     * @param {number[]|Number.<Array[]>} peaks Can also be an array of arrays for split channel\n     * rendering\n     * @param {number} channelIndex The index of the current channel. Normally\n     * should be 0\n     * @param {number} start The x-offset of the beginning of the area that\n     * should be rendered\n     * @param {number} end The x-offset of the end of the area that should be\n     * rendered\n     */\n  }, {\n    key: \"drawBars\",\n    value: function drawBars(peaks, channelIndex, start, end) {}\n\n    /**\n     * Draw a waveform\n     *\n     * @abstract\n     * @param {number[]|Number.<Array[]>} peaks Can also be an array of arrays for split channel\n     * rendering\n     * @param {number} channelIndex The index of the current channel. Normally\n     * should be 0\n     * @param {number} start The x-offset of the beginning of the area that\n     * should be rendered\n     * @param {number} end The x-offset of the end of the area that should be\n     * rendered\n     */\n  }, {\n    key: \"drawWave\",\n    value: function drawWave(peaks, channelIndex, start, end) {}\n\n    /**\n     * Clear the waveform\n     *\n     * @abstract\n     */\n  }, {\n    key: \"clearWave\",\n    value: function clearWave() {}\n\n    /**\n     * Render the new progress\n     *\n     * @abstract\n     * @param {number} position X-Offset of progress position in pixels\n     */\n  }, {\n    key: \"updateProgress\",\n    value: function updateProgress(position) {}\n  }]);\n  return Drawer;\n}(util.Observer);\nexports[\"default\"] = Drawer;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/drawer.multicanvas.js\":\n/*!***********************************!*\\\n  !*** ./src/drawer.multicanvas.js ***!\n  \\***********************************/\n/***/ ((module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\nvar _drawer = _interopRequireDefault(__webpack_require__(/*! ./drawer */ \"./src/drawer.js\"));\nvar util = _interopRequireWildcard(__webpack_require__(/*! ./util */ \"./src/util/index.js\"));\nvar _drawer2 = _interopRequireDefault(__webpack_require__(/*! ./drawer.canvasentry */ \"./src/drawer.canvasentry.js\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/**\n * MultiCanvas renderer for wavesurfer. Is currently the default and sole\n * builtin renderer.\n *\n * A `MultiCanvas` consists of one or more `CanvasEntry` instances, depending\n * on the zoom level.\n */\nvar MultiCanvas = /*#__PURE__*/function (_Drawer) {\n  _inherits(MultiCanvas, _Drawer);\n  var _super = _createSuper(MultiCanvas);\n  /**\n   * @param {HTMLElement} container The container node of the wavesurfer instance\n   * @param {WavesurferParams} params The wavesurfer initialisation options\n   */\n  function MultiCanvas(container, params) {\n    var _this;\n    _classCallCheck(this, MultiCanvas);\n    _this = _super.call(this, container, params);\n\n    /**\n     * @type {number}\n     */\n    _this.maxCanvasWidth = params.maxCanvasWidth;\n\n    /**\n     * @type {number}\n     */\n    _this.maxCanvasElementWidth = Math.round(params.maxCanvasWidth / params.pixelRatio);\n\n    /**\n     * Whether or not the progress wave is rendered. If the `waveColor`\n     * and `progressColor` are the same color it is not.\n     *\n     * @type {boolean}\n     */\n    _this.hasProgressCanvas = params.waveColor != params.progressColor;\n\n    /**\n     * @type {number}\n     */\n    _this.halfPixel = 0.5 / params.pixelRatio;\n\n    /**\n     * List of `CanvasEntry` instances.\n     *\n     * @type {Array}\n     */\n    _this.canvases = [];\n\n    /**\n     * @type {HTMLElement}\n     */\n    _this.progressWave = null;\n\n    /**\n     * Class used to generate entries.\n     *\n     * @type {function}\n     */\n    _this.EntryClass = _drawer2.default;\n\n    /**\n     * Canvas 2d context attributes.\n     *\n     * @type {object}\n     */\n    _this.canvasContextAttributes = params.drawingContextAttributes;\n\n    /**\n     * Overlap added between entries to prevent vertical white stripes\n     * between `canvas` elements.\n     *\n     * @type {number}\n     */\n    _this.overlap = 2 * Math.ceil(params.pixelRatio / 2);\n\n    /**\n     * The radius of the wave bars. Makes bars rounded\n     *\n     * @type {number}\n     */\n    _this.barRadius = params.barRadius || 0;\n\n    /**\n     * Whether to render the waveform vertically. Defaults to false.\n     *\n     * @type {boolean}\n     */\n    _this.vertical = params.vertical;\n    return _this;\n  }\n\n  /**\n   * Initialize the drawer\n   */\n  _createClass(MultiCanvas, [{\n    key: \"init\",\n    value: function init() {\n      this.createWrapper();\n      this.createElements();\n    }\n\n    /**\n     * Create the canvas elements and style them\n     *\n     */\n  }, {\n    key: \"createElements\",\n    value: function createElements() {\n      this.progressWave = util.withOrientation(this.wrapper.appendChild(document.createElement('wave')), this.params.vertical);\n      this.style(this.progressWave, {\n        position: 'absolute',\n        zIndex: 3,\n        left: 0,\n        top: 0,\n        bottom: 0,\n        overflow: 'hidden',\n        width: '0',\n        display: 'none',\n        boxSizing: 'border-box',\n        borderRightStyle: 'solid',\n        pointerEvents: 'none'\n      });\n      this.addCanvas();\n      this.updateCursor();\n    }\n\n    /**\n     * Update cursor style\n     */\n  }, {\n    key: \"updateCursor\",\n    value: function updateCursor() {\n      this.style(this.progressWave, {\n        borderRightWidth: this.params.cursorWidth + 'px',\n        borderRightColor: this.params.cursorColor\n      });\n    }\n\n    /**\n     * Adjust to the updated size by adding or removing canvases\n     */\n  }, {\n    key: \"updateSize\",\n    value: function updateSize() {\n      var _this2 = this;\n      var totalWidth = Math.round(this.width / this.params.pixelRatio);\n      var requiredCanvases = Math.ceil(totalWidth / (this.maxCanvasElementWidth + this.overlap));\n\n      // add required canvases\n      while (this.canvases.length < requiredCanvases) {\n        this.addCanvas();\n      }\n\n      // remove older existing canvases, if any\n      while (this.canvases.length > requiredCanvases) {\n        this.removeCanvas();\n      }\n      var canvasWidth = this.maxCanvasWidth + this.overlap;\n      var lastCanvas = this.canvases.length - 1;\n      this.canvases.forEach(function (entry, i) {\n        if (i == lastCanvas) {\n          canvasWidth = _this2.width - _this2.maxCanvasWidth * lastCanvas;\n        }\n        _this2.updateDimensions(entry, canvasWidth, _this2.height);\n        entry.clearWave();\n      });\n    }\n\n    /**\n     * Add a canvas to the canvas list\n     *\n     */\n  }, {\n    key: \"addCanvas\",\n    value: function addCanvas() {\n      var entry = new this.EntryClass();\n      entry.canvasContextAttributes = this.canvasContextAttributes;\n      entry.hasProgressCanvas = this.hasProgressCanvas;\n      entry.halfPixel = this.halfPixel;\n      var leftOffset = this.maxCanvasElementWidth * this.canvases.length;\n\n      // wave\n      var wave = util.withOrientation(this.wrapper.appendChild(document.createElement('canvas')), this.params.vertical);\n      this.style(wave, {\n        position: 'absolute',\n        zIndex: 2,\n        left: leftOffset + 'px',\n        top: 0,\n        bottom: 0,\n        height: '100%',\n        pointerEvents: 'none'\n      });\n      entry.initWave(wave);\n\n      // progress\n      if (this.hasProgressCanvas) {\n        var progress = util.withOrientation(this.progressWave.appendChild(document.createElement('canvas')), this.params.vertical);\n        this.style(progress, {\n          position: 'absolute',\n          left: leftOffset + 'px',\n          top: 0,\n          bottom: 0,\n          height: '100%'\n        });\n        entry.initProgress(progress);\n      }\n      this.canvases.push(entry);\n    }\n\n    /**\n     * Pop single canvas from the list\n     *\n     */\n  }, {\n    key: \"removeCanvas\",\n    value: function removeCanvas() {\n      var lastEntry = this.canvases[this.canvases.length - 1];\n\n      // wave\n      lastEntry.wave.parentElement.removeChild(lastEntry.wave.domElement);\n\n      // progress\n      if (this.hasProgressCanvas) {\n        lastEntry.progress.parentElement.removeChild(lastEntry.progress.domElement);\n      }\n\n      // cleanup\n      if (lastEntry) {\n        lastEntry.destroy();\n        lastEntry = null;\n      }\n      this.canvases.pop();\n    }\n\n    /**\n     * Update the dimensions of a canvas element\n     *\n     * @param {CanvasEntry} entry Target entry\n     * @param {number} width The new width of the element\n     * @param {number} height The new height of the element\n     */\n  }, {\n    key: \"updateDimensions\",\n    value: function updateDimensions(entry, width, height) {\n      var elementWidth = Math.round(width / this.params.pixelRatio);\n      var totalWidth = Math.round(this.width / this.params.pixelRatio);\n\n      // update canvas dimensions\n      entry.updateDimensions(elementWidth, totalWidth, width, height);\n\n      // style element\n      this.style(this.progressWave, {\n        display: 'block'\n      });\n    }\n\n    /**\n     * Clear the whole multi-canvas\n     */\n  }, {\n    key: \"clearWave\",\n    value: function clearWave() {\n      var _this3 = this;\n      util.frame(function () {\n        _this3.canvases.forEach(function (entry) {\n          return entry.clearWave();\n        });\n      })();\n    }\n\n    /**\n     * Draw a waveform with bars\n     *\n     * @param {number[]|Number.<Array[]>} peaks Can also be an array of arrays\n     * for split channel rendering\n     * @param {number} channelIndex The index of the current channel. Normally\n     * should be 0. Must be an integer.\n     * @param {number} start The x-offset of the beginning of the area that\n     * should be rendered\n     * @param {number} end The x-offset of the end of the area that should be\n     * rendered\n     * @returns {void}\n     */\n  }, {\n    key: \"drawBars\",\n    value: function drawBars(peaks, channelIndex, start, end) {\n      var _this4 = this;\n      return this.prepareDraw(peaks, channelIndex, start, end, function (_ref) {\n        var absmax = _ref.absmax,\n          hasMinVals = _ref.hasMinVals,\n          height = _ref.height,\n          offsetY = _ref.offsetY,\n          halfH = _ref.halfH,\n          peaks = _ref.peaks,\n          ch = _ref.channelIndex;\n        // if drawBars was called within ws.empty we don't pass a start and\n        // don't want anything to happen\n        if (start === undefined) {\n          return;\n        }\n        // Skip every other value if there are negatives.\n        var peakIndexScale = hasMinVals ? 2 : 1;\n        var length = peaks.length / peakIndexScale;\n        var bar = _this4.params.barWidth * _this4.params.pixelRatio;\n        var gap = _this4.params.barGap === null ? Math.max(_this4.params.pixelRatio, ~~(bar / 2)) : Math.max(_this4.params.pixelRatio, _this4.params.barGap * _this4.params.pixelRatio);\n        var step = bar + gap;\n        var scale = length / _this4.width;\n        var first = start;\n        var last = end;\n        var peakIndex = first;\n        for (peakIndex; peakIndex < last; peakIndex += step) {\n          // search for the highest peak in the range this bar falls into\n          var peak = 0;\n          var peakIndexRange = Math.floor(peakIndex * scale) * peakIndexScale; // start index\n          var peakIndexEnd = Math.floor((peakIndex + step) * scale) * peakIndexScale;\n          do {\n            // do..while makes sure at least one peak is always evaluated\n            var newPeak = Math.abs(peaks[peakIndexRange]); // for arrays starting with negative values\n            if (newPeak > peak) {\n              peak = newPeak; // higher\n            }\n\n            peakIndexRange += peakIndexScale; // skip every other value for negatives\n          } while (peakIndexRange < peakIndexEnd);\n\n          // calculate the height of this bar according to the highest peak found\n          var h = Math.round(peak / absmax * halfH);\n\n          // raise the bar height to the specified minimum height\n          // Math.max is used to replace any value smaller than barMinHeight (not just 0) with barMinHeight\n          if (_this4.params.barMinHeight) {\n            h = Math.max(h, _this4.params.barMinHeight);\n          }\n          _this4.fillRect(peakIndex + _this4.halfPixel, halfH - h + offsetY, bar + _this4.halfPixel, h * 2, _this4.barRadius, ch);\n        }\n      });\n    }\n\n    /**\n     * Draw a waveform\n     *\n     * @param {number[]|Number.<Array[]>} peaks Can also be an array of arrays\n     * for split channel rendering\n     * @param {number} channelIndex The index of the current channel. Normally\n     * should be 0\n     * @param {number?} start The x-offset of the beginning of the area that\n     * should be rendered (If this isn't set only a flat line is rendered)\n     * @param {number?} end The x-offset of the end of the area that should be\n     * rendered\n     * @returns {void}\n     */\n  }, {\n    key: \"drawWave\",\n    value: function drawWave(peaks, channelIndex, start, end) {\n      var _this5 = this;\n      return this.prepareDraw(peaks, channelIndex, start, end, function (_ref2) {\n        var absmax = _ref2.absmax,\n          hasMinVals = _ref2.hasMinVals,\n          height = _ref2.height,\n          offsetY = _ref2.offsetY,\n          halfH = _ref2.halfH,\n          peaks = _ref2.peaks,\n          channelIndex = _ref2.channelIndex;\n        if (!hasMinVals) {\n          var reflectedPeaks = [];\n          var len = peaks.length;\n          var i = 0;\n          for (i; i < len; i++) {\n            reflectedPeaks[2 * i] = peaks[i];\n            reflectedPeaks[2 * i + 1] = -peaks[i];\n          }\n          peaks = reflectedPeaks;\n        }\n\n        // if drawWave was called within ws.empty we don't pass a start and\n        // end and simply want a flat line\n        if (start !== undefined) {\n          _this5.drawLine(peaks, absmax, halfH, offsetY, start, end, channelIndex);\n        }\n\n        // always draw a median line\n        _this5.fillRect(0, halfH + offsetY - _this5.halfPixel, _this5.width, _this5.halfPixel, _this5.barRadius, channelIndex);\n      });\n    }\n\n    /**\n     * Tell the canvas entries to render their portion of the waveform\n     *\n     * @param {number[]} peaks Peaks data\n     * @param {number} absmax Maximum peak value (absolute)\n     * @param {number} halfH Half the height of the waveform\n     * @param {number} offsetY Offset to the top\n     * @param {number} start The x-offset of the beginning of the area that\n     * should be rendered\n     * @param {number} end The x-offset of the end of the area that\n     * should be rendered\n     * @param {channelIndex} channelIndex The channel index of the line drawn\n     */\n  }, {\n    key: \"drawLine\",\n    value: function drawLine(peaks, absmax, halfH, offsetY, start, end, channelIndex) {\n      var _this6 = this;\n      var _ref3 = this.params.splitChannelsOptions.channelColors[channelIndex] || {},\n        waveColor = _ref3.waveColor,\n        progressColor = _ref3.progressColor;\n      this.canvases.forEach(function (entry, i) {\n        _this6.setFillStyles(entry, waveColor, progressColor);\n        _this6.applyCanvasTransforms(entry, _this6.params.vertical);\n        entry.drawLines(peaks, absmax, halfH, offsetY, start, end);\n      });\n    }\n\n    /**\n     * Draw a rectangle on the multi-canvas\n     *\n     * @param {number} x X-position of the rectangle\n     * @param {number} y Y-position of the rectangle\n     * @param {number} width Width of the rectangle\n     * @param {number} height Height of the rectangle\n     * @param {number} radius Radius of the rectangle\n     * @param {channelIndex} channelIndex The channel index of the bar drawn\n     */\n  }, {\n    key: \"fillRect\",\n    value: function fillRect(x, y, width, height, radius, channelIndex) {\n      var startCanvas = Math.floor(x / this.maxCanvasWidth);\n      var endCanvas = Math.min(Math.ceil((x + width) / this.maxCanvasWidth) + 1, this.canvases.length);\n      var i = startCanvas;\n      for (i; i < endCanvas; i++) {\n        var entry = this.canvases[i];\n        var leftOffset = i * this.maxCanvasWidth;\n        var intersection = {\n          x1: Math.max(x, i * this.maxCanvasWidth),\n          y1: y,\n          x2: Math.min(x + width, i * this.maxCanvasWidth + entry.wave.width),\n          y2: y + height\n        };\n        if (intersection.x1 < intersection.x2) {\n          var _ref4 = this.params.splitChannelsOptions.channelColors[channelIndex] || {},\n            waveColor = _ref4.waveColor,\n            progressColor = _ref4.progressColor;\n          this.setFillStyles(entry, waveColor, progressColor);\n          this.applyCanvasTransforms(entry, this.params.vertical);\n          entry.fillRects(intersection.x1 - leftOffset, intersection.y1, intersection.x2 - intersection.x1, intersection.y2 - intersection.y1, radius);\n        }\n      }\n    }\n\n    /**\n     * Returns whether to hide the channel from being drawn based on params.\n     *\n     * @param {number} channelIndex The index of the current channel.\n     * @returns {bool} True to hide the channel, false to draw.\n     */\n  }, {\n    key: \"hideChannel\",\n    value: function hideChannel(channelIndex) {\n      return this.params.splitChannels && this.params.splitChannelsOptions.filterChannels.includes(channelIndex);\n    }\n\n    /**\n     * Performs preparation tasks and calculations which are shared by `drawBars`\n     * and `drawWave`\n     *\n     * @param {number[]|Number.<Array[]>} peaks Can also be an array of arrays for\n     * split channel rendering\n     * @param {number} channelIndex The index of the current channel. Normally\n     * should be 0\n     * @param {number?} start The x-offset of the beginning of the area that\n     * should be rendered. If this isn't set only a flat line is rendered\n     * @param {number?} end The x-offset of the end of the area that should be\n     * rendered\n     * @param {function} fn The render function to call, e.g. `drawWave`\n     * @param {number} drawIndex The index of the current channel after filtering.\n     * @param {number?} normalizedMax Maximum modulation value across channels for use with relativeNormalization. Ignored when undefined\n     * @returns {void}\n     */\n  }, {\n    key: \"prepareDraw\",\n    value: function prepareDraw(peaks, channelIndex, start, end, fn, drawIndex, normalizedMax) {\n      var _this7 = this;\n      return util.frame(function () {\n        // Split channels and call this function with the channelIndex set\n        if (peaks[0] instanceof Array) {\n          var channels = peaks;\n          if (_this7.params.splitChannels) {\n            var filteredChannels = channels.filter(function (c, i) {\n              return !_this7.hideChannel(i);\n            });\n            if (!_this7.params.splitChannelsOptions.overlay) {\n              _this7.setHeight(Math.max(filteredChannels.length, 1) * _this7.params.height * _this7.params.pixelRatio);\n            }\n            var overallAbsMax;\n            if (_this7.params.splitChannelsOptions && _this7.params.splitChannelsOptions.relativeNormalization) {\n              // calculate maximum peak across channels to use for normalization\n              overallAbsMax = util.max(channels.map(function (channelPeaks) {\n                return util.absMax(channelPeaks);\n              }));\n            }\n            return channels.forEach(function (channelPeaks, i) {\n              return _this7.prepareDraw(channelPeaks, i, start, end, fn, filteredChannels.indexOf(channelPeaks), overallAbsMax);\n            });\n          }\n          peaks = channels[0];\n        }\n\n        // Return and do not draw channel peaks if hidden.\n        if (_this7.hideChannel(channelIndex)) {\n          return;\n        }\n\n        // calculate maximum modulation value, either from the barHeight\n        // parameter or if normalize=true from the largest value in the peak\n        // set\n        var absmax = 1 / _this7.params.barHeight;\n        if (_this7.params.normalize) {\n          absmax = normalizedMax === undefined ? util.absMax(peaks) : normalizedMax;\n        }\n\n        // Bar wave draws the bottom only as a reflection of the top,\n        // so we don't need negative values\n        var hasMinVals = [].some.call(peaks, function (val) {\n          return val < 0;\n        });\n        var height = _this7.params.height * _this7.params.pixelRatio;\n        var halfH = height / 2;\n        var offsetY = height * drawIndex || 0;\n\n        // Override offsetY if overlay is true\n        if (_this7.params.splitChannelsOptions && _this7.params.splitChannelsOptions.overlay) {\n          offsetY = 0;\n        }\n        return fn({\n          absmax: absmax,\n          hasMinVals: hasMinVals,\n          height: height,\n          offsetY: offsetY,\n          halfH: halfH,\n          peaks: peaks,\n          channelIndex: channelIndex\n        });\n      })();\n    }\n\n    /**\n     * Set the fill styles for a certain entry (wave and progress)\n     *\n     * @param {CanvasEntry} entry Target entry\n     * @param {string} waveColor Wave color to draw this entry\n     * @param {string} progressColor Progress color to draw this entry\n     */\n  }, {\n    key: \"setFillStyles\",\n    value: function setFillStyles(entry) {\n      var waveColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.waveColor;\n      var progressColor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.params.progressColor;\n      entry.setFillStyles(waveColor, progressColor);\n    }\n\n    /**\n     * Set the canvas transforms for a certain entry (wave and progress)\n     *\n     * @param {CanvasEntry} entry Target entry\n     * @param {boolean} vertical Whether to render the waveform vertically\n     */\n  }, {\n    key: \"applyCanvasTransforms\",\n    value: function applyCanvasTransforms(entry) {\n      var vertical = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      entry.applyCanvasTransforms(vertical);\n    }\n\n    /**\n     * Return image data of the multi-canvas\n     *\n     * When using a `type` of `'blob'`, this will return a `Promise`.\n     *\n     * @param {string} format='image/png' An optional value of a format type.\n     * @param {number} quality=0.92 An optional value between 0 and 1.\n     * @param {string} type='dataURL' Either 'dataURL' or 'blob'.\n     * @return {string|string[]|Promise} When using the default `'dataURL'`\n     * `type` this returns a single data URL or an array of data URLs,\n     * one for each canvas. When using the `'blob'` `type` this returns a\n     * `Promise` that resolves with an array of `Blob` instances, one for each\n     * canvas.\n     */\n  }, {\n    key: \"getImage\",\n    value: function getImage(format, quality, type) {\n      if (type === 'blob') {\n        return Promise.all(this.canvases.map(function (entry) {\n          return entry.getImage(format, quality, type);\n        }));\n      } else if (type === 'dataURL') {\n        var images = this.canvases.map(function (entry) {\n          return entry.getImage(format, quality, type);\n        });\n        return images.length > 1 ? images : images[0];\n      }\n    }\n\n    /**\n     * Render the new progress\n     *\n     * @param {number} position X-offset of progress position in pixels\n     */\n  }, {\n    key: \"updateProgress\",\n    value: function updateProgress(position) {\n      this.style(this.progressWave, {\n        width: position + 'px'\n      });\n    }\n  }]);\n  return MultiCanvas;\n}(_drawer.default);\nexports[\"default\"] = MultiCanvas;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/mediaelement-webaudio.js\":\n/*!**************************************!*\\\n  !*** ./src/mediaelement-webaudio.js ***!\n  \\**************************************/\n/***/ ((module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\nvar _mediaelement = _interopRequireDefault(__webpack_require__(/*! ./mediaelement */ \"./src/mediaelement.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/**\n * MediaElementWebAudio backend: load audio via an HTML5 audio tag, but playback with the WebAudio API.\n * The advantage here is that the html5 <audio> tag can perform range requests on the server and not\n * buffer the entire file in one request, and you still get the filtering and scripting functionality\n * of the webaudio API.\n * Note that in order to use range requests and prevent buffering, you must provide peak data.\n *\n * @since 3.2.0\n */\nvar MediaElementWebAudio = /*#__PURE__*/function (_MediaElement) {\n  _inherits(MediaElementWebAudio, _MediaElement);\n  var _super = _createSuper(MediaElementWebAudio);\n  /**\n   * Construct the backend\n   *\n   * @param {WavesurferParams} params Wavesurfer parameters\n   */\n  function MediaElementWebAudio(params) {\n    var _this;\n    _classCallCheck(this, MediaElementWebAudio);\n    _this = _super.call(this, params);\n    /** @private */\n    _this.params = params;\n    /** @private */\n    _this.sourceMediaElement = null;\n    return _this;\n  }\n\n  /**\n   * Initialise the backend, called in `wavesurfer.createBackend()`\n   */\n  _createClass(MediaElementWebAudio, [{\n    key: \"init\",\n    value: function init() {\n      this.setPlaybackRate(this.params.audioRate);\n      this.createTimer();\n      this.createVolumeNode();\n      this.createScriptNode();\n      this.createAnalyserNode();\n    }\n    /**\n     * Private method called by both `load` (from url)\n     * and `loadElt` (existing media element) methods.\n     *\n     * @param {HTMLMediaElement} media HTML5 Audio or Video element\n     * @param {number[]|Number.<Array[]>} peaks Array of peak data\n     * @param {string} preload HTML 5 preload attribute value\n     * @private\n     */\n  }, {\n    key: \"_load\",\n    value: function _load(media, peaks, preload) {\n      _get(_getPrototypeOf(MediaElementWebAudio.prototype), \"_load\", this).call(this, media, peaks, preload);\n      this.createMediaElementSource(media);\n    }\n\n    /**\n     * Create MediaElementSource node\n     *\n     * @since 3.2.0\n     * @param {HTMLMediaElement} mediaElement HTML5 Audio to load\n     */\n  }, {\n    key: \"createMediaElementSource\",\n    value: function createMediaElementSource(mediaElement) {\n      this.sourceMediaElement = this.ac.createMediaElementSource(mediaElement);\n      this.sourceMediaElement.connect(this.analyser);\n    }\n  }, {\n    key: \"play\",\n    value: function play(start, end) {\n      this.resumeAudioContext();\n      return _get(_getPrototypeOf(MediaElementWebAudio.prototype), \"play\", this).call(this, start, end);\n    }\n\n    /**\n     * This is called when wavesurfer is destroyed\n     *\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      _get(_getPrototypeOf(MediaElementWebAudio.prototype), \"destroy\", this).call(this);\n      this.destroyWebAudio();\n    }\n  }]);\n  return MediaElementWebAudio;\n}(_mediaelement.default);\nexports[\"default\"] = MediaElementWebAudio;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/mediaelement.js\":\n/*!*****************************!*\\\n  !*** ./src/mediaelement.js ***!\n  \\*****************************/\n/***/ ((module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\nvar _webaudio = _interopRequireDefault(__webpack_require__(/*! ./webaudio */ \"./src/webaudio.js\"));\nvar util = _interopRequireWildcard(__webpack_require__(/*! ./util */ \"./src/util/index.js\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _get() { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get.bind(); } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(arguments.length < 3 ? target : receiver); } return desc.value; }; } return _get.apply(this, arguments); }\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n/**\n * MediaElement backend\n */\nvar MediaElement = /*#__PURE__*/function (_WebAudio) {\n  _inherits(MediaElement, _WebAudio);\n  var _super = _createSuper(MediaElement);\n  /**\n   * Construct the backend\n   *\n   * @param {WavesurferParams} params Wavesurfer parameters\n   */\n  function MediaElement(params) {\n    var _this;\n    _classCallCheck(this, MediaElement);\n    _this = _super.call(this, params);\n    /** @private */\n    _this.params = params;\n\n    /**\n     * Initially a dummy media element to catch errors. Once `_load` is\n     * called, this will contain the actual `HTMLMediaElement`.\n     * @private\n     */\n    _this.media = {\n      currentTime: 0,\n      duration: 0,\n      paused: true,\n      playbackRate: 1,\n      play: function play() {},\n      pause: function pause() {},\n      volume: 0\n    };\n\n    /** @private */\n    _this.mediaType = params.mediaType.toLowerCase();\n    /** @private */\n    _this.elementPosition = params.elementPosition;\n    /** @private */\n    _this.peaks = null;\n    /** @private */\n    _this.playbackRate = 1;\n    /** @private */\n    _this.volume = 1;\n    /** @private */\n    _this.isMuted = false;\n    /** @private */\n    _this.buffer = null;\n    /** @private */\n    _this.onPlayEnd = null;\n    /** @private */\n    _this.mediaListeners = {};\n    return _this;\n  }\n\n  /**\n   * Initialise the backend, called in `wavesurfer.createBackend()`\n   */\n  _createClass(MediaElement, [{\n    key: \"init\",\n    value: function init() {\n      this.setPlaybackRate(this.params.audioRate);\n      this.createTimer();\n    }\n\n    /**\n     * Attach event listeners to media element.\n     */\n  }, {\n    key: \"_setupMediaListeners\",\n    value: function _setupMediaListeners() {\n      var _this2 = this;\n      this.mediaListeners.error = function () {\n        _this2.fireEvent('error', 'Error loading media element');\n      };\n      this.mediaListeners.waiting = function () {\n        _this2.fireEvent('waiting');\n      };\n      this.mediaListeners.canplay = function () {\n        _this2.fireEvent('canplay');\n      };\n      this.mediaListeners.ended = function () {\n        _this2.fireEvent('finish');\n      };\n      // listen to and relay play, pause and seeked events to enable\n      // playback control from the external media element\n      this.mediaListeners.play = function () {\n        _this2.fireEvent('play');\n      };\n      this.mediaListeners.pause = function () {\n        _this2.fireEvent('pause');\n      };\n      this.mediaListeners.seeked = function (event) {\n        _this2.fireEvent('seek');\n      };\n      this.mediaListeners.volumechange = function (event) {\n        _this2.isMuted = _this2.media.muted;\n        if (_this2.isMuted) {\n          _this2.volume = 0;\n        } else {\n          _this2.volume = _this2.media.volume;\n        }\n        _this2.fireEvent('volume');\n      };\n\n      // reset event listeners\n      Object.keys(this.mediaListeners).forEach(function (id) {\n        _this2.media.removeEventListener(id, _this2.mediaListeners[id]);\n        _this2.media.addEventListener(id, _this2.mediaListeners[id]);\n      });\n    }\n\n    /**\n     * Create a timer to provide a more precise `audioprocess` event.\n     */\n  }, {\n    key: \"createTimer\",\n    value: function createTimer() {\n      var _this3 = this;\n      var onAudioProcess = function onAudioProcess() {\n        if (_this3.isPaused()) {\n          return;\n        }\n        _this3.fireEvent('audioprocess', _this3.getCurrentTime());\n\n        // Call again in the next frame\n        util.frame(onAudioProcess)();\n      };\n      this.on('play', onAudioProcess);\n\n      // Update the progress one more time to prevent it from being stuck in\n      // case of lower framerates\n      this.on('pause', function () {\n        _this3.fireEvent('audioprocess', _this3.getCurrentTime());\n      });\n    }\n\n    /**\n     * Create media element with url as its source,\n     * and append to container element.\n     *\n     * @param {string} url Path to media file\n     * @param {HTMLElement} container HTML element\n     * @param {number[]|Number.<Array[]>} peaks Array of peak data\n     * @param {string} preload HTML 5 preload attribute value\n     * @throws Will throw an error if the `url` argument is not a valid media\n     * element.\n     */\n  }, {\n    key: \"load\",\n    value: function load(url, container, peaks, preload) {\n      var media = document.createElement(this.mediaType);\n      media.controls = this.params.mediaControls;\n      media.autoplay = this.params.autoplay || false;\n      media.preload = preload == null ? 'auto' : preload;\n      media.src = url;\n      media.style.width = '100%';\n      var prevMedia = container.querySelector(this.mediaType);\n      if (prevMedia) {\n        container.removeChild(prevMedia);\n      }\n      container.appendChild(media);\n      this._load(media, peaks, preload);\n    }\n\n    /**\n     * Load existing media element.\n     *\n     * @param {HTMLMediaElement} elt HTML5 Audio or Video element\n     * @param {number[]|Number.<Array[]>} peaks Array of peak data\n     */\n  }, {\n    key: \"loadElt\",\n    value: function loadElt(elt, peaks) {\n      elt.controls = this.params.mediaControls;\n      elt.autoplay = this.params.autoplay || false;\n      this._load(elt, peaks, elt.preload);\n    }\n\n    /**\n     * Method called by both `load` (from url)\n     * and `loadElt` (existing media element) methods.\n     *\n     * @param {HTMLMediaElement} media HTML5 Audio or Video element\n     * @param {number[]|Number.<Array[]>} peaks Array of peak data\n     * @param {string} preload HTML 5 preload attribute value\n     * @throws Will throw an error if the `media` argument is not a valid media\n     * element.\n     * @private\n     */\n  }, {\n    key: \"_load\",\n    value: function _load(media, peaks, preload) {\n      // verify media element is valid\n      if (!(media instanceof HTMLMediaElement) || typeof media.addEventListener === 'undefined') {\n        throw new Error('media parameter is not a valid media element');\n      }\n\n      // load must be called manually on iOS, otherwise peaks won't draw\n      // until a user interaction triggers load --> 'ready' event\n      //\n      // note that we avoid calling media.load here when given peaks and preload == 'none'\n      // as this almost always triggers some browser fetch of the media.\n      if (typeof media.load == 'function' && !(peaks && preload == 'none')) {\n        // Resets the media element and restarts the media resource. Any\n        // pending events are discarded. How much media data is fetched is\n        // still affected by the preload attribute.\n        media.load();\n      }\n      this.media = media;\n      this._setupMediaListeners();\n      this.peaks = peaks;\n      this.onPlayEnd = null;\n      this.buffer = null;\n      this.isMuted = media.muted;\n      this.setPlaybackRate(this.playbackRate);\n      this.setVolume(this.volume);\n    }\n\n    /**\n     * Used by `wavesurfer.isPlaying()` and `wavesurfer.playPause()`\n     *\n     * @return {boolean} Media paused or not\n     */\n  }, {\n    key: \"isPaused\",\n    value: function isPaused() {\n      return !this.media || this.media.paused;\n    }\n\n    /**\n     * Used by `wavesurfer.getDuration()`\n     *\n     * @return {number} Duration\n     */\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      if (this.explicitDuration) {\n        return this.explicitDuration;\n      }\n      var duration = (this.buffer || this.media).duration;\n      if (duration >= Infinity) {\n        // streaming audio\n        duration = this.media.seekable.end(0);\n      }\n      return duration;\n    }\n\n    /**\n     * Returns the current time in seconds relative to the audio-clip's\n     * duration.\n     *\n     * @return {number} Current time\n     */\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.media && this.media.currentTime;\n    }\n\n    /**\n     * Get the position from 0 to 1\n     *\n     * @return {number} Current position\n     */\n  }, {\n    key: \"getPlayedPercents\",\n    value: function getPlayedPercents() {\n      return this.getCurrentTime() / this.getDuration() || 0;\n    }\n\n    /**\n     * Get the audio source playback rate.\n     *\n     * @return {number} Playback rate\n     */\n  }, {\n    key: \"getPlaybackRate\",\n    value: function getPlaybackRate() {\n      return this.playbackRate || this.media.playbackRate;\n    }\n\n    /**\n     * Set the audio source playback rate.\n     *\n     * @param {number} value Playback rate\n     */\n  }, {\n    key: \"setPlaybackRate\",\n    value: function setPlaybackRate(value) {\n      this.playbackRate = value || 1;\n      this.media.playbackRate = this.playbackRate;\n    }\n\n    /**\n     * Used by `wavesurfer.seekTo()`\n     *\n     * @param {number} start Position to start at in seconds\n     */\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(start) {\n      if (start != null && !isNaN(start)) {\n        this.media.currentTime = start;\n      }\n      this.clearPlayEnd();\n    }\n\n    /**\n     * Plays the loaded audio region.\n     *\n     * @param {number} start Start offset in seconds, relative to the beginning\n     * of a clip.\n     * @param {number} end When to stop, relative to the beginning of a clip.\n     * @emits MediaElement#play\n     * @return {Promise} Result\n     */\n  }, {\n    key: \"play\",\n    value: function play(start, end) {\n      this.seekTo(start);\n      var promise = this.media.play();\n      end && this.setPlayEnd(end);\n      return promise;\n    }\n\n    /**\n     * Pauses the loaded audio.\n     *\n     * @emits MediaElement#pause\n     * @return {Promise} Result\n     */\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      var promise;\n      if (this.media) {\n        promise = this.media.pause();\n      }\n      this.clearPlayEnd();\n      return promise;\n    }\n\n    /**\n     * Set the play end\n     *\n     * @param {number} end Where to end\n     */\n  }, {\n    key: \"setPlayEnd\",\n    value: function setPlayEnd(end) {\n      var _this4 = this;\n      this.clearPlayEnd();\n      this._onPlayEnd = function (time) {\n        if (time >= end) {\n          _this4.pause();\n          _this4.seekTo(end);\n        }\n      };\n      this.on('audioprocess', this._onPlayEnd);\n    }\n\n    /** @private */\n  }, {\n    key: \"clearPlayEnd\",\n    value: function clearPlayEnd() {\n      if (this._onPlayEnd) {\n        this.un('audioprocess', this._onPlayEnd);\n        this._onPlayEnd = null;\n      }\n    }\n\n    /**\n     * Compute the max and min value of the waveform when broken into\n     * <length> subranges.\n     *\n     * @param {number} length How many subranges to break the waveform into.\n     * @param {number} first First sample in the required range.\n     * @param {number} last Last sample in the required range.\n     * @return {number[]|Number.<Array[]>} Array of 2*<length> peaks or array of\n     * arrays of peaks consisting of (max, min) values for each subrange.\n     */\n  }, {\n    key: \"getPeaks\",\n    value: function getPeaks(length, first, last) {\n      if (this.buffer) {\n        return _get(_getPrototypeOf(MediaElement.prototype), \"getPeaks\", this).call(this, length, first, last);\n      }\n      return this.peaks || [];\n    }\n\n    /**\n     * Set the sink id for the media player\n     *\n     * @param {string} deviceId String value representing audio device id.\n     * @returns {Promise} A Promise that resolves to `undefined` when there\n     * are no errors.\n     */\n  }, {\n    key: \"setSinkId\",\n    value: function setSinkId(deviceId) {\n      if (deviceId) {\n        if (!this.media.setSinkId) {\n          return Promise.reject(new Error('setSinkId is not supported in your browser'));\n        }\n        return this.media.setSinkId(deviceId);\n      }\n      return Promise.reject(new Error('Invalid deviceId: ' + deviceId));\n    }\n\n    /**\n     * Get the current volume\n     *\n     * @return {number} value A floating point value between 0 and 1.\n     */\n  }, {\n    key: \"getVolume\",\n    value: function getVolume() {\n      return this.volume;\n    }\n\n    /**\n     * Set the audio volume\n     *\n     * @param {number} value A floating point value between 0 and 1.\n     */\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(value) {\n      this.volume = value;\n      // no need to change when it's already at that volume\n      if (this.media.volume !== this.volume) {\n        this.media.volume = this.volume;\n      }\n    }\n\n    /**\n     * Enable or disable muted audio\n     *\n     * @since 4.0.0\n     * @param {boolean} muted Specify `true` to mute audio.\n     */\n  }, {\n    key: \"setMute\",\n    value: function setMute(muted) {\n      // This causes a volume change to be emitted too through the\n      // volumechange event listener.\n      this.isMuted = this.media.muted = muted;\n    }\n\n    /**\n     * This is called when wavesurfer is destroyed\n     *\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      var _this5 = this;\n      this.pause();\n      this.unAll();\n      this.destroyed = true;\n\n      // cleanup media event listeners\n      Object.keys(this.mediaListeners).forEach(function (id) {\n        if (_this5.media) {\n          _this5.media.removeEventListener(id, _this5.mediaListeners[id]);\n        }\n      });\n      if (this.params.removeMediaElementOnDestroy && this.media && this.media.parentNode) {\n        this.media.parentNode.removeChild(this.media);\n      }\n      this.media = null;\n    }\n  }]);\n  return MediaElement;\n}(_webaudio.default);\nexports[\"default\"] = MediaElement;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/peakcache.js\":\n/*!**************************!*\\\n  !*** ./src/peakcache.js ***!\n  \\**************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * Caches the decoded peaks data to improve rendering speed for large audio\n *\n * Is used if the option parameter `partialRender` is set to `true`\n */\nvar PeakCache = /*#__PURE__*/function () {\n  /**\n   * Instantiate cache\n   */\n  function PeakCache() {\n    _classCallCheck(this, PeakCache);\n    this.clearPeakCache();\n  }\n\n  /**\n   * Empty the cache\n   */\n  _createClass(PeakCache, [{\n    key: \"clearPeakCache\",\n    value: function clearPeakCache() {\n      /**\n       * Flat array with entries that are always in pairs to mark the\n       * beginning and end of each subrange.  This is a convenience so we can\n       * iterate over the pairs for easy set difference operations.\n       * @private\n       */\n      this.peakCacheRanges = [];\n      /**\n       * Length of the entire cachable region, used for resetting the cache\n       * when this changes (zoom events, for instance).\n       * @private\n       */\n      this.peakCacheLength = -1;\n    }\n\n    /**\n     * Add a range of peaks to the cache\n     *\n     * @param {number} length The length of the range\n     * @param {number} start The x offset of the start of the range\n     * @param {number} end The x offset of the end of the range\n     * @return {Number.<Array[]>} Array with arrays of numbers\n     */\n  }, {\n    key: \"addRangeToPeakCache\",\n    value: function addRangeToPeakCache(length, start, end) {\n      if (length != this.peakCacheLength) {\n        this.clearPeakCache();\n        this.peakCacheLength = length;\n      }\n\n      // Return ranges that weren't in the cache before the call.\n      var uncachedRanges = [];\n      var i = 0;\n      // Skip ranges before the current start.\n      while (i < this.peakCacheRanges.length && this.peakCacheRanges[i] < start) {\n        i++;\n      }\n      // If |i| is even, |start| falls after an existing range.  Otherwise,\n      // |start| falls between an existing range, and the uncached region\n      // starts when we encounter the next node in |peakCacheRanges| or\n      // |end|, whichever comes first.\n      if (i % 2 == 0) {\n        uncachedRanges.push(start);\n      }\n      while (i < this.peakCacheRanges.length && this.peakCacheRanges[i] <= end) {\n        uncachedRanges.push(this.peakCacheRanges[i]);\n        i++;\n      }\n      // If |i| is even, |end| is after all existing ranges.\n      if (i % 2 == 0) {\n        uncachedRanges.push(end);\n      }\n\n      // Filter out the 0-length ranges.\n      uncachedRanges = uncachedRanges.filter(function (item, pos, arr) {\n        if (pos == 0) {\n          return item != arr[pos + 1];\n        } else if (pos == arr.length - 1) {\n          return item != arr[pos - 1];\n        }\n        return item != arr[pos - 1] && item != arr[pos + 1];\n      });\n\n      // Merge the two ranges together, uncachedRanges will either contain\n      // wholly new points, or duplicates of points in peakCacheRanges.  If\n      // duplicates are detected, remove both and extend the range.\n      this.peakCacheRanges = this.peakCacheRanges.concat(uncachedRanges);\n      this.peakCacheRanges = this.peakCacheRanges.sort(function (a, b) {\n        return a - b;\n      }).filter(function (item, pos, arr) {\n        if (pos == 0) {\n          return item != arr[pos + 1];\n        } else if (pos == arr.length - 1) {\n          return item != arr[pos - 1];\n        }\n        return item != arr[pos - 1] && item != arr[pos + 1];\n      });\n\n      // Push the uncached ranges into an array of arrays for ease of\n      // iteration in the functions that call this.\n      var uncachedRangePairs = [];\n      for (i = 0; i < uncachedRanges.length; i += 2) {\n        uncachedRangePairs.push([uncachedRanges[i], uncachedRanges[i + 1]]);\n      }\n      return uncachedRangePairs;\n    }\n\n    /**\n     * For testing\n     *\n     * @return {Number.<Array[]>} Array with arrays of numbers\n     */\n  }, {\n    key: \"getCacheRanges\",\n    value: function getCacheRanges() {\n      var peakCacheRangePairs = [];\n      var i;\n      for (i = 0; i < this.peakCacheRanges.length; i += 2) {\n        peakCacheRangePairs.push([this.peakCacheRanges[i], this.peakCacheRanges[i + 1]]);\n      }\n      return peakCacheRangePairs;\n    }\n  }]);\n  return PeakCache;\n}();\nexports[\"default\"] = PeakCache;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/absMax.js\":\n/*!****************************!*\\\n  !*** ./src/util/absMax.js ***!\n  \\****************************/\n/***/ ((module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = absMax;\nvar _max = _interopRequireDefault(__webpack_require__(/*! ./max */ \"./src/util/max.js\"));\nvar _min = _interopRequireDefault(__webpack_require__(/*! ./min */ \"./src/util/min.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n/**\r\n * Get the largest absolute value in an array\r\n *\r\n * @param   {Array} values Array of numbers\r\n * @returns {Number} Largest number found\r\n * @example console.log(max([-3, 2, 1]), max([-3, 2, 4])); // logs 3 4\r\n * @since 4.3.0\r\n */\nfunction absMax(values) {\n  var max = (0, _max.default)(values);\n  var min = (0, _min.default)(values);\n  return -min > max ? -min : max;\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/clamp.js\":\n/*!***************************!*\\\n  !*** ./src/util/clamp.js ***!\n  \\***************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = clamp;\n/**\n * Returns a number limited to the given range.\n *\n * @param {number} val The number to be limited to a range\n * @param {number} min The lower boundary of the limit range\n * @param {number} max The upper boundary of the limit range\n * @returns {number} A number in the range [min, max]\n */\nfunction clamp(val, min, max) {\n  return Math.min(Math.max(min, val), max);\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/fetch.js\":\n/*!***************************!*\\\n  !*** ./src/util/fetch.js ***!\n  \\***************************/\n/***/ ((module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = fetchFile;\nvar _observer = _interopRequireDefault(__webpack_require__(/*! ./observer */ \"./src/util/observer.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar ProgressHandler = /*#__PURE__*/function () {\n  /**\n   * Instantiate ProgressHandler\n   *\n   * @param {Observer} instance The `fetchFile` observer instance.\n   * @param {Number} contentLength Content length.\n   * @param {Response} response Response object.\n   */\n  function ProgressHandler(instance, contentLength, response) {\n    _classCallCheck(this, ProgressHandler);\n    this.instance = instance;\n    this.instance._reader = response.body.getReader();\n    this.total = parseInt(contentLength, 10);\n    this.loaded = 0;\n  }\n\n  /**\n   * A method that is called once, immediately after the `ReadableStream``\n   * is constructed.\n   *\n   * @param {ReadableStreamDefaultController} controller Controller instance\n   *     used to control the stream.\n   */\n  _createClass(ProgressHandler, [{\n    key: \"start\",\n    value: function start(controller) {\n      var _this = this;\n      var read = function read() {\n        // instance._reader.read() returns a promise that resolves\n        // when a value has been received\n        _this.instance._reader.read().then(function (_ref) {\n          var done = _ref.done,\n            value = _ref.value;\n          // result objects contain two properties:\n          // done  - true if the stream has already given you all its data.\n          // value - some data. Always undefined when done is true.\n          if (done) {\n            // ensure onProgress called when content-length=0\n            if (_this.total === 0) {\n              _this.instance.onProgress.call(_this.instance, {\n                loaded: _this.loaded,\n                total: _this.total,\n                lengthComputable: false\n              });\n            }\n            // no more data needs to be consumed, close the stream\n            controller.close();\n            return;\n          }\n          _this.loaded += value.byteLength;\n          _this.instance.onProgress.call(_this.instance, {\n            loaded: _this.loaded,\n            total: _this.total,\n            lengthComputable: !(_this.total === 0)\n          });\n          // enqueue the next data chunk into our target stream\n          controller.enqueue(value);\n          read();\n        }).catch(function (error) {\n          controller.error(error);\n        });\n      };\n      read();\n    }\n  }]);\n  return ProgressHandler;\n}();\n/**\n * Load a file using `fetch`.\n *\n * @param {object} options Request options to use. See example below.\n * @returns {Observer} Observer instance\n * @example\n * // default options\n * let options = {\n *     url: undefined,\n *     method: 'GET',\n *     mode: 'cors',\n *     credentials: 'same-origin',\n *     cache: 'default',\n *     responseType: 'json',\n *     requestHeaders: [],\n *     redirect: 'follow',\n *     referrer: 'client'\n * };\n *\n * // override some options\n * options.url = '../media/demo.wav';\n\n * // available types: 'arraybuffer', 'blob', 'json' or 'text'\n * options.responseType = 'arraybuffer';\n *\n * // make fetch call\n * let request = util.fetchFile(options);\n *\n * // listen for events\n * request.on('progress', e => {\n *     console.log('progress', e);\n * });\n *\n * request.on('success', data => {\n *     console.log('success!', data);\n * });\n *\n * request.on('error', e => {\n *     console.warn('fetchFile error: ', e);\n * });\n */\nfunction fetchFile(options) {\n  if (!options) {\n    throw new Error('fetch options missing');\n  } else if (!options.url) {\n    throw new Error('fetch url missing');\n  }\n  var instance = new _observer.default();\n  var fetchHeaders = new Headers();\n  var fetchRequest = new Request(options.url);\n\n  // add ability to abort\n  instance.controller = new AbortController();\n\n  // check if headers have to be added\n  if (options && options.requestHeaders) {\n    // add custom request headers\n    options.requestHeaders.forEach(function (header) {\n      fetchHeaders.append(header.key, header.value);\n    });\n  }\n\n  // parse fetch options\n  var responseType = options.responseType || 'json';\n  var fetchOptions = {\n    method: options.method || 'GET',\n    headers: fetchHeaders,\n    mode: options.mode || 'cors',\n    credentials: options.credentials || 'same-origin',\n    cache: options.cache || 'default',\n    redirect: options.redirect || 'follow',\n    referrer: options.referrer || 'client',\n    signal: instance.controller.signal\n  };\n  fetch(fetchRequest, fetchOptions).then(function (response) {\n    // store response reference\n    instance.response = response;\n    var progressAvailable = true;\n    if (!response.body) {\n      // ReadableStream is not yet supported in this browser\n      // see https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n      progressAvailable = false;\n    }\n\n    // Server must send CORS header \"Access-Control-Expose-Headers: content-length\"\n    var contentLength = response.headers.get('content-length');\n    if (contentLength === null) {\n      // Content-Length server response header missing.\n      // Don't evaluate download progress if we can't compare against a total size\n      // see https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Access-Control-Expose-Headers\n      progressAvailable = false;\n    }\n    if (!progressAvailable) {\n      // not able to check download progress so skip it\n      return response;\n    }\n\n    // fire progress event when during load\n    instance.onProgress = function (e) {\n      instance.fireEvent('progress', e);\n    };\n    return new Response(new ReadableStream(new ProgressHandler(instance, contentLength, response)), fetchOptions);\n  }).then(function (response) {\n    var errMsg;\n    if (response.ok) {\n      switch (responseType) {\n        case 'arraybuffer':\n          return response.arrayBuffer();\n        case 'json':\n          return response.json();\n        case 'blob':\n          return response.blob();\n        case 'text':\n          return response.text();\n        default:\n          errMsg = 'Unknown responseType: ' + responseType;\n          break;\n      }\n    }\n    if (!errMsg) {\n      errMsg = 'HTTP error status: ' + response.status;\n    }\n    throw new Error(errMsg);\n  }).then(function (response) {\n    instance.fireEvent('success', response);\n  }).catch(function (error) {\n    instance.fireEvent('error', error);\n  });\n\n  // return the fetch request\n  instance.fetchRequest = fetchRequest;\n  return instance;\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/frame.js\":\n/*!***************************!*\\\n  !*** ./src/util/frame.js ***!\n  \\***************************/\n/***/ ((module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = frame;\nvar _requestAnimationFrame = _interopRequireDefault(__webpack_require__(/*! ./request-animation-frame */ \"./src/util/request-animation-frame.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n/**\n * Create a function which will be called at the next requestAnimationFrame\n * cycle\n *\n * @param {function} func The function to call\n *\n * @return {func} The function wrapped within a requestAnimationFrame\n */\nfunction frame(func) {\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return (0, _requestAnimationFrame.default)(function () {\n      return func.apply(void 0, args);\n    });\n  };\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/get-id.js\":\n/*!****************************!*\\\n  !*** ./src/util/get-id.js ***!\n  \\****************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = getId;\n/**\n * Get a random prefixed ID\n *\n * @param {String} prefix Prefix to use. Default is `'wavesurfer_'`.\n * @returns {String} Random prefixed ID\n * @example\n * console.log(getId()); // logs 'wavesurfer_b5pors4ru6g'\n *\n * let prefix = 'foo-';\n * console.log(getId(prefix)); // logs 'foo-b5pors4ru6g'\n */\nfunction getId(prefix) {\n  if (prefix === undefined) {\n    prefix = 'wavesurfer_';\n  }\n  return prefix + Math.random().toString(32).substring(2);\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/index.js\":\n/*!***************************!*\\\n  !*** ./src/util/index.js ***!\n  \\***************************/\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nObject.defineProperty(exports, \"Observer\", ({\n  enumerable: true,\n  get: function get() {\n    return _observer.default;\n  }\n}));\nObject.defineProperty(exports, \"absMax\", ({\n  enumerable: true,\n  get: function get() {\n    return _absMax.default;\n  }\n}));\nObject.defineProperty(exports, \"clamp\", ({\n  enumerable: true,\n  get: function get() {\n    return _clamp.default;\n  }\n}));\nObject.defineProperty(exports, \"debounce\", ({\n  enumerable: true,\n  get: function get() {\n    return _debounce.default;\n  }\n}));\nObject.defineProperty(exports, \"fetchFile\", ({\n  enumerable: true,\n  get: function get() {\n    return _fetch.default;\n  }\n}));\nObject.defineProperty(exports, \"frame\", ({\n  enumerable: true,\n  get: function get() {\n    return _frame.default;\n  }\n}));\nObject.defineProperty(exports, \"getId\", ({\n  enumerable: true,\n  get: function get() {\n    return _getId.default;\n  }\n}));\nObject.defineProperty(exports, \"ignoreSilenceMode\", ({\n  enumerable: true,\n  get: function get() {\n    return _silenceMode.default;\n  }\n}));\nObject.defineProperty(exports, \"max\", ({\n  enumerable: true,\n  get: function get() {\n    return _max.default;\n  }\n}));\nObject.defineProperty(exports, \"min\", ({\n  enumerable: true,\n  get: function get() {\n    return _min.default;\n  }\n}));\nObject.defineProperty(exports, \"preventClick\", ({\n  enumerable: true,\n  get: function get() {\n    return _preventClick.default;\n  }\n}));\nObject.defineProperty(exports, \"requestAnimationFrame\", ({\n  enumerable: true,\n  get: function get() {\n    return _requestAnimationFrame.default;\n  }\n}));\nObject.defineProperty(exports, \"style\", ({\n  enumerable: true,\n  get: function get() {\n    return _style.default;\n  }\n}));\nObject.defineProperty(exports, \"withOrientation\", ({\n  enumerable: true,\n  get: function get() {\n    return _orientation.default;\n  }\n}));\nvar _getId = _interopRequireDefault(__webpack_require__(/*! ./get-id */ \"./src/util/get-id.js\"));\nvar _max = _interopRequireDefault(__webpack_require__(/*! ./max */ \"./src/util/max.js\"));\nvar _min = _interopRequireDefault(__webpack_require__(/*! ./min */ \"./src/util/min.js\"));\nvar _absMax = _interopRequireDefault(__webpack_require__(/*! ./absMax */ \"./src/util/absMax.js\"));\nvar _observer = _interopRequireDefault(__webpack_require__(/*! ./observer */ \"./src/util/observer.js\"));\nvar _style = _interopRequireDefault(__webpack_require__(/*! ./style */ \"./src/util/style.js\"));\nvar _requestAnimationFrame = _interopRequireDefault(__webpack_require__(/*! ./request-animation-frame */ \"./src/util/request-animation-frame.js\"));\nvar _frame = _interopRequireDefault(__webpack_require__(/*! ./frame */ \"./src/util/frame.js\"));\nvar _debounce = _interopRequireDefault(__webpack_require__(/*! debounce */ \"./node_modules/debounce/index.js\"));\nvar _preventClick = _interopRequireDefault(__webpack_require__(/*! ./prevent-click */ \"./src/util/prevent-click.js\"));\nvar _fetch = _interopRequireDefault(__webpack_require__(/*! ./fetch */ \"./src/util/fetch.js\"));\nvar _clamp = _interopRequireDefault(__webpack_require__(/*! ./clamp */ \"./src/util/clamp.js\"));\nvar _orientation = _interopRequireDefault(__webpack_require__(/*! ./orientation */ \"./src/util/orientation.js\"));\nvar _silenceMode = _interopRequireDefault(__webpack_require__(/*! ./silence-mode */ \"./src/util/silence-mode.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/***/ }),\n\n/***/ \"./src/util/max.js\":\n/*!*************************!*\\\n  !*** ./src/util/max.js ***!\n  \\*************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = max;\n/**\n * Get the largest value\n *\n * @param   {Array} values Array of numbers\n * @returns {Number} Largest number found\n * @example console.log(max([1, 2, 3])); // logs 3\n */\nfunction max(values) {\n  var largest = -Infinity;\n  Object.keys(values).forEach(function (i) {\n    if (values[i] > largest) {\n      largest = values[i];\n    }\n  });\n  return largest;\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/min.js\":\n/*!*************************!*\\\n  !*** ./src/util/min.js ***!\n  \\*************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = min;\n/**\n * Get the smallest value\n *\n * @param   {Array} values Array of numbers\n * @returns {Number} Smallest number found\n * @example console.log(min([1, 2, 3])); // logs 1\n */\nfunction min(values) {\n  var smallest = Number(Infinity);\n  Object.keys(values).forEach(function (i) {\n    if (values[i] < smallest) {\n      smallest = values[i];\n    }\n  });\n  return smallest;\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/observer.js\":\n/*!******************************!*\\\n  !*** ./src/util/observer.js ***!\n  \\******************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/**\n * @typedef {Object} ListenerDescriptor\n * @property {string} name The name of the event\n * @property {function} callback The callback\n * @property {function} un The function to call to remove the listener\n */\n/**\n * Observer class\n */\nvar Observer = /*#__PURE__*/function () {\n  /**\n   * Instantiate Observer\n   */\n  function Observer() {\n    _classCallCheck(this, Observer);\n    /**\n     * @private\n     * @todo Initialise the handlers here already and remove the conditional\n     * assignment in `on()`\n     */\n    this._disabledEventEmissions = [];\n    this.handlers = null;\n  }\n  /**\n   * Attach a handler function for an event.\n   *\n   * @param {string} event Name of the event to listen to\n   * @param {function} fn The callback to trigger when the event is fired\n   * @return {ListenerDescriptor} The event descriptor\n   */\n  _createClass(Observer, [{\n    key: \"on\",\n    value: function on(event, fn) {\n      var _this = this;\n      if (!this.handlers) {\n        this.handlers = {};\n      }\n      var handlers = this.handlers[event];\n      if (!handlers) {\n        handlers = this.handlers[event] = [];\n      }\n      handlers.push(fn);\n\n      // Return an event descriptor\n      return {\n        name: event,\n        callback: fn,\n        un: function un(e, fn) {\n          return _this.un(e, fn);\n        }\n      };\n    }\n\n    /**\n     * Remove an event handler.\n     *\n     * @param {string} event Name of the event the listener that should be\n     * removed listens to\n     * @param {function} fn The callback that should be removed\n     */\n  }, {\n    key: \"un\",\n    value: function un(event, fn) {\n      if (!this.handlers) {\n        return;\n      }\n      var handlers = this.handlers[event];\n      var i;\n      if (handlers) {\n        if (fn) {\n          for (i = handlers.length - 1; i >= 0; i--) {\n            if (handlers[i] == fn) {\n              handlers.splice(i, 1);\n            }\n          }\n        } else {\n          handlers.length = 0;\n        }\n      }\n    }\n\n    /**\n     * Remove all event handlers.\n     */\n  }, {\n    key: \"unAll\",\n    value: function unAll() {\n      this.handlers = null;\n    }\n\n    /**\n     * Attach a handler to an event. The handler is executed at most once per\n     * event type.\n     *\n     * @param {string} event The event to listen to\n     * @param {function} handler The callback that is only to be called once\n     * @return {ListenerDescriptor} The event descriptor\n     */\n  }, {\n    key: \"once\",\n    value: function once(event, handler) {\n      var _this2 = this;\n      var fn = function fn() {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n        /*  eslint-disable no-invalid-this */\n        handler.apply(_this2, args);\n        /*  eslint-enable no-invalid-this */\n        setTimeout(function () {\n          _this2.un(event, fn);\n        }, 0);\n      };\n      return this.on(event, fn);\n    }\n\n    /**\n     * Disable firing a list of events by name. When specified, event handlers for any event type\n     * passed in here will not be called.\n     *\n     * @since 4.0.0\n     * @param {string[]} eventNames an array of event names to disable emissions for\n     * @example\n     * // disable seek and interaction events\n     * wavesurfer.setDisabledEventEmissions(['seek', 'interaction']);\n     */\n  }, {\n    key: \"setDisabledEventEmissions\",\n    value: function setDisabledEventEmissions(eventNames) {\n      this._disabledEventEmissions = eventNames;\n    }\n\n    /**\n     * plugins borrow part of this class without calling the constructor,\n     * so we have to be careful about _disabledEventEmissions\n     */\n  }, {\n    key: \"_isDisabledEventEmission\",\n    value: function _isDisabledEventEmission(event) {\n      return this._disabledEventEmissions && this._disabledEventEmissions.includes(event);\n    }\n\n    /**\n     * Manually fire an event\n     *\n     * @param {string} event The event to fire manually\n     * @param {...any} args The arguments with which to call the listeners\n     */\n  }, {\n    key: \"fireEvent\",\n    value: function fireEvent(event) {\n      for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n      if (!this.handlers || this._isDisabledEventEmission(event)) {\n        return;\n      }\n      var handlers = this.handlers[event];\n      handlers && handlers.forEach(function (fn) {\n        fn.apply(void 0, args);\n      });\n    }\n  }]);\n  return Observer;\n}();\nexports[\"default\"] = Observer;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/orientation.js\":\n/*!*********************************!*\\\n  !*** ./src/util/orientation.js ***!\n  \\*********************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = withOrientation;\nvar verticalPropMap = {\n  width: 'height',\n  height: 'width',\n  overflowX: 'overflowY',\n  overflowY: 'overflowX',\n  clientWidth: 'clientHeight',\n  clientHeight: 'clientWidth',\n  clientX: 'clientY',\n  clientY: 'clientX',\n  scrollWidth: 'scrollHeight',\n  scrollLeft: 'scrollTop',\n  offsetLeft: 'offsetTop',\n  offsetTop: 'offsetLeft',\n  offsetHeight: 'offsetWidth',\n  offsetWidth: 'offsetHeight',\n  left: 'top',\n  right: 'bottom',\n  top: 'left',\n  bottom: 'right',\n  borderRightStyle: 'borderBottomStyle',\n  borderRightWidth: 'borderBottomWidth',\n  borderRightColor: 'borderBottomColor'\n};\n\n/**\n * Convert a horizontally-oriented property name to a vertical one.\n *\n * @param {string} prop A property name\n * @param {bool} vertical Whether the element is oriented vertically\n * @returns {string} prop, converted appropriately\n */\nfunction mapProp(prop, vertical) {\n  if (Object.prototype.hasOwnProperty.call(verticalPropMap, prop)) {\n    return vertical ? verticalPropMap[prop] : prop;\n  } else {\n    return prop;\n  }\n}\nvar isProxy = Symbol(\"isProxy\");\n\n/**\n * Returns an appropriately oriented object based on vertical.\n * If vertical is true, attribute getting and setting will be mapped through\n * verticalPropMap, so that e.g. getting the object's .width will give its\n * .height instead.\n * Certain methods of an oriented object will return oriented objects as well.\n * Oriented objects can't be added to the DOM directly since they are Proxy objects\n * and thus fail typechecks. Use domElement to get the actual element for this.\n *\n * @param {object} target The object to be wrapped and oriented\n * @param {bool} vertical Whether the element is oriented vertically\n * @returns {Proxy} An oriented object with attr translation via verticalAttrMap\n * @since 5.0.0\n */\nfunction withOrientation(target, vertical) {\n  if (target[isProxy]) {\n    return target;\n  } else {\n    return new Proxy(target, {\n      get: function get(obj, prop, receiver) {\n        if (prop === isProxy) {\n          return true;\n        } else if (prop === 'domElement') {\n          return obj;\n        } else if (prop === 'style') {\n          return withOrientation(obj.style, vertical);\n        } else if (prop === 'canvas') {\n          return withOrientation(obj.canvas, vertical);\n        } else if (prop === 'getBoundingClientRect') {\n          return function () {\n            return withOrientation(obj.getBoundingClientRect.apply(obj, arguments), vertical);\n          };\n        } else if (prop === 'getContext') {\n          return function () {\n            return withOrientation(obj.getContext.apply(obj, arguments), vertical);\n          };\n        } else {\n          var value = obj[mapProp(prop, vertical)];\n          return typeof value == 'function' ? value.bind(obj) : value;\n        }\n      },\n      set: function set(obj, prop, value) {\n        obj[mapProp(prop, vertical)] = value;\n        return true;\n      }\n    });\n  }\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/prevent-click.js\":\n/*!***********************************!*\\\n  !*** ./src/util/prevent-click.js ***!\n  \\***********************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = preventClick;\n/**\n * Stops propagation of click event and removes event listener\n *\n * @private\n * @param {object} event The click event\n */\nfunction preventClickHandler(event) {\n  event.stopPropagation();\n  document.body.removeEventListener('click', preventClickHandler, true);\n}\n\n/**\n * Starts listening for click event and prevent propagation\n *\n * @param {object} values Values\n */\nfunction preventClick(values) {\n  document.body.addEventListener('click', preventClickHandler, true);\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/request-animation-frame.js\":\n/*!*********************************************!*\\\n  !*** ./src/util/request-animation-frame.js ***!\n  \\*********************************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\n/* eslint-disable valid-jsdoc */\n/**\n * Returns the `requestAnimationFrame` function for the browser, or a shim with\n * `setTimeout` if the function is not found\n *\n * @return {function} Available `requestAnimationFrame` function for the browser\n */\nvar _default = (window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback, element) {\n  return setTimeout(callback, 1000 / 60);\n}).bind(window);\nexports[\"default\"] = _default;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/silence-mode.js\":\n/*!**********************************!*\\\n  !*** ./src/util/silence-mode.js ***!\n  \\**********************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = ignoreSilenceMode;\n/**\n * Ignores device silence mode when using the `WebAudio` backend.\n *\n * Many mobile devices contain a hardware button to mute the ringtone for incoming\n * calls and messages. Unfortunately, on some platforms like iOS, this also mutes\n * wavesurfer's audio when using the `WebAudio` backend. This function creates a\n * temporary `<audio>` element that makes sure the WebAudio backend keeps playing\n * when muting the device ringer.\n *\n * @since 5.2.0\n */\nfunction ignoreSilenceMode() {\n  // Set webaudio context with 1 second silent audio 44100 bit rate buffer to allow playing audio even if silent switch is on the device\n  var silentAC = new AudioContext();\n  var silentBS = silentAC.createBufferSource();\n  silentBS.buffer = silentAC.createBuffer(1, 1, 44100);\n  silentBS.connect(silentAC.destination);\n  silentBS.start();\n\n  // Set the src to a short bit of url encoded as a silent mp3\n  // NOTE The silence MP3 must be high quality, when web audio sounds are played\n  // in parallel the web audio sound is mixed to match the bitrate of the html sound\n  // 0.01 seconds of silence VBR220-260 Joint Stereo 859B\n  var audioData = \"data:audio/mpeg;base64,//uQxAAAAAAAAAAAAAAAAAAAAAAAWGluZwAAAA8AAAACAAACcQCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA//////////////////////////////////////////////////////////////////8AAABhTEFNRTMuMTAwA8MAAAAAAAAAABQgJAUHQQAB9AAAAnGMHkkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//sQxAADgnABGiAAQBCqgCRMAAgEAH///////////////7+n/9FTuQsQH//////2NG0jWUGlio5gLQTOtIoeR2WX////X4s9Atb/JRVCbBUpeRUq//////////////////9RUi0f2jn/+xDECgPCjAEQAABN4AAANIAAAAQVTEFNRTMuMTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==\";\n\n  // disable iOS Airplay (setting the attribute in js doesn't work)\n  var tmp = document.createElement(\"div\");\n  tmp.innerHTML = '<audio x-webkit-airplay=\"deny\"></audio>';\n  var audioSilentMode = tmp.children.item(0);\n  audioSilentMode.src = audioData;\n  audioSilentMode.preload = \"auto\";\n  audioSilentMode.type = \"audio/mpeg\";\n  audioSilentMode.disableRemotePlayback = true;\n\n  // play\n  audioSilentMode.play();\n\n  // cleanup\n  audioSilentMode.remove();\n  tmp.remove();\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/util/style.js\":\n/*!***************************!*\\\n  !*** ./src/util/style.js ***!\n  \\***************************/\n/***/ ((module, exports) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = style;\n/**\n * Apply a map of styles to an element\n *\n * @param {HTMLElement} el The element that the styles will be applied to\n * @param {Object} styles The map of propName: attribute, both are used as-is\n *\n * @return {HTMLElement} el\n */\nfunction style(el, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    if (el.style[prop] !== styles[prop]) {\n      el.style[prop] = styles[prop];\n    }\n  });\n  return el;\n}\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/wavesurfer.js\":\n/*!***************************!*\\\n  !*** ./src/wavesurfer.js ***!\n  \\***************************/\n/***/ ((module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\nvar util = _interopRequireWildcard(__webpack_require__(/*! ./util */ \"./src/util/index.js\"));\nvar _drawer = _interopRequireDefault(__webpack_require__(/*! ./drawer.multicanvas */ \"./src/drawer.multicanvas.js\"));\nvar _webaudio = _interopRequireDefault(__webpack_require__(/*! ./webaudio */ \"./src/webaudio.js\"));\nvar _mediaelement = _interopRequireDefault(__webpack_require__(/*! ./mediaelement */ \"./src/mediaelement.js\"));\nvar _peakcache = _interopRequireDefault(__webpack_require__(/*! ./peakcache */ \"./src/peakcache.js\"));\nvar _mediaelementWebaudio = _interopRequireDefault(__webpack_require__(/*! ./mediaelement-webaudio */ \"./src/mediaelement-webaudio.js\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n/*\n * This work is licensed under a BSD-3-Clause License.\n */\n/** @external {HTMLElement} https://developer.mozilla.org/en/docs/Web/API/HTMLElement */\n/** @external {OfflineAudioContext} https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext */\n/** @external {File} https://developer.mozilla.org/en-US/docs/Web/API/File */\n/** @external {Blob} https://developer.mozilla.org/en-US/docs/Web/API/Blob */\n/** @external {CanvasRenderingContext2D} https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D */\n/** @external {MediaStreamConstraints} https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamConstraints */\n/** @external {AudioNode} https://developer.mozilla.org/de/docs/Web/API/AudioNode */\n/**\n * @typedef {Object} WavesurferParams\n * @property {AudioContext} audioContext=null Use your own previously\n * initialized AudioContext or leave blank.\n * @property {number} audioRate=1 Speed at which to play audio. Lower number is\n * slower.\n * @property {ScriptProcessorNode} audioScriptProcessor=null Use your own previously\n * initialized ScriptProcessorNode or leave blank.\n * @property {boolean} autoCenter=true If a scrollbar is present, center the\n * waveform on current progress\n * @property {number} autoCenterRate=5 If autoCenter is active, rate at which the\n * waveform is centered\n * @property {boolean} autoCenterImmediately=false If autoCenter is active, immediately\n * center waveform on current progress\n * @property {string} backend='WebAudio' `'WebAudio'|'MediaElement'|'MediaElementWebAudio'` In most cases\n * you don't have to set this manually. MediaElement is a fallback for unsupported browsers.\n * MediaElementWebAudio allows to use WebAudio API also with big audio files, loading audio like with\n * MediaElement backend (HTML5 audio tag). You have to use the same methods of MediaElement backend for loading and\n * playback, giving also peaks, so the audio data are not decoded. In this way you can use WebAudio features, like filters,\n * also with audio with big duration. For example:\n * ` wavesurfer.load(url | HTMLMediaElement, peaks, preload, duration);\n *   wavesurfer.play();\n *   wavesurfer.setFilter(customFilter);\n * `\n * @property {string} backgroundColor=null Change background color of the\n * waveform container.\n * @property {number} barHeight=1 The height of the wave bars.\n * @property {number} barRadius=0 The radius of the wave bars. Makes bars rounded\n * @property {number} barGap=null The optional spacing between bars of the wave,\n * if not provided will be calculated in legacy format.\n * @property {number} barWidth=null Draw the waveform using bars.\n * @property {number} barMinHeight=null If specified, draw at least a bar of this height,\n * eliminating waveform gaps\n * @property {boolean} closeAudioContext=false Close and nullify all audio\n * contexts when the destroy method is called.\n * @property {!string|HTMLElement} container CSS selector or HTML element where\n * the waveform should be drawn. This is the only required parameter.\n * @property {string} cursorColor='#333' The fill color of the cursor indicating\n * the playhead position.\n * @property {number} cursorWidth=1 Measured in pixels.\n * @property {object} drawingContextAttributes={desynchronized: false} Drawing context\n * attributes.\n * @property {number} duration=null Optional audio length so pre-rendered peaks\n * can be display immediately for example.\n * @property {boolean} fillParent=true Whether to fill the entire container or\n * draw only according to `minPxPerSec`.\n * @property {boolean} forceDecode=false Force decoding of audio using web audio\n * when zooming to get a more detailed waveform.\n * @property {number} height=128 The height of the waveform. Measured in\n * pixels.\n * @property {boolean} hideScrollbar=false Whether to hide the horizontal\n * scrollbar when one would normally be shown.\n * @property {boolean} hideCursor=false Whether to hide the mouse cursor\n * when one would normally be shown by default.\n * @property {boolean} ignoreSilenceMode=false If true, ignores device silence mode\n * when using the `WebAudio` backend.\n * @property {boolean} interact=true Whether the mouse interaction will be\n * enabled at initialization. You can switch this parameter at any time later\n * on.\n * @property {boolean} loopSelection=true (Use with regions plugin) Enable\n * looping of selected regions\n * @property {number} maxCanvasWidth=4000 Maximum width of a single canvas in\n * pixels, excluding a small overlap (2 * `pixelRatio`, rounded up to the next\n * even integer). If the waveform is longer than this value, additional canvases\n * will be used to render the waveform, which is useful for very large waveforms\n * that may be too wide for browsers to draw on a single canvas.\n * @property {boolean} mediaControls=false (Use with backend `MediaElement` or `MediaElementWebAudio`)\n * this enables the native controls for the media element\n * @property {string} mediaType='audio' (Use with backend `MediaElement` or `MediaElementWebAudio`)\n * `'audio'|'video'` ('video' only for `MediaElement`)\n * @property {number} minPxPerSec=20 Minimum number of pixels per second of\n * audio.\n * @property {boolean} normalize=false If true, normalize by the maximum peak\n * instead of 1.0.\n * @property {boolean} partialRender=false Use the PeakCache to improve\n * rendering speed of large waveforms\n * @property {number} pixelRatio=window.devicePixelRatio The pixel ratio used to\n * calculate display\n * @property {PluginDefinition[]} plugins=[] An array of plugin definitions to\n * register during instantiation, they will be directly initialised unless they\n * are added with the `deferInit` property set to true.\n * @property {string} progressColor='#555' The fill color of the part of the\n * waveform behind the cursor. When `progressColor` and `waveColor` are the same\n * the progress wave is not rendered at all.\n * @property {boolean} removeMediaElementOnDestroy=true Set to false to keep the\n * media element in the DOM when the player is destroyed. This is useful when\n * reusing an existing media element via the `loadMediaElement` method.\n * @property {Object} renderer=MultiCanvas Can be used to inject a custom\n * renderer.\n * @property {boolean|number} responsive=false If set to `true` resize the\n * waveform, when the window is resized. This is debounced with a `100ms`\n * timeout by default. If this parameter is a number it represents that timeout.\n * @property {boolean} rtl=false If set to `true`, renders waveform from\n * right-to-left.\n * @property {boolean} scrollParent=false Whether to scroll the container with a\n * lengthy waveform. Otherwise the waveform is shrunk to the container width\n * (see fillParent).\n * @property {number} skipLength=2 Number of seconds to skip with the\n * skipForward() and skipBackward() methods.\n * @property {boolean} splitChannels=false Render with separate waveforms for\n * the channels of the audio\n * @property {SplitChannelOptions} splitChannelsOptions={} Options for splitChannel rendering\n * @property {boolean} vertical=false Render the waveform vertically instead of horizontally.\n * @property {string} waveColor='#999' The fill color of the waveform after the\n * cursor.\n * @property {object} xhr={} XHR options. For example:\n * `let xhr = {\n *     cache: 'default',\n *     mode: 'cors',\n *     method: 'GET',\n *     credentials: 'same-origin',\n *     redirect: 'follow',\n *     referrer: 'client',\n *     requestHeaders: [\n *         {\n *             key: 'Authorization',\n *             value: 'my-token'\n *         }\n *     ]\n * };`\n */\n/**\n * @typedef {Object} PluginDefinition\n * @desc The Object used to describe a plugin\n * @example wavesurfer.addPlugin(pluginDefinition);\n * @property {string} name The name of the plugin, the plugin instance will be\n * added as a property to the wavesurfer instance under this name\n * @property {?Object} staticProps The properties that should be added to the\n * wavesurfer instance as static properties\n * @property {?boolean} deferInit Don't initialise plugin\n * automatically\n * @property {Object} params={} The plugin parameters, they are the first parameter\n * passed to the plugin class constructor function\n * @property {PluginClass} instance The plugin instance factory, is called with\n * the dependency specified in extends. Returns the plugin class.\n */\n/**\n * @typedef {Object} SplitChannelOptions\n * @desc parameters applied when splitChannels option is true\n * @property {boolean} overlay=false determines whether channels are rendered on top of each other or on separate tracks\n * @property {object} channelColors={} object describing color for each channel. Example:\n * {\n *     0: {\n *         progressColor: 'green',\n *         waveColor: 'pink'\n *     },\n *     1: {\n *         progressColor: 'orange',\n *         waveColor: 'purple'\n *     }\n * }\n * @property {number[]} filterChannels=[] indexes of channels to be hidden from rendering\n * @property {boolean} relativeNormalization=false determines whether\n * normalization is done per channel or maintains proportionality between\n * channels. Only applied when normalize and splitChannels are both true.\n * @property {boolean} splitDragSelection=false determines if drag selection in regions\n * plugin works separately on each channel or only one selection for all channels\n * @since 4.3.0\n */\n/**\n * @interface PluginClass\n *\n * @desc This is the interface which is implemented by all plugin classes. Note\n * that this only turns into an observer after being passed through\n * `wavesurfer.addPlugin`.\n *\n * @extends {Observer}\n */\nvar PluginClass = /*#__PURE__*/function () {\n  /**\n   * Construct the plugin\n   *\n   * @param {Object} params={} The plugin params (specific to the plugin)\n   * @param {Object} ws The wavesurfer instance\n   */\n  function PluginClass(params, ws) {\n    _classCallCheck(this, PluginClass);\n  }\n  /**\n   * Initialise the plugin\n   *\n   * Start doing something. This is called by\n   * `wavesurfer.initPlugin(pluginName)`\n   */\n  _createClass(PluginClass, [{\n    key: \"create\",\n    value:\n    /**\n     * Plugin definition factory\n     *\n     * This function must be used to create a plugin definition which can be\n     * used by wavesurfer to correctly instantiate the plugin.\n     *\n     * It returns a `PluginDefinition` object representing the plugin.\n     *\n     * @param {Object} params={} The plugin params (specific to the plugin)\n     */\n    function create(params) {}\n  }, {\n    key: \"init\",\n    value: function init() {}\n    /**\n     * Destroy the plugin instance\n     *\n     * Stop doing something. This is called by\n     * `wavesurfer.destroyPlugin(pluginName)`\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {}\n  }]);\n  return PluginClass;\n}();\n/**\n * WaveSurfer core library class\n *\n * @extends {Observer}\n * @example\n * const params = {\n *   container: '#waveform',\n *   waveColor: 'violet',\n *   progressColor: 'purple'\n * };\n *\n * // initialise like this\n * const wavesurfer = WaveSurfer.create(params);\n *\n * // or like this ...\n * const wavesurfer = new WaveSurfer(params);\n * wavesurfer.init();\n *\n * // load audio file\n * wavesurfer.load('example/media/demo.wav');\n */\nvar WaveSurfer = /*#__PURE__*/function (_util$Observer) {\n  _inherits(WaveSurfer, _util$Observer);\n  var _super = _createSuper(WaveSurfer);\n  /**\n   * Initialise wavesurfer instance\n   *\n   * @param {WavesurferParams} params Instantiation options for wavesurfer\n   * @example\n   * const wavesurfer = new WaveSurfer(params);\n   * @returns {this} Wavesurfer instance\n   */\n  function WaveSurfer(params) {\n    var _this;\n    _classCallCheck(this, WaveSurfer);\n    _this = _super.call(this);\n    /**\n     * Extract relevant parameters (or defaults)\n     * @private\n     */\n    /** @private */\n    _defineProperty(_assertThisInitialized(_this), \"defaultParams\", {\n      audioContext: null,\n      audioScriptProcessor: null,\n      audioRate: 1,\n      autoCenter: true,\n      autoCenterRate: 5,\n      autoCenterImmediately: false,\n      backend: 'WebAudio',\n      backgroundColor: null,\n      barHeight: 1,\n      barRadius: 0,\n      barGap: null,\n      barMinHeight: null,\n      container: null,\n      cursorColor: '#333',\n      cursorWidth: 1,\n      dragSelection: true,\n      drawingContextAttributes: {\n        // Boolean that hints the user agent to reduce the latency\n        // by desynchronizing the canvas paint cycle from the event\n        // loop\n        desynchronized: false\n      },\n      duration: null,\n      fillParent: true,\n      forceDecode: false,\n      height: 128,\n      hideScrollbar: false,\n      hideCursor: false,\n      ignoreSilenceMode: false,\n      interact: true,\n      loopSelection: true,\n      maxCanvasWidth: 4000,\n      mediaContainer: null,\n      mediaControls: false,\n      mediaType: 'audio',\n      minPxPerSec: 20,\n      normalize: false,\n      partialRender: false,\n      pixelRatio: window.devicePixelRatio || screen.deviceXDPI / screen.logicalXDPI,\n      plugins: [],\n      progressColor: '#555',\n      removeMediaElementOnDestroy: true,\n      renderer: _drawer.default,\n      responsive: false,\n      rtl: false,\n      scrollParent: false,\n      skipLength: 2,\n      splitChannels: false,\n      splitChannelsOptions: {\n        overlay: false,\n        channelColors: {},\n        filterChannels: [],\n        relativeNormalization: false,\n        splitDragSelection: false\n      },\n      vertical: false,\n      waveColor: '#999',\n      xhr: {}\n    });\n    /** @private */\n    _defineProperty(_assertThisInitialized(_this), \"backends\", {\n      MediaElement: _mediaelement.default,\n      WebAudio: _webaudio.default,\n      MediaElementWebAudio: _mediaelementWebaudio.default\n    });\n    /**\n     * Functions in the `util` property are available as a prototype property to\n     * all instances\n     *\n     * @type {Object}\n     * @example\n     * const wavesurfer = WaveSurfer.create(params);\n     * wavesurfer.util.style(myElement, { background: 'blue' });\n     */\n    _defineProperty(_assertThisInitialized(_this), \"util\", util);\n    _this.params = Object.assign({}, _this.defaultParams, params);\n    _this.params.splitChannelsOptions = Object.assign({}, _this.defaultParams.splitChannelsOptions, params.splitChannelsOptions);\n    /** @private */\n    _this.container = 'string' == typeof params.container ? document.querySelector(_this.params.container) : _this.params.container;\n    if (!_this.container) {\n      throw new Error('Container element not found');\n    }\n    if (_this.params.mediaContainer == null) {\n      /** @private */\n      _this.mediaContainer = _this.container;\n    } else if (typeof _this.params.mediaContainer == 'string') {\n      /** @private */\n      _this.mediaContainer = document.querySelector(_this.params.mediaContainer);\n    } else {\n      /** @private */\n      _this.mediaContainer = _this.params.mediaContainer;\n    }\n    if (!_this.mediaContainer) {\n      throw new Error('Media Container element not found');\n    }\n    if (_this.params.maxCanvasWidth <= 1) {\n      throw new Error('maxCanvasWidth must be greater than 1');\n    } else if (_this.params.maxCanvasWidth % 2 == 1) {\n      throw new Error('maxCanvasWidth must be an even number');\n    }\n    if (_this.params.rtl === true) {\n      if (_this.params.vertical === true) {\n        util.style(_this.container, {\n          transform: 'rotateX(180deg)'\n        });\n      } else {\n        util.style(_this.container, {\n          transform: 'rotateY(180deg)'\n        });\n      }\n    }\n    if (_this.params.backgroundColor) {\n      _this.setBackgroundColor(_this.params.backgroundColor);\n    }\n\n    /**\n     * @private Used to save the current volume when muting so we can\n     * restore once unmuted\n     * @type {number}\n     */\n    _this.savedVolume = 0;\n\n    /**\n     * @private The current muted state\n     * @type {boolean}\n     */\n    _this.isMuted = false;\n\n    /**\n     * @private Will hold a list of event descriptors that need to be\n     * canceled on subsequent loads of audio\n     * @type {Object[]}\n     */\n    _this.tmpEvents = [];\n\n    /**\n     * @private Holds any running audio downloads\n     * @type {Observer}\n     */\n    _this.currentRequest = null;\n    /** @private */\n    _this.arraybuffer = null;\n    /** @private */\n    _this.drawer = null;\n    /** @private */\n    _this.backend = null;\n    /** @private */\n    _this.peakCache = null;\n\n    // cache constructor objects\n    if (typeof _this.params.renderer !== 'function') {\n      throw new Error('Renderer parameter is invalid');\n    }\n    /**\n     * @private The uninitialised Drawer class\n     */\n    _this.Drawer = _this.params.renderer;\n    /**\n     * @private The uninitialised Backend class\n     */\n    // Back compat\n    if (_this.params.backend == 'AudioElement') {\n      _this.params.backend = 'MediaElement';\n    }\n    if ((_this.params.backend == 'WebAudio' || _this.params.backend === 'MediaElementWebAudio') && !_webaudio.default.prototype.supportsWebAudio.call(null)) {\n      _this.params.backend = 'MediaElement';\n    }\n    _this.Backend = _this.backends[_this.params.backend];\n\n    /**\n     * @private map of plugin names that are currently initialised\n     */\n    _this.initialisedPluginList = {};\n    /** @private */\n    _this.isDestroyed = false;\n\n    /**\n     * Get the current ready status.\n     *\n     * @example const isReady = wavesurfer.isReady;\n     * @return {boolean}\n     */\n    _this.isReady = false;\n\n    // responsive debounced event listener. If this.params.responsive is not\n    // set, this is never called. Use 100ms or this.params.responsive as\n    // timeout for the debounce function.\n    var prevWidth = 0;\n    _this._onResize = util.debounce(function () {\n      if (_this.drawer.wrapper && prevWidth != _this.drawer.wrapper.clientWidth && !_this.params.scrollParent) {\n        prevWidth = _this.drawer.wrapper.clientWidth;\n        if (prevWidth) {\n          // redraw only if waveform container is rendered and has a width\n          _this.drawer.fireEvent('redraw');\n        }\n      }\n    }, typeof _this.params.responsive === 'number' ? _this.params.responsive : 100);\n    return _possibleConstructorReturn(_this, _assertThisInitialized(_this));\n  }\n\n  /**\n   * Initialise the wave\n   *\n   * @example\n   * var wavesurfer = new WaveSurfer(params);\n   * wavesurfer.init();\n   * @return {this} The wavesurfer instance\n   */\n  _createClass(WaveSurfer, [{\n    key: \"init\",\n    value: function init() {\n      this.registerPlugins(this.params.plugins);\n      this.createDrawer();\n      this.createBackend();\n      this.createPeakCache();\n      return this;\n    }\n\n    /**\n     * Add and initialise array of plugins (if `plugin.deferInit` is falsey),\n     * this function is called in the init function of wavesurfer\n     *\n     * @param {PluginDefinition[]} plugins An array of plugin definitions\n     * @emits {WaveSurfer#plugins-registered} Called with the array of plugin definitions\n     * @return {this} The wavesurfer instance\n     */\n  }, {\n    key: \"registerPlugins\",\n    value: function registerPlugins(plugins) {\n      var _this2 = this;\n      // first instantiate all the plugins\n      plugins.forEach(function (plugin) {\n        return _this2.addPlugin(plugin);\n      });\n\n      // now run the init functions\n      plugins.forEach(function (plugin) {\n        // call init function of the plugin if deferInit is falsey\n        // in that case you would manually use initPlugins()\n        if (!plugin.deferInit) {\n          _this2.initPlugin(plugin.name);\n        }\n      });\n      this.fireEvent('plugins-registered', plugins);\n      return this;\n    }\n\n    /**\n     * Get a map of plugin names that are currently initialised\n     *\n     * @example wavesurfer.getPlugins();\n     * @return {Object} Object with plugin names\n     */\n  }, {\n    key: \"getActivePlugins\",\n    value: function getActivePlugins() {\n      return this.initialisedPluginList;\n    }\n\n    /**\n     * Add a plugin object to wavesurfer\n     *\n     * @param {PluginDefinition} plugin A plugin definition\n     * @emits {WaveSurfer#plugin-added} Called with the name of the plugin that was added\n     * @example wavesurfer.addPlugin(WaveSurfer.minimap());\n     * @return {this} The wavesurfer instance\n     */\n  }, {\n    key: \"addPlugin\",\n    value: function addPlugin(plugin) {\n      var _this3 = this;\n      if (!plugin.name) {\n        throw new Error('Plugin does not have a name!');\n      }\n      if (!plugin.instance) {\n        throw new Error(\"Plugin \".concat(plugin.name, \" does not have an instance property!\"));\n      }\n\n      // staticProps properties are applied to wavesurfer instance\n      if (plugin.staticProps) {\n        Object.keys(plugin.staticProps).forEach(function (pluginStaticProp) {\n          /**\n           * Properties defined in a plugin definition's `staticProps` property are added as\n           * staticProps properties of the WaveSurfer instance\n           */\n          _this3[pluginStaticProp] = plugin.staticProps[pluginStaticProp];\n        });\n      }\n      var Instance = plugin.instance;\n\n      // turn the plugin instance into an observer\n      var observerPrototypeKeys = Object.getOwnPropertyNames(util.Observer.prototype);\n      observerPrototypeKeys.forEach(function (key) {\n        Instance.prototype[key] = util.Observer.prototype[key];\n      });\n\n      /**\n       * Instantiated plugin classes are added as a property of the wavesurfer\n       * instance\n       * @type {Object}\n       */\n      this[plugin.name] = new Instance(plugin.params || {}, this);\n      this.fireEvent('plugin-added', plugin.name);\n      return this;\n    }\n\n    /**\n     * Initialise a plugin\n     *\n     * @param {string} name A plugin name\n     * @emits WaveSurfer#plugin-initialised\n     * @example wavesurfer.initPlugin('minimap');\n     * @return {this} The wavesurfer instance\n     */\n  }, {\n    key: \"initPlugin\",\n    value: function initPlugin(name) {\n      if (!this[name]) {\n        throw new Error(\"Plugin \".concat(name, \" has not been added yet!\"));\n      }\n      if (this.initialisedPluginList[name]) {\n        // destroy any already initialised plugins\n        this.destroyPlugin(name);\n      }\n      this[name].init();\n      this.initialisedPluginList[name] = true;\n      this.fireEvent('plugin-initialised', name);\n      return this;\n    }\n\n    /**\n     * Destroy a plugin\n     *\n     * @param {string} name A plugin name\n     * @emits WaveSurfer#plugin-destroyed\n     * @example wavesurfer.destroyPlugin('minimap');\n     * @returns {this} The wavesurfer instance\n     */\n  }, {\n    key: \"destroyPlugin\",\n    value: function destroyPlugin(name) {\n      if (!this[name]) {\n        throw new Error(\"Plugin \".concat(name, \" has not been added yet and cannot be destroyed!\"));\n      }\n      if (!this.initialisedPluginList[name]) {\n        throw new Error(\"Plugin \".concat(name, \" is not active and cannot be destroyed!\"));\n      }\n      if (typeof this[name].destroy !== 'function') {\n        throw new Error(\"Plugin \".concat(name, \" does not have a destroy function!\"));\n      }\n      this[name].destroy();\n      delete this.initialisedPluginList[name];\n      this.fireEvent('plugin-destroyed', name);\n      return this;\n    }\n\n    /**\n     * Destroy all initialised plugins. Convenience function to use when\n     * wavesurfer is removed\n     *\n     * @private\n     */\n  }, {\n    key: \"destroyAllPlugins\",\n    value: function destroyAllPlugins() {\n      var _this4 = this;\n      Object.keys(this.initialisedPluginList).forEach(function (name) {\n        return _this4.destroyPlugin(name);\n      });\n    }\n\n    /**\n     * Create the drawer and draw the waveform\n     *\n     * @private\n     * @emits WaveSurfer#drawer-created\n     */\n  }, {\n    key: \"createDrawer\",\n    value: function createDrawer() {\n      var _this5 = this;\n      this.drawer = new this.Drawer(this.container, this.params);\n      this.drawer.init();\n      this.fireEvent('drawer-created', this.drawer);\n      if (this.params.responsive !== false) {\n        window.addEventListener('resize', this._onResize, true);\n        window.addEventListener('orientationchange', this._onResize, true);\n      }\n      this.drawer.on('redraw', function () {\n        _this5.drawBuffer();\n        _this5.drawer.progress(_this5.backend.getPlayedPercents());\n      });\n\n      // Click-to-seek\n      this.drawer.on('click', function (e, progress) {\n        setTimeout(function () {\n          return _this5.seekTo(progress);\n        }, 0);\n      });\n\n      // Relay the scroll event from the drawer\n      this.drawer.on('scroll', function (e) {\n        if (_this5.params.partialRender) {\n          _this5.drawBuffer();\n        }\n        _this5.fireEvent('scroll', e);\n      });\n    }\n\n    /**\n     * Create the backend\n     *\n     * @private\n     * @emits WaveSurfer#backend-created\n     */\n  }, {\n    key: \"createBackend\",\n    value: function createBackend() {\n      var _this6 = this;\n      if (this.backend) {\n        this.backend.destroy();\n      }\n      this.backend = new this.Backend(this.params);\n      this.backend.init();\n      this.fireEvent('backend-created', this.backend);\n      this.backend.on('finish', function () {\n        _this6.drawer.progress(_this6.backend.getPlayedPercents());\n        _this6.fireEvent('finish');\n      });\n      this.backend.on('play', function () {\n        return _this6.fireEvent('play');\n      });\n      this.backend.on('pause', function () {\n        return _this6.fireEvent('pause');\n      });\n      this.backend.on('audioprocess', function (time) {\n        _this6.drawer.progress(_this6.backend.getPlayedPercents());\n        _this6.fireEvent('audioprocess', time);\n      });\n\n      // only needed for MediaElement and MediaElementWebAudio backend\n      if (this.params.backend === 'MediaElement' || this.params.backend === 'MediaElementWebAudio') {\n        this.backend.on('seek', function () {\n          _this6.drawer.progress(_this6.backend.getPlayedPercents());\n        });\n        this.backend.on('volume', function () {\n          var newVolume = _this6.getVolume();\n          _this6.fireEvent('volume', newVolume);\n          if (_this6.backend.isMuted !== _this6.isMuted) {\n            _this6.isMuted = _this6.backend.isMuted;\n            _this6.fireEvent('mute', _this6.isMuted);\n          }\n        });\n      }\n    }\n\n    /**\n     * Create the peak cache\n     *\n     * @private\n     */\n  }, {\n    key: \"createPeakCache\",\n    value: function createPeakCache() {\n      if (this.params.partialRender) {\n        this.peakCache = new _peakcache.default();\n      }\n    }\n\n    /**\n     * Get the duration of the audio clip\n     *\n     * @example const duration = wavesurfer.getDuration();\n     * @return {number} Duration in seconds\n     */\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      return this.backend.getDuration();\n    }\n\n    /**\n     * Get the current playback position\n     *\n     * @example const currentTime = wavesurfer.getCurrentTime();\n     * @return {number} Playback position in seconds\n     */\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.backend.getCurrentTime();\n    }\n\n    /**\n     * Set the current play time in seconds.\n     *\n     * @param {number} seconds A positive number in seconds. E.g. 10 means 10\n     * seconds, 60 means 1 minute\n     */\n  }, {\n    key: \"setCurrentTime\",\n    value: function setCurrentTime(seconds) {\n      if (seconds >= this.getDuration()) {\n        this.seekTo(1);\n      } else {\n        this.seekTo(seconds / this.getDuration());\n      }\n    }\n\n    /**\n     * Starts playback from the current position. Optional start and end\n     * measured in seconds can be used to set the range of audio to play.\n     *\n     * @param {?number} start Position to start at\n     * @param {?number} end Position to end at\n     * @emits WaveSurfer#interaction\n     * @return {Promise} Result of the backend play method\n     * @example\n     * // play from second 1 to 5\n     * wavesurfer.play(1, 5);\n     */\n  }, {\n    key: \"play\",\n    value: function play(start, end) {\n      var _this7 = this;\n      if (this.params.ignoreSilenceMode) {\n        // ignores device hardware silence mode\n        util.ignoreSilenceMode();\n      }\n      this.fireEvent('interaction', function () {\n        return _this7.play(start, end);\n      });\n      return this.backend.play(start, end);\n    }\n\n    /**\n     * Set a point in seconds for playback to stop at.\n     *\n     * @param {number} position Position (in seconds) to stop at\n     * @version 3.3.0\n     */\n  }, {\n    key: \"setPlayEnd\",\n    value: function setPlayEnd(position) {\n      this.backend.setPlayEnd(position);\n    }\n\n    /**\n     * Stops and pauses playback\n     *\n     * @example wavesurfer.pause();\n     * @return {Promise} Result of the backend pause method\n     */\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      if (!this.backend.isPaused()) {\n        return this.backend.pause();\n      }\n    }\n\n    /**\n     * Toggle playback\n     *\n     * @example wavesurfer.playPause();\n     * @return {Promise} Result of the backend play or pause method\n     */\n  }, {\n    key: \"playPause\",\n    value: function playPause() {\n      return this.backend.isPaused() ? this.play() : this.pause();\n    }\n\n    /**\n     * Get the current playback state\n     *\n     * @example const isPlaying = wavesurfer.isPlaying();\n     * @return {boolean} False if paused, true if playing\n     */\n  }, {\n    key: \"isPlaying\",\n    value: function isPlaying() {\n      return !this.backend.isPaused();\n    }\n\n    /**\n     * Skip backward\n     *\n     * @param {?number} seconds Amount to skip back, if not specified `skipLength`\n     * is used\n     * @example wavesurfer.skipBackward();\n     */\n  }, {\n    key: \"skipBackward\",\n    value: function skipBackward(seconds) {\n      this.skip(-seconds || -this.params.skipLength);\n    }\n\n    /**\n     * Skip forward\n     *\n     * @param {?number} seconds Amount to skip back, if not specified `skipLength`\n     * is used\n     * @example wavesurfer.skipForward();\n     */\n  }, {\n    key: \"skipForward\",\n    value: function skipForward(seconds) {\n      this.skip(seconds || this.params.skipLength);\n    }\n\n    /**\n     * Skip a number of seconds from the current position (use a negative value\n     * to go backwards).\n     *\n     * @param {number} offset Amount to skip back or forwards\n     * @example\n     * // go back 2 seconds\n     * wavesurfer.skip(-2);\n     */\n  }, {\n    key: \"skip\",\n    value: function skip(offset) {\n      var duration = this.getDuration() || 1;\n      var position = this.getCurrentTime() || 0;\n      position = Math.max(0, Math.min(duration, position + (offset || 0)));\n      this.seekAndCenter(position / duration);\n    }\n\n    /**\n     * Seeks to a position and centers the view\n     *\n     * @param {number} progress Between 0 (=beginning) and 1 (=end)\n     * @example\n     * // seek and go to the middle of the audio\n     * wavesurfer.seekTo(0.5);\n     */\n  }, {\n    key: \"seekAndCenter\",\n    value: function seekAndCenter(progress) {\n      this.seekTo(progress);\n      this.drawer.recenter(progress);\n    }\n\n    /**\n     * Seeks to a position\n     *\n     * @param {number} progress Between 0 (=beginning) and 1 (=end)\n     * @emits WaveSurfer#interaction\n     * @emits WaveSurfer#seek\n     * @example\n     * // seek to the middle of the audio\n     * wavesurfer.seekTo(0.5);\n     */\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(progress) {\n      var _this8 = this;\n      // return an error if progress is not a number between 0 and 1\n      if (typeof progress !== 'number' || !isFinite(progress) || progress < 0 || progress > 1) {\n        throw new Error('Error calling wavesurfer.seekTo, parameter must be a number between 0 and 1!');\n      }\n      this.fireEvent('interaction', function () {\n        return _this8.seekTo(progress);\n      });\n      var isWebAudioBackend = this.params.backend === 'WebAudio';\n      var paused = this.backend.isPaused();\n      if (isWebAudioBackend && !paused) {\n        this.backend.pause();\n      }\n\n      // avoid small scrolls while paused seeking\n      var oldScrollParent = this.params.scrollParent;\n      this.params.scrollParent = false;\n      this.backend.seekTo(progress * this.getDuration());\n      this.drawer.progress(progress);\n      if (isWebAudioBackend && !paused) {\n        this.backend.play();\n      }\n      this.params.scrollParent = oldScrollParent;\n      this.fireEvent('seek', progress);\n    }\n\n    /**\n     * Stops and goes to the beginning.\n     *\n     * @example wavesurfer.stop();\n     */\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.pause();\n      this.seekTo(0);\n      this.drawer.progress(0);\n    }\n\n    /**\n     * Sets the ID of the audio device to use for output and returns a Promise.\n     *\n     * @param {string} deviceId String value representing underlying output\n     * device\n     * @returns {Promise} `Promise` that resolves to `undefined` when there are\n     * no errors detected.\n     */\n  }, {\n    key: \"setSinkId\",\n    value: function setSinkId(deviceId) {\n      return this.backend.setSinkId(deviceId);\n    }\n\n    /**\n     * Set the playback volume.\n     *\n     * @param {number} newVolume A value between 0 and 1, 0 being no\n     * volume and 1 being full volume.\n     * @emits WaveSurfer#volume\n     */\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(newVolume) {\n      if (this.isMuted === true) {\n        this.savedVolume = newVolume;\n        return;\n      }\n      this.backend.setVolume(newVolume);\n      this.fireEvent('volume', newVolume);\n    }\n\n    /**\n     * Get the playback volume.\n     *\n     * @return {number} A value between 0 and 1, 0 being no\n     * volume and 1 being full volume.\n     */\n  }, {\n    key: \"getVolume\",\n    value: function getVolume() {\n      return this.backend.getVolume();\n    }\n\n    /**\n     * Set the playback rate.\n     *\n     * @param {number} rate A positive number. E.g. 0.5 means half the normal\n     * speed, 2 means double speed and so on.\n     * @example wavesurfer.setPlaybackRate(2);\n     */\n  }, {\n    key: \"setPlaybackRate\",\n    value: function setPlaybackRate(rate) {\n      this.backend.setPlaybackRate(rate);\n    }\n\n    /**\n     * Get the playback rate.\n     *\n     * @return {number} The current playback rate.\n     */\n  }, {\n    key: \"getPlaybackRate\",\n    value: function getPlaybackRate() {\n      return this.backend.getPlaybackRate();\n    }\n\n    /**\n     * Toggle the volume on and off. If not currently muted it will save the\n     * current volume value and turn the volume off. If currently muted then it\n     * will restore the volume to the saved value, and then rest the saved\n     * value.\n     *\n     * @example wavesurfer.toggleMute();\n     */\n  }, {\n    key: \"toggleMute\",\n    value: function toggleMute() {\n      this.setMute(!this.isMuted);\n    }\n\n    /**\n     * Enable or disable muted audio\n     *\n     * @param {boolean} mute Specify `true` to mute audio.\n     * @emits WaveSurfer#volume\n     * @emits WaveSurfer#mute\n     * @example\n     * // unmute\n     * wavesurfer.setMute(false);\n     * console.log(wavesurfer.getMute()) // logs false\n     */\n  }, {\n    key: \"setMute\",\n    value: function setMute(mute) {\n      // ignore all muting requests if the audio is already in that state\n      if (mute === this.isMuted) {\n        this.fireEvent('mute', this.isMuted);\n        return;\n      }\n      if (this.backend.setMute) {\n        // Backends such as the MediaElement backend have their own handling\n        // of mute, let them handle it.\n        this.backend.setMute(mute);\n        this.isMuted = mute;\n      } else {\n        if (mute) {\n          // If currently not muted then save current volume,\n          // turn off the volume and update the mute properties\n          this.savedVolume = this.backend.getVolume();\n          this.backend.setVolume(0);\n          this.isMuted = true;\n          this.fireEvent('volume', 0);\n        } else {\n          // If currently muted then restore to the saved volume\n          // and update the mute properties\n          this.backend.setVolume(this.savedVolume);\n          this.isMuted = false;\n          this.fireEvent('volume', this.savedVolume);\n        }\n      }\n      this.fireEvent('mute', this.isMuted);\n    }\n\n    /**\n     * Get the current mute status.\n     *\n     * @example const isMuted = wavesurfer.getMute();\n     * @return {boolean} Current mute status\n     */\n  }, {\n    key: \"getMute\",\n    value: function getMute() {\n      return this.isMuted;\n    }\n\n    /**\n     * Get the list of current set filters as an array.\n     *\n     * Filters must be set with setFilters method first\n     *\n     * @return {array} List of enabled filters\n     */\n  }, {\n    key: \"getFilters\",\n    value: function getFilters() {\n      return this.backend.filters || [];\n    }\n\n    /**\n     * Toggles `scrollParent` and redraws\n     *\n     * @example wavesurfer.toggleScroll();\n     */\n  }, {\n    key: \"toggleScroll\",\n    value: function toggleScroll() {\n      this.params.scrollParent = !this.params.scrollParent;\n      this.drawBuffer();\n    }\n\n    /**\n     * Toggle mouse interaction\n     *\n     * @example wavesurfer.toggleInteraction();\n     */\n  }, {\n    key: \"toggleInteraction\",\n    value: function toggleInteraction() {\n      this.params.interact = !this.params.interact;\n    }\n\n    /**\n     * Get the fill color of the waveform after the cursor.\n     *\n     * @param {?number} channelIdx Optional index of the channel to get its wave color if splitChannels is true\n     * @return {string|object} A CSS color string, or an array of CSS color strings.\n     */\n  }, {\n    key: \"getWaveColor\",\n    value: function getWaveColor() {\n      var channelIdx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      if (this.params.splitChannelsOptions.channelColors[channelIdx]) {\n        return this.params.splitChannelsOptions.channelColors[channelIdx].waveColor;\n      }\n      return this.params.waveColor;\n    }\n\n    /**\n     * Set the fill color of the waveform after the cursor.\n     *\n     * @param {string|object} color A CSS color string, or an array of CSS color strings.\n     * @param {?number} channelIdx Optional index of the channel to set its wave color if splitChannels is true\n     * @example wavesurfer.setWaveColor('#ddd');\n     */\n  }, {\n    key: \"setWaveColor\",\n    value: function setWaveColor(color) {\n      var channelIdx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n      if (this.params.splitChannelsOptions.channelColors[channelIdx]) {\n        this.params.splitChannelsOptions.channelColors[channelIdx].waveColor = color;\n      } else {\n        this.params.waveColor = color;\n      }\n      this.drawBuffer();\n    }\n\n    /**\n     * Get the fill color of the waveform behind the cursor.\n     *\n     * @param {?number} channelIdx Optional index of the channel to get its progress color if splitChannels is true\n     * @return {string|object} A CSS color string, or an array of CSS color strings.\n     */\n  }, {\n    key: \"getProgressColor\",\n    value: function getProgressColor() {\n      var channelIdx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      if (this.params.splitChannelsOptions.channelColors[channelIdx]) {\n        return this.params.splitChannelsOptions.channelColors[channelIdx].progressColor;\n      }\n      return this.params.progressColor;\n    }\n\n    /**\n     * Set the fill color of the waveform behind the cursor.\n     *\n     * @param {string|object} color A CSS color string, or an array of CSS color strings.\n     * @param {?number} channelIdx Optional index of the channel to set its progress color if splitChannels is true\n     * @example wavesurfer.setProgressColor('#400');\n     */\n  }, {\n    key: \"setProgressColor\",\n    value: function setProgressColor(color, channelIdx) {\n      if (this.params.splitChannelsOptions.channelColors[channelIdx]) {\n        this.params.splitChannelsOptions.channelColors[channelIdx].progressColor = color;\n      } else {\n        this.params.progressColor = color;\n      }\n      this.drawBuffer();\n    }\n\n    /**\n     * Get the background color of the waveform container.\n     *\n     * @return {string} A CSS color string.\n     */\n  }, {\n    key: \"getBackgroundColor\",\n    value: function getBackgroundColor() {\n      return this.params.backgroundColor;\n    }\n\n    /**\n     * Set the background color of the waveform container.\n     *\n     * @param {string} color A CSS color string.\n     * @example wavesurfer.setBackgroundColor('#FF00FF');\n     */\n  }, {\n    key: \"setBackgroundColor\",\n    value: function setBackgroundColor(color) {\n      this.params.backgroundColor = color;\n      util.style(this.container, {\n        background: this.params.backgroundColor\n      });\n    }\n\n    /**\n     * Get the fill color of the cursor indicating the playhead\n     * position.\n     *\n     * @return {string} A CSS color string.\n     */\n  }, {\n    key: \"getCursorColor\",\n    value: function getCursorColor() {\n      return this.params.cursorColor;\n    }\n\n    /**\n     * Set the fill color of the cursor indicating the playhead\n     * position.\n     *\n     * @param {string} color A CSS color string.\n     * @example wavesurfer.setCursorColor('#222');\n     */\n  }, {\n    key: \"setCursorColor\",\n    value: function setCursorColor(color) {\n      this.params.cursorColor = color;\n      this.drawer.updateCursor();\n    }\n\n    /**\n     * Get the height of the waveform.\n     *\n     * @return {number} Height measured in pixels.\n     */\n  }, {\n    key: \"getHeight\",\n    value: function getHeight() {\n      return this.params.height;\n    }\n\n    /**\n     * Set the height of the waveform.\n     *\n     * @param {number} height Height measured in pixels.\n     * @example wavesurfer.setHeight(200);\n     */\n  }, {\n    key: \"setHeight\",\n    value: function setHeight(height) {\n      this.params.height = height;\n      this.drawer.setHeight(height * this.params.pixelRatio);\n      this.drawBuffer();\n    }\n\n    /**\n     * Hide channels from being drawn on the waveform if splitting channels.\n     *\n     * For example, if we want to draw only the peaks for the right stereo channel:\n     *\n     * const wavesurfer = new WaveSurfer.create({...splitChannels: true});\n     * wavesurfer.load('stereo_audio.mp3');\n     *\n     * wavesurfer.setFilteredChannel([0]); <-- hide left channel peaks.\n     *\n     * @param {array} channelIndices Channels to be filtered out from drawing.\n     * @version 4.0.0\n     */\n  }, {\n    key: \"setFilteredChannels\",\n    value: function setFilteredChannels(channelIndices) {\n      this.params.splitChannelsOptions.filterChannels = channelIndices;\n      this.drawBuffer();\n    }\n\n    /**\n     * Get the correct peaks for current wave view-port and render wave\n     *\n     * @private\n     * @emits WaveSurfer#redraw\n     */\n  }, {\n    key: \"drawBuffer\",\n    value: function drawBuffer() {\n      var nominalWidth = Math.round(this.getDuration() * this.params.minPxPerSec * this.params.pixelRatio);\n      var parentWidth = this.drawer.getWidth();\n      var width = nominalWidth;\n      // always start at 0 after zooming for scrolling : issue redraw left part\n      var start = 0;\n      var end = Math.max(start + parentWidth, width);\n      // Fill container\n      if (this.params.fillParent && (!this.params.scrollParent || nominalWidth < parentWidth)) {\n        width = parentWidth;\n        start = 0;\n        end = width;\n      }\n      var peaks;\n      if (this.params.partialRender) {\n        var newRanges = this.peakCache.addRangeToPeakCache(width, start, end);\n        var i;\n        for (i = 0; i < newRanges.length; i++) {\n          peaks = this.backend.getPeaks(width, newRanges[i][0], newRanges[i][1]);\n          this.drawer.drawPeaks(peaks, width, newRanges[i][0], newRanges[i][1]);\n        }\n      } else {\n        peaks = this.backend.getPeaks(width, start, end);\n        this.drawer.drawPeaks(peaks, width, start, end);\n      }\n      this.fireEvent('redraw', peaks, width);\n    }\n\n    /**\n     * Horizontally zooms the waveform in and out. It also changes the parameter\n     * `minPxPerSec` and enables the `scrollParent` option. Calling the function\n     * with a falsey parameter will reset the zoom state.\n     *\n     * @param {?number} pxPerSec Number of horizontal pixels per second of\n     * audio, if none is set the waveform returns to unzoomed state\n     * @emits WaveSurfer#zoom\n     * @example wavesurfer.zoom(20);\n     */\n  }, {\n    key: \"zoom\",\n    value: function zoom(pxPerSec) {\n      if (!pxPerSec) {\n        this.params.minPxPerSec = this.defaultParams.minPxPerSec;\n        this.params.scrollParent = false;\n      } else {\n        this.params.minPxPerSec = pxPerSec;\n        this.params.scrollParent = true;\n      }\n      this.drawBuffer();\n      this.drawer.progress(this.backend.getPlayedPercents());\n      this.drawer.recenter(this.getCurrentTime() / this.getDuration());\n      this.fireEvent('zoom', pxPerSec);\n    }\n\n    /**\n     * Decode buffer and load\n     *\n     * @private\n     * @param {ArrayBuffer} arraybuffer Buffer to process\n     */\n  }, {\n    key: \"loadArrayBuffer\",\n    value: function loadArrayBuffer(arraybuffer) {\n      var _this9 = this;\n      this.decodeArrayBuffer(arraybuffer, function (data) {\n        if (!_this9.isDestroyed) {\n          _this9.loadDecodedBuffer(data);\n        }\n      });\n    }\n\n    /**\n     * Directly load an externally decoded AudioBuffer\n     *\n     * @private\n     * @param {AudioBuffer} buffer Buffer to process\n     * @emits WaveSurfer#ready\n     */\n  }, {\n    key: \"loadDecodedBuffer\",\n    value: function loadDecodedBuffer(buffer) {\n      this.backend.load(buffer);\n      this.drawBuffer();\n      this.isReady = true;\n      this.fireEvent('ready');\n    }\n\n    /**\n     * Loads audio data from a Blob or File object\n     *\n     * @param {Blob|File} blob Audio data\n     * @example\n     */\n  }, {\n    key: \"loadBlob\",\n    value: function loadBlob(blob) {\n      var _this10 = this;\n      // Create file reader\n      var reader = new FileReader();\n      reader.addEventListener('progress', function (e) {\n        return _this10.onProgress(e);\n      });\n      reader.addEventListener('load', function (e) {\n        return _this10.loadArrayBuffer(e.target.result);\n      });\n      reader.addEventListener('error', function () {\n        return _this10.fireEvent('error', 'Error reading file');\n      });\n      reader.readAsArrayBuffer(blob);\n      this.empty();\n    }\n\n    /**\n     * Loads audio and re-renders the waveform.\n     *\n     * @param {string|HTMLMediaElement} url The url of the audio file or the\n     * audio element with the audio\n     * @param {number[]|Number.<Array[]>} peaks Wavesurfer does not have to decode\n     * the audio to render the waveform if this is specified\n     * @param {?string} preload (Use with backend `MediaElement` and `MediaElementWebAudio`)\n     * `'none'|'metadata'|'auto'` Preload attribute for the media element\n     * @param {?number} duration The duration of the audio. This is used to\n     * render the peaks data in the correct size for the audio duration (as\n     * befits the current `minPxPerSec` and zoom value) without having to decode\n     * the audio.\n     * @returns {void}\n     * @throws Will throw an error if the `url` argument is empty.\n     * @example\n     * // uses fetch or media element to load file (depending on backend)\n     * wavesurfer.load('http://example.com/demo.wav');\n     *\n     * // setting preload attribute with media element backend and supplying\n     * // peaks\n     * wavesurfer.load(\n     *   'http://example.com/demo.wav',\n     *   [0.0218, 0.0183, 0.0165, 0.0198, 0.2137, 0.2888],\n     *   true\n     * );\n     */\n  }, {\n    key: \"load\",\n    value: function load(url, peaks, preload, duration) {\n      if (!url) {\n        throw new Error('url parameter cannot be empty');\n      }\n      this.empty();\n      if (preload) {\n        // check whether the preload attribute will be usable and if not log\n        // a warning listing the reasons why not and nullify the variable\n        var preloadIgnoreReasons = {\n          \"Preload is not 'auto', 'none' or 'metadata'\": ['auto', 'metadata', 'none'].indexOf(preload) === -1,\n          'Peaks are not provided': !peaks,\n          \"Backend is not of type 'MediaElement' or 'MediaElementWebAudio'\": ['MediaElement', 'MediaElementWebAudio'].indexOf(this.params.backend) === -1,\n          'Url is not of type string': typeof url !== 'string'\n        };\n        var activeReasons = Object.keys(preloadIgnoreReasons).filter(function (reason) {\n          return preloadIgnoreReasons[reason];\n        });\n        if (activeReasons.length) {\n          // eslint-disable-next-line no-console\n          console.warn('Preload parameter of wavesurfer.load will be ignored because:\\n\\t- ' + activeReasons.join('\\n\\t- '));\n          // stop invalid values from being used\n          preload = null;\n        }\n      }\n\n      // loadBuffer(url, peaks, duration) requires that url is a string\n      // but users can pass in a HTMLMediaElement to WaveSurfer\n      if (this.params.backend === 'WebAudio' && url instanceof HTMLMediaElement) {\n        url = url.src;\n      }\n      switch (this.params.backend) {\n        case 'WebAudio':\n          return this.loadBuffer(url, peaks, duration);\n        case 'MediaElement':\n        case 'MediaElementWebAudio':\n          return this.loadMediaElement(url, peaks, preload, duration);\n      }\n    }\n\n    /**\n     * Loads audio using Web Audio buffer backend.\n     *\n     * @private\n     * @emits WaveSurfer#waveform-ready\n     * @param {string} url URL of audio file\n     * @param {number[]|Number.<Array[]>} peaks Peaks data\n     * @param {?number} duration Optional duration of audio file\n     * @returns {void}\n     */\n  }, {\n    key: \"loadBuffer\",\n    value: function loadBuffer(url, peaks, duration) {\n      var _this11 = this;\n      var load = function load(action) {\n        if (action) {\n          _this11.tmpEvents.push(_this11.once('ready', action));\n        }\n        return _this11.getArrayBuffer(url, function (data) {\n          return _this11.loadArrayBuffer(data);\n        });\n      };\n      if (peaks) {\n        this.backend.setPeaks(peaks, duration);\n        this.drawBuffer();\n        this.fireEvent('waveform-ready');\n        this.tmpEvents.push(this.once('interaction', load));\n      } else {\n        return load();\n      }\n    }\n\n    /**\n     * Either create a media element, or load an existing media element.\n     *\n     * @private\n     * @emits WaveSurfer#waveform-ready\n     * @param {string|HTMLMediaElement} urlOrElt Either a path to a media file, or an\n     * existing HTML5 Audio/Video Element\n     * @param {number[]|Number.<Array[]>} peaks Array of peaks. Required to bypass web audio\n     * dependency\n     * @param {?boolean} preload Set to true if the preload attribute of the\n     * audio element should be enabled\n     * @param {?number} duration Optional duration of audio file\n     */\n  }, {\n    key: \"loadMediaElement\",\n    value: function loadMediaElement(urlOrElt, peaks, preload, duration) {\n      var _this12 = this;\n      var url = urlOrElt;\n      if (typeof urlOrElt === 'string') {\n        this.backend.load(url, this.mediaContainer, peaks, preload);\n      } else {\n        var elt = urlOrElt;\n        this.backend.loadElt(elt, peaks);\n\n        // If peaks are not provided,\n        // url = element.src so we can get peaks with web audio\n        url = elt.src;\n      }\n      this.tmpEvents.push(this.backend.once('canplay', function () {\n        // ignore when backend was already destroyed\n        if (!_this12.backend.destroyed) {\n          _this12.drawBuffer();\n          _this12.isReady = true;\n          _this12.fireEvent('ready');\n        }\n      }), this.backend.once('error', function (err) {\n        return _this12.fireEvent('error', err);\n      }));\n\n      // If peaks are provided, render them and fire the `waveform-ready` event.\n      if (peaks) {\n        this.backend.setPeaks(peaks, duration);\n        this.drawBuffer();\n        this.fireEvent('waveform-ready');\n      }\n\n      // If no pre-decoded peaks are provided, or are provided with\n      // forceDecode flag, attempt to download the audio file and decode it\n      // with Web Audio.\n      if ((!peaks || this.params.forceDecode) && this.backend.supportsWebAudio()) {\n        this.getArrayBuffer(url, function (arraybuffer) {\n          _this12.decodeArrayBuffer(arraybuffer, function (buffer) {\n            _this12.backend.buffer = buffer;\n            _this12.backend.setPeaks(null);\n            _this12.drawBuffer();\n            _this12.fireEvent('waveform-ready');\n          });\n        });\n      }\n    }\n\n    /**\n     * Decode an array buffer and pass data to a callback\n     *\n     * @private\n     * @param {Object} arraybuffer The array buffer to decode\n     * @param {function} callback The function to call on complete\n     */\n  }, {\n    key: \"decodeArrayBuffer\",\n    value: function decodeArrayBuffer(arraybuffer, callback) {\n      var _this13 = this;\n      if (!this.isDestroyed) {\n        this.arraybuffer = arraybuffer;\n        this.backend.decodeArrayBuffer(arraybuffer, function (data) {\n          // Only use the decoded data if we haven't been destroyed or\n          // another decode started in the meantime\n          if (!_this13.isDestroyed && _this13.arraybuffer == arraybuffer) {\n            callback(data);\n            _this13.arraybuffer = null;\n          }\n        }, function () {\n          return _this13.fireEvent('error', 'Error decoding audiobuffer');\n        });\n      }\n    }\n\n    /**\n     * Load an array buffer using fetch and pass the result to a callback\n     *\n     * @param {string} url The URL of the file object\n     * @param {function} callback The function to call on complete\n     * @returns {util.fetchFile} fetch call\n     * @private\n     */\n  }, {\n    key: \"getArrayBuffer\",\n    value: function getArrayBuffer(url, callback) {\n      var _this14 = this;\n      var options = Object.assign({\n        url: url,\n        responseType: 'arraybuffer'\n      }, this.params.xhr);\n      var request = util.fetchFile(options);\n      this.currentRequest = request;\n      this.tmpEvents.push(request.on('progress', function (e) {\n        _this14.onProgress(e);\n      }), request.on('success', function (data) {\n        callback(data);\n        _this14.currentRequest = null;\n      }), request.on('error', function (e) {\n        _this14.fireEvent('error', e);\n        _this14.currentRequest = null;\n      }));\n      return request;\n    }\n\n    /**\n     * Called while the audio file is loading\n     *\n     * @private\n     * @param {Event} e Progress event\n     * @emits WaveSurfer#loading\n     */\n  }, {\n    key: \"onProgress\",\n    value: function onProgress(e) {\n      var percentComplete;\n      if (e.lengthComputable) {\n        percentComplete = e.loaded / e.total;\n      } else {\n        // Approximate progress with an asymptotic\n        // function, and assume downloads in the 1-3 MB range.\n        percentComplete = e.loaded / (e.loaded + 1000000);\n      }\n      this.fireEvent('loading', Math.round(percentComplete * 100), e.target);\n    }\n\n    /**\n     * Exports PCM data into a JSON array and optionally opens in a new window\n     * as valid JSON Blob instance.\n     *\n     * @param {number} length=1024 The scale in which to export the peaks\n     * @param {number} accuracy=10000\n     * @param {?boolean} noWindow Set to true to disable opening a new\n     * window with the JSON\n     * @param {number} start Start index\n     * @param {number} end End index\n     * @return {Promise} Promise that resolves with array of peaks\n     */\n  }, {\n    key: \"exportPCM\",\n    value: function exportPCM(length, accuracy, noWindow, start, end) {\n      length = length || 1024;\n      start = start || 0;\n      accuracy = accuracy || 10000;\n      noWindow = noWindow || false;\n      var peaks = this.backend.getPeaks(length, start, end);\n      var arr = [].map.call(peaks, function (val) {\n        return Math.round(val * accuracy) / accuracy;\n      });\n      return new Promise(function (resolve, reject) {\n        if (!noWindow) {\n          var blobJSON = new Blob([JSON.stringify(arr)], {\n            type: 'application/json;charset=utf-8'\n          });\n          var objURL = URL.createObjectURL(blobJSON);\n          window.open(objURL);\n          URL.revokeObjectURL(objURL);\n        }\n        resolve(arr);\n      });\n    }\n\n    /**\n     * Save waveform image as data URI.\n     *\n     * The default format is `image/png`. Other supported types are\n     * `image/jpeg` and `image/webp`.\n     *\n     * @param {string} format='image/png' A string indicating the image format.\n     * The default format type is `image/png`.\n     * @param {number} quality=1 A number between 0 and 1 indicating the image\n     * quality to use for image formats that use lossy compression such as\n     * `image/jpeg` and `image/webp`.\n     * @param {string} type Image data type to return. Either `dataURL` (default)\n     * or `blob`.\n     * @return {string|string[]|Promise} When using `dataURL` type this returns\n     * a single data URL or an array of data URLs, one for each canvas. When using\n     * `blob` type this returns a `Promise` resolving with an array of `Blob`\n     * instances, one for each canvas.\n     */\n  }, {\n    key: \"exportImage\",\n    value: function exportImage(format, quality, type) {\n      if (!format) {\n        format = 'image/png';\n      }\n      if (!quality) {\n        quality = 1;\n      }\n      if (!type) {\n        type = 'dataURL';\n      }\n      return this.drawer.getImage(format, quality, type);\n    }\n\n    /**\n     * Cancel any fetch request currently in progress\n     */\n  }, {\n    key: \"cancelAjax\",\n    value: function cancelAjax() {\n      if (this.currentRequest && this.currentRequest.controller) {\n        // If the current request has a ProgressHandler, then its ReadableStream might need to be cancelled too\n        // See: Wavesurfer issue #2042\n        // See Firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1583815\n        if (this.currentRequest._reader) {\n          // Ignoring exceptions thrown by call to cancel()\n          this.currentRequest._reader.cancel().catch(function (err) {});\n        }\n        this.currentRequest.controller.abort();\n        this.currentRequest = null;\n      }\n    }\n\n    /**\n     * @private\n     */\n  }, {\n    key: \"clearTmpEvents\",\n    value: function clearTmpEvents() {\n      this.tmpEvents.forEach(function (e) {\n        return e.un();\n      });\n    }\n\n    /**\n     * Display empty waveform.\n     */\n  }, {\n    key: \"empty\",\n    value: function empty() {\n      if (!this.backend.isPaused()) {\n        this.stop();\n        this.backend.disconnectSource();\n      }\n      this.isReady = false;\n      this.cancelAjax();\n      this.clearTmpEvents();\n\n      // empty drawer\n      this.drawer.progress(0);\n      this.drawer.setWidth(0);\n      this.drawer.drawPeaks({\n        length: this.drawer.getWidth()\n      }, 0);\n    }\n\n    /**\n     * Remove events, elements and disconnect WebAudio nodes.\n     *\n     * @emits WaveSurfer#destroy\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      this.destroyAllPlugins();\n      this.fireEvent('destroy');\n      this.cancelAjax();\n      this.clearTmpEvents();\n      this.unAll();\n      if (this.params.responsive !== false) {\n        window.removeEventListener('resize', this._onResize, true);\n        window.removeEventListener('orientationchange', this._onResize, true);\n      }\n      if (this.backend) {\n        this.backend.destroy();\n        // clears memory usage\n        this.backend = null;\n      }\n      if (this.drawer) {\n        this.drawer.destroy();\n      }\n      this.isDestroyed = true;\n      this.isReady = false;\n      this.arraybuffer = null;\n    }\n  }], [{\n    key: \"create\",\n    value:\n    /**\n     * Instantiate this class, call its `init` function and returns it\n     *\n     * @param {WavesurferParams} params The wavesurfer parameters\n     * @return {Object} WaveSurfer instance\n     * @example const wavesurfer = WaveSurfer.create(params);\n     */\n    function create(params) {\n      var wavesurfer = new WaveSurfer(params);\n      return wavesurfer.init();\n    }\n\n    /**\n     * The library version number is available as a static property of the\n     * WaveSurfer class\n     *\n     * @type {String}\n     * @example\n     * console.log('Using wavesurfer.js ' + WaveSurfer.VERSION);\n     */\n  }]);\n  return WaveSurfer;\n}(util.Observer);\nexports[\"default\"] = WaveSurfer;\n_defineProperty(WaveSurfer, \"VERSION\", \"6.6.3\");\n/**\n * Functions in the `util` property are available as a static property of the\n * WaveSurfer class\n *\n * @type {Object}\n * @example\n * WaveSurfer.util.style(myElement, { background: 'blue' });\n */\n_defineProperty(WaveSurfer, \"util\", util);\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./src/webaudio.js\":\n/*!*************************!*\\\n  !*** ./src/webaudio.js ***!\n  \\*************************/\n/***/ ((module, exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", ({\n  value: true\n}));\nexports[\"default\"] = void 0;\nvar util = _interopRequireWildcard(__webpack_require__(/*! ./util */ \"./src/util/index.js\"));\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\n// using constants to prevent someone writing the string wrong\nvar PLAYING = 'playing';\nvar PAUSED = 'paused';\nvar FINISHED = 'finished';\n\n/**\n * WebAudio backend\n *\n * @extends {util.Observer}\n */\nvar WebAudio = /*#__PURE__*/function (_util$Observer) {\n  _inherits(WebAudio, _util$Observer);\n  var _super = _createSuper(WebAudio);\n  /**\n   * Construct the backend\n   *\n   * @param {WavesurferParams} params Wavesurfer parameters\n   */\n  function WebAudio(params) {\n    var _defineProperty2, _this$states;\n    var _this;\n    _classCallCheck(this, WebAudio);\n    _this = _super.call(this);\n    /** @private */\n    /** audioContext: allows to process audio with WebAudio API */\n    _defineProperty(_assertThisInitialized(_this), \"audioContext\", null);\n    /** @private */\n    _defineProperty(_assertThisInitialized(_this), \"stateBehaviors\", (_defineProperty2 = {}, _defineProperty(_defineProperty2, PLAYING, {\n      init: function init() {\n        this.addOnAudioProcess();\n      },\n      getPlayedPercents: function getPlayedPercents() {\n        var duration = this.getDuration();\n        return this.getCurrentTime() / duration || 0;\n      },\n      getCurrentTime: function getCurrentTime() {\n        return this.startPosition + this.getPlayedTime();\n      }\n    }), _defineProperty(_defineProperty2, PAUSED, {\n      init: function init() {},\n      getPlayedPercents: function getPlayedPercents() {\n        var duration = this.getDuration();\n        return this.getCurrentTime() / duration || 0;\n      },\n      getCurrentTime: function getCurrentTime() {\n        return this.startPosition;\n      }\n    }), _defineProperty(_defineProperty2, FINISHED, {\n      init: function init() {\n        this.fireEvent('finish');\n      },\n      getPlayedPercents: function getPlayedPercents() {\n        return 1;\n      },\n      getCurrentTime: function getCurrentTime() {\n        return this.getDuration();\n      }\n    }), _defineProperty2));\n    _this.params = params;\n    /** ac: Audio Context instance */\n    _this.ac = params.audioContext || (_this.supportsWebAudio() ? _this.getAudioContext() : {});\n    /**@private */\n    _this.lastPlay = _this.ac.currentTime;\n    /** @private */\n    _this.startPosition = 0;\n    /** @private */\n    _this.scheduledPause = null;\n    /** @private */\n    _this.states = (_this$states = {}, _defineProperty(_this$states, PLAYING, Object.create(_this.stateBehaviors[PLAYING])), _defineProperty(_this$states, PAUSED, Object.create(_this.stateBehaviors[PAUSED])), _defineProperty(_this$states, FINISHED, Object.create(_this.stateBehaviors[FINISHED])), _this$states);\n    /** @private */\n    _this.buffer = null;\n    /** @private */\n    _this.filters = [];\n    /** gainNode: allows to control audio volume */\n    _this.gainNode = null;\n    /** @private */\n    _this.mergedPeaks = null;\n    /** @private */\n    _this.offlineAc = null;\n    /** @private */\n    _this.peaks = null;\n    /** @private */\n    _this.playbackRate = 1;\n    /** analyser: provides audio analysis information */\n    _this.analyser = null;\n    /** scriptNode: allows processing audio */\n    _this.scriptNode = null;\n    /** @private */\n    _this.source = null;\n    /** @private */\n    _this.splitPeaks = [];\n    /** @private */\n    _this.state = null;\n    /** @private */\n    _this.explicitDuration = params.duration;\n    /** @private */\n    _this.sinkStreamDestination = null;\n    /** @private */\n    _this.sinkAudioElement = null;\n    /**\n     * Boolean indicating if the backend was destroyed.\n     */\n    _this.destroyed = false;\n    return _this;\n  }\n\n  /**\n   * Initialise the backend, called in `wavesurfer.createBackend()`\n   */\n  _createClass(WebAudio, [{\n    key: \"supportsWebAudio\",\n    value:\n    /**\n     * Does the browser support this backend\n     *\n     * @return {boolean} Whether or not this browser supports this backend\n     */\n    function supportsWebAudio() {\n      return !!(window.AudioContext || window.webkitAudioContext);\n    }\n\n    /**\n     * Get the audio context used by this backend or create one\n     *\n     * @return {AudioContext} Existing audio context, or creates a new one\n     */\n  }, {\n    key: \"getAudioContext\",\n    value: function getAudioContext() {\n      if (!window.WaveSurferAudioContext) {\n        window.WaveSurferAudioContext = new (window.AudioContext || window.webkitAudioContext)();\n      }\n      return window.WaveSurferAudioContext;\n    }\n\n    /**\n     * Get the offline audio context used by this backend or create one\n     *\n     * @param {number} sampleRate The sample rate to use\n     * @return {OfflineAudioContext} Existing offline audio context, or creates\n     * a new one\n     */\n  }, {\n    key: \"getOfflineAudioContext\",\n    value: function getOfflineAudioContext(sampleRate) {\n      if (!window.WaveSurferOfflineAudioContext) {\n        window.WaveSurferOfflineAudioContext = new (window.OfflineAudioContext || window.webkitOfflineAudioContext)(1, 2, sampleRate);\n      }\n      return window.WaveSurferOfflineAudioContext;\n    }\n  }, {\n    key: \"init\",\n    value: function init() {\n      this.createVolumeNode();\n      this.createScriptNode();\n      this.createAnalyserNode();\n      this.setState(PAUSED);\n      this.setPlaybackRate(this.params.audioRate);\n      this.setLength(0);\n    }\n\n    /** @private */\n  }, {\n    key: \"disconnectFilters\",\n    value: function disconnectFilters() {\n      if (this.filters) {\n        this.filters.forEach(function (filter) {\n          filter && filter.disconnect();\n        });\n        this.filters = null;\n        // Reconnect direct path\n        this.analyser.connect(this.gainNode);\n      }\n    }\n\n    /**\n     * @private\n     *\n     * @param {string} state The new state\n     */\n  }, {\n    key: \"setState\",\n    value: function setState(state) {\n      if (this.state !== this.states[state]) {\n        this.state = this.states[state];\n        this.state.init.call(this);\n      }\n    }\n\n    /**\n     * Unpacked `setFilters()`\n     *\n     * @param {...AudioNode} filters One or more filters to set\n     */\n  }, {\n    key: \"setFilter\",\n    value: function setFilter() {\n      for (var _len = arguments.length, filters = new Array(_len), _key = 0; _key < _len; _key++) {\n        filters[_key] = arguments[_key];\n      }\n      this.setFilters(filters);\n    }\n\n    /**\n     * Insert custom Web Audio nodes into the graph\n     *\n     * @param {AudioNode[]} filters Packed filters array\n     * @example\n     * const lowpass = wavesurfer.backend.ac.createBiquadFilter();\n     * wavesurfer.backend.setFilter(lowpass);\n     */\n  }, {\n    key: \"setFilters\",\n    value: function setFilters(filters) {\n      // Remove existing filters\n      this.disconnectFilters();\n\n      // Insert filters if filter array not empty\n      if (filters && filters.length) {\n        this.filters = filters;\n\n        // Disconnect direct path before inserting filters\n        this.analyser.disconnect();\n\n        // Connect each filter in turn\n        filters.reduce(function (prev, curr) {\n          prev.connect(curr);\n          return curr;\n        }, this.analyser).connect(this.gainNode);\n      }\n    }\n    /** Create ScriptProcessorNode to process audio */\n  }, {\n    key: \"createScriptNode\",\n    value: function createScriptNode() {\n      if (this.params.audioScriptProcessor) {\n        this.scriptNode = this.params.audioScriptProcessor;\n        this.scriptNode.connect(this.ac.destination);\n      }\n    }\n\n    /** @private */\n  }, {\n    key: \"addOnAudioProcess\",\n    value: function addOnAudioProcess() {\n      var _this2 = this;\n      var loop = function loop() {\n        var time = _this2.getCurrentTime();\n        if (time >= _this2.getDuration() && _this2.state !== _this2.states[FINISHED]) {\n          _this2.setState(FINISHED);\n          _this2.fireEvent('pause');\n        } else if (time >= _this2.scheduledPause && _this2.state !== _this2.states[PAUSED]) {\n          _this2.pause();\n        } else if (_this2.state === _this2.states[PLAYING]) {\n          _this2.fireEvent('audioprocess', time);\n          util.frame(loop)();\n        }\n      };\n      loop();\n    }\n\n    /** Create analyser node to perform audio analysis */\n  }, {\n    key: \"createAnalyserNode\",\n    value: function createAnalyserNode() {\n      this.analyser = this.ac.createAnalyser();\n      this.analyser.connect(this.gainNode);\n    }\n\n    /**\n     * Create the gain node needed to control the playback volume.\n     *\n     */\n  }, {\n    key: \"createVolumeNode\",\n    value: function createVolumeNode() {\n      // Create gain node using the AudioContext\n      if (this.ac.createGain) {\n        this.gainNode = this.ac.createGain();\n      } else {\n        this.gainNode = this.ac.createGainNode();\n      }\n      // Add the gain node to the graph\n      this.gainNode.connect(this.ac.destination);\n    }\n\n    /**\n     * Set the sink id for the media player\n     *\n     * @param {string} deviceId String value representing audio device id.\n     * @returns {Promise} A Promise that resolves to `undefined` when there\n     * are no errors.\n     */\n  }, {\n    key: \"setSinkId\",\n    value: function setSinkId(deviceId) {\n      if (deviceId) {\n        /**\n         * The webaudio API doesn't currently support setting the device\n         * output. Here we create an HTMLAudioElement, connect the\n         * webaudio stream to that element and setSinkId there.\n         */\n        if (!this.sinkAudioElement) {\n          this.sinkAudioElement = new window.Audio();\n          // autoplay is necessary since we're not invoking .play()\n          this.sinkAudioElement.autoplay = true;\n        }\n        if (!this.sinkAudioElement.setSinkId) {\n          return Promise.reject(new Error('setSinkId is not supported in your browser'));\n        }\n        if (!this.sinkStreamDestination) {\n          this.sinkStreamDestination = this.ac.createMediaStreamDestination();\n        }\n        this.gainNode.disconnect();\n        this.gainNode.connect(this.sinkStreamDestination);\n        this.sinkAudioElement.srcObject = this.sinkStreamDestination.stream;\n        return this.sinkAudioElement.setSinkId(deviceId);\n      } else {\n        return Promise.reject(new Error('Invalid deviceId: ' + deviceId));\n      }\n    }\n\n    /**\n     * Set the audio volume\n     *\n     * @param {number} value A floating point value between 0 and 1.\n     */\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(value) {\n      this.gainNode.gain.setValueAtTime(value, this.ac.currentTime);\n    }\n\n    /**\n     * Get the current volume\n     *\n     * @return {number} value A floating point value between 0 and 1.\n     */\n  }, {\n    key: \"getVolume\",\n    value: function getVolume() {\n      return this.gainNode.gain.value;\n    }\n\n    /**\n     * Decode an array buffer and pass data to a callback\n     *\n     * @private\n     * @param {ArrayBuffer} arraybuffer The array buffer to decode\n     * @param {function} callback The function to call on complete.\n     * @param {function} errback The function to call on error.\n     */\n  }, {\n    key: \"decodeArrayBuffer\",\n    value: function decodeArrayBuffer(arraybuffer, callback, errback) {\n      if (!this.offlineAc) {\n        this.offlineAc = this.getOfflineAudioContext(this.ac && this.ac.sampleRate ? this.ac.sampleRate : 44100);\n      }\n      if ('webkitAudioContext' in window) {\n        // Safari: no support for Promise-based decodeAudioData enabled\n        // Enable it in Safari using the Experimental Features > Modern WebAudio API option\n        this.offlineAc.decodeAudioData(arraybuffer, function (data) {\n          return callback(data);\n        }, errback);\n      } else {\n        this.offlineAc.decodeAudioData(arraybuffer).then(function (data) {\n          return callback(data);\n        }).catch(function (err) {\n          return errback(err);\n        });\n      }\n    }\n\n    /**\n     * Set pre-decoded peaks\n     *\n     * @param {number[]|Number.<Array[]>} peaks Peaks data\n     * @param {?number} duration Explicit duration\n     */\n  }, {\n    key: \"setPeaks\",\n    value: function setPeaks(peaks, duration) {\n      if (duration != null) {\n        this.explicitDuration = duration;\n      }\n      this.peaks = peaks;\n    }\n\n    /**\n     * Set the rendered length (different from the length of the audio)\n     *\n     * @param {number} length The rendered length\n     */\n  }, {\n    key: \"setLength\",\n    value: function setLength(length) {\n      // No resize, we can preserve the cached peaks.\n      if (this.mergedPeaks && length == 2 * this.mergedPeaks.length - 1 + 2) {\n        return;\n      }\n      this.splitPeaks = [];\n      this.mergedPeaks = [];\n      // Set the last element of the sparse array so the peak arrays are\n      // appropriately sized for other calculations.\n      var channels = this.buffer ? this.buffer.numberOfChannels : 1;\n      var c;\n      for (c = 0; c < channels; c++) {\n        this.splitPeaks[c] = [];\n        this.splitPeaks[c][2 * (length - 1)] = 0;\n        this.splitPeaks[c][2 * (length - 1) + 1] = 0;\n      }\n      this.mergedPeaks[2 * (length - 1)] = 0;\n      this.mergedPeaks[2 * (length - 1) + 1] = 0;\n    }\n\n    /**\n     * Compute the max and min value of the waveform when broken into <length> subranges.\n     *\n     * @param {number} length How many subranges to break the waveform into.\n     * @param {number} first First sample in the required range.\n     * @param {number} last Last sample in the required range.\n     * @return {number[]|Number.<Array[]>} Array of 2*<length> peaks or array of arrays of\n     * peaks consisting of (max, min) values for each subrange.\n     */\n  }, {\n    key: \"getPeaks\",\n    value: function getPeaks(length, first, last) {\n      if (this.peaks) {\n        return this.peaks;\n      }\n      if (!this.buffer) {\n        return [];\n      }\n      first = first || 0;\n      last = last || length - 1;\n      this.setLength(length);\n      if (!this.buffer) {\n        return this.params.splitChannels ? this.splitPeaks : this.mergedPeaks;\n      }\n\n      /**\n       * The following snippet fixes a buffering data issue on the Safari\n       * browser which returned undefined It creates the missing buffer based\n       * on 1 channel, 4096 samples and the sampleRate from the current\n       * webaudio context 4096 samples seemed to be the best fit for rendering\n       * will review this code once a stable version of Safari TP is out\n       */\n      if (!this.buffer.length) {\n        var newBuffer = this.createBuffer(1, 4096, this.sampleRate);\n        this.buffer = newBuffer.buffer;\n      }\n      var sampleSize = this.buffer.length / length;\n      var sampleStep = ~~(sampleSize / 10) || 1;\n      var channels = this.buffer.numberOfChannels;\n      var c;\n      for (c = 0; c < channels; c++) {\n        var peaks = this.splitPeaks[c];\n        var chan = this.buffer.getChannelData(c);\n        var i = void 0;\n        for (i = first; i <= last; i++) {\n          var start = ~~(i * sampleSize);\n          var end = ~~(start + sampleSize);\n          /**\n           * Initialize the max and min to the first sample of this\n           * subrange, so that even if the samples are entirely\n           * on one side of zero, we still return the true max and\n           * min values in the subrange.\n           */\n          var min = chan[start];\n          var max = min;\n          var j = void 0;\n          for (j = start; j < end; j += sampleStep) {\n            var value = chan[j];\n            if (value > max) {\n              max = value;\n            }\n            if (value < min) {\n              min = value;\n            }\n          }\n          peaks[2 * i] = max;\n          peaks[2 * i + 1] = min;\n          if (c == 0 || max > this.mergedPeaks[2 * i]) {\n            this.mergedPeaks[2 * i] = max;\n          }\n          if (c == 0 || min < this.mergedPeaks[2 * i + 1]) {\n            this.mergedPeaks[2 * i + 1] = min;\n          }\n        }\n      }\n      return this.params.splitChannels ? this.splitPeaks : this.mergedPeaks;\n    }\n\n    /**\n     * Get the position from 0 to 1\n     *\n     * @return {number} Position\n     */\n  }, {\n    key: \"getPlayedPercents\",\n    value: function getPlayedPercents() {\n      return this.state.getPlayedPercents.call(this);\n    }\n\n    /** @private */\n  }, {\n    key: \"disconnectSource\",\n    value: function disconnectSource() {\n      if (this.source) {\n        this.source.disconnect();\n      }\n    }\n    /**\n     * Destroy all references with WebAudio, disconnecting audio nodes and closing Audio Context\n     */\n  }, {\n    key: \"destroyWebAudio\",\n    value: function destroyWebAudio() {\n      this.disconnectFilters();\n      this.disconnectSource();\n      this.gainNode.disconnect();\n      this.scriptNode && this.scriptNode.disconnect();\n      this.analyser.disconnect();\n\n      // close the audioContext if closeAudioContext option is set to true\n      if (this.params.closeAudioContext) {\n        // check if browser supports AudioContext.close()\n        if (typeof this.ac.close === 'function' && this.ac.state != 'closed') {\n          this.ac.close();\n        }\n        // clear the reference to the audiocontext\n        this.ac = null;\n        // clear the actual audiocontext, either passed as param or the\n        // global singleton\n        if (!this.params.audioContext) {\n          window.WaveSurferAudioContext = null;\n        } else {\n          this.params.audioContext = null;\n        }\n        // clear the offlineAudioContext\n        window.WaveSurferOfflineAudioContext = null;\n      }\n\n      // disconnect resources used by setSinkId\n      if (this.sinkStreamDestination) {\n        this.sinkAudioElement.pause();\n        this.sinkAudioElement.srcObject = null;\n        this.sinkStreamDestination.disconnect();\n        this.sinkStreamDestination = null;\n      }\n    }\n    /**\n     * This is called when wavesurfer is destroyed\n     */\n  }, {\n    key: \"destroy\",\n    value: function destroy() {\n      if (!this.isPaused()) {\n        this.pause();\n      }\n      this.unAll();\n      this.buffer = null;\n      this.destroyed = true;\n      this.destroyWebAudio();\n    }\n\n    /**\n     * Loaded a decoded audio buffer\n     *\n     * @param {Object} buffer Decoded audio buffer to load\n     */\n  }, {\n    key: \"load\",\n    value: function load(buffer) {\n      this.startPosition = 0;\n      this.lastPlay = this.ac.currentTime;\n      this.buffer = buffer;\n      this.createSource();\n    }\n\n    /** @private */\n  }, {\n    key: \"createSource\",\n    value: function createSource() {\n      this.disconnectSource();\n      this.source = this.ac.createBufferSource();\n\n      // adjust for old browsers\n      this.source.start = this.source.start || this.source.noteGrainOn;\n      this.source.stop = this.source.stop || this.source.noteOff;\n      this.setPlaybackRate(this.playbackRate);\n      this.source.buffer = this.buffer;\n      this.source.connect(this.analyser);\n    }\n\n    /**\n     * @private\n     *\n     * some browsers require an explicit call to #resume before they will play back audio\n     */\n  }, {\n    key: \"resumeAudioContext\",\n    value: function resumeAudioContext() {\n      if (this.ac.state == 'suspended') {\n        this.ac.resume && this.ac.resume();\n      }\n    }\n\n    /**\n     * Used by `wavesurfer.isPlaying()` and `wavesurfer.playPause()`\n     *\n     * @return {boolean} Whether or not this backend is currently paused\n     */\n  }, {\n    key: \"isPaused\",\n    value: function isPaused() {\n      return this.state !== this.states[PLAYING];\n    }\n\n    /**\n     * Used by `wavesurfer.getDuration()`\n     *\n     * @return {number} Duration of loaded buffer\n     */\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      if (this.explicitDuration) {\n        return this.explicitDuration;\n      }\n      if (!this.buffer) {\n        return 0;\n      }\n      return this.buffer.duration;\n    }\n\n    /**\n     * Used by `wavesurfer.seekTo()`\n     *\n     * @param {number} start Position to start at in seconds\n     * @param {number} end Position to end at in seconds\n     * @return {{start: number, end: number}} Object containing start and end\n     * positions\n     */\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(start, end) {\n      if (!this.buffer) {\n        return;\n      }\n      this.scheduledPause = null;\n      if (start == null) {\n        start = this.getCurrentTime();\n        if (start >= this.getDuration()) {\n          start = 0;\n        }\n      }\n      if (end == null) {\n        end = this.getDuration();\n      }\n      this.startPosition = start;\n      this.lastPlay = this.ac.currentTime;\n      if (this.state === this.states[FINISHED]) {\n        this.setState(PAUSED);\n      }\n      return {\n        start: start,\n        end: end\n      };\n    }\n\n    /**\n     * Get the playback position in seconds\n     *\n     * @return {number} The playback position in seconds\n     */\n  }, {\n    key: \"getPlayedTime\",\n    value: function getPlayedTime() {\n      return (this.ac.currentTime - this.lastPlay) * this.playbackRate;\n    }\n\n    /**\n     * Plays the loaded audio region.\n     *\n     * @param {number} start Start offset in seconds, relative to the beginning\n     * of a clip.\n     * @param {number} end When to stop relative to the beginning of a clip.\n     */\n  }, {\n    key: \"play\",\n    value: function play(start, end) {\n      if (!this.buffer) {\n        return;\n      }\n\n      // need to re-create source on each playback\n      this.createSource();\n      var adjustedTime = this.seekTo(start, end);\n      start = adjustedTime.start;\n      end = adjustedTime.end;\n      this.scheduledPause = end;\n      this.source.start(0, start);\n      this.resumeAudioContext();\n      this.setState(PLAYING);\n      this.fireEvent('play');\n    }\n\n    /**\n     * Pauses the loaded audio.\n     */\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.scheduledPause = null;\n      this.startPosition += this.getPlayedTime();\n      try {\n        this.source && this.source.stop(0);\n      } catch (err) {\n        // Calling stop can throw the following 2 errors:\n        // - RangeError (The value specified for when is negative.)\n        // - InvalidStateNode (The node has not been started by calling start().)\n        // We can safely ignore both errors, because:\n        // - The range is surely correct\n        // - The node might not have been started yet, in which case we just want to carry on without causing any trouble.\n      }\n      this.setState(PAUSED);\n      this.fireEvent('pause');\n    }\n\n    /**\n     * Returns the current time in seconds relative to the audio-clip's\n     * duration.\n     *\n     * @return {number} The current time in seconds\n     */\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.state.getCurrentTime.call(this);\n    }\n\n    /**\n     * Returns the current playback rate. (0=no playback, 1=normal playback)\n     *\n     * @return {number} The current playback rate\n     */\n  }, {\n    key: \"getPlaybackRate\",\n    value: function getPlaybackRate() {\n      return this.playbackRate;\n    }\n\n    /**\n     * Set the audio source playback rate.\n     *\n     * @param {number} value The playback rate to use\n     */\n  }, {\n    key: \"setPlaybackRate\",\n    value: function setPlaybackRate(value) {\n      this.playbackRate = value || 1;\n      this.source && this.source.playbackRate.setValueAtTime(this.playbackRate, this.ac.currentTime);\n    }\n\n    /**\n     * Set a point in seconds for playback to stop at.\n     *\n     * @param {number} end Position to end at\n     * @version 3.3.0\n     */\n  }, {\n    key: \"setPlayEnd\",\n    value: function setPlayEnd(end) {\n      this.scheduledPause = end;\n    }\n  }]);\n  return WebAudio;\n}(util.Observer);\nexports[\"default\"] = WebAudio;\nmodule.exports = exports.default;\n\n/***/ }),\n\n/***/ \"./node_modules/debounce/index.js\":\n/*!****************************************!*\\\n  !*** ./node_modules/debounce/index.js ***!\n  \\****************************************/\n/***/ ((module) => {\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n  var timeout, args, context, timestamp, result;\n  if (null == wait) wait = 100;\n\n  function later() {\n    var last = Date.now() - timestamp;\n\n    if (last < wait && last >= 0) {\n      timeout = setTimeout(later, wait - last);\n    } else {\n      timeout = null;\n      if (!immediate) {\n        result = func.apply(context, args);\n        context = args = null;\n      }\n    }\n  };\n\n  var debounced = function(){\n    context = this;\n    args = arguments;\n    timestamp = Date.now();\n    var callNow = immediate && !timeout;\n    if (!timeout) timeout = setTimeout(later, wait);\n    if (callNow) {\n      result = func.apply(context, args);\n      context = args = null;\n    }\n\n    return result;\n  };\n\n  debounced.clear = function() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = null;\n    }\n  };\n  \n  debounced.flush = function() {\n    if (timeout) {\n      result = func.apply(context, args);\n      context = args = null;\n      \n      clearTimeout(timeout);\n      timeout = null;\n    }\n  };\n\n  return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module is referenced by other modules so it can't be inlined\n/******/ \tvar __webpack_exports__ = __webpack_require__(\"./src/wavesurfer.js\");\n/******/ \t\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});\n//# sourceMappingURL=wavesurfer.js.map"],"names":["window","factory","matchesMethod","ElemProto","Element","prototype","matches","matchesSelector","prefixes","i","length","prefix","method","elem","selector","global","EvEmitter","proto","on","eventName","listener","events","this","_events","listeners","indexOf","push","once","onceEvents","_onceEvents","onceListeners","off","index","splice","emitEvent","args","slice","isOnce","apply","allOff","utils","a","b","prop","num","div","arraySlice","Array","makeArray","obj","isArray","undefined","isArrayLike","call","removeFrom","ary","getParent","parentNode","document","body","getQueryElement","querySelector","handleEvent","event","type","filterFindElements","elems","ffElems","forEach","HTMLElement","childElems","querySelectorAll","debounceMethod","_class","methodName","threshold","timeoutName","timeout","clearTimeout","arguments","_this","setTimeout","docReady","callback","readyState","addEventListener","toDashed","str","replace","match","$1","$2","toLowerCase","console","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","options","attr","getAttribute","JSON","parse","error","className","instance","data","Flickity","imagesLoaded","createMethods","_createImagesLoaded","slider","onImagesLoadedProgress","image","cell","getParentCell","img","cellSizeChange","element","freeScroll","positionSliderAtSelected","getCellsFragment","cells","fragment","createDocumentFragment","appendChild","insert","_makeCells","len","isAppend","insertCellElement","insertBefore","endCells","_sizeCells","cellChange","append","prepend","remove","getCells","minCellIndex","Math","min","getCell","getSize","changedCellIndex","isPositioningSlider","prevSelectedElem","selectedElement","_positionCells","_getWrapShiftCells","setGallerySize","selectedIndex","getCellSlideIndex","slides","select","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","x","integratePhysics","positionSlider","settle","requestAnimationFrame","wrapAround","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","style","transform","firstSlide","positionX","target","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","position","percentPosition","round","size","innerWidth","isResting","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cellShift","wrapShift","outerWidth","getFrictionFactor","force","isDraggable","dragVelocity","dragX","dragForce","applyForce","dragDown","distance","selectedAttraction","Cell","parent","create","setAttribute","originSide","destroy","unselect","side","removeAttribute","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","width","cellAlign","sideOffset","adjustedX","classList","add","removeChild","Unidragger","extend","defaults","draggable","dragThreshold","_touchActionValue","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handles","viewport","bindHandles","unbindHandles","bindDrag","unbindDrag","pointerDown","pointer","isOkay","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","activeElement","pointerDownBlur","pointerDownScroll","getScrollPosition","_pointerDownDefault","pointerDownPointer","pageX","pageY","_bindPostStartEvents","focusNodes","INPUT","TEXTAREA","SELECT","pageXOffset","y","pageYOffset","isFocusNode","nodeName","focus","isTouchStart","isTouchPointer","pointerType","preventDefault","hasDragStarted","moveVector","abs","pointerUp","isTouchScrolling","_dragPointerUp","pointerDone","removeEventListener","dragStart","dragStartPosition","startAnimation","pointerMove","_dragPointerMove","_dragMove","dragMove","previousDragX","direction","originBound","max","endBound","getLastSlide","dragMoveTime","Date","dragEnd","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","isDragSelect","getSlideDistance","positiveResting","_getClosestResting","negativeResting","increment","minDistance","Infinity","condition","contain","dist","minDist","isWrapAround","slideIndex","slide","wrap","floor","delta","staticClick","clickedCell","cellElem","cellIndex","onscroll","scroll","scrollMoveX","scrollMoveY","_pointerDone","Slide","animatePrototype","getComputedStyle","moveElements","toElem","GUID","instances","queryElement","flickityGUID","option","$element","constructor","_create","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","resize","id","guid","createElement","_createSlider","watchCSS","activate","opts","isActive","cellElems","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","cellSelector","positionCells","map","getLastCell","maxCellHeight","cellX","startCell","outerHeight","updateSlides","_containSlides","isOriginLeft","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","addCell","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","_init","reposition","setCellAlign","cellAlignShorthands","center","left","right","shorthand","height","adaptiveHeight","_unshiftCells","gapX","_getGapCells","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","prevIndex","isWrapping","wrapIndex","backWrapDelta","forewardWrapDelta","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","initialIndex","queryCell","selectCell","value","getAdjacentCellElements","adjCount","uiChange","childUIPointerDown","onresize","isDragging","watchOption","afterContent","content","deactivate","onkeydown","isNotFocused","handler","keyboardHandlers","keyCode","leftMethod","rightMethod","prevScrollY","preventScroll","scrollTo","removeData","bridget","setJQuery","jq","getCellLazyImages","lazyloadAttr","srcAttr","srcsetAttr","lazySelector","imgs","LazyLoader","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","src","srcset","onload","complete","onerror","Unipointer","PageDots","Object","holder","dots","handleClick","onClick","bind","setDots","bindStartEvent","unbindStartEvent","addDots","removeDots","count","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","isPageHidden","hidden","tick","time","autoPlay","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","svgURI","PrevNextButton","getArrowMovements","shape","x0","x1","y1","x2","y2","x3","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","path","pathMovements","arrowShape","onclick","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","lastCell","lastMargin","getStyleSize","parseFloat","isValid","isNaN","noop","logError","message","measurements","measurementsLength","getZeroSize","innerHeight","measurement","getStyle","isBoxSizeOuter","isSetup","setup","padding","borderStyle","borderWidth","boxSizing","documentElement","nodeType","display","offsetWidth","offsetHeight","isBorderBox","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","$","ImagesLoaded","onAlways","queryElem","elements","getImages","jqDeferred","Deferred","check","images","addElementImages","addImage","background","addElementBackgroundImages","elementNodeTypes","childImgs","child","LoadingImage","Background","url","Image","reURL","exec","backgroundImage","addBackground","loadingImage","onProgress","progressedCount","hasAnyBroken","isLoaded","notify","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","unbindEvents","makeJQueryPlugin","fn","promise","_bindHandles","isAdd","bindMethod","touchAction","handle","_bindStartEvent","PointerEvent","cursorNodes","OPTION","clickTypes","radio","checkbox","button","submit","file","isCursorNode","isClickType","_pointerReset","focused","canBlur","blur","_dragStart","_dragEnd","_staticClick","isPreventingClicks","isIgnoringMouseUp","getPointerPoint","startEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointerId","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","onmouseup","_pointerUp","onpointerup","ontouchend","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","typeContent","pdf","eventDetail","video","podcast","pushData","eventType","title","ctaLabel","digitalData","pageEvent","eventInfo","contentTitle","contentURL","computed","bgColor","hoverColor","textColor","props","white","black","pushEvent","includes","label","__exports__","$baseUrl","inject","i18n","useI18n","videoEl","ref","$tvaMq","useTvaMq","smallscreen","togglePlay","playing","watch","tm","pages","keys","filter","page","locale","hovered","toggeHovered","pushPdf","pdfLink","cta","scrollDown","firstContentEl","getElementById","scrollIntoView","behavior","graph","hoverIconColor","modalRef","modalShown","animatingOut","focusFirstClickable","firstClickableItem","onClickOutside","emit","show","shown","overflow","onMounted","onBeforeUnmount","autoPlayVideo","videoPlaying","videoPath","videoNr","split","currentPage","showModal","class","_createElementBlock","_createElementVNode","_renderSlot","_ctx","$props","top","_Fragment","_renderList","arrowDirection","_createVNode","_component_SquareIconButton","key","icon","$data","ariaLabel","onOnClick","$options","components","SquareIconButton","config","default","Boolean","arrowDownSmall","isFlickity","elementsCount","arrowAriaLabels","fade","created","setProps","mounted","$nextTick","$refs","childElementCount","fill","createFlickity","methods","entries","flkty","$emit","manageClick","goPrevious","goNext","render","cardComponents","ArchiveCard","PDFCard","ImageCard","formattedTime","hours","durationInSeconds","minutes","seconds","formattedHours","toString","padStart","formattedMinutes","formattedSeconds","videoDuration","videoFileName","getVideoDuration","preload","onloadedmetadata","URL","revokeObjectURL","duration","reactive","scrollContainer","handleScrolling","scrollSize","scrollHeight","clientSize","clientHeight","scrollStart","scrollTop","horizontal","scrollWidth","clientWidth","scrollLeft","scrollContainerId","t","modalContent","interviewsPerPage","interviewContents","cards","card","advanceNumbers","interviewGradient","relatedPage","cardContent","imagePath","internalUrlParam","flat","interviewCards","cardIndex","navigateFromModal","currentProjectIndex","countryContents","countryCards","toProject","navigation","socialUrl","location","href","icons","facebook","twitter","linkedin","interviewIndex","interviewPath","textComponents","TextBlock","TextQuote","TextTitle","overflowAmount","textSectionEl","sectionCroppedHeight","mountedChildren","useElementBounding","isHome","childMounted","midPageIndex","totalPages","pageLinks","currentPageIndex","wavesurfer","secondsToMinuteString","currentTimeInSeconds","currentTime","toggleAudio","timeInSeconds","WaveSurfer","container","waveColor","progressColor","barWidth","barHeight","barGap","audioFileName","backend","buffer","getCurrentTime","audioDuration","playMedia","getPodcastDuration","audioEl","Audio","onloadeddata","viewBox","xmlns","opacity","_hoisted_4","_hoisted_5","circleSize","mobile","tablet","hoveredCountryCode","selectedCountryCode","tooltipPosition","countryElements","circleElements","mapTranslationX","selectedSDG","mapEl","codesWithSDG","countryData","countryText","countryModalContent","find","country","countryCode","cardSubscript","makeElementInteractive","el","code","e","showSidePanel","toggleTooltip","mouseEvent","stopPropagation","circle","toUpperCase","xOffset","offsetX","offsetY","filterSDGs","SDG","fromShowSidePanel","circleEl","_","sectors","sector","stroke","countryEl","countryCodes","paragraphsWithImages","paragraphs","p","replaceAll","selectedOption","buttonOptions","selectedItems","showStrategyModal","currentLinks","allLinks","prevPage","nextPage","param","route","useRoute","pageComponents","CTASection","HubMultimedialeSection","PageHero","VideoSection","CardSlider","VideoSlider","InterviewSlider","CountrySlider","HomeHero","InterviewSection","TextSection","TextSectionGrey","TextSectionOverflow","TextSectionWhite","ImageSection","BGVideoSection","KPISection","ChartRoadTo2050","HubMultimedialeHero","PodcastSection","MapSection","StrategyInfograph","showFooter","params","root","module","exports","self","__webpack_modules__","defineProperty","_style","_interopRequireDefault","_getId","__esModule","_typeof","Symbol","iterator","_classCallCheck","Constructor","TypeError","_defineProperties","descriptor","enumerable","configurable","writable","_toPropertyKey","_createClass","protoProps","staticProps","arg","_toPrimitive","String","input","hint","prim","toPrimitive","res","Number","CanvasEntry","wave","waveCtx","progressCtx","start","end","name","canvasContextAttributes","getContext","elementWidth","totalWidth","offsetLeft","elementSize","hasProgressCanvas","clearRect","canvas","fillStyle","getFillStyle","ctx","color","CanvasGradient","waveGradient","createLinearGradient","addColorStop","vertical","setTransform","radius","fillRectToContext","drawRoundedRect","fillRect","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","peaks","absmax","halfH","drawLineToContext","peak","h","first","last","canvasStart","canvasEnd","scale","halfOffset","absmaxHalf","halfPixel","j","format","quality","Promise","resolve","toBlob","toDataURL","util","_interopRequireWildcard","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","hasOwnProperty","desc","set","_inherits","subClass","superClass","_setPrototypeOf","o","setPrototypeOf","__proto__","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","result","Super","_getPrototypeOf","NewTarget","Reflect","construct","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","sham","Proxy","valueOf","getPrototypeOf","Drawer","_util$Observer","_super","withOrientation","pixelRatio","lastPos","wrapper","styles","userSelect","webkitUserSelect","fillParent","scrollParent","cursor","hideCursor","overflowX","hideScrollbar","overflowY","setupWrapperEvents","noPrevent","clientX","targetTouches","bbox","getBoundingClientRect","nominalWidth","parentWidth","getWidth","progressPixels","getProgressPixels","clamp","wrapperBbox","rtl","_this2","orientedEvent","scrollbarHeight","clientY","bottom","interact","fireEvent","setWidth","clearWave","drawBars","drawWave","recenterOnPosition","immediate","half","maxScroll","offset","rate","autoCenterRate","newWidth","updateSize","_progress","minPxDelta","pos","autoCenter","newPos","autoCenterImmediately","updateProgress","unAll","domElement","channelIndex","Observer","_drawer","_drawer2","MultiCanvas","_Drawer","maxCanvasWidth","maxCanvasElementWidth","canvases","progressWave","EntryClass","drawingContextAttributes","overlap","ceil","barRadius","createWrapper","createElements","zIndex","borderRightStyle","pointerEvents","addCanvas","updateCursor","cursorWidth","borderRightColor","cursorColor","requiredCanvases","removeCanvas","canvasWidth","lastCanvas","entry","updateDimensions","leftOffset","initWave","initProgress","lastEntry","parentElement","pop","_this3","frame","_this4","prepareDraw","_ref","hasMinVals","ch","peakIndexScale","bar","step","peakIndex","peakIndexRange","peakIndexEnd","newPeak","barMinHeight","_this5","_ref2","reflectedPeaks","drawLine","_this6","_ref3","splitChannelsOptions","channelColors","setFillStyles","applyCanvasTransforms","drawLines","startCanvas","endCanvas","intersection","_ref4","fillRects","splitChannels","filterChannels","drawIndex","normalizedMax","_this7","channels","overallAbsMax","filteredChannels","c","hideChannel","overlay","setHeight","relativeNormalization","channelPeaks","absMax","normalize","some","val","all","getImage","_mediaelement","_get","property","receiver","base","_superPropBase","object","MediaElementWebAudio","_MediaElement","sourceMediaElement","setPlaybackRate","audioRate","createTimer","createVolumeNode","createScriptNode","createAnalyserNode","media","createMediaElementSource","mediaElement","ac","connect","analyser","resumeAudioContext","destroyWebAudio","_webaudio","MediaElement","_WebAudio","paused","playbackRate","volume","mediaType","elementPosition","isMuted","onPlayEnd","mediaListeners","waiting","canplay","ended","seeked","volumechange","muted","onAudioProcess","isPaused","controls","mediaControls","autoplay","prevMedia","_load","elt","HTMLMediaElement","Error","_setupMediaListeners","setVolume","explicitDuration","seekable","getDuration","clearPlayEnd","seekTo","setPlayEnd","_onPlayEnd","un","deviceId","setSinkId","reject","destroyed","removeMediaElementOnDestroy","PeakCache","clearPeakCache","peakCacheRanges","peakCacheLength","uncachedRanges","item","arr","sort","uncachedRangePairs","peakCacheRangePairs","_max","_min","values","fetchFile","_observer","ProgressHandler","contentLength","response","_reader","getReader","total","loaded","controller","read","then","done","lengthComputable","close","byteLength","enqueue","catch","fetchHeaders","Headers","fetchRequest","Request","AbortController","requestHeaders","header","responseType","fetchOptions","headers","mode","credentials","redirect","referrer","signal","fetch","progressAvailable","Response","ReadableStream","errMsg","ok","arrayBuffer","json","blob","text","status","_requestAnimationFrame","func","_len","_key","getId","random","substring","__unused_webpack_module","_absMax","_clamp","_debounce","_fetch","_frame","_silenceMode","_preventClick","_orientation","largest","smallest","_disabledEventEmissions","handlers","eventNames","_len2","_key2","_isDisabledEventEmission","verticalPropMap","offsetTop","mapProp","isProxy","preventClickHandler","preventClick","_default","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","ignoreSilenceMode","silentAC","AudioContext","silentBS","createBufferSource","createBuffer","destination","audioData","tmp","innerHTML","audioSilentMode","disableRemotePlayback","_peakcache","_mediaelementWebaudio","_defineProperty","audioContext","audioScriptProcessor","backgroundColor","dragSelection","desynchronized","forceDecode","loopSelection","mediaContainer","minPxPerSec","partialRender","devicePixelRatio","screen","deviceXDPI","logicalXDPI","plugins","renderer","responsive","skipLength","splitDragSelection","xhr","WebAudio","assign","defaultParams","setBackgroundColor","savedVolume","tmpEvents","currentRequest","arraybuffer","drawer","peakCache","supportsWebAudio","Backend","backends","initialisedPluginList","isDestroyed","isReady","prevWidth","_onResize","debounce","registerPlugins","createDrawer","createBackend","createPeakCache","plugin","addPlugin","deferInit","initPlugin","pluginStaticProp","Instance","observerPrototypeKeys","getOwnPropertyNames","destroyPlugin","init","drawBuffer","getPlayedPercents","newVolume","getVolume","skip","seekAndCenter","recenter","_this8","isFinite","isWebAudioBackend","oldScrollParent","getPlaybackRate","setMute","mute","filters","channelIdx","channelIndices","newRanges","addRangeToPeakCache","getPeaks","drawPeaks","pxPerSec","_this9","decodeArrayBuffer","loadDecodedBuffer","_this10","reader","FileReader","loadArrayBuffer","readAsArrayBuffer","empty","preloadIgnoreReasons","activeReasons","reason","warn","join","loadBuffer","loadMediaElement","_this11","action","getArrayBuffer","setPeaks","urlOrElt","_this12","loadElt","err","_this13","_this14","request","percentComplete","accuracy","noWindow","blobJSON","Blob","stringify","objURL","createObjectURL","open","cancel","abort","disconnectSource","cancelAjax","clearTmpEvents","destroyAllPlugins","PLAYING","PAUSED","FINISHED","_defineProperty2","_this$states","addOnAudioProcess","startPosition","getPlayedTime","getAudioContext","lastPlay","scheduledPause","states","stateBehaviors","gainNode","mergedPeaks","offlineAc","scriptNode","source","splitPeaks","sinkStreamDestination","sinkAudioElement","webkitAudioContext","WaveSurferAudioContext","sampleRate","WaveSurferOfflineAudioContext","OfflineAudioContext","webkitOfflineAudioContext","setState","setLength","disconnect","setFilters","disconnectFilters","reduce","prev","curr","loop","createAnalyser","createGain","createGainNode","createMediaStreamDestination","srcObject","stream","gain","setValueAtTime","errback","getOfflineAudioContext","decodeAudioData","numberOfChannels","newBuffer","sampleSize","sampleStep","chan","getChannelData","closeAudioContext","createSource","noteGrainOn","noteOff","resume","adjustedTime","wait","context","timestamp","later","now","debounced","callNow","flush","__webpack_module_cache__","moduleId","cachedModule"],"sourceRoot":""}