{"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":""}