{"version":3,"file":"js/single.bundle.min.js","mappings":"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","sources":["webpack://sns/./client/src/components/carousel/simple-arrow-left.svg","webpack://sns/./client/src/components/carousel/simple-arrow-right.svg","webpack://sns/../sciencenews/node_modules/fastdom/fastdom.js","webpack://sns/../sciencenews/node_modules/js-cookie/src/js.cookie.js","webpack://sns/../sciencenews/node_modules/memize/index.js","webpack://sns/../sciencenews/node_modules/sprintf-js/src/sprintf.js","webpack://sns/../sciencenews/client/src/components/nav-bar/chevron-down.svg","webpack://sns/webpack/bootstrap","webpack://sns/webpack/runtime/compat get default export","webpack://sns/webpack/runtime/define property getters","webpack://sns/webpack/runtime/hasOwnProperty shorthand","webpack://sns/webpack/runtime/publicPath","webpack://sns/../sciencenews/node_modules/js-component-framework/es/domContentLoaded.js","webpack://sns/../sciencenews/node_modules/js-component-framework/es/componentProvider.js","webpack://sns/../sciencenews/node_modules/js-component-framework/es/componentLoader.js","webpack://sns/../sciencenews/client/src/js/utils/getFormattedClassnames.js","webpack://sns/../sciencenews/node_modules/@tannin/postfix/index.js","webpack://sns/../sciencenews/node_modules/@wordpress/i18n/build-module/sprintf.js","webpack://sns/../sciencenews/node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://sns/../sciencenews/node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://sns/../sciencenews/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://sns/../sciencenews/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://sns/../sciencenews/node_modules/@tannin/evaluate/index.js","webpack://sns/../sciencenews/node_modules/tannin/index.js","webpack://sns/../sciencenews/node_modules/@wordpress/i18n/build-module/create-i18n.js","webpack://sns/../sciencenews/node_modules/@tannin/plural-forms/index.js","webpack://sns/../sciencenews/node_modules/@tannin/compile/index.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/validateNamespace.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/validateHookName.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/createAddHook.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/createRemoveHook.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/createHasHook.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/createRunHook.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/createCurrentHook.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/createDoingHook.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/createDidHook.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/index.js","webpack://sns/../sciencenews/node_modules/@wordpress/hooks/build-module/createHooks.js","webpack://sns/../sciencenews/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://sns/../sciencenews/node_modules/@wordpress/i18n/build-module/default-i18n.js","webpack://sns/../sciencenews/client/src/js/a11y/lib/keyCodes.js","webpack://sns/../sciencenews/client/src/js/a11y/lib/interactiveChildren.js","webpack://sns/../sciencenews/client/src/js/a11y/Popup.js","webpack://sns/../sciencenews/client/src/js/a11y/MenuItem.js","webpack://sns/../sciencenews/client/src/js/a11y/lib/rovingTabIndex.js","webpack://sns/../sciencenews/client/src/js/a11y/Menu.js","webpack://sns/../sciencenews/client/src/js/utils/Throttle.js","webpack://sns/../sciencenews/client/src/js/utils/breakpoints.js","webpack://sns/../sciencenews/client/src/js/a11y/lib/uniqueId.js","webpack://sns/../sciencenews/client/src/js/a11y/lib/createScreenReaderText.js","webpack://sns/../sciencenews/client/src/components/topics-megamenu/GroupWidget.js","webpack://sns/../sciencenews/client/src/components/topics-megamenu/index.js","webpack://sns/../sciencenews/client/src/components/topics-megamenu/topics-megamenu.js","webpack://sns/../sciencenews/client/src/js/a11y/Disclosure.js","webpack://sns/../sciencenews/client/src/js/utils/getClassnameFromComponent.js","webpack://sns/../sciencenews/client/src/js/utils/camelCaseString.js","webpack://sns/../sciencenews/client/src/js/utils/getElementFromComponent.js","webpack://sns/../sciencenews/client/src/components/header-search/index.js","webpack://sns/../sciencenews/client/src/components/header-search/header-search.js","webpack://sns/../sciencenews/client/src/components/nav-bar/index.js","webpack://sns/../sciencenews/client/src/components/nav-bar/nav-bar.js","webpack://sns/../sciencenews/client/src/js/utils/FormAssemblySubmit.js","webpack://sns/../sciencenews/client/src/components/form-assembly/index.js","webpack://sns/../sciencenews/client/src/components/form-assembly/form-assembly.js","webpack://sns/../sciencenews/client/src/components/newsletter-signup/index.js","webpack://sns/../sciencenews/client/src/components/newsletter-signup/newsletter-signup.js","webpack://sns/../sciencenews/node_modules/aria-components/src/AriaComponent.js","webpack://sns/../sciencenews/node_modules/aria-components/src/lib/keyCodes.js","webpack://sns/../sciencenews/node_modules/aria-components/src/lib/rovingTabIndex.js","webpack://sns/../sciencenews/client/src/js/utils/ProgrammaticDialog.js","webpack://sns/../sciencenews/node_modules/aria-components/src/lib/interactiveChildren.js","webpack://sns/../sciencenews/node_modules/aria-components/src/lib/getFirstAndLastItems.js","webpack://sns/../sciencenews/client/src/js/utils/toArray.js","webpack://sns/../sciencenews/node_modules/aria-components/src/lib/uniqueId.js","webpack://sns/../sciencenews/client/src/components/restricted-content/restrictedContentCookieName.js","webpack://sns/../sciencenews/client/src/components/restricted-content/modal-signup/index.js","webpack://sns/../sciencenews/client/src/components/restricted-content/modal-signup/modal-signup.js","webpack://sns/../sciencenews/client/src/components/cookie-banner/index.js","webpack://sns/../sciencenews/node_modules/swiper/shared/ssr-window.esm.mjs","webpack://sns/../sciencenews/client/src/components/cookie-banner/cookie-banner.js","webpack://sns/./client/src/components/print-power-words/index.js","webpack://sns/./client/src/components/print-power-words/print-power-words.js","webpack://sns/../sciencenews/client/src/components/form-assembly-form/index.js","webpack://sns/../sciencenews/client/src/components/form-assembly-form/form-assembly-form.js","webpack://sns/../sciencenews/node_modules/swiper/shared/utils.mjs","webpack://sns/../sciencenews/node_modules/swiper/shared/swiper-core.mjs","webpack://sns/../sciencenews/node_modules/swiper/shared/create-element-if-not-defined.mjs","webpack://sns/../sciencenews/node_modules/swiper/modules/navigation.mjs","webpack://sns/../sciencenews/node_modules/swiper/shared/classes-to-selector.mjs","webpack://sns/../sciencenews/node_modules/swiper/modules/pagination.mjs","webpack://sns/../sciencenews/node_modules/swiper/modules/a11y.mjs","webpack://sns/../sciencenews/client/src/components/carousel/index.js","webpack://sns/../sciencenews/client/src/components/carousel/carousel.js","webpack://sns/../sciencenews/client/src/components/carousel/carousel.module.scss?60f6","webpack://sns/./client/src/components/carousel/index.js","webpack://sns/./client/src/components/carousel/carousel.module.scss?e093","webpack://sns/../sciencenews/client/src/components/video-player/index.js","webpack://sns/../sciencenews/client/src/components/video-player/video-player.js","webpack://sns/./client/src/components/widget-resources/index.js","webpack://sns/./client/src/components/widget-resources/widget-resources.js"],"sourcesContent":["module.exports = \"<svg viewBox=\\\"0 0 18 26\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" stroke=\\\"#176cab\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" transform=\\\"matrix(-1 0 0 1 17 1)\\\"><path d=\\\"m8 24 7.7541746-11.1443478c.3277672-.5237546.3277672-1.1885932 0-1.7123479l-7.7541746-11.1433043\\\"></path><path d=\\\"m.5934462 24c-.56309659 0-.7606923-.386087-.43921534-.8566957l7.02130253-10.2876521c.3214996-.5237546.3214996-1.1885932 0-1.7123479l-7.02130253-10.28973908c-.32147696-.4706087-.12388125-.85356522.43921534-.85356522h1.53571796c.63182477.03655095 1.21772241.34824077 1.60840861.85565217l7.02130253 10.28765213c.3214996.5237547.3214996 1.1885933 0 1.7123479l-7.02130253 10.2855652c-.39018519.5084797-.97611774.8213285-1.60840861.8587826z\\\"></path></g></svg>\"","module.exports = \"<svg viewBox=\\\"0 0 18 26\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><g fill=\\\"none\\\" fill-rule=\\\"evenodd\\\" stroke=\\\"#176cab\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" transform=\\\"translate(1 1)\\\"><path d=\\\"m8 24 7.7541746-11.1443478c.3277672-.5237546.3277672-1.1885932 0-1.7123479l-7.7541746-11.1433043\\\"></path><path d=\\\"m.5934462 24c-.56309659 0-.7606923-.386087-.43921534-.8566957l7.02130253-10.2876521c.3214996-.5237546.3214996-1.1885932 0-1.7123479l-7.02130253-10.28973908c-.32147696-.4706087-.12388125-.85356522.43921534-.85356522h1.53571796c.63182477.03655095 1.21772241.34824077 1.60840861.85565217l7.02130253 10.28765213c.3214996.5237547.3214996 1.1885933 0 1.7123479l-7.02130253 10.2855652c-.39018519.5084797-.97611774.8213285-1.60840861.8587826z\\\"></path></g></svg>\"","!(function(win) {\n\n/**\n * FastDom\n *\n * Eliminates layout thrashing\n * by batching DOM read/write\n * interactions.\n *\n * @author Wilson Page <wilsonpage@me.com>\n * @author Kornel Lesinski <kornel.lesinski@ft.com>\n */\n\n'use strict';\n\n/**\n * Mini logger\n *\n * @return {Function}\n */\nvar debug = 0 ? console.log.bind(console, '[fastdom]') : function() {};\n\n/**\n * Normalized rAF\n *\n * @type {Function}\n */\nvar raf = win.requestAnimationFrame\n  || win.webkitRequestAnimationFrame\n  || win.mozRequestAnimationFrame\n  || win.msRequestAnimationFrame\n  || function(cb) { return setTimeout(cb, 16); };\n\n/**\n * Initialize a `FastDom`.\n *\n * @constructor\n */\nfunction FastDom() {\n  var self = this;\n  self.reads = [];\n  self.writes = [];\n  self.raf = raf.bind(win); // test hook\n  debug('initialized', self);\n}\n\nFastDom.prototype = {\n  constructor: FastDom,\n\n  /**\n   * We run this inside a try catch\n   * so that if any jobs error, we\n   * are able to recover and continue\n   * to flush the batch until it's empty.\n   *\n   * @param {Array} tasks\n   */\n  runTasks: function(tasks) {\n    debug('run tasks');\n    var task; while (task = tasks.shift()) task();\n  },\n\n  /**\n   * Adds a job to the read batch and\n   * schedules a new frame if need be.\n   *\n   * @param  {Function} fn\n   * @param  {Object} ctx the context to be bound to `fn` (optional).\n   * @public\n   */\n  measure: function(fn, ctx) {\n    debug('measure');\n    var task = !ctx ? fn : fn.bind(ctx);\n    this.reads.push(task);\n    scheduleFlush(this);\n    return task;\n  },\n\n  /**\n   * Adds a job to the\n   * write batch and schedules\n   * a new frame if need be.\n   *\n   * @param  {Function} fn\n   * @param  {Object} ctx the context to be bound to `fn` (optional).\n   * @public\n   */\n  mutate: function(fn, ctx) {\n    debug('mutate');\n    var task = !ctx ? fn : fn.bind(ctx);\n    this.writes.push(task);\n    scheduleFlush(this);\n    return task;\n  },\n\n  /**\n   * Clears a scheduled 'read' or 'write' task.\n   *\n   * @param {Object} task\n   * @return {Boolean} success\n   * @public\n   */\n  clear: function(task) {\n    debug('clear', task);\n    return remove(this.reads, task) || remove(this.writes, task);\n  },\n\n  /**\n   * Extend this FastDom with some\n   * custom functionality.\n   *\n   * Because fastdom must *always* be a\n   * singleton, we're actually extending\n   * the fastdom instance. This means tasks\n   * scheduled by an extension still enter\n   * fastdom's global task queue.\n   *\n   * The 'super' instance can be accessed\n   * from `this.fastdom`.\n   *\n   * @example\n   *\n   * var myFastdom = fastdom.extend({\n   *   initialize: function() {\n   *     // runs on creation\n   *   },\n   *\n   *   // override a method\n   *   measure: function(fn) {\n   *     // do extra stuff ...\n   *\n   *     // then call the original\n   *     return this.fastdom.measure(fn);\n   *   },\n   *\n   *   ...\n   * });\n   *\n   * @param  {Object} props  properties to mixin\n   * @return {FastDom}\n   */\n  extend: function(props) {\n    debug('extend', props);\n    if (typeof props != 'object') throw new Error('expected object');\n\n    var child = Object.create(this);\n    mixin(child, props);\n    child.fastdom = this;\n\n    // run optional creation hook\n    if (child.initialize) child.initialize();\n\n    return child;\n  },\n\n  // override this with a function\n  // to prevent Errors in console\n  // when tasks throw\n  catch: null\n};\n\n/**\n * Schedules a new read/write\n * batch if one isn't pending.\n *\n * @private\n */\nfunction scheduleFlush(fastdom) {\n  if (!fastdom.scheduled) {\n    fastdom.scheduled = true;\n    fastdom.raf(flush.bind(null, fastdom));\n    debug('flush scheduled');\n  }\n}\n\n/**\n * Runs queued `read` and `write` tasks.\n *\n * Errors are caught and thrown by default.\n * If a `.catch` function has been defined\n * it is called instead.\n *\n * @private\n */\nfunction flush(fastdom) {\n  debug('flush');\n\n  var writes = fastdom.writes;\n  var reads = fastdom.reads;\n  var error;\n\n  try {\n    debug('flushing reads', reads.length);\n    fastdom.runTasks(reads);\n    debug('flushing writes', writes.length);\n    fastdom.runTasks(writes);\n  } catch (e) { error = e; }\n\n  fastdom.scheduled = false;\n\n  // If the batch errored we may still have tasks queued\n  if (reads.length || writes.length) scheduleFlush(fastdom);\n\n  if (error) {\n    debug('task errored', error.message);\n    if (fastdom.catch) fastdom.catch(error);\n    else throw error;\n  }\n}\n\n/**\n * Remove an item from an Array.\n *\n * @param  {Array} array\n * @param  {*} item\n * @return {Boolean}\n */\nfunction remove(array, item) {\n  var index = array.indexOf(item);\n  return !!~index && !!array.splice(index, 1);\n}\n\n/**\n * Mixin own properties of source\n * object into the target.\n *\n * @param  {Object} target\n * @param  {Object} source\n */\nfunction mixin(target, source) {\n  for (var key in source) {\n    if (source.hasOwnProperty(key)) target[key] = source[key];\n  }\n}\n\n// There should never be more than\n// one instance of `FastDom` in an app\nvar exports = win.fastdom = (win.fastdom || new FastDom()); // jshint ignore:line\n\n// Expose to CJS & AMD\nif ((typeof define) == 'function') define(function() { return exports; });\nelse if ((typeof module) == 'object') module.exports = exports;\n\n})( typeof window !== 'undefined' ? window : this);\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t//     character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","/**\n * Memize options object.\n *\n * @typedef MemizeOptions\n *\n * @property {number} [maxSize] Maximum size of the cache.\n */\n\n/**\n * Internal cache entry.\n *\n * @typedef MemizeCacheNode\n *\n * @property {?MemizeCacheNode|undefined} [prev] Previous node.\n * @property {?MemizeCacheNode|undefined} [next] Next node.\n * @property {Array<*>}                   args   Function arguments for cache\n *                                               entry.\n * @property {*}                          val    Function result.\n */\n\n/**\n * Properties of the enhanced function for controlling cache.\n *\n * @typedef MemizeMemoizedFunction\n *\n * @property {()=>void} clear Clear the cache.\n */\n\n/**\n * Accepts a function to be memoized, and returns a new memoized function, with\n * optional options.\n *\n * @template {Function} F\n *\n * @param {F}             fn        Function to memoize.\n * @param {MemizeOptions} [options] Options object.\n *\n * @return {F & MemizeMemoizedFunction} Memoized function.\n */\nfunction memize( fn, options ) {\n\tvar size = 0;\n\n\t/** @type {?MemizeCacheNode|undefined} */\n\tvar head;\n\n\t/** @type {?MemizeCacheNode|undefined} */\n\tvar tail;\n\n\toptions = options || {};\n\n\tfunction memoized( /* ...args */ ) {\n\t\tvar node = head,\n\t\t\tlen = arguments.length,\n\t\t\targs, i;\n\n\t\tsearchCache: while ( node ) {\n\t\t\t// Perform a shallow equality test to confirm that whether the node\n\t\t\t// under test is a candidate for the arguments passed. Two arrays\n\t\t\t// are shallowly equal if their length matches and each entry is\n\t\t\t// strictly equal between the two sets. Avoid abstracting to a\n\t\t\t// function which could incur an arguments leaking deoptimization.\n\n\t\t\t// Check whether node arguments match arguments length\n\t\t\tif ( node.args.length !== arguments.length ) {\n\t\t\t\tnode = node.next;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check whether node arguments match arguments values\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( node.args[ i ] !== arguments[ i ] ) {\n\t\t\t\t\tnode = node.next;\n\t\t\t\t\tcontinue searchCache;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// At this point we can assume we've found a match\n\n\t\t\t// Surface matched node to head if not already\n\t\t\tif ( node !== head ) {\n\t\t\t\t// As tail, shift to previous. Must only shift if not also\n\t\t\t\t// head, since if both head and tail, there is no previous.\n\t\t\t\tif ( node === tail ) {\n\t\t\t\t\ttail = node.prev;\n\t\t\t\t}\n\n\t\t\t\t// Adjust siblings to point to each other. If node was tail,\n\t\t\t\t// this also handles new tail's empty `next` assignment.\n\t\t\t\t/** @type {MemizeCacheNode} */ ( node.prev ).next = node.next;\n\t\t\t\tif ( node.next ) {\n\t\t\t\t\tnode.next.prev = node.prev;\n\t\t\t\t}\n\n\t\t\t\tnode.next = head;\n\t\t\t\tnode.prev = null;\n\t\t\t\t/** @type {MemizeCacheNode} */ ( head ).prev = node;\n\t\t\t\thead = node;\n\t\t\t}\n\n\t\t\t// Return immediately\n\t\t\treturn node.val;\n\t\t}\n\n\t\t// No cached value found. Continue to insertion phase:\n\n\t\t// Create a copy of arguments (avoid leaking deoptimization)\n\t\targs = new Array( len );\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tnode = {\n\t\t\targs: args,\n\n\t\t\t// Generate the result from original function\n\t\t\tval: fn.apply( null, args ),\n\t\t};\n\n\t\t// Don't need to check whether node is already head, since it would\n\t\t// have been returned above already if it was\n\n\t\t// Shift existing head down list\n\t\tif ( head ) {\n\t\t\thead.prev = node;\n\t\t\tnode.next = head;\n\t\t} else {\n\t\t\t// If no head, follows that there's no tail (at initial or reset)\n\t\t\ttail = node;\n\t\t}\n\n\t\t// Trim tail if we're reached max size and are pending cache insertion\n\t\tif ( size === /** @type {MemizeOptions} */ ( options ).maxSize ) {\n\t\t\ttail = /** @type {MemizeCacheNode} */ ( tail ).prev;\n\t\t\t/** @type {MemizeCacheNode} */ ( tail ).next = null;\n\t\t} else {\n\t\t\tsize++;\n\t\t}\n\n\t\thead = node;\n\n\t\treturn node.val;\n\t}\n\n\tmemoized.clear = function() {\n\t\thead = null;\n\t\ttail = null;\n\t\tsize = 0;\n\t};\n\n\tif ( process.env.NODE_ENV === 'test' ) {\n\t\t// Cache is not exposed in the public API, but used in tests to ensure\n\t\t// expected list progression\n\t\tmemoized.getCache = function() {\n\t\t\treturn [ head, tail, size ];\n\t\t};\n\t}\n\n\t// Ignore reason: There's not a clear solution to create an intersection of\n\t// the function with additional properties, where the goal is to retain the\n\t// function signature of the incoming argument and add control properties\n\t// on the return value.\n\n\t// @ts-ignore\n\treturn memoized;\n}\n\nmodule.exports = memize;\n","/* global window, exports, define */\n\n!function() {\n    'use strict'\n\n    var re = {\n        not_string: /[^s]/,\n        not_bool: /[^t]/,\n        not_type: /[^T]/,\n        not_primitive: /[^v]/,\n        number: /[diefg]/,\n        numeric_arg: /[bcdiefguxX]/,\n        json: /[j]/,\n        not_json: /[^j]/,\n        text: /^[^\\x25]+/,\n        modulo: /^\\x25{2}/,\n        placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n        key: /^([a-z_][a-z_\\d]*)/i,\n        key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n        index_access: /^\\[(\\d+)\\]/,\n        sign: /^[+-]/\n    }\n\n    function sprintf(key) {\n        // `arguments` is not an array, but should be fine for this call\n        return sprintf_format(sprintf_parse(key), arguments)\n    }\n\n    function vsprintf(fmt, argv) {\n        return sprintf.apply(null, [fmt].concat(argv || []))\n    }\n\n    function sprintf_format(parse_tree, argv) {\n        var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n        for (i = 0; i < tree_length; i++) {\n            if (typeof parse_tree[i] === 'string') {\n                output += parse_tree[i]\n            }\n            else if (typeof parse_tree[i] === 'object') {\n                ph = parse_tree[i] // convenience purposes only\n                if (ph.keys) { // keyword argument\n                    arg = argv[cursor]\n                    for (k = 0; k < ph.keys.length; k++) {\n                        if (arg == undefined) {\n                            throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n                        }\n                        arg = arg[ph.keys[k]]\n                    }\n                }\n                else if (ph.param_no) { // positional argument (explicit)\n                    arg = argv[ph.param_no]\n                }\n                else { // positional argument (implicit)\n                    arg = argv[cursor++]\n                }\n\n                if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n                    arg = arg()\n                }\n\n                if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n                    throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n                }\n\n                if (re.number.test(ph.type)) {\n                    is_positive = arg >= 0\n                }\n\n                switch (ph.type) {\n                    case 'b':\n                        arg = parseInt(arg, 10).toString(2)\n                        break\n                    case 'c':\n                        arg = String.fromCharCode(parseInt(arg, 10))\n                        break\n                    case 'd':\n                    case 'i':\n                        arg = parseInt(arg, 10)\n                        break\n                    case 'j':\n                        arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n                        break\n                    case 'e':\n                        arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n                        break\n                    case 'f':\n                        arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n                        break\n                    case 'g':\n                        arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n                        break\n                    case 'o':\n                        arg = (parseInt(arg, 10) >>> 0).toString(8)\n                        break\n                    case 's':\n                        arg = String(arg)\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 't':\n                        arg = String(!!arg)\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 'T':\n                        arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 'u':\n                        arg = parseInt(arg, 10) >>> 0\n                        break\n                    case 'v':\n                        arg = arg.valueOf()\n                        arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n                        break\n                    case 'x':\n                        arg = (parseInt(arg, 10) >>> 0).toString(16)\n                        break\n                    case 'X':\n                        arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n                        break\n                }\n                if (re.json.test(ph.type)) {\n                    output += arg\n                }\n                else {\n                    if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n                        sign = is_positive ? '+' : '-'\n                        arg = arg.toString().replace(re.sign, '')\n                    }\n                    else {\n                        sign = ''\n                    }\n                    pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n                    pad_length = ph.width - (sign + arg).length\n                    pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n                    output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n                }\n            }\n        }\n        return output\n    }\n\n    var sprintf_cache = Object.create(null)\n\n    function sprintf_parse(fmt) {\n        if (sprintf_cache[fmt]) {\n            return sprintf_cache[fmt]\n        }\n\n        var _fmt = fmt, match, parse_tree = [], arg_names = 0\n        while (_fmt) {\n            if ((match = re.text.exec(_fmt)) !== null) {\n                parse_tree.push(match[0])\n            }\n            else if ((match = re.modulo.exec(_fmt)) !== null) {\n                parse_tree.push('%')\n            }\n            else if ((match = re.placeholder.exec(_fmt)) !== null) {\n                if (match[2]) {\n                    arg_names |= 1\n                    var field_list = [], replacement_field = match[2], field_match = []\n                    if ((field_match = re.key.exec(replacement_field)) !== null) {\n                        field_list.push(field_match[1])\n                        while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n                            if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n                                field_list.push(field_match[1])\n                            }\n                            else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n                                field_list.push(field_match[1])\n                            }\n                            else {\n                                throw new SyntaxError('[sprintf] failed to parse named argument key')\n                            }\n                        }\n                    }\n                    else {\n                        throw new SyntaxError('[sprintf] failed to parse named argument key')\n                    }\n                    match[2] = field_list\n                }\n                else {\n                    arg_names |= 2\n                }\n                if (arg_names === 3) {\n                    throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n                }\n\n                parse_tree.push(\n                    {\n                        placeholder: match[0],\n                        param_no:    match[1],\n                        keys:        match[2],\n                        sign:        match[3],\n                        pad_char:    match[4],\n                        align:       match[5],\n                        width:       match[6],\n                        precision:   match[7],\n                        type:        match[8]\n                    }\n                )\n            }\n            else {\n                throw new SyntaxError('[sprintf] unexpected placeholder')\n            }\n            _fmt = _fmt.substring(match[0].length)\n        }\n        return sprintf_cache[fmt] = parse_tree\n    }\n\n    /**\n     * export to either browser or node.js\n     */\n    /* eslint-disable quote-props */\n    if (typeof exports !== 'undefined') {\n        exports['sprintf'] = sprintf\n        exports['vsprintf'] = vsprintf\n    }\n    if (typeof window !== 'undefined') {\n        window['sprintf'] = sprintf\n        window['vsprintf'] = vsprintf\n\n        if (typeof define === 'function' && define['amd']) {\n            define(function() {\n                return {\n                    'sprintf': sprintf,\n                    'vsprintf': vsprintf\n                }\n            })\n        }\n    }\n    /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","module.exports = \"<svg viewBox=\\\"0 0 16 10\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><path d=\\\"m1.867 0-1.867 1.867 8 8 8-8-1.867-1.867-6.133 6.133z\\\" fill-rule=\\\"evenodd\\\"></path></svg>\"","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","__webpack_require__.p = \"/wp-content/themes/sciencenews-sns-child/client/build/\";","/* eslint consistent-return: [\"error\", { \"treatUndefinedAsUnspecified\": true }] */\n\n/**\n * Executes the given callback when DOMContentLoaded is ready.\n *\n * @param {function} callback Callback to execute once DOMContentLoaded completes.\n */\nfunction domContentLoaded(callback) {\n  if (document.readyState === 'complete' || document.readyState === 'interactive') {\n    return void callback(); // eslint-disable-line no-void\n  }\n\n  document.addEventListener('DOMContentLoaded', callback, {\n    once: true\n  });\n}\nexport default domContentLoaded;","import componentLoader from './componentLoader';\n\n/**\n * Compile component elements and DOM attachments.\n *\n * @param {Object} config The component config.\n * @returns {Function|undefined} A function to initialize the component.\n */\nexport default function componentProvider(config) {\n  const {\n    component: Component,\n    load,\n    // default value omitted so `componentLoader` can use its default.\n    name,\n    querySelector = {},\n    querySelectorAll = {},\n    options = {}\n  } = config;\n  if (typeof Component !== 'function') {\n    return undefined;\n  }\n\n  /**\n   * Collect component arguments based on the config.\n   *\n   * @returns {array} Array of arguments.\n   */\n  const getComponentArgs = () => {\n    // Set component selector, preferring the `name` property.\n    const selector = undefined === name ? config === null || config === void 0 ? void 0 : config.root : `[data-component='${name}']`;\n    let componentEls;\n\n    // Test for a valid selector.\n    try {\n      componentEls = document.querySelectorAll(selector);\n    } catch (e) {\n      console.error(e); // eslint-disable-line no-console\n      return [];\n    }\n\n    // No component elements found.\n    if (componentEls.length < 1) {\n      console.log(`No elements found for ${selector}`); // eslint-disable-line no-console\n      return [];\n    }\n    return Array.from(componentEls).map(element => {\n      const children = {};\n\n      // Select single child nodes.\n      Object.keys(querySelector).forEach(elementKey => {\n        children[elementKey] = element.querySelector(querySelector[elementKey]);\n      });\n\n      // Select groups of child nodes.\n      Object.keys(querySelectorAll).forEach(elementKey => {\n        const nodeList = element.querySelectorAll(querySelectorAll[elementKey]);\n        children[elementKey] = Array.from(nodeList);\n      });\n      return {\n        element,\n        children,\n        options\n      };\n    });\n  };\n\n  /**\n   * The provider function.\n   *\n   * Finds DOM nodes upon which the component should be initialized, collects\n   * references to child nodes thereof, and passes these as arguments to each\n   * instance of the component.\n   */\n  const init = () => {\n    const componentArgs = getComponentArgs();\n    componentArgs.forEach(args => new Component(args));\n  };\n\n  // Return the provider function for later execution.\n  if (load === false) {\n    return init;\n  }\n\n  /*\n   * Call the provider function so it is executed as soon as the document is\n   * parsed and loaded.\n   *\n   * This is a convenience option and is functionally identical to setting\n   * `config.load` to false and calling the provider function later in the script.\n   */\n  if (load === true) {\n    return void init(); // eslint-disable-line no-void\n  }\n\n  // Use the handler defined in the `load` config property.\n  return void componentLoader(init, load); // eslint-disable-line no-void\n}","import domContentLoaded from './domContentLoaded';\n\n/**\n * Execute the given function according to the `load` parameter.\n *\n * @param {function} init The function to execute.\n * @param {boolean|array|function} load The loading instructions.\n */\nexport default function componentLoader(init) {\n  let load = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : domContentLoaded;\n  if (init) {\n    if (typeof load === 'function') {\n      load(init);\n    } else if (Array.isArray(load)) {\n      const [element, event] = load;\n\n      // e.g., load: [window, 'load']\n      element === null || element === void 0 ? void 0 : element.addEventListener(event, init);\n    }\n  }\n}","/**\n * Formats classnames from a given namespace\n * Essentially just adds a '.' to the beginning of classnames\n *\n * @param {Object} namespace The namespace within which to format classnames.\n * @return {Object}\n */\nexport default function getFormattedClassnames(namespace) {\n  return Object.keys(namespace).reduce((acc, key) => {\n    acc[key] = `.${namespace[key].split(' ')[0]}`;\n    return acc;\n  }, {});\n}\n","var PRECEDENCE, OPENERS, TERMINATORS, PATTERN;\n\n/**\n * Operator precedence mapping.\n *\n * @type {Object}\n */\nPRECEDENCE = {\n\t'(': 9,\n\t'!': 8,\n\t'*': 7,\n\t'/': 7,\n\t'%': 7,\n\t'+': 6,\n\t'-': 6,\n\t'<': 5,\n\t'<=': 5,\n\t'>': 5,\n\t'>=': 5,\n\t'==': 4,\n\t'!=': 4,\n\t'&&': 3,\n\t'||': 2,\n\t'?': 1,\n\t'?:': 1,\n};\n\n/**\n * Characters which signal pair opening, to be terminated by terminators.\n *\n * @type {string[]}\n */\nOPENERS = [ '(', '?' ];\n\n/**\n * Characters which signal pair termination, the value an array with the\n * opener as its first member. The second member is an optional operator\n * replacement to push to the stack.\n *\n * @type {string[]}\n */\nTERMINATORS = {\n\t')': [ '(' ],\n\t':': [ '?', '?:' ],\n};\n\n/**\n * Pattern matching operators and openers.\n *\n * @type {RegExp}\n */\nPATTERN = /<=|>=|==|!=|&&|\\|\\||\\?:|\\(|!|\\*|\\/|%|\\+|-|<|>|\\?|\\)|:/;\n\n/**\n * Given a C expression, returns the equivalent postfix (Reverse Polish)\n * notation terms as an array.\n *\n * If a postfix string is desired, simply `.join( ' ' )` the result.\n *\n * @example\n *\n * ```js\n * import postfix from '@tannin/postfix';\n *\n * postfix( 'n > 1' );\n * // ⇒ [ 'n', '1', '>' ]\n * ```\n *\n * @param {string} expression C expression.\n *\n * @return {string[]} Postfix terms.\n */\nexport default function postfix( expression ) {\n\tvar terms = [],\n\t\tstack = [],\n\t\tmatch, operator, term, element;\n\n\twhile ( ( match = expression.match( PATTERN ) ) ) {\n\t\toperator = match[ 0 ];\n\n\t\t// Term is the string preceding the operator match. It may contain\n\t\t// whitespace, and may be empty (if operator is at beginning).\n\t\tterm = expression.substr( 0, match.index ).trim();\n\t\tif ( term ) {\n\t\t\tterms.push( term );\n\t\t}\n\n\t\twhile ( ( element = stack.pop() ) ) {\n\t\t\tif ( TERMINATORS[ operator ] ) {\n\t\t\t\tif ( TERMINATORS[ operator ][ 0 ] === element ) {\n\t\t\t\t\t// Substitution works here under assumption that because\n\t\t\t\t\t// the assigned operator will no longer be a terminator, it\n\t\t\t\t\t// will be pushed to the stack during the condition below.\n\t\t\t\t\toperator = TERMINATORS[ operator ][ 1 ] || operator;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if ( OPENERS.indexOf( element ) >= 0 || PRECEDENCE[ element ] < PRECEDENCE[ operator ] ) {\n\t\t\t\t// Push to stack if either an opener or when pop reveals an\n\t\t\t\t// element of lower precedence.\n\t\t\t\tstack.push( element );\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// For each popped from stack, push to terms.\n\t\t\tterms.push( element );\n\t\t}\n\n\t\tif ( ! TERMINATORS[ operator ] ) {\n\t\t\tstack.push( operator );\n\t\t}\n\n\t\t// Slice matched fragment from expression to continue match.\n\t\texpression = expression.substr( match.index + operator.length );\n\t}\n\n\t// Push remainder of operand, if exists, to terms.\n\texpression = expression.trim();\n\tif ( expression ) {\n\t\tterms.push( expression );\n\t}\n\n\t// Pop remaining items from stack into terms.\n\treturn terms.concat( stack.reverse() );\n}\n","/**\n * External dependencies\n */\nimport memoize from 'memize';\nimport sprintfjs from 'sprintf-js';\n/**\n * Log to console, once per message; or more precisely, per referentially equal\n * argument set. Because Jed throws errors, we log these to the console instead\n * to avoid crashing the application.\n *\n * @param {...*} args Arguments to pass to `console.error`\n */\n\nvar logErrorOnce = memoize(console.error); // eslint-disable-line no-console\n\n/**\n * Returns a formatted string. If an error occurs in applying the format, the\n * original format string is returned.\n *\n * @param {string}    format The format of the string to generate.\n * @param {...*} args Arguments to apply to the format.\n *\n * @see https://www.npmjs.com/package/sprintf-js\n *\n * @return {string} The formatted string.\n */\n\nexport function sprintf(format) {\n  try {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return sprintfjs.sprintf.apply(sprintfjs, [format].concat(args));\n  } catch (error) {\n    logErrorOnce('sprintf error: \\n\\n' + error.toString());\n    return format;\n  }\n}\n//# sourceMappingURL=sprintf.js.map","export default function _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n  key = toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n  var key = toPrimitive(arg, \"string\");\n  return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n  if (_typeof(input) !== \"object\" || input === null) return input;\n  var prim = input[Symbol.toPrimitive];\n  if (prim !== undefined) {\n    var res = prim.call(input, hint || \"default\");\n    if (_typeof(res) !== \"object\") return res;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (hint === \"string\" ? String : Number)(input);\n}","/**\n * Operator callback functions.\n *\n * @type {Object}\n */\nvar OPERATORS = {\n\t'!': function( a ) {\n\t\treturn ! a;\n\t},\n\t'*': function( a, b ) {\n\t\treturn a * b;\n\t},\n\t'/': function( a, b ) {\n\t\treturn a / b;\n\t},\n\t'%': function( a, b ) {\n\t\treturn a % b;\n\t},\n\t'+': function( a, b ) {\n\t\treturn a + b;\n\t},\n\t'-': function( a, b ) {\n\t\treturn a - b;\n\t},\n\t'<': function( a, b ) {\n\t\treturn a < b;\n\t},\n\t'<=': function( a, b ) {\n\t\treturn a <= b;\n\t},\n\t'>': function( a, b ) {\n\t\treturn a > b;\n\t},\n\t'>=': function( a, b ) {\n\t\treturn a >= b;\n\t},\n\t'==': function( a, b ) {\n\t\treturn a === b;\n\t},\n\t'!=': function( a, b ) {\n\t\treturn a !== b;\n\t},\n\t'&&': function( a, b ) {\n\t\treturn a && b;\n\t},\n\t'||': function( a, b ) {\n\t\treturn a || b;\n\t},\n\t'?:': function( a, b, c ) {\n\t\tif ( a ) {\n\t\t\tthrow b;\n\t\t}\n\n\t\treturn c;\n\t},\n};\n\n/**\n * Given an array of postfix terms and operand variables, returns the result of\n * the postfix evaluation.\n *\n * @example\n *\n * ```js\n * import evaluate from '@tannin/evaluate';\n *\n * // 3 + 4 * 5 / 6 ⇒ '3 4 5 * 6 / +'\n * const terms = [ '3', '4', '5', '*', '6', '/', '+' ];\n *\n * evaluate( terms, {} );\n * // ⇒ 6.333333333333334\n * ```\n *\n * @param {string[]} postfix   Postfix terms.\n * @param {Object}   variables Operand variables.\n *\n * @return {*} Result of evaluation.\n */\nexport default function evaluate( postfix, variables ) {\n\tvar stack = [],\n\t\ti, j, args, getOperatorResult, term, value;\n\n\tfor ( i = 0; i < postfix.length; i++ ) {\n\t\tterm = postfix[ i ];\n\n\t\tgetOperatorResult = OPERATORS[ term ];\n\t\tif ( getOperatorResult ) {\n\t\t\t// Pop from stack by number of function arguments.\n\t\t\tj = getOperatorResult.length;\n\t\t\targs = Array( j );\n\t\t\twhile ( j-- ) {\n\t\t\t\targs[ j ] = stack.pop();\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tvalue = getOperatorResult.apply( null, args );\n\t\t\t} catch ( earlyReturn ) {\n\t\t\t\treturn earlyReturn;\n\t\t\t}\n\t\t} else if ( variables.hasOwnProperty( term ) ) {\n\t\t\tvalue = variables[ term ];\n\t\t} else {\n\t\t\tvalue = +term;\n\t\t}\n\n\t\tstack.push( value );\n\t}\n\n\treturn stack[ 0 ];\n}\n","import pluralForms from '@tannin/plural-forms';\n\n/**\n * Tannin constructor options.\n *\n * @typedef {Object} TanninOptions\n *\n * @property {string}   [contextDelimiter] Joiner in string lookup with context.\n * @property {Function} [onMissingKey]     Callback to invoke when key missing.\n */\n\n/**\n * Domain metadata.\n *\n * @typedef {Object} TanninDomainMetadata\n *\n * @property {string}            [domain]       Domain name.\n * @property {string}            [lang]         Language code.\n * @property {(string|Function)} [plural_forms] Plural forms expression or\n *                                              function evaluator.\n */\n\n/**\n * Domain translation pair respectively representing the singular and plural\n * translation.\n *\n * @typedef {[string,string]} TanninTranslation\n */\n\n/**\n * Locale data domain. The key is used as reference for lookup, the value an\n * array of two string entries respectively representing the singular and plural\n * translation.\n *\n * @typedef {{[key:string]:TanninDomainMetadata|TanninTranslation,'':TanninDomainMetadata|TanninTranslation}} TanninLocaleDomain\n */\n\n/**\n * Jed-formatted locale data.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @typedef {{[domain:string]:TanninLocaleDomain}} TanninLocaleData\n */\n\n/**\n * Default Tannin constructor options.\n *\n * @type {TanninOptions}\n */\nvar DEFAULT_OPTIONS = {\n\tcontextDelimiter: '\\u0004',\n\tonMissingKey: null,\n};\n\n/**\n * Given a specific locale data's config `plural_forms` value, returns the\n * expression.\n *\n * @example\n *\n * ```\n * getPluralExpression( 'nplurals=2; plural=(n != 1);' ) === '(n != 1)'\n * ```\n *\n * @param {string} pf Locale data plural forms.\n *\n * @return {string} Plural forms expression.\n */\nfunction getPluralExpression( pf ) {\n\tvar parts, i, part;\n\n\tparts = pf.split( ';' );\n\n\tfor ( i = 0; i < parts.length; i++ ) {\n\t\tpart = parts[ i ].trim();\n\t\tif ( part.indexOf( 'plural=' ) === 0 ) {\n\t\t\treturn part.substr( 7 );\n\t\t}\n\t}\n}\n\n/**\n * Tannin constructor.\n *\n * @class\n *\n * @param {TanninLocaleData} data      Jed-formatted locale data.\n * @param {TanninOptions}    [options] Tannin options.\n */\nexport default function Tannin( data, options ) {\n\tvar key;\n\n\t/**\n\t * Jed-formatted locale data.\n\t *\n\t * @name Tannin#data\n\t * @type {TanninLocaleData}\n\t */\n\tthis.data = data;\n\n\t/**\n\t * Plural forms function cache, keyed by plural forms string.\n\t *\n\t * @name Tannin#pluralForms\n\t * @type {Object<string,Function>}\n\t */\n\tthis.pluralForms = {};\n\n\t/**\n\t * Effective options for instance, including defaults.\n\t *\n\t * @name Tannin#options\n\t * @type {TanninOptions}\n\t */\n\tthis.options = {};\n\n\tfor ( key in DEFAULT_OPTIONS ) {\n\t\tthis.options[ key ] = options !== undefined && key in options\n\t\t\t? options[ key ]\n\t\t\t: DEFAULT_OPTIONS[ key ];\n\t}\n}\n\n/**\n * Returns the plural form index for the given domain and value.\n *\n * @param {string} domain Domain on which to calculate plural form.\n * @param {number} n      Value for which plural form is to be calculated.\n *\n * @return {number} Plural form index.\n */\nTannin.prototype.getPluralForm = function( domain, n ) {\n\tvar getPluralForm = this.pluralForms[ domain ],\n\t\tconfig, plural, pf;\n\n\tif ( ! getPluralForm ) {\n\t\tconfig = this.data[ domain ][ '' ];\n\n\t\tpf = (\n\t\t\tconfig[ 'Plural-Forms' ] ||\n\t\t\tconfig[ 'plural-forms' ] ||\n\t\t\t// Ignore reason: As known, there's no way to document the empty\n\t\t\t// string property on a key to guarantee this as metadata.\n\t\t\t// @ts-ignore\n\t\t\tconfig.plural_forms\n\t\t);\n\n\t\tif ( typeof pf !== 'function' ) {\n\t\t\tplural = getPluralExpression(\n\t\t\t\tconfig[ 'Plural-Forms' ] ||\n\t\t\t\tconfig[ 'plural-forms' ] ||\n\t\t\t\t// Ignore reason: As known, there's no way to document the empty\n\t\t\t\t// string property on a key to guarantee this as metadata.\n\t\t\t\t// @ts-ignore\n\t\t\t\tconfig.plural_forms\n\t\t\t);\n\n\t\t\tpf = pluralForms( plural );\n\t\t}\n\n\t\tgetPluralForm = this.pluralForms[ domain ] = pf;\n\t}\n\n\treturn getPluralForm( n );\n};\n\n/**\n * Translate a string.\n *\n * @param {string}      domain   Translation domain.\n * @param {string|void} context  Context distinguishing terms of the same name.\n * @param {string}      singular Primary key for translation lookup.\n * @param {string=}     plural   Fallback value used for non-zero plural\n *                               form index.\n * @param {number=}     n        Value to use in calculating plural form.\n *\n * @return {string} Translated string.\n */\nTannin.prototype.dcnpgettext = function( domain, context, singular, plural, n ) {\n\tvar index, key, entry;\n\n\tif ( n === undefined ) {\n\t\t// Default to singular.\n\t\tindex = 0;\n\t} else {\n\t\t// Find index by evaluating plural form for value.\n\t\tindex = this.getPluralForm( domain, n );\n\t}\n\n\tkey = singular;\n\n\t// If provided, context is prepended to key with delimiter.\n\tif ( context ) {\n\t\tkey = context + this.options.contextDelimiter + singular;\n\t}\n\n\tentry = this.data[ domain ][ key ];\n\n\t// Verify not only that entry exists, but that the intended index is within\n\t// range and non-empty.\n\tif ( entry && entry[ index ] ) {\n\t\treturn entry[ index ];\n\t}\n\n\tif ( this.options.onMissingKey ) {\n\t\tthis.options.onMissingKey( singular, domain );\n\t}\n\n\t// If entry not found, fall back to singular vs. plural with zero index\n\t// representing the singular value.\n\treturn index === 0 ? singular : plural;\n};\n","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\n/**\n * External dependencies\n */\nimport Tannin from 'tannin';\n/**\n * @typedef {Record<string,any>} LocaleData\n */\n\n/**\n * Default locale data to use for Tannin domain when not otherwise provided.\n * Assumes an English plural forms expression.\n *\n * @type {LocaleData}\n */\n\nvar DEFAULT_LOCALE_DATA = {\n  '': {\n    /** @param {number} n */\n    plural_forms: function plural_forms(n) {\n      return n === 1 ? 0 : 1;\n    }\n  }\n};\n/*\n * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,\n * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.\n */\n\nvar I18N_HOOK_REGEXP = /^i18n\\.(n?gettext|has_translation)(_|$)/;\n/**\n * @typedef {(domain?: string) => LocaleData} GetLocaleData\n *\n * Returns locale data by domain in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} SetLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} ResetLocaleData\n *\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n\n/** @typedef {() => void} SubscribeCallback */\n\n/** @typedef {() => void} UnsubscribeCallback */\n\n/**\n * @typedef {(callback: SubscribeCallback) => UnsubscribeCallback} Subscribe\n *\n * Subscribes to changes of locale data\n */\n\n/**\n * @typedef {(domain?: string) => string} GetFilterDomain\n * Retrieve the domain to use when calling domain-specific filters.\n */\n\n/**\n * @typedef {(text: string, domain?: string) => string} __\n *\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n */\n\n/**\n * @typedef {(text: string, context: string, domain?: string) => string} _x\n *\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n */\n\n/**\n * @typedef {(single: string, plural: string, number: number, domain?: string) => string} _n\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n */\n\n/**\n * @typedef {(single: string, plural: string, number: number, context: string, domain?: string) => string} _nx\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n */\n\n/**\n * @typedef {() => boolean} IsRtl\n *\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n */\n\n/**\n * @typedef {(single: string, context?: string, domain?: string) => boolean} HasTranslation\n *\n * Check if there is a translation for a given string in singular form.\n */\n\n/** @typedef {import('@wordpress/hooks').Hooks} Hooks */\n\n/**\n * An i18n instance\n *\n * @typedef I18n\n * @property {GetLocaleData} getLocaleData     Returns locale data by domain in a Jed-formatted JSON object shape.\n * @property {SetLocaleData} setLocaleData     Merges locale data into the Tannin instance by domain. Accepts data in a\n *                                             Jed-formatted JSON object shape.\n * @property {ResetLocaleData} resetLocaleData Resets all current Tannin instance locale data and sets the specified\n *                                             locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n * @property {Subscribe} subscribe             Subscribes to changes of Tannin locale data.\n * @property {__} __                           Retrieve the translation of text.\n * @property {_x} _x                           Retrieve translated string with gettext context.\n * @property {_n} _n                           Translates and retrieves the singular or plural form based on the supplied\n *                                             number.\n * @property {_nx} _nx                         Translates and retrieves the singular or plural form based on the supplied\n *                                             number, with gettext context.\n * @property {IsRtl} isRTL                     Check if current locale is RTL.\n * @property {HasTranslation} hasTranslation   Check if there is a translation for a given string.\n */\n\n/**\n * Create an i18n instance\n *\n * @param {LocaleData} [initialData]    Locale data configuration.\n * @param {string}     [initialDomain]  Domain for which configuration applies.\n * @param {Hooks} [hooks]     Hooks implementation.\n * @return {I18n}                       I18n instance\n */\n\nexport var createI18n = function createI18n(initialData, initialDomain, hooks) {\n  /**\n   * The underlying instance of Tannin to which exported functions interface.\n   *\n   * @type {Tannin}\n   */\n  var tannin = new Tannin({});\n  var listeners = new Set();\n\n  var notifyListeners = function notifyListeners() {\n    listeners.forEach(function (listener) {\n      return listener();\n    });\n  };\n  /**\n   * Subscribe to changes of locale data.\n   *\n   * @param {SubscribeCallback} callback Subscription callback.\n   * @return {UnsubscribeCallback} Unsubscribe callback.\n   */\n\n\n  var subscribe = function subscribe(callback) {\n    listeners.add(callback);\n    return function () {\n      return listeners.delete(callback);\n    };\n  };\n  /** @type {GetLocaleData} */\n\n\n  var getLocaleData = function getLocaleData() {\n    var domain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';\n    return tannin.data[domain];\n  };\n  /**\n   * @param {LocaleData} [data]\n   * @param {string} [domain]\n   */\n\n\n  var doSetLocaleData = function doSetLocaleData(data) {\n    var domain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';\n    tannin.data[domain] = _objectSpread(_objectSpread(_objectSpread({}, DEFAULT_LOCALE_DATA), tannin.data[domain]), data); // Populate default domain configuration (supported locale date which omits\n    // a plural forms expression).\n\n    tannin.data[domain][''] = _objectSpread(_objectSpread({}, DEFAULT_LOCALE_DATA['']), tannin.data[domain]['']);\n  };\n  /** @type {SetLocaleData} */\n\n\n  var setLocaleData = function setLocaleData(data, domain) {\n    doSetLocaleData(data, domain);\n    notifyListeners();\n  };\n  /** @type {ResetLocaleData} */\n\n\n  var resetLocaleData = function resetLocaleData(data, domain) {\n    // Reset all current Tannin locale data.\n    tannin.data = {}; // Reset cached plural forms functions cache.\n\n    tannin.pluralForms = {};\n    setLocaleData(data, domain);\n  };\n  /**\n   * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not\n   * otherwise previously assigned.\n   *\n   * @param {string|undefined} domain   Domain to retrieve the translated text.\n   * @param {string|undefined} context  Context information for the translators.\n   * @param {string}           single   Text to translate if non-plural. Used as\n   *                                    fallback return value on a caught error.\n   * @param {string}           [plural] The text to be used if the number is\n   *                                    plural.\n   * @param {number}           [number] The number to compare against to use\n   *                                    either the singular or plural form.\n   *\n   * @return {string} The translated string.\n   */\n\n\n  var dcnpgettext = function dcnpgettext() {\n    var domain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';\n    var context = arguments.length > 1 ? arguments[1] : undefined;\n    var single = arguments.length > 2 ? arguments[2] : undefined;\n    var plural = arguments.length > 3 ? arguments[3] : undefined;\n    var number = arguments.length > 4 ? arguments[4] : undefined;\n\n    if (!tannin.data[domain]) {\n      // use `doSetLocaleData` to set silently, without notifying listeners\n      doSetLocaleData(undefined, domain);\n    }\n\n    return tannin.dcnpgettext(domain, context, single, plural, number);\n  };\n  /** @type {GetFilterDomain} */\n\n\n  var getFilterDomain = function getFilterDomain() {\n    var domain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';\n    return domain;\n  };\n  /** @type {__} */\n\n\n  var __ = function __(text, domain) {\n    var translation = dcnpgettext(domain, undefined, text);\n\n    if (!hooks) {\n      return translation;\n    }\n    /**\n     * Filters text with its translation.\n     *\n     * @param {string} translation Translated text.\n     * @param {string} text        Text to translate.\n     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.\n     */\n\n\n    translation =\n    /** @type {string} */\n\n    /** @type {*} */\n    hooks.applyFilters('i18n.gettext', translation, text, domain);\n    return (\n      /** @type {string} */\n\n      /** @type {*} */\n      hooks.applyFilters('i18n.gettext_' + getFilterDomain(domain), translation, text, domain)\n    );\n  };\n  /** @type {_x} */\n\n\n  var _x = function _x(text, context, domain) {\n    var translation = dcnpgettext(domain, context, text);\n\n    if (!hooks) {\n      return translation;\n    }\n    /**\n     * Filters text with its translation based on context information.\n     *\n     * @param {string} translation Translated text.\n     * @param {string} text        Text to translate.\n     * @param {string} context     Context information for the translators.\n     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.\n     */\n\n\n    translation =\n    /** @type {string} */\n\n    /** @type {*} */\n    hooks.applyFilters('i18n.gettext_with_context', translation, text, context, domain);\n    return (\n      /** @type {string} */\n\n      /** @type {*} */\n      hooks.applyFilters('i18n.gettext_with_context_' + getFilterDomain(domain), translation, text, context, domain)\n    );\n  };\n  /** @type {_n} */\n\n\n  var _n = function _n(single, plural, number, domain) {\n    var translation = dcnpgettext(domain, undefined, single, plural, number);\n\n    if (!hooks) {\n      return translation;\n    }\n    /**\n     * Filters the singular or plural form of a string.\n     *\n     * @param {string} translation Translated text.\n     * @param {string} single      The text to be used if the number is singular.\n     * @param {string} plural      The text to be used if the number is plural.\n     * @param {string} number      The number to compare against to use either the singular or plural form.\n     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.\n     */\n\n\n    translation =\n    /** @type {string} */\n\n    /** @type {*} */\n    hooks.applyFilters('i18n.ngettext', translation, single, plural, number, domain);\n    return (\n      /** @type {string} */\n\n      /** @type {*} */\n      hooks.applyFilters('i18n.ngettext_' + getFilterDomain(domain), translation, single, plural, number, domain)\n    );\n  };\n  /** @type {_nx} */\n\n\n  var _nx = function _nx(single, plural, number, context, domain) {\n    var translation = dcnpgettext(domain, context, single, plural, number);\n\n    if (!hooks) {\n      return translation;\n    }\n    /**\n     * Filters the singular or plural form of a string with gettext context.\n     *\n     * @param {string} translation Translated text.\n     * @param {string} single      The text to be used if the number is singular.\n     * @param {string} plural      The text to be used if the number is plural.\n     * @param {string} number      The number to compare against to use either the singular or plural form.\n     * @param {string} context     Context information for the translators.\n     * @param {string} domain      Text domain. Unique identifier for retrieving translated strings.\n     */\n\n\n    translation =\n    /** @type {string} */\n\n    /** @type {*} */\n    hooks.applyFilters('i18n.ngettext_with_context', translation, single, plural, number, context, domain);\n    return (\n      /** @type {string} */\n\n      /** @type {*} */\n      hooks.applyFilters('i18n.ngettext_with_context_' + getFilterDomain(domain), translation, single, plural, number, context, domain)\n    );\n  };\n  /** @type {IsRtl} */\n\n\n  var isRTL = function isRTL() {\n    return 'rtl' === _x('ltr', 'text direction');\n  };\n  /** @type {HasTranslation} */\n\n\n  var hasTranslation = function hasTranslation(single, context, domain) {\n    var _tannin$data, _tannin$data2;\n\n    var key = context ? context + \"\\x04\" + single : single;\n    var result = !!((_tannin$data = tannin.data) !== null && _tannin$data !== void 0 && (_tannin$data2 = _tannin$data[domain !== null && domain !== void 0 ? domain : 'default']) !== null && _tannin$data2 !== void 0 && _tannin$data2[key]);\n\n    if (hooks) {\n      /**\n       * Filters the presence of a translation in the locale data.\n       *\n       * @param {boolean} hasTranslation Whether the translation is present or not..\n       * @param {string} single The singular form of the translated text (used as key in locale data)\n       * @param {string} context Context information for the translators.\n       * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n       */\n      result =\n      /** @type { boolean } */\n\n      /** @type {*} */\n      hooks.applyFilters('i18n.has_translation', result, single, context, domain);\n      result =\n      /** @type { boolean } */\n\n      /** @type {*} */\n      hooks.applyFilters('i18n.has_translation_' + getFilterDomain(domain), result, single, context, domain);\n    }\n\n    return result;\n  };\n\n  if (initialData) {\n    setLocaleData(initialData, initialDomain);\n  }\n\n  if (hooks) {\n    /**\n     * @param {string} hookName\n     */\n    var onHookAddedOrRemoved = function onHookAddedOrRemoved(hookName) {\n      if (I18N_HOOK_REGEXP.test(hookName)) {\n        notifyListeners();\n      }\n    };\n\n    hooks.addAction('hookAdded', 'core/i18n', onHookAddedOrRemoved);\n    hooks.addAction('hookRemoved', 'core/i18n', onHookAddedOrRemoved);\n  }\n\n  return {\n    getLocaleData: getLocaleData,\n    setLocaleData: setLocaleData,\n    resetLocaleData: resetLocaleData,\n    subscribe: subscribe,\n    __: __,\n    _x: _x,\n    _n: _n,\n    _nx: _nx,\n    isRTL: isRTL,\n    hasTranslation: hasTranslation\n  };\n};\n//# sourceMappingURL=create-i18n.js.map","import compile from '@tannin/compile';\n\n/**\n * Given a C expression, returns a function which, when called with a value,\n * evaluates the result with the value assumed to be the \"n\" variable of the\n * expression. The result will be coerced to its numeric equivalent.\n *\n * @param {string} expression C expression.\n *\n * @return {Function} Evaluator function.\n */\nexport default function pluralForms( expression ) {\n\tvar evaluate = compile( expression );\n\n\treturn function( n ) {\n\t\treturn +evaluate( { n: n } );\n\t};\n}\n","import postfix from '@tannin/postfix';\nimport evaluate from '@tannin/evaluate';\n\n/**\n * Given a C expression, returns a function which can be called to evaluate its\n * result.\n *\n * @example\n *\n * ```js\n * import compile from '@tannin/compile';\n *\n * const evaluate = compile( 'n > 1' );\n *\n * evaluate( { n: 2 } );\n * // ⇒ true\n * ```\n *\n * @param {string} expression C expression.\n *\n * @return {(variables?:{[variable:string]:*})=>*} Compiled evaluator.\n */\nexport default function compile( expression ) {\n\tvar terms = postfix( expression );\n\n\treturn function( variables ) {\n\t\treturn evaluate( terms, variables );\n\t};\n}\n","/**\n * Validate a namespace string.\n *\n * @param  {string} namespace The namespace to validate - should take the form\n *                            `vendor/plugin/function`.\n *\n * @return {boolean}             Whether the namespace is valid.\n */\nfunction validateNamespace(namespace) {\n  if ('string' !== typeof namespace || '' === namespace) {\n    // eslint-disable-next-line no-console\n    console.error('The namespace must be a non-empty string.');\n    return false;\n  }\n\n  if (!/^[a-zA-Z][a-zA-Z0-9_.\\-\\/]*$/.test(namespace)) {\n    // eslint-disable-next-line no-console\n    console.error('The namespace can only contain numbers, letters, dashes, periods, underscores and slashes.');\n    return false;\n  }\n\n  return true;\n}\n\nexport default validateNamespace;\n//# sourceMappingURL=validateNamespace.js.map","/**\n * Validate a hookName string.\n *\n * @param  {string} hookName The hook name to validate. Should be a non empty string containing\n *                           only numbers, letters, dashes, periods and underscores. Also,\n *                           the hook name cannot begin with `__`.\n *\n * @return {boolean}            Whether the hook name is valid.\n */\nfunction validateHookName(hookName) {\n  if ('string' !== typeof hookName || '' === hookName) {\n    // eslint-disable-next-line no-console\n    console.error('The hook name must be a non-empty string.');\n    return false;\n  }\n\n  if (/^__/.test(hookName)) {\n    // eslint-disable-next-line no-console\n    console.error('The hook name cannot begin with `__`.');\n    return false;\n  }\n\n  if (!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(hookName)) {\n    // eslint-disable-next-line no-console\n    console.error('The hook name can only contain numbers, letters, dashes, periods and underscores.');\n    return false;\n  }\n\n  return true;\n}\n\nexport default validateHookName;\n//# sourceMappingURL=validateHookName.js.map","/**\n * Internal dependencies\n */\nimport validateNamespace from './validateNamespace.js';\nimport validateHookName from './validateHookName.js';\n/**\n * @callback AddHook\n *\n * Adds the hook to the appropriate hooks container.\n *\n * @param {string}               hookName  Name of hook to add\n * @param {string}               namespace The unique namespace identifying the callback in the form `vendor/plugin/function`.\n * @param {import('.').Callback} callback  Function to call when the hook is run\n * @param {number}               [priority=10]  Priority of this hook\n */\n\n/**\n * Returns a function which, when invoked, will add a hook.\n *\n * @param  {import('.').Hooks}    hooks Hooks instance.\n * @param  {import('.').StoreKey} storeKey\n *\n * @return {AddHook} Function that adds a new hook.\n */\n\nfunction createAddHook(hooks, storeKey) {\n  return function addHook(hookName, namespace, callback) {\n    var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;\n    var hooksStore = hooks[storeKey];\n\n    if (!validateHookName(hookName)) {\n      return;\n    }\n\n    if (!validateNamespace(namespace)) {\n      return;\n    }\n\n    if ('function' !== typeof callback) {\n      // eslint-disable-next-line no-console\n      console.error('The hook callback must be a function.');\n      return;\n    } // Validate numeric priority\n\n\n    if ('number' !== typeof priority) {\n      // eslint-disable-next-line no-console\n      console.error('If specified, the hook priority must be a number.');\n      return;\n    }\n\n    var handler = {\n      callback: callback,\n      priority: priority,\n      namespace: namespace\n    };\n\n    if (hooksStore[hookName]) {\n      // Find the correct insert index of the new hook.\n      var handlers = hooksStore[hookName].handlers;\n      /** @type {number} */\n\n      var i;\n\n      for (i = handlers.length; i > 0; i--) {\n        if (priority >= handlers[i - 1].priority) {\n          break;\n        }\n      }\n\n      if (i === handlers.length) {\n        // If append, operate via direct assignment.\n        handlers[i] = handler;\n      } else {\n        // Otherwise, insert before index via splice.\n        handlers.splice(i, 0, handler);\n      } // We may also be currently executing this hook.  If the callback\n      // we're adding would come after the current callback, there's no\n      // problem; otherwise we need to increase the execution index of\n      // any other runs by 1 to account for the added element.\n\n\n      hooksStore.__current.forEach(function (hookInfo) {\n        if (hookInfo.name === hookName && hookInfo.currentIndex >= i) {\n          hookInfo.currentIndex++;\n        }\n      });\n    } else {\n      // This is the first hook of its type.\n      hooksStore[hookName] = {\n        handlers: [handler],\n        runs: 0\n      };\n    }\n\n    if (hookName !== 'hookAdded') {\n      hooks.doAction('hookAdded', hookName, namespace, callback, priority);\n    }\n  };\n}\n\nexport default createAddHook;\n//# sourceMappingURL=createAddHook.js.map","/**\n * Internal dependencies\n */\nimport validateNamespace from './validateNamespace.js';\nimport validateHookName from './validateHookName.js';\n/**\n * @callback RemoveHook\n * Removes the specified callback (or all callbacks) from the hook with a given hookName\n * and namespace.\n *\n * @param {string} hookName  The name of the hook to modify.\n * @param {string} namespace The unique namespace identifying the callback in the\n *                           form `vendor/plugin/function`.\n *\n * @return {number | undefined} The number of callbacks removed.\n */\n\n/**\n * Returns a function which, when invoked, will remove a specified hook or all\n * hooks by the given name.\n *\n * @param  {import('.').Hooks}    hooks Hooks instance.\n * @param  {import('.').StoreKey} storeKey\n * @param  {boolean}              [removeAll=false] Whether to remove all callbacks for a hookName,\n *                                                  without regard to namespace. Used to create\n *                                                  `removeAll*` functions.\n *\n * @return {RemoveHook} Function that removes hooks.\n */\n\nfunction createRemoveHook(hooks, storeKey) {\n  var removeAll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  return function removeHook(hookName, namespace) {\n    var hooksStore = hooks[storeKey];\n\n    if (!validateHookName(hookName)) {\n      return;\n    }\n\n    if (!removeAll && !validateNamespace(namespace)) {\n      return;\n    } // Bail if no hooks exist by this name\n\n\n    if (!hooksStore[hookName]) {\n      return 0;\n    }\n\n    var handlersRemoved = 0;\n\n    if (removeAll) {\n      handlersRemoved = hooksStore[hookName].handlers.length;\n      hooksStore[hookName] = {\n        runs: hooksStore[hookName].runs,\n        handlers: []\n      };\n    } else {\n      // Try to find the specified callback to remove.\n      var handlers = hooksStore[hookName].handlers;\n\n      var _loop = function _loop(i) {\n        if (handlers[i].namespace === namespace) {\n          handlers.splice(i, 1);\n          handlersRemoved++; // This callback may also be part of a hook that is\n          // currently executing.  If the callback we're removing\n          // comes after the current callback, there's no problem;\n          // otherwise we need to decrease the execution index of any\n          // other runs by 1 to account for the removed element.\n\n          hooksStore.__current.forEach(function (hookInfo) {\n            if (hookInfo.name === hookName && hookInfo.currentIndex >= i) {\n              hookInfo.currentIndex--;\n            }\n          });\n        }\n      };\n\n      for (var i = handlers.length - 1; i >= 0; i--) {\n        _loop(i);\n      }\n    }\n\n    if (hookName !== 'hookRemoved') {\n      hooks.doAction('hookRemoved', hookName, namespace);\n    }\n\n    return handlersRemoved;\n  };\n}\n\nexport default createRemoveHook;\n//# sourceMappingURL=createRemoveHook.js.map","/**\n * @callback HasHook\n *\n * Returns whether any handlers are attached for the given hookName and optional namespace.\n *\n * @param {string} hookName    The name of the hook to check for.\n * @param {string} [namespace] Optional. The unique namespace identifying the callback\n *                             in the form `vendor/plugin/function`.\n *\n * @return {boolean} Whether there are handlers that are attached to the given hook.\n */\n\n/**\n * Returns a function which, when invoked, will return whether any handlers are\n * attached to a particular hook.\n *\n * @param  {import('.').Hooks}    hooks Hooks instance.\n * @param  {import('.').StoreKey} storeKey\n *\n * @return {HasHook} Function that returns whether any handlers are\n *                   attached to a particular hook and optional namespace.\n */\nfunction createHasHook(hooks, storeKey) {\n  return function hasHook(hookName, namespace) {\n    var hooksStore = hooks[storeKey]; // Use the namespace if provided.\n\n    if ('undefined' !== typeof namespace) {\n      return hookName in hooksStore && hooksStore[hookName].handlers.some(function (hook) {\n        return hook.namespace === namespace;\n      });\n    }\n\n    return hookName in hooksStore;\n  };\n}\n\nexport default createHasHook;\n//# sourceMappingURL=createHasHook.js.map","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\n\n/**\n * Returns a function which, when invoked, will execute all callbacks\n * registered to a hook of the specified type, optionally returning the final\n * value of the call chain.\n *\n * @param  {import('.').Hooks}    hooks Hooks instance.\n * @param  {import('.').StoreKey} storeKey\n * @param  {boolean}              [returnFirstArg=false] Whether each hook callback is expected to\n *                                                       return its first argument.\n *\n * @return {(hookName:string, ...args: unknown[]) => unknown} Function that runs hook callbacks.\n */\nfunction createRunHook(hooks, storeKey) {\n  var returnFirstArg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  return function runHooks(hookName) {\n    var hooksStore = hooks[storeKey];\n\n    if (!hooksStore[hookName]) {\n      hooksStore[hookName] = {\n        handlers: [],\n        runs: 0\n      };\n    }\n\n    hooksStore[hookName].runs++;\n    var handlers = hooksStore[hookName].handlers; // The following code is stripped from production builds.\n\n    if ('production' !== process.env.NODE_ENV) {\n      // Handle any 'all' hooks registered.\n      if ('hookAdded' !== hookName && hooksStore.all) {\n        handlers.push.apply(handlers, _toConsumableArray(hooksStore.all.handlers));\n      }\n    }\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    if (!handlers || !handlers.length) {\n      return returnFirstArg ? args[0] : undefined;\n    }\n\n    var hookInfo = {\n      name: hookName,\n      currentIndex: 0\n    };\n\n    hooksStore.__current.push(hookInfo);\n\n    while (hookInfo.currentIndex < handlers.length) {\n      var handler = handlers[hookInfo.currentIndex];\n      var result = handler.callback.apply(null, args);\n\n      if (returnFirstArg) {\n        args[0] = result;\n      }\n\n      hookInfo.currentIndex++;\n    }\n\n    hooksStore.__current.pop();\n\n    if (returnFirstArg) {\n      return args[0];\n    }\n  };\n}\n\nexport default createRunHook;\n//# sourceMappingURL=createRunHook.js.map","/**\n * Returns a function which, when invoked, will return the name of the\n * currently running hook, or `null` if no hook of the given type is currently\n * running.\n *\n * @param  {import('.').Hooks}    hooks Hooks instance.\n * @param  {import('.').StoreKey} storeKey\n *\n * @return {() => string | null} Function that returns the current hook name or null.\n */\nfunction createCurrentHook(hooks, storeKey) {\n  return function currentHook() {\n    var _hooksStore$__current, _hooksStore$__current2;\n\n    var hooksStore = hooks[storeKey];\n    return (_hooksStore$__current = (_hooksStore$__current2 = hooksStore.__current[hooksStore.__current.length - 1]) === null || _hooksStore$__current2 === void 0 ? void 0 : _hooksStore$__current2.name) !== null && _hooksStore$__current !== void 0 ? _hooksStore$__current : null;\n  };\n}\n\nexport default createCurrentHook;\n//# sourceMappingURL=createCurrentHook.js.map","/**\n * @callback DoingHook\n * Returns whether a hook is currently being executed.\n *\n * @param  {string} [hookName] The name of the hook to check for.  If\n *                             omitted, will check for any hook being executed.\n *\n * @return {boolean} Whether the hook is being executed.\n */\n\n/**\n * Returns a function which, when invoked, will return whether a hook is\n * currently being executed.\n *\n * @param  {import('.').Hooks}    hooks Hooks instance.\n * @param  {import('.').StoreKey} storeKey\n *\n * @return {DoingHook} Function that returns whether a hook is currently\n *                     being executed.\n */\nfunction createDoingHook(hooks, storeKey) {\n  return function doingHook(hookName) {\n    var hooksStore = hooks[storeKey]; // If the hookName was not passed, check for any current hook.\n\n    if ('undefined' === typeof hookName) {\n      return 'undefined' !== typeof hooksStore.__current[0];\n    } // Return the __current hook.\n\n\n    return hooksStore.__current[0] ? hookName === hooksStore.__current[0].name : false;\n  };\n}\n\nexport default createDoingHook;\n//# sourceMappingURL=createDoingHook.js.map","/**\n * Internal dependencies\n */\nimport validateHookName from './validateHookName.js';\n/**\n * @callback DidHook\n *\n * Returns the number of times an action has been fired.\n *\n * @param  {string} hookName The hook name to check.\n *\n * @return {number | undefined} The number of times the hook has run.\n */\n\n/**\n * Returns a function which, when invoked, will return the number of times a\n * hook has been called.\n *\n * @param  {import('.').Hooks}    hooks Hooks instance.\n * @param  {import('.').StoreKey} storeKey\n *\n * @return {DidHook} Function that returns a hook's call count.\n */\n\nfunction createDidHook(hooks, storeKey) {\n  return function didHook(hookName) {\n    var hooksStore = hooks[storeKey];\n\n    if (!validateHookName(hookName)) {\n      return;\n    }\n\n    return hooksStore[hookName] && hooksStore[hookName].runs ? hooksStore[hookName].runs : 0;\n  };\n}\n\nexport default createDidHook;\n//# sourceMappingURL=createDidHook.js.map","/**\n * Internal dependencies\n */\nimport createHooks from './createHooks';\n/** @typedef {(...args: any[])=>any} Callback */\n\n/**\n * @typedef Handler\n * @property {Callback} callback  The callback\n * @property {string}   namespace The namespace\n * @property {number}   priority  The namespace\n */\n\n/**\n * @typedef Hook\n * @property {Handler[]} handlers Array of handlers\n * @property {number}    runs     Run counter\n */\n\n/**\n * @typedef Current\n * @property {string} name         Hook name\n * @property {number} currentIndex The index\n */\n\n/**\n * @typedef {Record<string, Hook> & {__current: Current[]}} Store\n */\n\n/**\n * @typedef {'actions' | 'filters'} StoreKey\n */\n\n/**\n * @typedef {import('./createHooks').Hooks} Hooks\n */\n\nexport var defaultHooks = createHooks();\nvar addAction = defaultHooks.addAction,\n    addFilter = defaultHooks.addFilter,\n    removeAction = defaultHooks.removeAction,\n    removeFilter = defaultHooks.removeFilter,\n    hasAction = defaultHooks.hasAction,\n    hasFilter = defaultHooks.hasFilter,\n    removeAllActions = defaultHooks.removeAllActions,\n    removeAllFilters = defaultHooks.removeAllFilters,\n    doAction = defaultHooks.doAction,\n    applyFilters = defaultHooks.applyFilters,\n    currentAction = defaultHooks.currentAction,\n    currentFilter = defaultHooks.currentFilter,\n    doingAction = defaultHooks.doingAction,\n    doingFilter = defaultHooks.doingFilter,\n    didAction = defaultHooks.didAction,\n    didFilter = defaultHooks.didFilter,\n    actions = defaultHooks.actions,\n    filters = defaultHooks.filters;\nexport { createHooks, addAction, addFilter, removeAction, removeFilter, hasAction, hasFilter, removeAllActions, removeAllFilters, doAction, applyFilters, currentAction, currentFilter, doingAction, doingFilter, didAction, didFilter, actions, filters };\n//# sourceMappingURL=index.js.map","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\n\n/**\n * Internal dependencies\n */\nimport createAddHook from './createAddHook';\nimport createRemoveHook from './createRemoveHook';\nimport createHasHook from './createHasHook';\nimport createRunHook from './createRunHook';\nimport createCurrentHook from './createCurrentHook';\nimport createDoingHook from './createDoingHook';\nimport createDidHook from './createDidHook';\n/**\n * Internal class for constructing hooks. Use `createHooks()` function\n *\n * Note, it is necessary to expose this class to make its type public.\n *\n * @private\n */\n\nexport var _Hooks = function _Hooks() {\n  _classCallCheck(this, _Hooks);\n\n  /** @type {import('.').Store} actions */\n  this.actions = Object.create(null);\n  this.actions.__current = [];\n  /** @type {import('.').Store} filters */\n\n  this.filters = Object.create(null);\n  this.filters.__current = [];\n  this.addAction = createAddHook(this, 'actions');\n  this.addFilter = createAddHook(this, 'filters');\n  this.removeAction = createRemoveHook(this, 'actions');\n  this.removeFilter = createRemoveHook(this, 'filters');\n  this.hasAction = createHasHook(this, 'actions');\n  this.hasFilter = createHasHook(this, 'filters');\n  this.removeAllActions = createRemoveHook(this, 'actions', true);\n  this.removeAllFilters = createRemoveHook(this, 'filters', true);\n  this.doAction = createRunHook(this, 'actions');\n  this.applyFilters = createRunHook(this, 'filters', true);\n  this.currentAction = createCurrentHook(this, 'actions');\n  this.currentFilter = createCurrentHook(this, 'filters');\n  this.doingAction = createDoingHook(this, 'actions');\n  this.doingFilter = createDoingHook(this, 'filters');\n  this.didAction = createDidHook(this, 'actions');\n  this.didFilter = createDidHook(this, 'filters');\n};\n/** @typedef {_Hooks} Hooks */\n\n/**\n * Returns an instance of the hooks object.\n *\n * @return {Hooks} A Hooks instance.\n */\n\nfunction createHooks() {\n  return new _Hooks();\n}\n\nexport default createHooks;\n//# sourceMappingURL=createHooks.js.map","export default function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}","/**\n * Internal dependencies\n */\nimport { createI18n } from './create-i18n';\n/**\n * WordPress dependencies\n */\n\nimport { defaultHooks } from '@wordpress/hooks';\nvar i18n = createI18n(undefined, undefined, defaultHooks);\n/**\n * Default, singleton instance of `I18n`.\n */\n\nexport default i18n;\n/*\n * Comments in this file are duplicated from ./i18n due to\n * https://github.com/WordPress/gutenberg/pull/20318#issuecomment-590837722\n */\n\n/**\n * @typedef {import('./create-i18n').LocaleData} LocaleData\n * @typedef {import('./create-i18n').SubscribeCallback} SubscribeCallback\n * @typedef {import('./create-i18n').UnsubscribeCallback} UnsubscribeCallback\n */\n\n/**\n * Returns locale data by domain in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {string} [domain] Domain for which to get the data.\n * @return {LocaleData} Locale data.\n */\n\nexport var getLocaleData = i18n.getLocaleData.bind(i18n);\n/**\n * Merges locale data into the Tannin instance by domain. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {LocaleData} [data]   Locale data configuration.\n * @param {string}     [domain] Domain for which configuration applies.\n */\n\nexport var setLocaleData = i18n.setLocaleData.bind(i18n);\n/**\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @param {LocaleData} [data]   Locale data configuration.\n * @param {string}     [domain] Domain for which configuration applies.\n */\n\nexport var resetLocaleData = i18n.resetLocaleData.bind(i18n);\n/**\n * Subscribes to changes of locale data\n *\n * @param {SubscribeCallback} callback Subscription callback\n * @return {UnsubscribeCallback} Unsubscribe callback\n */\n\nexport var subscribe = i18n.subscribe.bind(i18n);\n/**\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n *\n * @param {string} text     Text to translate.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} Translated text.\n */\n\nexport var __ = i18n.__.bind(i18n);\n/**\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n *\n * @param {string} text     Text to translate.\n * @param {string} context  Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} Translated context string without pipe.\n */\n\nexport var _x = i18n._x.bind(i18n);\n/**\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n *\n * @param {string} single   The text to be used if the number is singular.\n * @param {string} plural   The text to be used if the number is plural.\n * @param {number} number   The number to compare against to use either the\n *                          singular or plural form.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} The translated singular or plural form.\n */\n\nexport var _n = i18n._n.bind(i18n);\n/**\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n *\n * @param {string} single   The text to be used if the number is singular.\n * @param {string} plural   The text to be used if the number is plural.\n * @param {number} number   The number to compare against to use either the\n *                          singular or plural form.\n * @param {string} context  Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n *\n * @return {string} The translated singular or plural form.\n */\n\nexport var _nx = i18n._nx.bind(i18n);\n/**\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n *\n * @return {boolean} Whether locale is RTL.\n */\n\nexport var isRTL = i18n.isRTL.bind(i18n);\n/**\n * Check if there is a translation for a given string (in singular form).\n *\n * @param {string} single Singular form of the string to look up.\n * @param {string} [context] Context information for the translators.\n * @param {string} [domain] Domain to retrieve the translated text.\n * @return {boolean} Whether the translation exists or not.\n */\n\nexport var hasTranslation = i18n.hasTranslation.bind(i18n);\n//# sourceMappingURL=default-i18n.js.map","/**\n * Event keyCode values mapped to a key name.\n */\nconst keyCodes = Object.freeze({\n  TAB: 9,\n  RETURN: 13,\n  ESC: 27,\n  SPACE: 32,\n  END: 35,\n  HOME: 36,\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n});\n\nexport default keyCodes;\n","/**\n * Collect all interactive child elements.\n *\n * @param {HTMLElement} target The element in which to search for interactive children.\n *\n * @return {Array}\n */\nexport default function interactiveChildren(target) {\n  // List of possible active child element selectors\n  const selectors = [\n    'a[href]:not([aria-hidden=\"true\"])',\n    'area[href]',\n    'input:not([disabled])',\n    'select:not([disabled])',\n    'textarea:not([disabled])',\n    'button:not([disabled])',\n    'iframe',\n    'object',\n    'embed',\n    '[contenteditable]',\n    '[tabindex]:not([tabindex^=\"-\"])',\n  ].join(',');\n\n  const interactiveElements = target.querySelectorAll(selectors);\n\n  return Array.prototype.slice.call(interactiveElements);\n}\n","import keyCodes from './lib/keyCodes';\nimport interactiveChildren from './lib/interactiveChildren';\n\n/**\n * Sets up a controller-target relationship with appropriate aria-attributes and event handling.\n *\n * @param {Object} config {\n *   And object denoting the Popup's controller and target elements\n *\n *   @type {HTMLElement} controller The controlling element.\n *   @type {HTMLElement} target     The target popup element.\n * }\n */\nexport default class Popup {\n  /**\n   * Start the component\n   */\n  constructor(config) {\n    /**\n     * The default string description for this object.\n     *\n     * @type {string}\n     */\n    this.stringDescription = 'Popup';\n\n    // Save references to the controller and target.\n    Object.assign(this, config);\n\n    /**\n     * The target element's interactive child elements.\n     * @type {Array}\n     */\n    this.interactiveChildElements = interactiveChildren(this.target);\n\n    // Collect first and last interactive child elements from target.\n    if (0 < this.interactiveChildElements.length) {\n      const [firstItem] = this.interactiveChildElements;\n      this.firstItem = firstItem;\n      this.lastItem = (\n        this.interactiveChildElements[this.interactiveChildElements.length - 1]\n      );\n    }\n\n    // Intial state.\n    this.state = {\n      expanded: false,\n    };\n\n    // Bind class methods.\n    this.setup = this.setup.bind(this);\n    this.destroy = this.destroy.bind(this);\n    this.manageExpandedState = this.manageExpandedState.bind(this);\n    this.setExpandedState = this.setExpandedState.bind(this);\n    this.controllerKeyDownHandler = this.controllerKeyDownHandler.bind(this);\n    this.targetKeyDownHandler = this.targetKeyDownHandler.bind(this);\n    this.closeOnTabOut = this.closeOnTabOut.bind(this);\n    this.closeOnOutsideClick = this.closeOnOutsideClick.bind(this);\n\n    this.setup();\n  }\n\n  /**\n   * Expand or collapse the popup\n   *\n   * @param {Boolean} expand The expected `expanded` state.\n   */\n  setExpandedState(expand) {\n    this.controller.setAttribute('aria-expanded', `${expand}`);\n    this.target.setAttribute('aria-hidden', `${! expand}`);\n    this.interactiveChildElements.forEach((element) => {\n      element.setAttribute('tabindex', expand ? '0' : '-1');\n    });\n\n    this.state.expanded = expand;\n  }\n\n  /**\n   * Get the string description for this object.\n   * E.x., Popup.toString() === '[object Popup]'\n   *\n   * @return {string}\n   */\n  get [Symbol.toStringTag]() {\n    return this.stringDescription;\n  }\n\n  /**\n   * Add initial attributes, establish relationships, and listen for events\n   */\n  setup() {\n    const { expanded } = this.state;\n\n    // Add a reference to the class instance\n    this.controller.popup = this;\n    this.target.popup = this;\n\n    // Add controller attributes\n    this.controller.setAttribute('aria-haspopup', 'menu');\n    this.controller.setAttribute('aria-expanded', `${expanded}`);\n    this.controller.setAttribute('aria-controls', this.target.id);\n\n    // If the markup is disconnected, establish a relationship.\n    if (this.target !== this.controller.nextElementSibling) {\n      this.controller.setAttribute('aria-owns', this.target.id);\n    }\n\n    // Add target attributes\n    this.target.setAttribute('aria-hidden', `${! expanded}`);\n    this.interactiveChildElements.forEach((element) => {\n      element.setAttribute('tabindex', expanded ? '0' : '-1');\n    });\n\n    // Add event listeners\n    this.controller.addEventListener('click', this.manageExpandedState);\n    this.controller.addEventListener('keydown', this.controllerKeyDownHandler);\n    this.target.addEventListener('keydown', this.targetKeyDownHandler);\n    document.body.addEventListener('click', this.closeOnOutsideClick);\n  }\n\n  /**\n   * Remove all ARIA attributes added by this class.\n   */\n  destroy() {\n    // Add a reference to the class instance\n    this.controller.popup = null;\n    this.target.popup = null;\n\n    // Remove controller attributes\n    this.controller.removeAttribute('aria-haspopup');\n    this.controller.removeAttribute('aria-expanded');\n    this.controller.removeAttribute('aria-controls');\n\n    if (this.target !== this.controller.nextElementSibling) {\n      this.controller.removeAttribute('aria-owns');\n    }\n\n    // Remove target attributes\n    this.target.removeAttribute('aria-hidden');\n\n    // Remove event listeners.\n    this.controller.removeEventListener('click', this.manageExpandedState);\n    this.controller.removeEventListener(\n      'keydown',\n      this.controllerKeyDownHandler,\n    );\n    this.target.removeEventListener('keydown', this.targetKeyDownHandler);\n    document.body.removeEventListener('click', this.closeOnOutsideClick);\n\n    // Reset initial state.\n    this.state = {\n      expanded: false,\n    };\n  }\n\n  /**\n   * Handle keydown events on the popup controller.\n   *\n   * @param {Object} event The event object.\n   */\n  controllerKeyDownHandler(event) {\n    const { expanded } = this.state;\n\n    if (expanded) {\n      const { ESC, TAB } = keyCodes;\n      const { keyCode } = event;\n\n      if (ESC === keyCode) {\n        // Close the popup.\n        event.stopPropagation();\n        event.preventDefault();\n\n        this.setExpandedState(false);\n      } else if (TAB === keyCode) {\n        // Move to the first interactive child.\n        event.preventDefault();\n\n        this.firstItem.focus();\n      }\n    }\n  }\n\n  /**\n   * Handle keydown events on the popup target.\n   *\n   * @param {Object} event The event object.\n   */\n  targetKeyDownHandler(event) {\n    const { ESC, TAB } = keyCodes;\n    const { keyCode } = event;\n    const { expanded } = this.state;\n    const { activeElement } = document;\n\n    if (ESC === keyCode && expanded) {\n      // Close the popup.\n      event.stopPropagation();\n      event.preventDefault();\n\n      this.setExpandedState(false);\n      this.controller.focus();\n    } else if (TAB === keyCode) {\n      if (\n        event.shiftKey\n        && (this.firstItem === activeElement || this.target === activeElement)\n      ) {\n        // Tab back from the first interactive child to the controller.\n        event.preventDefault();\n        this.controller.focus();\n      } else if (this.lastChild === activeElement) {\n        // Close the popup when tabbing from the last child.\n        // TODO: Is this correct behavior?\n        this.setExpandedState(false);\n      }\n    }\n  }\n\n  /**\n   * Manage the popup state.\n   *\n   * @param {Object} event The event object.\n   */\n  manageExpandedState(event) {\n    event.preventDefault();\n\n    if (this.state.expanded) {\n      this.setExpandedState(false);\n    } else {\n      this.setExpandedState(true);\n    }\n  }\n\n  /**\n   * Tab from the last item and close the menu.\n   *\n   * @param {Object} event The event object.\n   */\n  closeOnTabOut(event) {\n    const { TAB } = keyCodes;\n\n    if (TAB === event.keyCode && ! event.shiftKey && this.state.expanded) {\n      this.setExpandedState(false);\n    }\n  }\n\n  /**\n   * Close the popup when clicking anywhere outside.\n   *\n   * @param  {Object} event The event object.\n   */\n  closeOnOutsideClick(event) {\n    if (\n      this.state.expanded\n      && event.target !== this.controller\n      && ! this.target.contains(event.target)\n    ) {\n      this.setExpandedState(false);\n    }\n  }\n}\n","import keyCodes from './lib/keyCodes';\n\n/**\n * MenuItem class for managing menu items' keyboard interactions.\n *\n * @param {HTMLElement} list The list to manage.\n */\nexport default class MenuItem {\n  /**\n   * Test for a list as the next sibling element.\n   *\n   * @param {HTMLElement} element The element for which we're looking for a sibling.\n   *\n   * @return {HTMLElement|Boolean}\n   */\n  static nextElementIsUl(element) {\n    const next = element.nextElementSibling;\n    return (null !== next && 'UL' === next.nodeName) ? next : false;\n  }\n\n  /**\n   * Start the component\n   */\n  constructor(list) {\n    /**\n     * The default string description for this object.\n     *\n     * @type {string}\n     */\n    this.stringDescription = 'MenuItem';\n\n    /**\n     * The list to manage\n     * @type {HTMLElement}\n     */\n    this.list = list;\n\n    // Save a reference to the MenuItem instance on the list item.\n    Object.assign(list, { menuItem: this });\n\n    /**\n     * The list's child elements.\n     * @type {Array}\n     */\n    this.listItems = Array.prototype.slice.call(list.children);\n\n    // Bind class methods\n    this.handleListKeydown = this.handleListKeydown.bind(this);\n    this.destroy = this.destroy.bind(this);\n\n    this.init();\n  }\n\n  /**\n   * Get the string description for this object.\n   * E.x., MenuItem.toString() === '[object MenuItem]'\n   *\n   * @return {string}\n   */\n  get [Symbol.toStringTag]() {\n    return this.stringDescription;\n  }\n\n  /**\n   * Collect menu links and recursively instantiate sublist menu items.\n   */\n  init() {\n    // Collect menu items.\n    this.menuItems = this.listItems.reduce((acc, item) => {\n      const itemLink = item.firstElementChild;\n\n      if (null !== itemLink && 'A' === itemLink.nodeName) {\n        return [...acc, itemLink];\n      }\n\n      return acc;\n    }, []);\n\n    /**\n     * The number of menu items.\n     * @type {Number}\n     */\n    this.menuItemsLength = this.menuItems.length;\n\n    // Set menu item link attributes and event listeners.\n    this.list.setAttribute('role', 'menu');\n    this.menuItems.forEach((link, index) => {\n      link.parentElement.setAttribute('role', 'presentation');\n\n      // Add size and position attributes.\n      link.setAttribute('role', 'menuitem');\n      link.setAttribute('aria-setsize', this.menuItemsLength);\n      link.setAttribute('aria-posinset', index + 1);\n\n      link.addEventListener('keydown', this.handleListKeydown);\n\n      const siblingList = this.constructor.nextElementIsUl(link);\n      if (siblingList) {\n        const subList = new MenuItem(siblingList);\n        // Save the list's previous sibling.\n        subList.previousSibling = link;\n      }\n    });\n\n    // Save the menu's first and last items.\n    [this.firstItem] = this.menuItems;\n    this.lastItem = this.menuItems[this.menuItemsLength - 1];\n  }\n\n  /**\n   * Handle keydown events on menu items.\n   *\n   * @param {Object} event The event object.\n   */\n  handleListKeydown(event) {\n    const { keyCode } = event;\n    const {\n      UP,\n      DOWN,\n      LEFT,\n      RIGHT,\n    } = keyCodes;\n    const { activeElement } = document;\n    const activeDescendant = (this.list.contains(activeElement)\n      ? activeElement\n      : this.menuItems[0]);\n    const menuLastIndex = this.menuItems.length - 1;\n    const activeIndex = this.menuItems.indexOf(activeDescendant);\n\n    if ([UP, DOWN].includes(keyCode)) {\n      // Move through sibling list items.\n      event.stopPropagation();\n      event.preventDefault();\n\n      // Determine the direction.\n      let nextIndex = (keyCode === UP)\n        ? activeIndex - 1\n        : activeIndex + 1;\n\n      // Move to the end if we're moving to the previous child from the first child.\n      if (UP === keyCode && 0 > nextIndex) {\n        nextIndex = menuLastIndex;\n      }\n\n      // Move to first child if we're at the end.\n      if (DOWN === keyCode && menuLastIndex < nextIndex) {\n        nextIndex = 0;\n      }\n\n      this.menuItems[nextIndex].focus();\n    } else if (RIGHT === keyCode) {\n      // Drill down into a nested list, if present.\n      const siblingElement = this.constructor.nextElementIsUl(activeDescendant);\n\n      if (\n        siblingElement\n        && Object.hasOwnProperty.call(siblingElement, 'menuItem')\n      ) {\n        event.stopPropagation();\n        event.preventDefault();\n\n        const { menuItem } = siblingElement;\n        menuItem.firstItem.focus();\n      }\n    } else if (LEFT === keyCode) {\n      // Move up to the list's previous sibling, if present.\n      if (undefined !== this.previousSibling) {\n        event.stopPropagation();\n        event.preventDefault();\n\n        // Close the popup if it exists and is exapnded.\n        if ('[object Popup]' === this.previousSibling?.popup?.toString()) {\n          event.stopPropagation();\n          event.preventDefault();\n\n          const { popup } = this.previousSibling;\n          if (popup.state.expanded) {\n            popup.setExpandedState(false);\n          }\n        }\n\n        this.previousSibling.focus();\n      }\n    }\n  }\n\n  /**\n   * Destroy the MenuItem (recursively)\n   */\n  destroy() {\n    if (undefined !== this.list.menuItem) {\n      // Set the menuItem property to null\n      this.list.menuItem = null;\n\n      this.list.removeAttribute('role');\n\n      this.menuItems.forEach((link) => {\n        link.parentElement.removeAttribute('role');\n\n        // Remove size and position attributes.\n        link.removeAttribute('role');\n        link.removeAttribute('aria-setsize');\n        link.removeAttribute('aria-posinset');\n\n        link.removeEventListener('keydown', this.handleListKeydown);\n\n        // Destroy nested MenuItems.\n        const siblingList = this.constructor.nextElementIsUl(link);\n        if (\n          siblingList\n          && undefined !== siblingList.menuItem\n          && '[object MenuItem]' === siblingList?.menuItem?.toString()\n        ) {\n          siblingList.menuItem.destroy();\n        }\n      });\n    }\n  }\n}\n","/**\n * Create an array from a value.\n *\n * @param {Mixed} maybeAnArray And HTMLElement, NodeList, or Array of elements.\n */\nfunction toArray(maybeAnArray) {\n  if (Array.isArray(maybeAnArray)) {\n    return maybeAnArray;\n  }\n\n  let shouldBeAnArray = [];\n\n  if (maybeAnArray instanceof HTMLElement) {\n    // Convert element(s) to an Array.\n    shouldBeAnArray = new Array(maybeAnArray);\n  } else if (maybeAnArray instanceof NodeList) {\n    // Array.from(maybeAnArray);\n    shouldBeAnArray = Array.prototype.slice.call(maybeAnArray, 0);\n  }\n\n  return shouldBeAnArray;\n}\n\n/**\n * Remove the tabIndex attribute from all elements.\n *\n * @param  {Mixed} items And HTMLElement, NodeList, or Array of elements.\n */\nfunction tabIndexAllow(items) {\n  const allowedElements = Array.isArray(items) ? items : toArray(items);\n\n  allowedElements.forEach((item) => {\n    item.removeAttribute('tabindex');\n  });\n}\n\n/**\n * Add a negative tabIndex attribute to all elements.\n *\n * @param  {Mixed} items And HTMLElement, NodeList, or Array of elements.\n */\nfunction tabIndexDeny(items) {\n  const deniedElements = Array.isArray(items) ? items : toArray(items);\n\n  deniedElements.forEach((item) => {\n    item.setAttribute('tabindex', '-1');\n  });\n}\n\n/**\n * Manage items' tabindex.\n *\n * @param {NodeList|Array}             items The items whose tabindex may need updating.\n * @param {HTMLElement|NodeList|Array} allow The item to which we'll allow tabbing.\n */\nfunction rovingTabIndex(items, allow) {\n  const allowedElements = Array.isArray(allow) ? allow : toArray(allow);\n  const allItems = Array.isArray(items) ? items : toArray(items);\n\n  tabIndexAllow(allowedElements);\n\n  if (0 < allItems.length) {\n    const deniedElements = allItems.filter((item) => (\n      ! allowedElements.includes(item)\n    ));\n    tabIndexDeny(deniedElements);\n  }\n}\n\nexport {\n  rovingTabIndex,\n  tabIndexAllow,\n  tabIndexDeny,\n  toArray,\n};\n","import { setLocaleData } from '@wordpress/i18n';\nimport Popup from 'a11y/Popup';\nimport MenuItem from 'a11y/MenuItem';\nimport keyCodes from './lib/keyCodes';\nimport { rovingTabIndex } from './lib/rovingTabIndex';\n\n/**\n * Menu class for managing a menu's top-level keyboard interactions.\n *\n * @param {HTMLElement} menu The menu <ul>\n */\nexport default class Menu {\n  /**\n   * Start the component\n   */\n  constructor(menu) {\n    /**\n     * The default string description for this object.\n     *\n     * @type {string}\n     */\n    this.stringDescription = 'Menu';\n\n    /**\n     * The menu <ul>\n     * @type {HTMLElement}\n     */\n    this.menu = menu;\n\n    /**\n     * Will hold menu popups.\n     * @type {Array}\n     */\n    this.popups = [];\n\n    // Register text domain\n    setLocaleData({ '': {} }, 'sciencenews');\n\n    // Bind class methods.\n    this.manageState = this.manageState.bind(this);\n    this.handleMenuBarKeydown = this.handleMenuBarKeydown.bind(this);\n    this.handleMenuBarClick = this.handleMenuBarClick.bind(this);\n    this.destroy = this.destroy.bind(this);\n\n    this.init();\n  }\n\n  /**\n   * Get the string description for this object.\n   * E.x., Menu.toString() === '[object Menu]'\n   *\n   * @return {string}\n   */\n  get [Symbol.toStringTag]() {\n    return this.stringDescription;\n  }\n\n  /**\n   * Manage menu activeDescendant state.\n   *\n   * @param {Object} newState The new state.\n   */\n  manageState(newState) {\n    this.state = Object.assign(this.state, newState);\n\n    if (Object.prototype.hasOwnProperty.call(newState, 'activeDescendant')) {\n      const { activeDescendant } = this.state;\n\n      rovingTabIndex(this.menuBarItems, activeDescendant);\n      activeDescendant.focus();\n    }\n  }\n\n  /**\n   * Collect top-level menu items and set up event handlers.\n   */\n  init() {\n    // Set the menu role.\n    this.menu.setAttribute('role', 'menu');\n\n    // Adds a circular self-reference for external access.\n    this.menu.menu = this;\n\n    this.menuItemsCollection = this.menu.children;\n    this.menuItemsArray = Array.prototype.slice.call(this.menuItemsCollection);\n\n    // Collect menu links.\n    this.menuBarItems = this.menuItemsArray.reduce((acc, item) => {\n      const itemLink = item.firstElementChild;\n\n      if (null !== itemLink && 'A' === itemLink.nodeName) {\n        return [...acc, itemLink];\n      }\n\n      return acc;\n    }, []);\n\n    /**\n     * The number of menu items.\n     * @type {Number}\n     */\n    this.menuLength = this.menuBarItems.length;\n\n    // Set menu link attributes and event listeners.\n    this.menuBarItems.forEach((link, index) => {\n      link.parentElement.setAttribute('role', 'presentation');\n\n      // Add size and position attributes.\n      link.setAttribute('role', 'menuitem');\n      link.setAttribute('aria-setsize', this.menuLength);\n      link.setAttribute('aria-posinset', index + 1);\n\n      link.addEventListener('keydown', this.handleMenuBarKeydown);\n      link.addEventListener('click', this.handleMenuBarClick);\n    });\n\n    /**\n     * The index of the last menubar item\n     * @type {Number}\n     */\n    this.lastIndex = (this.menuLength - 1);\n\n    // Save the menu's first and last items.\n    [this.firstItem] = this.menuBarItems;\n    this.lastItem = this.menuBarItems[this.lastIndex];\n\n    /**\n     * Set initial state.\n     * @type {Object}\n     */\n    this.state = {\n      activeDescendant: this.firstItem,\n    };\n\n    // Initialize popups for nested lists.\n    this.popups = this.menuBarItems.reduce((acc, controller) => {\n      const target = controller.nextElementSibling;\n\n      if (null !== target && 'UL' === target.nodeName) {\n        const popup = new Popup({ controller, target });\n\n        target.addEventListener('keydown', this.handleListKeydown);\n        const subList = new MenuItem(target);\n        // Save the list's previous sibling.\n        subList.previousSibling = controller;\n\n        return [...acc, popup];\n      }\n\n      return acc;\n    }, []);\n\n    // Set up initial tabindex.\n    rovingTabIndex(\n      this.menuBarItems,\n      this.state.activeDescendant,\n    );\n  }\n\n  /**\n   * Handle keydown events on the menuList element.\n   *\n   * @param {Object} event The event object.\n   */\n  handleMenuBarKeydown(event) {\n    const { LEFT, RIGHT, DOWN } = keyCodes;\n    const { keyCode } = event;\n    const { activeDescendant } = this.state;\n    const activeIndex = this.menuBarItems.indexOf(activeDescendant);\n\n    if ([LEFT, RIGHT].includes(keyCode)) {\n      event.stopPropagation();\n      event.preventDefault();\n\n      // Determine the direction.\n      let nextIndex = (keyCode === LEFT)\n        ? activeIndex - 1\n        : activeIndex + 1;\n\n      // Move to the end if we're moving to the previous child from the first child.\n      if (LEFT === keyCode && 0 > nextIndex) {\n        nextIndex = this.lastIndex;\n      }\n\n      // Move to first child if we're at the end.\n      if (RIGHT === keyCode && this.lastIndex < nextIndex) {\n        nextIndex = 0;\n      }\n\n      this.manageState({\n        activeDescendant: this.menuBarItems[nextIndex],\n      });\n    } else if (DOWN === keyCode) {\n      // Open the popup if it exists and is not expanded.\n      if ('[object Popup]' === activeDescendant?.popup?.toString()) {\n        event.stopPropagation();\n        event.preventDefault();\n\n        const { popup } = activeDescendant;\n\n        if (! popup.state.expanded) {\n          popup.setExpandedState(true);\n        }\n\n        popup.firstItem.focus();\n      }\n    }\n  }\n\n  /**\n   * Update the active descendant when the item is clicked.\n   *\n   * @param  {Object} event The event object.\n   */\n  handleMenuBarClick(event) {\n    this.manageState({\n      activeDescendant: event.target,\n    });\n  }\n\n  /**\n   * Recursively destroy Menu, MenuItems, and Popups.\n   */\n  destroy() {\n    // Remove the menu role.\n    this.menu.removeAttribute('role');\n\n    this.menuItemsCollection = this.menu.children;\n    this.menuItemsArray = Array.prototype.slice.call(this.menuItemsCollection);\n\n    this.menuBarItems.forEach((link) => {\n      link.parentElement.removeAttribute('role');\n\n      // Remove size and position attributes.\n      link.removeAttribute('role');\n      link.removeAttribute('aria-setsize');\n      link.removeAttribute('aria-posinset');\n\n      link.removeEventListener('keydown', this.handleMenuBarKeydown);\n      link.removeEventListener('click', this.handleMenuBarClick);\n    });\n\n    // Destroy nested components.\n    if (0 < this.popups.length) {\n      this.popups.forEach((popup) => {\n        if (\n          undefined !== popup.target.menuItem\n          && '[object MenuItem]' === popup?.target?.menuItem?.toString()\n        ) {\n          popup.target.menuItem.destroy();\n        }\n        popup.destroy();\n      });\n    }\n\n    // Allow tabbing to all menubar items\n    this.menuBarItems.forEach((menuBarItem) => {\n      menuBarItem.removeAttribute('tabindex');\n    });\n  }\n}\n","/**\n * Network component for handling throttling of events via requestAnimationFrame\n */\nexport default class Throttle {\n  /**\n   * Create a new instance of Throttle.\n   *\n   * @param {HTMLElement} element   Element on which throttle should be applied.\n   * @param {string}      event     Event on which the throttle should be applied.\n   * @param {function}    callback  Function to debounce (don't forget to bind it!).\n   * @param {int}         frequency Maximum frequency at which callback should be executed.\n   */\n  constructor(element, event, callback, frequency = 250) {\n    Object.assign(this, {\n      callback,\n      event,\n      element,\n      frequency,\n      timeout: false,\n    });\n\n    // Bound events\n    this.requestTick = this.requestTick.bind(this);\n    this.update = this.update.bind(this);\n\n    if (! this.callback) {\n      // eslint-disable-next-line no-console\n      console.error('Throttle error: you must specify a callback.');\n    } else {\n      this.element.addEventListener(this.event, this.requestTick);\n    }\n  }\n\n  /**\n   * Dispatches the event to the supplied callback\n   * @private\n   */\n  update() {\n    this.callback();\n    window.clearTimeout(this.timeout);\n    this.timeout = false;\n  }\n\n  /**\n   * Ensures events don't get stacked\n   * @private\n   */\n  requestTick() {\n    if (! this.timeout) {\n      this.timeout = window.setTimeout(() => {\n        window.requestAnimationFrame(this.update);\n      }, this.frequency);\n    }\n  }\n\n  /**\n   * Remove debouncer\n   * @private\n   */\n  destroy() {\n    this.element.removeEventListener(this.event, this.requestTick);\n  }\n}\n","import config from '../../../config/breakpoints.json';\n\n/**\n * Format global breakpoint values.\n *\n * @return {Object} An object of MediaQueryLists.\n */\nfunction formatBreakpoints() {\n  return Object.keys(config).reduce((acc, bp) => {\n    const bpMinRems = `${config[bp] / 16}rem`;\n    const bpMaxRems = `${(config[bp] - 1) / 16}rem`;\n\n    acc[`${bp}Min`] = window.matchMedia(`(min-width: ${bpMinRems})`);\n    acc[`${bp}Max`] = window.matchMedia(`(max-width: ${bpMaxRems})`);\n\n    return acc;\n  }, {});\n}\n\nconst breakpoints = formatBreakpoints();\nexport default breakpoints;\n","/**\n * Create a passably unique `id` attribute.\n *\n * @param {Number} radix An optional base for converting the Number to a String.\n *\n * @returns {String}\n */\nexport default function uniquId(radix = 36) {\n  const [, attr] = Math.random().toString(radix).split('.');\n  return `id_${attr}`;\n}\n","/**\n * Create the screen reader text element\n *\n * @param {String} id        The id for the containing element.\n * @param {String} innerText The text to display to screen readers.\n *\n * @return {HTMLElement}\n */\nexport default function createScreenReaderText(id, innerText) {\n  const span = document.createElement('span');\n  span.classList.add('screen-reader-text');\n  Object.assign(span, { id, innerText });\n\n  return span;\n}\n","import { __, setLocaleData } from '@wordpress/i18n';\nimport keyCodes from 'a11y/lib/keyCodes';\nimport uniqueId from 'a11y/lib/uniqueId';\nimport interactiveChildren from 'a11y/lib/interactiveChildren';\nimport createScreenReaderText from 'a11y/lib/createScreenReaderText';\n\n/**\n * Class for adding listbox-like support to Topic MegaMenu article lists.\n *\n * @param {HTMLElement} articles The articles <ul>\n */\nexport default class GroupWidget {\n  /**\n   * Get the article item from one of its interative children.\n   *\n   * @param {HTMLElement} itemChild The lost child.\n   *\n   * @return {HTMLElement}\n   */\n  static getItemParent(itemChild) {\n    const { childOf } = itemChild.dataset;\n    const itemParent = document.getElementById(childOf);\n\n    return (null !== itemParent) ? itemParent : false;\n  }\n\n  /**\n   * Start the component\n   *\n   * @todo can i get a reference to the parent popup?\n   */\n  constructor(list) {\n    this.list = list;\n    this.articleItems = Array.prototype.slice.call(list.children);\n\n    // Register text domain\n    setLocaleData({ '': {} }, 'sciencenews');\n\n    // Save a reference to the first list item.\n    Object.assign(this, { firstItem: this.articleItems[0] });\n\n    /**\n     * The index of the last item.\n     * @type {Number}\n     */\n    this.lastIndex = (this.articleItems.length - 1);\n\n    /**\n     * Track GroupWidget state.\n     * @type {Object}\n     */\n    this.state = {\n      activeDescendant: this.firstItem,\n    };\n\n    // Bind class methods.\n    this.prepItems = this.prepItems.bind(this);\n    this.updateActiveState = this.updateActiveState.bind(this);\n    this.clearActiveState = this.clearActiveState.bind(this);\n    this.getParentPopup = this.getParentPopup.bind(this);\n    this.handleListBlur = this.handleListBlur.bind(this);\n    this.handleListKeydown = this.handleListKeydown.bind(this);\n\n    /**\n     * The instance the Popup class within which the list resides.\n     * @type {Popup}\n     */\n    this.parentPopup = this.getParentPopup();\n\n    this.prepItems();\n\n    this.init();\n  }\n\n  /**\n   * Get a reference to the Popup containing the list.\n   *\n   * @return {Popup} An instance of the Popup class.\n   */\n  getParentPopup() {\n    let parent = this.list.parentElement;\n\n    while (('[object Popup]' !== parent?.popup?.toString())) {\n      parent = parent.parentElement;\n    }\n\n    return parent.popup;\n  }\n\n  /**\n   * Ensure each list item and its interactive children have an ID attribute.\n   */\n  prepItems() {\n    this.articleItems.forEach((item) => {\n      const children = interactiveChildren(item);\n\n      if ('' === item.id) {\n        item.setAttribute('id', uniqueId());\n      }\n\n      children.forEach((child) => {\n        child.setAttribute('id', uniqueId());\n        child.setAttribute('data-child-of', item.id);\n      });\n    });\n  }\n\n  /**\n   * Update the active descendant.\n   *\n   * @param  {HTMLElement} newlyActive The descendant to set as active and selected.\n   */\n  updateActiveState(newlyActive) {\n    const { activeDescendant } = this.state;\n    activeDescendant.removeAttribute('aria-selected');\n\n    this.state.activeDescendant = newlyActive;\n    this.list.setAttribute('aria-activedescendant', newlyActive.id);\n    newlyActive.setAttribute('aria-selected', 'true');\n  }\n\n  /**\n   * Clear the list attributes and reset state.\n   */\n  clearActiveState() {\n    const { activeDescendant } = this.state;\n\n    this.list.removeAttribute('aria-activedescendant');\n    activeDescendant.removeAttribute('aria-selected');\n    this.state.activeDescendant = this.firstItem;\n\n    // Revert to the intial help text.\n    this.list.setAttribute(\n      'aria-describedby',\n      this.initialListDescribedby,\n    );\n  }\n\n  /**\n   * Adds screen reader help text for use in aria-describedby attributes.\n   */\n  static addHelpText() {\n    const helpTextItems = [\n      {\n        id: 'group-widget-list-help',\n        text: __(\n          'Use up and down arrow keys to explore.',\n          'sciencenews',\n        ),\n      },\n      {\n        id: 'group-widget-list-enter-help',\n        text: __('Use right arrow key to move into the list.', 'sciencenews'),\n      },\n      {\n        id: 'group-widget-move-back-help',\n        text: __(\n          'Use left arrow key to move back to the parent list.',\n          'sciencenews',\n        ),\n      },\n      {\n        id: 'group-widget-tab-help',\n        text: __('Use tab key to enter the current list item.', 'sciencenews'),\n      },\n      {\n        id: 'group-widget-esc-help',\n        text: __(\n          'Use escape to exit the menu.',\n          'sciencenews',\n        ),\n      },\n    ];\n\n    helpTextItems.forEach(({ id, text }) => {\n      if (null === document.body.querySelector(`#${id}`)) {\n        const helpSpan = createScreenReaderText(id, text);\n        document.body.appendChild(helpSpan);\n      }\n    });\n  }\n\n  init() {\n    this.list.setAttribute('role', 'group');\n    this.list.setAttribute('tabindex', '0');\n\n    // eslint-disable-next-line max-len\n    this.initialListDescribedby = 'group-widget-list-help group-widget-list-enter-help group-widget-esc-help';\n    // eslint-disable-next-line max-len\n    this.activeListDescribedby = 'group-widget-list-help group-widget-move-back-help group-widget-tab-help group-widget-esc-help';\n\n    // Add the help\n    this.constructor.addHelpText();\n\n    // Set the initial list help text.\n    this.list.setAttribute(\n      'aria-describedby',\n      this.initialListDescribedby,\n    );\n\n    this.list.addEventListener('blur', this.handleListBlur);\n    this.list.addEventListener('keydown', this.handleListKeydown);\n  }\n\n  /**\n   * Handle list blur to ensure attributes are not present when the list isn't focused.\n   */\n  handleListBlur() {\n    // Revert `focus` handler setup if the activeElement is not contained within the GroupWidget\n    if (! this.list.contains(document.activeElement)) {\n      this.clearActiveState();\n    }\n  }\n\n  /**\n   * Handle keydown events on the list to ensure the correct element is set as the active descendant.\n   *\n   * @param  {Object} event The event object.\n   */\n  handleListKeydown(event) {\n    const {\n      UP,\n      DOWN,\n      RIGHT,\n      LEFT,\n      TAB,\n    } = keyCodes;\n    const { keyCode, shiftKey } = event;\n    const { activeDescendant } = this.state;\n    const activeIndex = this.articleItems.indexOf(activeDescendant);\n    // The list is considered active once the user has taken action to\n    // drill down into the list items, currently by pressing the right arrow key.\n    const listIsActive = this.list.hasAttribute('aria-activedescendant');\n    // Get the interactive children of the current item, or the parent item\n    // if we're on one of the child elements.\n    const parentItem = this.constructor.getItemParent(activeDescendant);\n\n    // Mimic the normal menu items' keybopard handling when the list isn't active.\n    if (! listIsActive) {\n      if (RIGHT === keyCode) {\n        // Move into list.\n        event.preventDefault();\n        this.updateActiveState(this.firstItem);\n\n        // Update the help text to reflect the new state.\n        this.list.setAttribute(\n          'aria-describedby',\n          this.activeListDescribedby,\n        );\n      } else if (LEFT === keyCode) {\n        // Move back to the popup controller.\n        event.preventDefault();\n        this.parentPopup.setExpandedState(false);\n        this.parentPopup.controller.focus();\n      } else if ([UP, DOWN].includes(keyCode)) {\n        // Move to the sibling list when the list is not active.\n        event.preventDefault();\n        this.parentPopup.firstItem.focus();\n      }\n    }\n\n    // Broken out into its own block for readability.\n    // Interact with the list items when the list is active.\n    if (listIsActive) {\n      if (LEFT === keyCode) {\n        event.preventDefault();\n\n        if (parentItem) {\n          // Move from the child of a list item to the list item\n          this.updateActiveState(parentItem);\n        } else {\n          // Move out of list.\n          this.clearActiveState();\n        }\n      } else if ([UP, DOWN].includes(keyCode) && ! parentItem) {\n        // Move up/down through the articles list if the list is active and the\n        // active descendant is not a grandchild of the list.\n        event.preventDefault();\n        let nextIndex = (keyCode === UP)\n          ? activeIndex - 1\n          : activeIndex + 1;\n\n        // Move to the end if we're moving to the previous child from the first child.\n        if (UP === keyCode && 0 > nextIndex) {\n          nextIndex = this.lastIndex;\n        }\n\n        // Move to first child if we're at the end.\n        if (DOWN === keyCode && this.lastIndex < nextIndex) {\n          nextIndex = 0;\n        }\n\n        this.updateActiveState(this.articleItems[nextIndex]);\n      } else if (TAB === keyCode) {\n        const children = (parentItem)\n          ? interactiveChildren(parentItem)\n          : interactiveChildren(activeDescendant);\n\n        if (0 < children.length) {\n          event.preventDefault();\n          const activeChildIndex = children.indexOf(activeDescendant);\n          const [firstChild] = children;\n\n          if (parentItem) {\n            // Move up/down through the articles list if the list is active.\n            const nextIndex = (shiftKey)\n              ? activeChildIndex - 1\n              : activeChildIndex + 1;\n\n            // Move back from first child to article item.\n            // Move from active descendant's last interactive child back to article item.\n            const nextElement = (\n              0 > nextIndex || (children.length - 1) < nextIndex\n            ) ? parentItem : children[nextIndex];\n\n            this.updateActiveState(nextElement);\n          } else if (! shiftKey) {\n            // Tab from item to the first child element.\n            this.updateActiveState(firstChild);\n          }\n        }\n      }\n    }\n  }\n}\n","import { componentProvider } from 'js-component-framework';\nimport getFormattedClassnames from 'utils/getFormattedClassnames';\nimport TopicsMegaMenu from './topics-megamenu';\nimport './dropdown-all-topics.scss';\nimport './dropdown-single-topic.scss';\n\nconst menuClassnames = sciencenewsClassnames['topics-megamenu'];\nconst menuSelectors = getFormattedClassnames(menuClassnames);\nconst dropdownSingleClassnames = sciencenewsClassnames['dropdown-single-topic'];\n// eslint-disable-next-line max-len\nconst dropdownSingleSelectors = getFormattedClassnames(dropdownSingleClassnames);\n\nconst topicsMegaMenuConfig = {\n  name: 'topics-menu',\n  component: TopicsMegaMenu,\n  querySelector: {\n    list: menuSelectors.list,\n  },\n  querySelectorAll: {\n    singleDropdownLists: `${dropdownSingleSelectors.dropdown}`,\n  },\n  options: {\n    selectors: {\n      articleList: dropdownSingleSelectors.articleList,\n    },\n  },\n};\n\ncomponentProvider(topicsMegaMenuConfig);\n","import Menu from 'a11y/Menu';\nimport Popup from 'a11y/Popup';\nimport keyCodes from 'a11y/lib/keyCodes';\nimport Throttle from 'utils/Throttle';\nimport breakpoints from 'utils/breakpoints';\nimport GroupWidget from './GroupWidget';\nimport './topics-megamenu.scss';\n\n/**\n * Component for the Topics Megamenu menu.\n */\nexport default class TopicsMegaMenu {\n  /**\n   * Handle arrow keys from the parent topic's link to the article list.\n   *\n   * @param {Object}      event       The event object.\n   * @param {HTMLElement} articleList The article list element.\n   */\n  static handleTopicLeadKeydown(event, articleList) {\n    const { UP, DOWN } = keyCodes;\n    const { keyCode } = event;\n\n    if ([UP, DOWN].includes(keyCode)) {\n      event.preventDefault();\n      articleList.focus();\n    }\n  }\n\n  /**\n   * Start the component\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    /**\n     * An array of GroupWidget items.\n     * @type {Array}\n     */\n    this.groups = [];\n\n    /**\n     * Track article list keyboard support setup.\n     * @type {Boolean}\n     */\n    this.articleListSupport = false;\n\n    // Bind class methods\n    this.setupArticleListSupport = this.setupArticleListSupport.bind(this);\n    this.setDropdownPositioning = this.setDropdownPositioning.bind(this);\n    this.init = this.init.bind(this);\n\n    this.init();\n\n    // Run init on breakpoint changes.\n    breakpoints.lgMin.addListener(this.init);\n  }\n\n  /**\n   * Set up support for using arrow keys to navigate to the Topic Menu's article lists.\n   */\n  setupArticleListSupport() {\n    this.singlePopups.forEach((popup) => {\n      const { selectors: { articleList } } = this.options;\n\n      const articles = (\n        popup.target.querySelector(articleList)\n      );\n\n      if (null !== articles) {\n        // Instantiate a new GroupWidget.\n        const group = new GroupWidget(articles);\n        this.groups.push(group);\n      }\n\n      // Patch in arrow key navigation to article list.\n      popup.firstItem.addEventListener('keydown', (event) => {\n        const { UP, DOWN } = keyCodes;\n        const { keyCode } = event;\n\n        if ([UP, DOWN].includes(keyCode)) {\n          event.preventDefault();\n          articles.focus();\n        }\n      });\n    });\n\n    this.articleListSupport = true;\n  }\n\n  /**\n   * Set the menubar dropdown position.\n   */\n  setDropdownPositioning() {\n    this.singlePopups.forEach((popup) => {\n      // Clear inline styles.\n      popup.target.removeAttribute('style');\n\n      if (undefined !== popup.observer) {\n        // Stop observing.\n        popup.observer.disconnect();\n      }\n\n      // Close the popup\n      popup.setExpandedState(false);\n\n      const controllerLeft = popup.controller.offsetLeft;\n      const controllerCenter = (popup.controller.offsetWidth / 2);\n      const dropdownRight = (\n        window.innerWidth - (controllerLeft + controllerCenter)\n      );\n\n      // Set the dropdown's default `right` value.\n      Object.assign(\n        popup.target.style,\n        { right: `${dropdownRight}px` },\n      );\n\n      // Create an observer instance to track `aria-hidden` attribute changes.\n      popup.observer = new MutationObserver((mutationsList) => { // eslint-disable-line no-param-reassign\n        mutationsList.forEach((mutation) => {\n          if (\n            'attributes' === mutation.type\n            && 'aria-hidden' === mutation.attributeName\n            && 'false' === popup.target.getAttribute('aria-hidden')\n          ) {\n            if ((popup.target.clientWidth / 2) < dropdownRight) {\n              // Pull the dropdown to the right to center it with its controller.\n              Object.assign(\n                popup.target.style,\n                { transform: 'translateX(50%)' },\n              );\n            } else {\n              // The dropdown is too far right; fall back to a 30px right offset.\n              Object.assign(\n                popup.target.style,\n                { right: '30px' },\n              );\n            }\n          }\n        });\n      });\n\n      // Start observing the target for `aria-hidden` attribute changes.\n      popup.observer.observe(popup.target, { attributes: true });\n    });\n  }\n\n  /**\n   * Start the component.\n   */\n  init() {\n    // The Topics Megamenu is desktop-only.\n    if (breakpoints.lgMin.matches) {\n      if (! (this.topicsMenu instanceof Menu)) {\n        // Initialize the Menu class.\n        this.topicsMenu = new Menu(this.children.list);\n      }\n\n      if (undefined === this.singlePopups) {\n        const { singleDropdownLists } = this.children;\n\n        if (null !== singleDropdownLists) {\n          /**\n           * Collected single-topic popups.\n           * @type {Array}\n           */\n          this.singlePopups = Array.prototype.reduce.call(\n            singleDropdownLists,\n            (acc, dropdown) => {\n              if (dropdown.popup instanceof Popup) {\n                acc.push(dropdown.popup);\n              }\n\n              return acc;\n            }, [],\n          );\n        }\n      }\n\n      if (! this.articleListSupport) {\n        this.setupArticleListSupport();\n      }\n\n      this.setDropdownPositioning();\n      this.resize = new Throttle(window, 'resize', this.setDropdownPositioning);\n    } else if (this.resize instanceof Throttle) {\n      this.resize.destroy();\n    }\n  }\n}\n","import interactiveChildren from './lib/interactiveChildren';\nimport uniqueId from './lib/uniqueId';\n\n/**\n * Sets up a controller-target relationship with appropriate aria-attributes and event handling.\n *\n * @param {Object} config {\n *   And object denoting the Disclosure's configuration.\n *\n *   @type {HTMLElement} controller               The Disclosure's controlling element.\n *   @type {HTMLElement} target                   The Disclosure's target element.\n *   @type {Boolean}     [loadOpen=false]         To load the Disclosure open.\n *   @type {Boolean}     [allowOutsideClick=true] Keep the Disclosure open on outside clicks.\n *   @type {Function}    onOpen                   Function to be run after the Disclosure is opened.\n *   @type {Function}    onClose                  Function to be run after the Disclosure is closed.\n * }\n */\nexport default class Disclosure {\n  /**\n   * Start the component\n   */\n  constructor(config) {\n    /**\n     * The default string description for this object.\n     *\n     * @type {string}\n     */\n    this.stringDescription = 'Disclosure';\n\n    /**\n     * Default config options.\n     * @type {Object}\n     */\n    const options = {\n      controller: null,\n      target: null,\n      loadOpen: false,\n      allowOutsideClick: true,\n      onOpen: () => {},\n      onClose: () => {},\n    };\n\n    // Merge config options with defaults.\n    Object.assign(this, options, config);\n\n    // Initial state.\n    this.state = {\n      expanded: this.loadOpen,\n    };\n\n    /**\n     * The target element's interactive child elements.\n     * @type {Array}\n     */\n    this.interactiveChildElements = interactiveChildren(this.target);\n\n    // Bind class methods.\n    this.setup = this.setup.bind(this);\n    this.destroy = this.destroy.bind(this);\n    this.toggleExpandedState = this.toggleExpandedState.bind(this);\n    this.setExpandedState = this.setExpandedState.bind(this);\n    this.rovingTabIndex = this.rovingTabIndex.bind(this);\n    this.closeOnOutsideClick = this.closeOnOutsideClick.bind(this);\n\n    this.setup();\n    this.rovingTabIndex(false);\n  }\n\n  /**\n   * Expand or collapse the disclosure\n   *\n   * @param {Boolean} expand The expected `expanded` state.\n   */\n  setExpandedState(expand) {\n    this.controller.setAttribute('aria-expanded', `${expand}`);\n    this.target.setAttribute('aria-hidden', `${! expand}`);\n\n    this.rovingTabIndex(expand);\n\n    this.state.expanded = expand;\n\n    if (expand) {\n      this.onOpen.call(this);\n    } else {\n      this.onClose.call(this);\n    }\n  }\n\n  /**\n   * Get the string description for this object.\n   * E.x., Disclosure.toString() === '[object Disclosure]'\n   *\n   * @return {string}\n   */\n  get [Symbol.toStringTag]() {\n    return this.stringDescription;\n  }\n\n  /**\n   * Add initial attributes, establish relationships, and listen for events\n   */\n  setup() {\n    const { expanded } = this.state;\n\n    // Ensure the target and controller each have an ID attribute.\n    [this.controller, this.target].forEach((element) => {\n      if ('' === element.id) {\n        element.setAttribute('id', uniqueId());\n      }\n    });\n\n    // Add a reference to the class instance\n    this.controller.disclosure = this;\n    this.target.disclosure = this;\n\n    // Add controller attributes\n    this.controller.setAttribute('aria-expanded', `${expanded}`);\n    this.controller.setAttribute('aria-controls', this.target.id);\n\n    // If the markup is disconnected, establish a relationship.\n    if (this.target !== this.controller.nextElementSibling) {\n      this.controller.setAttribute('aria-owns', this.target.id);\n    }\n\n    // Add target attributes\n    this.target.setAttribute('aria-hidden', `${! expanded}`);\n\n    // Add event listeners\n    this.controller.addEventListener('click', this.toggleExpandedState);\n\n    if (! this.allowOutsideClick) {\n      document.body.addEventListener('click', this.closeOnOutsideClick);\n    }\n  }\n\n  /**\n   * Remove all ARIA attributes added by this class.\n   */\n  destroy() {\n    // Add a reference to the class instance.\n    this.controller.disclosure = null;\n    this.target.disclosure = null;\n\n    // Remove controller attributes.\n    this.controller.removeAttribute('aria-expanded');\n    this.controller.removeAttribute('aria-controls');\n    this.controller.removeAttribute('aria-owns');\n\n    // Remove target attributes.\n    this.target.removeAttribute('aria-hidden');\n\n    // Remove event listeners.\n    this.controller.removeEventListener('click', this.toggleExpandedState);\n    document.body.removeEventListener('click', this.closeOnOutsideClick);\n\n    // Reset initial state.\n    this.state = {\n      expanded: this.loadOpen,\n    };\n  }\n\n  /**\n   * Toggle the expanded state.\n   *\n   * @param {Object} event The event object.\n   */\n  toggleExpandedState(event) {\n    event.preventDefault();\n\n    if (this.state.expanded) {\n      this.setExpandedState(false);\n    } else {\n      this.setExpandedState(true);\n    }\n  }\n\n  /**\n   * Close the disclosure when the user clicks outside of the target.\n   *\n   * @param {Object} event The event object.\n   */\n  closeOnOutsideClick(event) {\n    if (\n      this.state.expanded\n      && event.target !== this.controller\n      && ! this.target.contains(event.target)\n    ) {\n      this.setExpandedState(false);\n    }\n  }\n\n  /**\n   * Prevent focus on interactive elements in the target when the target is hidden.\n   *\n   * This isn't much of an issue if the element is visually hidden with\n   * `display:none`, but becomes an issue if the target is collapsed by\n   * other means, like reducing one of its dimensions.\n   *\n   * @param {Boolean} allow Whether or not to allow focus on children of this.target.\n   */\n  rovingTabIndex(allow) {\n    this.interactiveChildElements.forEach((child) => {\n      if (allow) {\n        child.removeAttribute('tabindex');\n      } else {\n        child.setAttribute('tabindex', '-1');\n      }\n    });\n  }\n}\n","import getFormattedClassnames from 'utils/getFormattedClassnames';\nimport camelCaseString from 'utils/camelCaseString';\n\n/**\n * Get a component's hashed classname.\n *\n * @param {String} className The classname to retrieve.\n * @param {String} component The component from which to retrieve the classname.\n *\n * @return {String|Boolean} The classname, or false if not found.\n */\nexport default function getClassnameFromComponent(className, component) {\n  // Format the string to match that of the classnames object.\n  const camelcasedClassName = camelCaseString(className);\n\n  // Get the formatted classname.\n  const navBarClassnames = sciencenewsClassnames[component];\n  const navBarSelectors = getFormattedClassnames(navBarClassnames);\n\n  return (undefined !== navBarSelectors[camelcasedClassName])\n    ? navBarSelectors[camelcasedClassName]\n    : false;\n}\n","/**\n * CamelCase a string.\n *\n * @param {String} input The string to camelCase.\n *\n * @return {String} The input, camelCased.\n */\nexport default function camelCaseString(input) {\n  const camelCase = input.split('-').map((word, i) => {\n    if (0 === i) {\n      return word;\n    }\n    return word.charAt(0).toUpperCase() + word.slice(1);\n  }).join('');\n\n  return camelCase;\n}\n","import getClassnameFromComponent from 'utils/getClassnameFromComponent';\n\n/**\n * Get an element or NodeList from another component.\n *\n * @param {String}  className The classname to retrieve.\n * @param {String}  component The component from which to retrieve the classname.\n * @param {Boolean} all       Return a NodeList\n *\n * @return {HTMLElement|NodeList}\n */\nexport default function getElementFromComponent(className, component, all = false) { // eslint-disable-line max-len\n  const componentClassname = getClassnameFromComponent(className, component);\n\n  if (! componentClassname) {\n    return null;\n  }\n\n  const element = (all)\n    ? document.querySelectorAll(componentClassname)\n    : document.querySelector(componentClassname);\n\n  return element;\n}\n","import { componentProvider } from 'js-component-framework';\nimport getFormattedClassnames from 'utils/getFormattedClassnames';\nimport HeaderSearch from './header-search';\n\nconst searchClassnames = sciencenewsClassnames['header-search'];\nconst searchSelectors = getFormattedClassnames(searchClassnames);\n\nconst headerSearchConfig = {\n  name: 'header-search',\n  component: HeaderSearch,\n  querySelector: {\n    target: searchSelectors.wrapper,\n    controller: searchSelectors.toggle,\n    openText: searchSelectors.open,\n    closeText: searchSelectors.close,\n    input: 'input',\n  },\n};\n\ncomponentProvider(headerSearchConfig);\n","import { __, setLocaleData } from '@wordpress/i18n';\nimport Disclosure from 'a11y/Disclosure';\nimport createScreenReaderText from 'a11y/lib/createScreenReaderText';\nimport getElementFromComponent from 'utils/getElementFromComponent';\nimport breakpoints from 'utils/breakpoints';\nimport './header-search.scss';\n\n/**\n * Component for the header search form.\n */\nexport default class HeaderSearch {\n  /**\n   * Start the component\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    // Register text domain\n    setLocaleData({ '': {} }, 'sciencenews');\n\n    // Bind class methods.\n    this.moveComponent = this.moveComponent.bind(this);\n    this.updateControllerText = this.updateControllerText.bind(this);\n\n    /**\n     * The nav-bar wrapper element.\n     * @type {HTMLElement}\n     */\n    this.navBarWrapper = getElementFromComponent('wrapper', 'nav-bar');\n\n    /**\n     * The nav-bar element (child of the nav-bar.wrapper)\n     * @type {HTMLElement}\n     */\n    this.navBar = getElementFromComponent('nav-bar', 'nav-bar');\n\n    /**\n     * The nav-bar 'action list' element.\n     * @type {HTMLElement}\n     */\n    this.actionsList = getElementFromComponent('actions', 'nav-bar');\n\n    // Ensure the header-search is positioned correctly for the current screen size.\n    this.moveComponent();\n    breakpoints.lgMin.addListener(this.moveComponent);\n\n    this.init();\n    // Update the controller text to ensure it reflects the correct state.\n    this.updateControllerText();\n  }\n\n  /**\n   * Conditionally relocate the this component based on the matching breakpoint.\n   */\n  moveComponent() {\n    const { controller } = this.children;\n\n    if (\n      null !== this.navBarWrapper\n      && null !== this.navBar\n      && null !== this.actionsList\n    ) {\n      const controllerParent = controller.parentElement;\n      const targetParent = this.element.parentElement;\n\n      if (breakpoints.lgMin.matches) {\n        // For lgMin breakpoint, the header-search should be a child of nav-bar before the actions list.\n        if (controllerParent !== this.navBar && targetParent !== this.navBar) {\n          // Move the header-search elements into the nav-bar, directly before the actions list.\n          // Target (this.element) first – order matters!\n          this.navBar.insertBefore(this.element, this.actionsList);\n        }\n      } else if (\n        controllerParent !== this.navBarWrapper\n        && targetParent !== this.navBarWrapper\n      ) {\n        // For breakpoints < lgMin, the header-search should be the last child of the nav-bar.wrapper.\n        // Move the header-search elements into the nav-bar wrapper as the last children.\n        // Target (this.element) first – order matters!\n        this.navBarWrapper.appendChild(this.element);\n      }\n    }\n  }\n\n  /**\n   * Initialize the Disclosure class and add the screen reader description.\n   */\n  init() {\n    const { controller, target } = this.children;\n    /**\n     * The Disclosure instance.\n     * @type {Disclosure}\n     */\n    this.disclosure = new Disclosure({\n      controller,\n      target,\n      onOpen: this.updateControllerText,\n      onClose: this.updateControllerText,\n    });\n\n    // Add an aria-description about tabbing backward to the input\n    const helpSpan = createScreenReaderText(\n      'header-search-help',\n      // eslint-disable-next-line max-len\n      __('Use the Shift key with the Tab key to tab back to the search input.', 'sciencenews'),\n    );\n    document.body.appendChild(helpSpan);\n\n    // Make sure the input is completely hidden;\n    target.style.clip = 'rect(0, 0, 0, 0)';\n\n    target.addEventListener('transitionend', () => {\n      const { expanded } = this.disclosure.state;\n\n      if (! expanded) {\n        target.style.clip = 'rect(0, 0, 0, 0)';\n      }\n    });\n  }\n\n  /**\n   * Update button text to reflect the disclosure's state.\n   */\n  updateControllerText() {\n    const {\n      controller,\n      target,\n      openText,\n      closeText,\n      input,\n    } = this.children;\n    const { expanded } = this.disclosure.state;\n\n    // Show the open label when the disclosure is closed.\n    openText.setAttribute('aria-hidden', `${expanded}`);\n    // Show the close label when the disclosure is open.\n    closeText.setAttribute('aria-hidden', `${! expanded}`);\n\n    if (expanded) {\n      target.style.clip = 'auto';\n      // Moving to the search field is unintuitive due to the markup being out-of-order\n      // Add the help text when the disclosure is open\n      controller.setAttribute('aria-describedby', 'header-search-help');\n      input.focus();\n    } else {\n      controller.removeAttribute('aria-describedby');\n    }\n  }\n}\n","import { componentProvider } from 'js-component-framework';\nimport getFormattedClassnames from 'utils/getFormattedClassnames';\nimport NavBar from './nav-bar';\nimport './nav-bar.scss';\nimport './primary-menu.scss';\n\nconst navBarClassnames = sciencenewsClassnames['nav-bar'];\nconst navBarSelectors = getFormattedClassnames(navBarClassnames);\nconst { toggle, navBar, actions } = navBarSelectors;\n\nconst navBarConfig = {\n  name: 'nav-bar',\n  component: NavBar,\n  querySelector: { toggle, navBar, actions },\n  querySelectorAll: {},\n  options: {\n    menuStylesheet: 'primary-menu',\n  },\n};\n\ncomponentProvider(navBarConfig);\nexport default navBarConfig;\n","import Popup from 'a11y/Popup';\nimport Menu from 'a11y/Menu';\nimport MenuItem from 'a11y/MenuItem';\nimport keyCodes from 'a11y/lib/keyCodes';\nimport breakpoints from 'utils/breakpoints';\nimport getElementFromComponent from 'utils/getElementFromComponent';\nimport getClassnameFromComponent from 'utils/getClassnameFromComponent';\n\n/**\n * Component for the NavBar menu.\n */\nexport default class NavBar {\n  /**\n   * Create the dropdown icon for identifying submenus.\n   *\n   * @todo Refactor this to instead place the icon in the markup via\n   * 'walker_nav_menu_start_el' and hide with CSS until NavBar inits.\n   *\n   * @static\n   * @return {DocumentFragment}\n   */\n  static getDropdownIcon() {\n    // eslint-disable-next-line global-require, import/no-dynamic-require, import/no-webpack-loader-syntax\n    const icon = require('!svg-inline-loader!./chevron-down.svg');\n    const range = document.createRange();\n    const fragment = range.createContextualFragment(icon);\n    return fragment;\n  }\n\n  /**\n   * Start the component\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    const { menuStylesheet, persist } = this.options;\n\n    /**\n     * Test for the header variant for which the menu button persists across breakpoints.\n     * @type {boolean}\n     */\n    this.persistMenuButton = (true === persist);\n\n    /**\n     * Hold the `.menu` class instances.\n     * @type {Menu|MenuItem}\n     */\n    this.primaryMenu = {};\n\n    /**\n     * Hold the `.topics-menu` class instance.\n     * @type {MenuItem}\n     */\n    this.topicsMenu = {};\n\n    const stylesheet = (undefined !== menuStylesheet)\n      ? menuStylesheet\n      : 'primary-menu';\n\n    const { toggle, navBar, actions } = this.children;\n\n    // The primary navigation.\n    const menu = getElementFromComponent('menu', stylesheet);\n\n    // Get the submenu parent links.\n    const hasChildren = getClassnameFromComponent('has-children', stylesheet);\n    const submenuLinks = menu.querySelectorAll(`${hasChildren} > a`);\n\n    // The (mobile-only) Topics Menu\n    const topics = getElementFromComponent('topics-menu', stylesheet);\n    // The (desktop-only) Topics MegaMenu\n    const topicsMegaMenu = getElementFromComponent('list', 'topics-megamenu');\n\n    // Collect instance properties.\n    Object.assign(this, {\n      toggle,\n      navBar,\n      menu,\n      topics,\n      actions,\n      topicsMegaMenu,\n      submenuLinks,\n      menuButton: {},\n    });\n\n    // Bind class methods\n    this.handleBreakpointChanges = this.handleBreakpointChanges.bind(this);\n    this.setUpMenuButton = this.setUpMenuButton.bind(this);\n    this.useHamburgerMenu = this.useHamburgerMenu.bind(this);\n    this.setUpPrimaryMenu = this.setUpPrimaryMenu.bind(this);\n    this.setUpPrimaryMenuItem = this.setUpPrimaryMenuItem.bind(this);\n    this.setUpSecondaryMenuItems = this.setUpSecondaryMenuItems.bind(this);\n    this.addKeydownPatches = this.addKeydownPatches.bind(this);\n    this.removeKeydownPatches = this.removeKeydownPatches.bind(this);\n    this.patchTopLevelKeydown = this.patchTopLevelKeydown.bind(this);\n    this.patchNavBarKeydown = this.patchNavBarKeydown.bind(this);\n    this.patchMenuButtonKeydown = this.patchMenuButtonKeydown.bind(this);\n    this.patchPrimaryMenuFirstItem = this.patchPrimaryMenuFirstItem.bind(this);\n    this.patchTopicsMenuFirstItem = this.patchTopicsMenuFirstItem.bind(this);\n\n    if (this.persistMenuButton) {\n      // Use the menu button setup (mobile menu) across all breakpoints.\n      this.useHamburgerMenu();\n    } else {\n      /*\n       * Add the dropdown icon.\n       * We do this here so it's guaranteed to only be applied once.\n       */\n      const nodeListLength = this.submenuLinks.length;\n      const dropdownIcon = this.constructor.getDropdownIcon();\n      for (let i = 0; i < nodeListLength; i += 1) {\n        if (! this.submenuLinks[i].querySelector('svg')) {\n          this.submenuLinks[i].appendChild(dropdownIcon);\n        }\n      }\n\n      // Check the viewport width and initialize accordingly.\n      this.handleBreakpointChanges();\n      breakpoints.lgMin.addListener(this.handleBreakpointChanges);\n    }\n  }\n\n  /**\n   * The Menu Button Popup should only be initialized for small screens.\n   */\n  handleBreakpointChanges() {\n    if (breakpoints.lgMin.matches) {\n      // Instantiate `this.primaryMenu` as Menu.\n      this.setUpPrimaryMenu();\n\n      // Destroy `this.topicsMenu` MenuItem.\n      if (this.topicsMenu instanceof MenuItem) {\n        this.topicsMenu.destroy();\n      }\n\n      // Destroy the menu button for large screens.\n      if (this.menuButton instanceof Popup) {\n        this.menuButton.destroy();\n      }\n\n      // Remove small screen keyboard support as not needed for larger screens.\n      this.removeKeydownPatches();\n\n      // Focus the topics megaMenu if a topics item has focus.\n      if (\n        null !== this.topics\n        && this.topics.contains(document.activeElement)\n      ) {\n        this.topicsMegaMenu.menu.firstItem.focus();\n      }\n    } else {\n      this.useHamburgerMenu();\n    }\n  }\n\n  /**\n   * Set up the menu button as a Popup.\n   */\n  setUpMenuButton() {\n    // The popup may be been instantiated, but subsequently destroyed.\n    if (this.menuButton instanceof Popup) {\n      // If the Popup class has already been initialized, reset it.\n      this.menuButton.setup();\n    } else {\n      // Initialize the Popup class.\n      this.menuButton = new Popup({\n        controller: this.toggle,\n        target: this.navBar,\n      });\n    }\n\n    /**\n     * Adds expected keyboard support to the menu button toggle.\n     *\n     * @param {Event} event\n     */\n    this.menuButton.controller.addEventListener(\n      'keydown',\n      this.patchMenuButtonKeydown,\n    );\n  }\n\n  /**\n   * Set up the primary nav menu as a Menu for desktop menu.\n   * The primary menu may be been instantiated as Menu, but subsequently destroyed.\n   */\n  setUpPrimaryMenu() {\n    if (this.primaryMenu instanceof MenuItem) {\n      this.primaryMenu.destroy();\n    }\n\n    if (this.primaryMenu instanceof Menu) {\n      // If the Menu class has already been initialized, reset it.\n      this.primaryMenu.init();\n    } else {\n      // Initialize the Menu class.\n      this.primaryMenu = new Menu(this.menu);\n    }\n  }\n\n  /**\n   * Set up the primary nav menu as a MenuItem for mobile menu.\n   * The primary menu may be been instantiated as MenuItem, but subsequently destroyed.\n   */\n  setUpPrimaryMenuItem() {\n    if (this.primaryMenu instanceof Menu) {\n      this.primaryMenu.destroy();\n    }\n\n    if (this.primaryMenu instanceof MenuItem) {\n      // If the MenuItem class has already been initialized, reset it.\n      this.primaryMenu.init();\n    } else {\n      // Initialize the MenuItem class.\n      this.primaryMenu = new MenuItem(this.menu);\n    }\n  }\n\n  /**\n   * Set up the Topics menu as MenuItems for mobile menu.\n   * Either of these may have been instantiated, but subsequently destroyed.\n   */\n  setUpSecondaryMenuItems() {\n    if (null !== this.topics) {\n      if (this.topicsMenu instanceof MenuItem) {\n        // If the MenuItem class has already been initialized, reset it.\n        this.topicsMenu.init();\n      } else {\n        // Initialize the MenuItem class for the Topics menu.\n        this.topicsMenu = new MenuItem(this.topics);\n      }\n    }\n  }\n\n  /**\n   * Set the menu hidden behind the menu button.\n   */\n  useHamburgerMenu() {\n    // Set up the menu button as a Popup.\n    this.setUpMenuButton();\n\n    // Instantiate `this.primaryMenu` as MenuItem.\n    this.setUpPrimaryMenuItem();\n\n    // Instantiate `this.topicsMenu` as MenuItems.\n    this.setUpSecondaryMenuItems();\n\n    // Patch keyboard support.\n    this.addKeydownPatches();\n\n    // Focus the menuButton if a nav-bar child has focus.\n    if (\n      this.navBar.contains(document.activeElement)\n      || (\n        null !== this.topics\n        && this.topics.contains(document.activeElement)\n      )\n    ) {\n      this.menuButton.controller.focus();\n    }\n  }\n\n  /**\n   * Remove keydown patches for large screen.\n   */\n  removeKeydownPatches() {\n    if (\n      this.primaryMenu instanceof MenuItem\n      || this.primaryMenu instanceof Menu\n    ) {\n      this.primaryMenu.firstItem.removeEventListener(\n        'keydown',\n        this.patchPrimaryMenuFirstItem,\n      );\n    }\n\n    if (this.topicsMenu instanceof MenuItem) {\n      this.topicsMenu.firstItem.removeEventListener(\n        'keydown',\n        this.patchTopicsMenuFirstItem,\n      );\n    }\n\n    this.menu.removeEventListener('keydown', this.patchTopLevelKeydown);\n    if (null !== this.topics) {\n      this.topics.removeEventListener('keydown', this.patchTopLevelKeydown);\n    }\n\n    this.navBar.removeEventListener('keydown', this.patchNavBarKeydown);\n  }\n\n  /**\n   * Patch incomplete keyboard navigation. Applied to individual elements,\n   * rather than delegated, in order to override the Menu/MenuItem event\n   * listeners.\n   */\n  addKeydownPatches() {\n    // Arrow up key moves focus to the topics menu's first item.\n    this.primaryMenu.firstItem.addEventListener(\n      'keydown',\n      this.patchPrimaryMenuFirstItem,\n    );\n\n    // Patches incomplete Topics Menu keyboard navigation support.\n    if (null !== this.topics) {\n      this.topicsMenu.firstItem.addEventListener(\n        'keydown',\n        this.patchTopicsMenuFirstItem,\n      );\n    }\n\n    // Close the menu on left arrow key.\n    this.menu.addEventListener('keydown', this.patchTopLevelKeydown);\n    if (null !== this.topics) {\n      this.topics.addEventListener('keydown', this.patchTopLevelKeydown);\n    }\n\n    // Patch incomplete keyboard navigation.\n    this.navBar.addEventListener('keydown', this.patchNavBarKeydown);\n  }\n\n  /**\n   * Patches incomplete keyboard navigation. These are separate lists, so not\n   * covered by the MenuItem's default keydown handlers:\n   *\n   * - Closes the menu on left arrow key if the item isn't a submenu.\n   *\n   * @param {Event} event\n   */\n  patchTopLevelKeydown(event) {\n    const { keyCode, target } = event;\n    const { LEFT } = keyCodes;\n\n    if (\n      LEFT === keyCode\n      && (\n        undefined === target.menuItem\n        || undefined === target.menuItem.previousSibling\n      )\n    ) {\n      this.menuButton.setExpandedState(false);\n      this.menuButton.controller.focus();\n    }\n  }\n\n  /**\n   * Patches incomplete keyboard navigation. These are separate lists, so not\n   * covered by the MenuItem's default keydown handlers:\n   *\n   * - Home key moves to last menu item, End key moves to last menu item.\n   *\n   * @param {Event} event\n   */\n  patchNavBarKeydown(event) {\n    const { keyCode } = event;\n    const { HOME, END } = keyCodes;\n\n    if (HOME === keyCode) {\n      event.preventDefault();\n      this.menuButton.firstItem.focus();\n    } else if (END === keyCode) {\n      event.preventDefault();\n      this.menuButton.lastItem.focus();\n    }\n  }\n\n  /**\n   * Patches incomplete keyboard navigation. These are separate lists, so not\n   * covered by the MenuItem's default keydown handlers:\n   *\n   * - Moves from Topics Menu to Primary Menu.\n   * - Recycles keyboard navigation from first to last item\n   *\n   * @param {Event} event\n   */\n  patchTopicsMenuFirstItem(event) {\n    const { keyCode } = event;\n    const { UP, DOWN } = keyCodes;\n\n    if (DOWN === keyCode && undefined !== this.primaryMenu.firstItem) {\n      event.preventDefault();\n      this.primaryMenu.firstItem.focus();\n    } else if (UP === keyCode) {\n      event.preventDefault();\n      this.menuButton.lastItem.focus();\n    }\n  }\n\n  /**\n   * Patches incomplete keyboard navigation. These are separate lists, so not\n   * covered by the MenuItem's default keydown handlers:\n   *\n   * - Moves from the Primary Menu to the Topics Menu.\n   *\n   * @param {Event} event\n   */\n  patchPrimaryMenuFirstItem(event) {\n    const { keyCode } = event;\n    const { UP } = keyCodes;\n\n    if (UP === keyCode && undefined !== this.topicsMenu.firstItem) {\n      event.preventDefault();\n      this.topicsMenu.firstItem.focus();\n    }\n  }\n\n  /**\n   * Patches incomplete keyboard navigation. These are separate lists, so not\n   * covered by the MenuItem's default keydown handlers:\n   *\n   * - Opens the menu and selects the appropriate item\n   *\n   * @param {Event} event\n   */\n  patchMenuButtonKeydown(event) {\n    const { keyCode } = event;\n    const { UP, DOWN } = keyCodes;\n\n    if ([UP, DOWN].includes(keyCode)) {\n      event.preventDefault();\n\n      // Open the menu if it's not already open.\n      if (! this.menuButton.state.expanded) {\n        this.menuButton.setExpandedState(true);\n      }\n\n      if (UP === keyCode) {\n        // Focus the last item.\n        this.menuButton.lastItem.focus();\n      } else {\n        // Focus the first item (down arrow).\n        this.menuButton.firstItem.focus();\n      }\n    }\n  }\n}\n","/**\n * Component for submitting Form Assembly forms.\n */\nclass FormAssemblySubmit {\n  /**\n   * Start the component.\n   */\n  constructor(form) {\n    if (null == form || ! (form instanceof HTMLFormElement)) {\n      throw new Error('Invalid form element.');\n    }\n\n    /**\n     * The form to act upon.\n     *\n     * @type {HTMLFormElement}\n     */\n    this.form = form;\n\n    // Bind class methods.\n    this.validateEmailInput = this.validateEmailInput.bind(this);\n    this.formSubmit = this.formSubmit.bind(this);\n    this.checkEmailInput = this.checkEmailInput.bind(this);\n    this.updateState = this.updateState.bind(this);\n    this.updateReadyState = this.updateReadyState.bind(this);\n\n    this.init();\n  }\n\n  /**\n   * Dispatch the `sn.formstatechange` event.\n   *\n   * @param {String} status The form status.\n   */\n  updateState(status) {\n    const event = new CustomEvent(\n      'sn.formstatechange',\n      {\n        bubbles: true,\n        composed: true,\n        detail: {\n          status,\n        },\n      },\n    );\n\n    this.form.dispatchEvent(event);\n  }\n\n  /**\n   * Update the form ready state and dispatch the `sn.formready` event.\n   */\n  updateReadyState() {\n    Object.defineProperty(\n      this.form,\n      'faReadyState',\n      { value: 'ready', configurable: true },\n    );\n\n    const event = new CustomEvent(\n      'sn.formready',\n      {\n        bubbles: true,\n        composed: true,\n        detail: {},\n      },\n    );\n\n    this.form.dispatchEvent(event);\n  }\n\n  /**\n   * Initialize the Form Assembly helper.\n   */\n  init() {\n    this.emailInput = this.form.querySelector('[name=\"email\"]');\n    this.nonceInput = this.form.querySelector('[name=\"nonce\"]');\n    this.submit = this.form.querySelector('[type=\"submit\"]');\n    this.honeyPot = this.form.querySelector('[name=\"client_key\"]');\n    this.formId = this.form.querySelector('[name=\"form_id\"]');\n    this.control = this.form.querySelector('[name=\"control\"]');\n\n    if (null != this.emailInput) {\n      this.form.addEventListener('submit', this.formSubmit);\n      this.emailInput.addEventListener('input', this.checkEmailInput);\n\n      // Signal that the form is ready.\n      this.updateReadyState();\n    }\n  }\n\n  /**\n   * Remove the invalid state when the input value is updated.\n   */\n  checkEmailInput() {\n    if (null !== this.emailInput.getAttribute('aria-invalid')) {\n      this.emailInput.removeAttribute('aria-invalid');\n    }\n  }\n\n  /**\n   * Ensure the email value is valid according to the input's `pattern` attribute.\n   *\n   * @returns {Boolean}\n   */\n  validateEmailInput() {\n    const { value, pattern } = this.emailInput;\n\n    const patternRegExp = new RegExp(pattern);\n    const fieldValue = value.trim();\n\n    return (0 < value.trim().length && patternRegExp.test(fieldValue));\n  }\n\n  /**\n   * Form submission.\n   *\n   * @param {Event} event The event object.\n   */\n  formSubmit(event) { // eslint-disable-line consistent-return\n    event.preventDefault();\n\n    if (! this.validateEmailInput()) {\n      this.emailInput.setAttribute('aria-invalid', 'true');\n      return false;\n    }\n\n    const { pathname, search } = window.location;\n\n    // Get hidden input values.\n    const honeyPotValue = (this.honeyPot?.value) ? this.honeyPot.value : '';\n    const nonceValue = this.nonceInput.value;\n    const formId = this.formId.value;\n    const control = this.control.value;\n\n    // Email is the only forward-facing input.\n    const emailValue = encodeURIComponent(this.emailInput.value);\n\n    // Disable and clear error state.\n    this.emailInput.removeAttribute('aria-invalid');\n    this.updateState('loading');\n\n    // Build request string.\n    const parts = [\n      `client_key=${honeyPotValue}`,\n      `control=${control}`,\n      `email=${emailValue}`,\n      `form_id=${formId}`,\n      `page=${pathname}`,\n    ];\n    const string = `${parts.join('&')}${search}`;\n\n    const request = new XMLHttpRequest();\n\n    // Make AJAX request.\n    request.open('POST', this.form.action, true);\n    request.setRequestHeader(\n      'Content-Type',\n      'application/x-www-form-urlencoded; charset=UTF-8',\n    );\n    request.setRequestHeader('X-WP-Nonce', nonceValue);\n    request.send(encodeURI(string));\n\n    // On completion.\n    request.onreadystatechange = () => {\n      if (request.readyState === XMLHttpRequest.DONE) {\n        const { status } = request;\n\n        if (0 === status || (200 <= status && 400 > status)) {\n          this.updateState('success');\n        } else {\n          this.updateState('error');\n        }\n      }\n    };\n  }\n}\n\n/**\n * Update classes to reflect the form state.\n *\n * @param {HTMLElement} element The element upon which state classes should be applied\n * @param {Object}      details The event details.\n */\nfunction setFormAssemblyState(element, { status }) {\n  const classes = {\n    loading: 'login-form--loading',\n    success: 'login-form--success',\n    error: 'login-form--error',\n  };\n\n  requestAnimationFrame(() => {\n    // Clear state classes.\n    if ('loading' === status) {\n      element.classList.remove(classes.success, classes.error);\n    } else {\n      element.classList.remove(classes.loading);\n    }\n\n    // Add the status class.\n    element.classList.add(classes[status]);\n  });\n}\n\nexport {\n  FormAssemblySubmit,\n  setFormAssemblyState,\n};\n","import { componentProvider } from 'js-component-framework';\nimport FormAssembly from './form-assembly';\nimport './form-assembly.scss';\n\nconst formAssemblyConfig = {\n  name: 'form-assembly',\n  component: FormAssembly,\n};\n\ncomponentProvider(formAssemblyConfig);\n","import { FormAssemblySubmit } from 'js/utils/FormAssemblySubmit';\n\n/**\n * Component for Form Assembly component.\n */\nexport default class FormAssembly {\n  /**\n   * Start the component.\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    // Bind class methods.\n    this.init = this.init.bind(this);\n\n    this.init();\n  }\n\n  /**\n   * Initialize a FormAssemblySubmit instance.\n   */\n  init() {\n    this.formAssemblySubmit = new FormAssemblySubmit(this.element);\n  }\n}\n","import { componentProvider } from 'js-component-framework';\nimport NewsletterSignup from './newsletter-signup';\nimport './newsletter-signup.scss';\n\nconst newsletterSignupConfig = {\n  name: 'newsletter-signup',\n  component: NewsletterSignup,\n};\n\ncomponentProvider(newsletterSignupConfig);\n","import { setFormAssemblyState } from 'js/utils/FormAssemblySubmit';\n\n/**\n * Component for Newsletter Signup CTA Module.\n */\nexport default class NewsletterSignup {\n  /**\n   * Start the component.\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    // Bind class methods.\n    this.init = this.init.bind(this);\n\n    this.init();\n  }\n\n  /**\n   * Initialize a FormAssemblySubmit instance with relevant options.\n   */\n  init() {\n    this.element.addEventListener('sn.formstatechange', (event) => {\n      setFormAssemblyState(this.element, event.detail);\n    });\n  }\n}\n","/**\n * Class for facilitating accessible components.\n */\nexport default class AriaComponent {\n  /**\n   * Create an AriaComponent.\n   * @constructor\n   */\n  constructor() {\n    /**\n     * Component state.\n     *\n     * @type {object}\n     */\n    this.state = {};\n\n    /**\n     * Save search characters\n     *\n     * @type {string}\n     */\n    this.searchString = '';\n\n    /**\n     * Saved reference elements.\n     *\n     * @type {Array}\n     */\n    this.referenceElements = [];\n\n    // Bind class methods.\n    this.setState = this.setState.bind(this);\n    this.getState = this.getState.bind(this);\n    this.setSelfReference = this.setSelfReference.bind(this);\n    this.warnDeprecated = this.warnDeprecated.bind(this);\n  }\n\n  /**\n   * Set component state.\n   *\n   * @param {object} newState The new state to merge with existing state.\n   */\n  setState(newState) {\n    Object.assign(this.state, newState);\n\n    if ('function' === typeof this.stateWasUpdated) {\n      this.stateWasUpdated();\n    }\n  }\n\n  /**\n   * Set a reference to the class instance on the element upon which the class\n   * is instantiated.\n   *\n   * @param {array} elements An array of elements upon which to add a reference to `this`.\n   */\n  setSelfReference(elements) {\n    const referenceElements = [...elements].map((element) => {\n      Object.defineProperty(\n        element,\n        this.componentName.toLowerCase(),\n        { value: this, configurable: true }\n      );\n\n      return element;\n    });\n\n    this.referenceElements = [...this.referenceElements, ...referenceElements];\n  }\n\n  /**\n   * Delete self references from component elements.\n   */\n  deleteSelfReferences() {\n    this.referenceElements.forEach((element) => {\n      delete element[this.componentName.toLowerCase()];\n    });\n  }\n\n  /**\n   * Return the current component state.\n   *\n   * @return {object}\n   */\n  getState() {\n    return this.state;\n  }\n\n  /**\n   * Warn about deprecated config properties.\n   *\n   * @param {string} name The name of the class instance.\n   * @param {string} unsupported The deprecated config value.\n   * @param {string} supported The newly supported config value, if any.\n   */\n  warnDeprecated(unsupported, supported = false) {\n    const use = supported ? `Use ${supported} instead.` : '';\n    // eslint-disable-next-line no-console, max-len\n    console.warn(\n      `${this.componentName}:`,\n      `${unsupported} is deprecated.`,\n      `${use}`\n    );\n  }\n}\n","/**\n * Event keyCode values mapped to a key name.\n */\nconst keyCodes = Object.freeze({\n  TAB: 9,\n  RETURN: 13,\n  ESC: 27,\n  SPACE: 32,\n  END: 35,\n  HOME: 36,\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n});\n\nexport default keyCodes;\n","/**\n * Create an array from a value.\n *\n * @param {Mixed} maybeAnArray An HTMLElement, NodeList, or Array of elements.\n */\nfunction toArray(maybeAnArray) {\n  if (Array.isArray(maybeAnArray)) {\n    return maybeAnArray;\n  }\n\n  let shouldBeAnArray = [];\n\n  if (maybeAnArray instanceof HTMLElement) {\n    // Convert element(s) to an Array.\n    shouldBeAnArray = new Array(maybeAnArray);\n  } else if (\n    maybeAnArray instanceof NodeList\n    || maybeAnArray instanceof HTMLCollection\n  ) {\n    // Array.from(maybeAnArray);\n    shouldBeAnArray = Array.prototype.slice.call(maybeAnArray, 0);\n  }\n\n  return shouldBeAnArray;\n}\n\n/**\n * Remove the tabIndex attribute from all elements.\n *\n * @param {Mixed} items An HTMLElement, NodeList, or array of elements.\n */\nfunction tabIndexAllow(items) {\n  const allowedElements = Array.isArray(items) ? items : toArray(items);\n\n  allowedElements.forEach((item) => {\n    item.removeAttribute('tabindex');\n  });\n}\n\n/**\n * Add a negative tabIndex attribute to all elements.\n *\n * @param {Mixed} items An HTMLElement, NodeList, or Array of elements.\n */\nfunction tabIndexDeny(items) {\n  const deniedElements = Array.isArray(items) ? items : toArray(items);\n\n  deniedElements.forEach((item) => {\n    item.setAttribute('tabindex', '-1');\n  });\n}\n\n/**\n * Manage items' tabindex.\n *\n * @param {NodeList|Array}             items The items whose tabindex may need updating.\n * @param {HTMLElement|NodeList|Array} allow The item to which we'll allow tabbing.\n */\nfunction rovingTabIndex(items, allow) {\n  const allowedElements = Array.isArray(allow) ? allow : toArray(allow);\n  const allItems = Array.isArray(items) ? items : toArray(items);\n\n  tabIndexAllow(allowedElements);\n\n  if (0 < allItems.length) {\n    const deniedElements = allItems.filter((item) => (\n      ! allowedElements.includes(item)\n    ));\n    tabIndexDeny(deniedElements);\n  }\n}\n\nexport {\n  rovingTabIndex,\n  tabIndexAllow,\n  tabIndexDeny,\n  toArray,\n};\n","import { AriaComponent } from 'aria-components';\nimport {\n  interactiveChildren,\n  keyCodes,\n  getFirstAndLastItems,\n  tabIndexDeny,\n  tabIndexAllow,\n  setUniqueId,\n} from 'aria-components/utils';\nimport toArray from 'js/utils/toArray';\n\n/**\n * Class to set up a programmatic Dialog element to be displayed without user interaction.\n */\nexport default class ProgrammaticDialog extends AriaComponent {\n  /**\n   * Create a Dialog.\n   * @constructor\n   *\n   * @param {object} config The config object.\n   */\n  constructor(target, config) {\n    super(config);\n\n    // A target element is required.\n    if (null == target) {\n      throw new Error('Configuration error: A target element is required.');\n    }\n\n    /**\n     * The dialog element.\n     *\n     * @type {HTMLElement}\n     */\n    this.target = target;\n\n    /**\n     * The component name.\n     *\n     * @type {string}\n     */\n    this.componentName = 'ProgrammaticDialog';\n\n    /**\n     * Options shape.\n     *\n     * @type {object}\n     */\n    const options = {\n      /**\n       * The element(s) to be hidden when the Dialog is visible. The elements\n       * wrapping all site content with the sole exception of the dialog element.\n       *\n       * @type {HTMLElement|NodeList|Array}\n       */\n      content: [],\n\n      /**\n       * Callback to run after the component initializes.\n       *\n       * @callback initCallback\n       */\n      onInit: () => {},\n\n      /**\n       * Callback to run after component state is updated.\n       *\n       * @callback stateChangeCallback\n       */\n      onStateChange: () => {},\n\n      /**\n       * Callback to run after the component is destroyed.\n       *\n       * @callback destroyCallback\n       */\n      onDestroy: () => {},\n    };\n\n    // Merge config options with defaults and save all as instance properties.\n    Object.assign(this, options, config);\n\n    // Bind class methods\n    this.init = this.init.bind(this);\n    this.handleTargetKeydown = this.handleTargetKeydown.bind(this);\n    this.hideOnOutsideClick = this.hideOnOutsideClick.bind(this);\n    this.handleKeydownEsc = this.handleKeydownEsc.bind(this);\n    this.show = this.show.bind(this);\n    this.hide = this.hide.bind(this);\n    this.destroy = this.destroy.bind(this);\n    this.stateWasUpdated = this.stateWasUpdated.bind(this);\n    this.setInteractiveChildren = this.setInteractiveChildren.bind(this);\n    this.setDialogController = this.setDialogController.bind(this);\n    this.controllerClick = this.controllerClick.bind(this);\n\n    /*\n     * Initialize the component.\n     */\n    this.init();\n  }\n\n  /**\n   * Set the Dialog controller.\n   *\n   * By default, the Dialog will not have a controller; use this method on an\n   * instance to add a controller.\n   */\n  setDialogController(controller) {\n    this.controller = controller;\n    super.setSelfReference([this.controller]);\n\n    /**\n     * Check if the controller is a button, but only if it doesn't already have\n     * a role attribute, since we'll be adding the role and allowing focus.\n     *\n     * @type {bool}\n     */\n    this.controllerIsNotAButton = (\n      'BUTTON' !== this.controller.nodeName\n      && null === this.controller.getAttribute('role')\n    );\n\n    /*\n     * Use the button role on non-button elements.\n     */\n    if (this.controllerIsNotAButton) {\n      // https://www.w3.org/TR/wai-aria-1.1/#button\n      this.controller.setAttribute('role', 'button');\n      this.controller.setAttribute('tabindex', '0');\n    }\n\n    this.controller.setAttribute('aria-expanded', 'false');\n\n    this.controller.addEventListener('click', this.controllerClick);\n    this.controller.addEventListener('keydown', this.controllerKeydown);\n  }\n\n  /**\n   * Collect the Dialog's interactive child elements.\n   */\n  setInteractiveChildren() {\n    this.interactiveChildElements = interactiveChildren(this.target);\n\n    const [\n      firstInteractiveChild,\n      lastInteractiveChild,\n    ] = getFirstAndLastItems(this.interactiveChildElements);\n\n    // Save as instance properties.\n    this.firstInteractiveChild = firstInteractiveChild;\n    this.lastInteractiveChild = lastInteractiveChild;\n  }\n\n  /**\n   * Set the component's DOM attributes and event listeners.\n   */\n  init() {\n    // Get the content items if none are provided.\n    if (0 === this.content.length || null == this.content) {\n      this.content = Array.from(document.body.children)\n        .filter((child) => ! child.contains(this.target));\n    } else {\n      this.content = toArray(this.content);\n    }\n\n    // If no content is found.\n    if (0 === this.content.length) {\n      // eslint-disable-next-line max-len\n      throw new Error('Configuration error: The Dialog target should not be within the main site content.');\n    }\n\n    /*\n     * A reference to the class instance added to the target element to enable\n     * external interactions with this instance.\n     */\n    super.setSelfReference([this.target]);\n\n    /*\n     * Collect the Dialog's interactive child elements. This is an initial pass\n     * to ensure values exists, but the interactive children will be collected\n     * each time the dialog opens, in case the dialog's contents change.\n     */\n    this.setInteractiveChildren();\n\n    // Focusable content should initially have tabindex='-1'.\n    tabIndexDeny(this.interactiveChildElements);\n\n    // Add target attribute.\n    setUniqueId(this.target);\n\n    /*\n     * Set the taget as hidden by default. Using the `aria-hidden` attribute,\n     * rather than the `hidden` attribute, means authors must hide the target\n     * element via CSS.\n     */\n    this.target.setAttribute('aria-hidden', 'true');\n    this.target.setAttribute('hidden', '');\n\n    // Set additional attributes.\n    this.target.setAttribute('role', 'dialog');\n    this.target.setAttribute('aria-modal', 'true');\n\n    // Add event listeners.\n    this.target.addEventListener('keydown', this.handleTargetKeydown);\n\n    /**\n     * Set initial state.\n     *\n     * @type {object}\n     */\n    this.state = { expanded: false };\n\n    /* Run {initCallback} */\n    this.onInit.call(this);\n  }\n\n  /**\n   * Update element attributes and event listeners when the Popup's state changes.\n   * @todo Set target attributes and update roving tabindex.\n   *\n   * @param {Object} state The component state.\n   */\n  stateWasUpdated() {\n    const { expanded } = this.state;\n    const contentLength = this.content.length;\n\n    this.setInteractiveChildren();\n\n    if (expanded) {\n      // Allow focus on the target element.\n      this.target.setAttribute('tabindex', '0');\n\n      // Hide the outside content.\n      for (let i = 0; i < contentLength; i += 1) {\n        this.content[i].setAttribute('aria-hidden', 'true');\n      }\n\n      // Update target element.\n      this.target.setAttribute('aria-hidden', 'false');\n      this.target.removeAttribute('hidden');\n\n      if (null != this.controller) {\n        this.controller.setAttribute('aria-expanded', 'true');\n      }\n\n      tabIndexAllow(this.interactiveChildElements);\n\n      this.target.focus();\n    } else {\n      // Disallow focus on the target element.\n      this.target.setAttribute('tabindex', '-1');\n\n      // Un-hide the outside content.\n      for (let i = 0; i < contentLength; i += 1) {\n        this.content[i].removeAttribute('aria-hidden');\n      }\n\n      // Update target element.\n      this.target.setAttribute('aria-hidden', 'true');\n      this.target.setAttribute('hidden', '');\n\n      // Focusable content should have tabindex='-1' or be removed from the DOM.\n      tabIndexDeny(this.interactiveChildElements);\n\n      if (null != this.controller) {\n        this.controller.setAttribute('aria-expanded', 'false');\n        this.controller.focus();\n      }\n    }\n\n    /* Run {stateChangeCallback} */\n    this.onStateChange.call(this, this.state);\n  }\n\n  /**\n   * Close the dialog on when users click outside of the Dialog element.\n   *\n   * By default, the Dialog will not close on outside click. This is by design,\n   * but can be enabled manually by including an event listener with this method\n   * as the callback.\n   *   document.body.addEventListener('click', dialog.hideOnOutsideClick)\n   *\n   * @param {Event} event The Event object.\n   */\n  hideOnOutsideClick(event) {\n    const { expanded } = this.state;\n    const { target: clicked } = event;\n\n    if (\n      expanded && ! this.target.contains(clicked)\n      && (null != this.controller && ! this.controller.contains(clicked))\n    ) {\n      this.hide();\n    }\n  }\n\n  /**\n   * Close the dialog on ESC key press.\n   *\n   * By default, the Dialog will not close with the ESC key. This is by design,\n   * but can be enabled manually by including an event listener with this method\n   * as the callback.\n   *   document.body.addEventListener('keydown', dialog.handleKeydownEsc)\n   *\n   * @param {Event} event The Event object.\n   */\n  handleKeydownEsc(event) {\n    const { ESC } = keyCodes;\n    const { keyCode } = event;\n\n    if (ESC === keyCode) {\n      this.hide();\n    }\n  }\n\n  /**\n   * Trap key tabs within the dialog.\n   *\n   * @param {Event} event The Event object.\n   */\n  handleTargetKeydown(event) {\n    const { TAB } = keyCodes;\n    const { keyCode, shiftKey } = event;\n    const { expanded } = this.state;\n\n    if (expanded && keyCode === TAB) {\n      const { activeElement } = document;\n\n      if (shiftKey && this.firstInteractiveChild === activeElement) {\n        event.preventDefault();\n        /*\n         * Move back from the first interactive child element to the last\n         * interactive child element\n         */\n        this.lastInteractiveChild.focus();\n      } else if (! shiftKey && this.lastInteractiveChild === activeElement) {\n        event.preventDefault();\n        /*\n         * Move forward from the last interactive child element to the first\n         * interactive child element.\n         */\n        this.firstInteractiveChild.focus();\n      }\n    }\n  }\n\n  /**\n   * Handle controller keydown events to patch in button behaviors for\n   * non-button elements.\n   *\n   * @param {Event} event The event object.\n   */\n  controllerKeydown(event) {\n    const {\n      SPACE,\n      RETURN,\n    } = keyCodes;\n    const { keyCode } = event;\n\n    if ([SPACE, RETURN].includes(keyCode)) {\n      event.preventDefault();\n\n      /*\n       * Treat the Spacebar and Return keys as clicks in case the controller is\n       * not a <button>.\n       */\n      this.show();\n    }\n  }\n\n  /**\n   * Handle controller clicks.\n   *\n   * @param {Event} event The event object.\n   */\n  controllerClick(event) {\n    event.preventDefault();\n    this.show();\n  }\n\n  /**\n   * Destroy the Dialog and Popup.\n   */\n  destroy() {\n    // Remove the references to the class instance.\n    this.deleteSelfReferences();\n\n    // Destroy the Dialog Popup.\n    if (this.target.getAttribute('id').includes('id_')) {\n      this.target.removeAttribute('id');\n    }\n\n    // Remove target attributes.\n    this.target.removeAttribute('aria-hidden');\n    this.target.removeAttribute('hidden');\n    this.target.removeAttribute('tabindex');\n    this.target.removeAttribute('role');\n    this.target.removeAttribute('aria-modal');\n\n    // Remove tabindex attribute.\n    tabIndexAllow(this.interactiveChildElements);\n\n    // Remove the `aria-hidden` attribute from the content wrapper.\n    const contentLength = this.content.length;\n    for (let i = 0; i < contentLength; i += 1) {\n      this.content[i].removeAttribute('aria-hidden');\n    }\n\n    // Remove event listeners.\n    this.target.removeEventListener('keydown', this.handleTargetKeydown);\n\n    if (null != this.controller) {\n      this.controller.removeAttribute('aria-expanded');\n\n      // Remove role and tabindex added to a link controller.\n      if (this.controllerIsNotAButton) {\n        this.controller.removeAttribute('role');\n        this.controller.removeAttribute('tabindex');\n      }\n\n      this.controller.removeEventListener('click', this.controllerClick);\n      this.controller.removeEventListener('keydown', this.controllerKeydown);\n    }\n\n    // Reset initial state.\n    this.state = { expanded: false };\n\n    /* Run {destroyCallback} */\n    this.onDestroy.call(this);\n  }\n\n  /**\n   * Show the Dialog.\n   */\n  show() {\n    this.setState({ expanded: true });\n  }\n\n  /**\n   * Hide the Dialog.\n   */\n  hide() {\n    this.setState({ expanded: false });\n  }\n}\n","/**\n * Collect all interactive child elements.\n *\n * @param {HTMLElement} target The element in which to search for interactive children.\n *\n * @return {Array}\n */\nfunction interactiveChildren(target) {\n  // List of possible active child element selectors\n  const selectors = [\n    'a[href]',\n    'area[href]',\n    'input:not([disabled])',\n    'select:not([disabled])',\n    'textarea:not([disabled])',\n    'button:not([disabled])',\n    'iframe',\n    'object',\n    'embed',\n    '[contenteditable]',\n    '[tabindex]:not([tabindex^=\"-\"])',\n  ].join(',');\n\n  const interactiveElements = target.querySelectorAll(selectors);\n\n  return Array.prototype.slice.call(interactiveElements);\n}\n\nexport default interactiveChildren;\n","import { toArray } from './rovingTabIndex';\n\n/**\n * Get the first and last items from and Array or NodeList.\n *\n * @param  {array|NodeList} items The Array or NodeList from which to retrieve the items.\n * @return {array}                The first and last items.\n */\nexport default function getFirstAndLastItems(items) {\n  // Ensure we're working with an Array;\n  const arrayOfItems = toArray(items);\n  const lastIndex = (arrayOfItems.length - 1);\n\n  // Get the first and last items by index.\n  const {\n    0: firstItem,\n    [lastIndex]: lastItem,\n  } = arrayOfItems;\n\n  return [firstItem, lastItem];\n}\n","/**\n * Create an array from a DOM Node or NodeList.\n *\n * @param {Mixed} maybeAnArray An HTMLElement, NodeList, or Array of elements.\n */\nexport default function toArray(maybeAnArray) {\n  if (Array.isArray(maybeAnArray)) {\n    return maybeAnArray;\n  }\n\n  if (maybeAnArray instanceof HTMLElement) {\n    // Convert a single element to an Array.\n    return new Array(maybeAnArray);\n  }\n\n  if (\n    maybeAnArray instanceof NodeList\n    || maybeAnArray instanceof HTMLCollection\n  ) {\n    return Array.from(maybeAnArray);\n  }\n\n  return [];\n}\n","/**\n * Create a passably unique `id` attribute.\n *\n * @param {Number} radix An optional base for converting the Number to a String.\n *\n * @returns {String}\n */\nfunction getUniqueId(radix = 36) {\n  const [, attr] = Math.random().toString(radix).split('.');\n  return `id_${attr}`;\n}\n\n/**\n * Set the ID attribute if the element does not already have one.\n *\n * @param {HTMLElement} element the element upon which to act.\n */\nfunction setUniqueId(element) {\n  if (null !== element && '' === element.id) {\n    element.setAttribute('id', getUniqueId());\n  }\n}\n\nexport {\n  getUniqueId,\n  setUniqueId,\n};\n","/**\n * The restricted content cookie name, dependent on the current site.\n */\nexport default `${amScripts.global.sitePrefix}-restricted-content-access`;\n","import { componentProvider } from 'js-component-framework';\nimport ModalSignup from './modal-signup';\nimport './modal-signup.scss';\n\n/*\n * This component is imported in the child theme for the Classroom Questions\n * fauxwall. Rather than removing outright, consider moving to the child theme.\n */\nconst modalSignupConfig = {\n  component: ModalSignup,\n  name: 'modal-signup',\n  querySelector: {\n    form: '.login-form',\n  },\n};\n\ncomponentProvider(modalSignupConfig);\n","import Cookies from 'js-cookie';\nimport { setFormAssemblyState } from 'js/utils/FormAssemblySubmit';\nimport ProgrammaticDialog from 'js/utils/ProgrammaticDialog';\nimport cookieName from '../restrictedContentCookieName';\n\n/**\n * Component for Modal Signup Form.\n */\nexport default class ModalSignup {\n  /**\n   * Start the component.\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    // Bind class methods.\n    this.init = this.init.bind(this);\n    this.handleFormState = this.handleFormState.bind(this);\n\n    if ('true' !== Cookies.get(cookieName)) {\n      const { form } = this.children;\n\n      if ('ready' === form?.faReadyState) {\n        this.init();\n      } else {\n        form.addEventListener('sn.formready', this.init);\n      }\n    }\n  }\n\n  /**\n   * Handle form submission state.\n   *\n   * @param {Event} event The event object.\n   */\n  handleFormState(event) {\n    const { detail = {} } = event;\n    const { status = '' } = detail;\n\n    setFormAssemblyState(this.element, detail);\n\n    if ('success' === status) {\n      Cookies.set(cookieName, true, { expires: 30 });\n      this.dialog.hide();\n    }\n  }\n\n  /**\n   * Initialize the FormAssemblySubmit instance.\n   */\n  init() {\n    const { form } = this.children;\n    this.dialog = new ProgrammaticDialog(this.element);\n\n    // Show the Dialog by default.\n    this.dialog.show();\n\n    form.addEventListener('sn.formstatechange', this.handleFormState);\n  }\n}\n","import { componentProvider } from 'js-component-framework';\nimport getFormattedClassnames from 'utils/getFormattedClassnames';\nimport CookieBanner from './cookie-banner';\nimport './cookie-banner.scss';\n\nconst cookieClassnames = sciencenewsClassnames['cookie-banner'];\nconst cookieSelectors = getFormattedClassnames(cookieClassnames);\n\nconst cookieBannerConfig = {\n  name: 'cookie-banner',\n  component: CookieBanner,\n  querySelector: {\n    button: cookieSelectors.button,\n  },\n};\n\ncomponentProvider(cookieBannerConfig);\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n  return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n  if (target === void 0) {\n    target = {};\n  }\n  if (src === void 0) {\n    src = {};\n  }\n  Object.keys(src).forEach(key => {\n    if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n      extend(target[key], src[key]);\n    }\n  });\n}\nconst ssrDocument = {\n  body: {},\n  addEventListener() {},\n  removeEventListener() {},\n  activeElement: {\n    blur() {},\n    nodeName: ''\n  },\n  querySelector() {\n    return null;\n  },\n  querySelectorAll() {\n    return [];\n  },\n  getElementById() {\n    return null;\n  },\n  createEvent() {\n    return {\n      initEvent() {}\n    };\n  },\n  createElement() {\n    return {\n      children: [],\n      childNodes: [],\n      style: {},\n      setAttribute() {},\n      getElementsByTagName() {\n        return [];\n      }\n    };\n  },\n  createElementNS() {\n    return {};\n  },\n  importNode() {\n    return null;\n  },\n  location: {\n    hash: '',\n    host: '',\n    hostname: '',\n    href: '',\n    origin: '',\n    pathname: '',\n    protocol: '',\n    search: ''\n  }\n};\nfunction getDocument() {\n  const doc = typeof document !== 'undefined' ? document : {};\n  extend(doc, ssrDocument);\n  return doc;\n}\nconst ssrWindow = {\n  document: ssrDocument,\n  navigator: {\n    userAgent: ''\n  },\n  location: {\n    hash: '',\n    host: '',\n    hostname: '',\n    href: '',\n    origin: '',\n    pathname: '',\n    protocol: '',\n    search: ''\n  },\n  history: {\n    replaceState() {},\n    pushState() {},\n    go() {},\n    back() {}\n  },\n  CustomEvent: function CustomEvent() {\n    return this;\n  },\n  addEventListener() {},\n  removeEventListener() {},\n  getComputedStyle() {\n    return {\n      getPropertyValue() {\n        return '';\n      }\n    };\n  },\n  Image() {},\n  Date() {},\n  screen: {},\n  setTimeout() {},\n  clearTimeout() {},\n  matchMedia() {\n    return {};\n  },\n  requestAnimationFrame(callback) {\n    if (typeof setTimeout === 'undefined') {\n      callback();\n      return null;\n    }\n    return setTimeout(callback, 0);\n  },\n  cancelAnimationFrame(id) {\n    if (typeof setTimeout === 'undefined') {\n      return;\n    }\n    clearTimeout(id);\n  }\n};\nfunction getWindow() {\n  const win = typeof window !== 'undefined' ? window : {};\n  extend(win, ssrWindow);\n  return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import Cookies from 'js-cookie';\n\n/**\n * CookieBanner component.\n */\nexport default class CookieBanner {\n  /**\n   * Start the component\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    // Bind class methods.\n    this.init = this.init.bind(this);\n    this.handleButtonClick = this.handleButtonClick.bind(this);\n\n    const { sitePrefix } = amScripts.global;\n    const prefix = ('snhs' === sitePrefix) ? 'sn' : sitePrefix;\n\n    /**\n     * The cookie name.\n     *\n     * @type {String}\n     */\n    this.cookieName = `${prefix}-cookies-accepted`;\n\n    if ('true' !== Cookies.get(this.cookieName)) {\n      this.init();\n    }\n  }\n\n  /**\n   * Set the cookie and hide the banner when the \"Continue\" button is clicked.\n   */\n  handleButtonClick() {\n    Cookies.set(this.cookieName, true, { expires: 365 });\n\n    this.element.setAttribute('hidden', '');\n    this.element.setAttribute('aria-hidden', 'true');\n  }\n\n  /**\n   * Initialize the component.\n   */\n  init() {\n    const { button } = this.children;\n\n    // Show the cookie banner.\n    this.element.removeAttribute('hidden');\n    this.element.removeAttribute('aria-hidden');\n\n    button.addEventListener('click', this.handleButtonClick);\n  }\n}\n","import { componentProvider } from 'js-component-framework';\nimport printPowerWords from './print-power-words';\n\n/**\n *\n * @type {{name: string, querySelector: {container: string, button: string}, class: printPowerWords}}\n */\nconst printPowerWordsConfig = {\n  name: 'print-power-words',\n  component: printPowerWords,\n  querySelector: {\n    sectionContainer: '.power-words-container',\n    ppwButton: '.print-power-words-btn',\n  },\n};\n\ncomponentProvider(printPowerWordsConfig);\n","/**\n * Print Power Words Class file.\n *\n * @package Science News\n */\n\n/**\n * Print Power Words Component class.\n */\nexport default class printPowerWords {\n  /**\n   * Required constructor class.\n   *\n   * @param config\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    // Save children as instance properties.\n    Object.assign(this, this.children);\n\n    // Bind class methods.\n    this.openPopup = this.openPopup.bind(this);\n\n    this.ppwContent = this.children.sectionContainer.innerHTML;\n\n    this.init();\n  }\n\n  /**\n   * Do the things!\n   */\n  init() {\n    this.children.ppwButton.addEventListener('click', this.openPopup);\n  }\n\n  /**\n   * Callback for click event on print button.\n   */\n  openPopup(e) {\n    e.preventDefault();\n\n    /* eslint-disable max-len, no-restricted-globals */\n    const win = window.open('', 'Title', `toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=800,height=800,top=\"${(screen.height - 400)}\",left=\"${(screen.width - 840)}\"`);\n    /* eslint-enable */\n\n    win.document\n      .body.innerHTML = this.ppwContent;\n\n    win.print();\n  }\n}\n","import { componentProvider } from 'js-component-framework';\nimport FormAssemblyForm from './form-assembly-form';\nimport './form-assembly-form.scss';\n\nconst formAssemblyFormConfig = {\n  name: 'form-assembly-form',\n  component: FormAssemblyForm,\n};\n\ncomponentProvider(formAssemblyFormConfig);\n","import { setFormAssemblyState } from 'js/utils/FormAssemblySubmit';\n\n/**\n * Component for the Form Assembly Form block.\n */\nexport default class FormAssemblyForm {\n  /**\n   * Start the component.\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    // Bind class methods.\n    this.init = this.init.bind(this);\n\n    this.init();\n  }\n\n  /**\n   * Initialize a FormAssemblySubmit instance with relevant options.\n   */\n  init() {\n    this.element.addEventListener('sn.formstatechange', (event) => {\n      setFormAssemblyState(this.element, event.detail);\n    });\n  }\n}\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes) {\n  if (classes === void 0) {\n    classes = '';\n  }\n  return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n  const object = obj;\n  Object.keys(object).forEach(key => {\n    try {\n      object[key] = null;\n    } catch (e) {\n      // no getter for object\n    }\n    try {\n      delete object[key];\n    } catch (e) {\n      // something got wrong\n    }\n  });\n}\nfunction nextTick(callback, delay) {\n  if (delay === void 0) {\n    delay = 0;\n  }\n  return setTimeout(callback, delay);\n}\nfunction now() {\n  return Date.now();\n}\nfunction getComputedStyle(el) {\n  const window = getWindow();\n  let style;\n  if (window.getComputedStyle) {\n    style = window.getComputedStyle(el, null);\n  }\n  if (!style && el.currentStyle) {\n    style = el.currentStyle;\n  }\n  if (!style) {\n    style = el.style;\n  }\n  return style;\n}\nfunction getTranslate(el, axis) {\n  if (axis === void 0) {\n    axis = 'x';\n  }\n  const window = getWindow();\n  let matrix;\n  let curTransform;\n  let transformMatrix;\n  const curStyle = getComputedStyle(el);\n  if (window.WebKitCSSMatrix) {\n    curTransform = curStyle.transform || curStyle.webkitTransform;\n    if (curTransform.split(',').length > 6) {\n      curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n    }\n    // Some old versions of Webkit choke when 'none' is passed; pass\n    // empty string instead in this case\n    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n  } else {\n    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n    matrix = transformMatrix.toString().split(',');\n  }\n  if (axis === 'x') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n    // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n    // Normal Browsers\n    else curTransform = parseFloat(matrix[4]);\n  }\n  if (axis === 'y') {\n    // Latest Chrome and webkits Fix\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n    // Crazy IE10 Matrix\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n    // Normal Browsers\n    else curTransform = parseFloat(matrix[5]);\n  }\n  return curTransform || 0;\n}\nfunction isObject(o) {\n  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n  // eslint-disable-next-line\n  if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n    return node instanceof HTMLElement;\n  }\n  return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n  const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n  const noExtend = ['__proto__', 'constructor', 'prototype'];\n  for (let i = 1; i < arguments.length; i += 1) {\n    const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n    if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n      const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n      for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n        const nextKey = keysArray[nextIndex];\n        const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n        if (desc !== undefined && desc.enumerable) {\n          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n            to[nextKey] = {};\n            if (nextSource[nextKey].__swiper__) {\n              to[nextKey] = nextSource[nextKey];\n            } else {\n              extend(to[nextKey], nextSource[nextKey]);\n            }\n          } else {\n            to[nextKey] = nextSource[nextKey];\n          }\n        }\n      }\n    }\n  }\n  return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n  el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n  let {\n    swiper,\n    targetPosition,\n    side\n  } = _ref;\n  const window = getWindow();\n  const startPosition = -swiper.translate;\n  let startTime = null;\n  let time;\n  const duration = swiper.params.speed;\n  swiper.wrapperEl.style.scrollSnapType = 'none';\n  window.cancelAnimationFrame(swiper.cssModeFrameID);\n  const dir = targetPosition > startPosition ? 'next' : 'prev';\n  const isOutOfBound = (current, target) => {\n    return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n  };\n  const animate = () => {\n    time = new Date().getTime();\n    if (startTime === null) {\n      startTime = time;\n    }\n    const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n    const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n    let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      currentPosition = targetPosition;\n    }\n    swiper.wrapperEl.scrollTo({\n      [side]: currentPosition\n    });\n    if (isOutOfBound(currentPosition, targetPosition)) {\n      swiper.wrapperEl.style.overflow = 'hidden';\n      swiper.wrapperEl.style.scrollSnapType = '';\n      setTimeout(() => {\n        swiper.wrapperEl.style.overflow = '';\n        swiper.wrapperEl.scrollTo({\n          [side]: currentPosition\n        });\n      });\n      window.cancelAnimationFrame(swiper.cssModeFrameID);\n      return;\n    }\n    swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n  };\n  animate();\n}\nfunction getSlideTransformEl(slideEl) {\n  return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n  if (selector === void 0) {\n    selector = '';\n  }\n  const children = [...element.children];\n  if (element instanceof HTMLSlotElement) {\n    children.push(...element.assignedElements());\n  }\n  if (!selector) {\n    return children;\n  }\n  return children.filter(el => el.matches(selector));\n}\nfunction elementIsChildOf(el, parent) {\n  const isChild = parent.contains(el);\n  if (!isChild && parent instanceof HTMLSlotElement) {\n    const children = [...parent.assignedElements()];\n    return children.includes(el);\n  }\n  return isChild;\n}\nfunction showWarning(text) {\n  try {\n    console.warn(text);\n    return;\n  } catch (err) {\n    // err\n  }\n}\nfunction createElement(tag, classes) {\n  if (classes === void 0) {\n    classes = [];\n  }\n  const el = document.createElement(tag);\n  el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n  return el;\n}\nfunction elementOffset(el) {\n  const window = getWindow();\n  const document = getDocument();\n  const box = el.getBoundingClientRect();\n  const body = document.body;\n  const clientTop = el.clientTop || body.clientTop || 0;\n  const clientLeft = el.clientLeft || body.clientLeft || 0;\n  const scrollTop = el === window ? window.scrollY : el.scrollTop;\n  const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n  return {\n    top: box.top + scrollTop - clientTop,\n    left: box.left + scrollLeft - clientLeft\n  };\n}\nfunction elementPrevAll(el, selector) {\n  const prevEls = [];\n  while (el.previousElementSibling) {\n    const prev = el.previousElementSibling; // eslint-disable-line\n    if (selector) {\n      if (prev.matches(selector)) prevEls.push(prev);\n    } else prevEls.push(prev);\n    el = prev;\n  }\n  return prevEls;\n}\nfunction elementNextAll(el, selector) {\n  const nextEls = [];\n  while (el.nextElementSibling) {\n    const next = el.nextElementSibling; // eslint-disable-line\n    if (selector) {\n      if (next.matches(selector)) nextEls.push(next);\n    } else nextEls.push(next);\n    el = next;\n  }\n  return nextEls;\n}\nfunction elementStyle(el, prop) {\n  const window = getWindow();\n  return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n  let child = el;\n  let i;\n  if (child) {\n    i = 0;\n    // eslint-disable-next-line\n    while ((child = child.previousSibling) !== null) {\n      if (child.nodeType === 1) i += 1;\n    }\n    return i;\n  }\n  return undefined;\n}\nfunction elementParents(el, selector) {\n  const parents = []; // eslint-disable-line\n  let parent = el.parentElement; // eslint-disable-line\n  while (parent) {\n    if (selector) {\n      if (parent.matches(selector)) parents.push(parent);\n    } else {\n      parents.push(parent);\n    }\n    parent = parent.parentElement;\n  }\n  return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n  function fireCallBack(e) {\n    if (e.target !== el) return;\n    callback.call(el, e);\n    el.removeEventListener('transitionend', fireCallBack);\n  }\n  if (callback) {\n    el.addEventListener('transitionend', fireCallBack);\n  }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n  const window = getWindow();\n  if (includeMargins) {\n    return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n  }\n  return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n  return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\nfunction getRotateFix(swiper) {\n  return v => {\n    if (Math.abs(v) > 0 && swiper.browser && swiper.browser.need3dFix && Math.abs(v) % 90 === 0) {\n      return v + 0.001;\n    }\n    return v;\n  };\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, getSlideTransformEl as g, elementIndex as h, classesToTokens as i, getTranslate as j, elementTransitionEnd as k, isObject as l, makeElementsArray as m, nextTick as n, getRotateFix as o, elementStyle as p, elementNextAll as q, elementPrevAll as r, setCSSProperty as s, animateCSSModeScroll as t, showWarning as u, elementIsChildOf as v, extend as w, deleteProps as x };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, p as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, q as elementNextAll, r as elementPrevAll, j as getTranslate, t as animateCSSModeScroll, n as nextTick, u as showWarning, c as createElement, v as elementIsChildOf, d as now, w as extend, h as elementIndex, x as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n  const window = getWindow();\n  const document = getDocument();\n  return {\n    smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n  };\n}\nfunction getSupport() {\n  if (!support) {\n    support = calcSupport();\n  }\n  return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n  let {\n    userAgent\n  } = _temp === void 0 ? {} : _temp;\n  const support = getSupport();\n  const window = getWindow();\n  const platform = window.navigator.platform;\n  const ua = userAgent || window.navigator.userAgent;\n  const device = {\n    ios: false,\n    android: false\n  };\n  const screenWidth = window.screen.width;\n  const screenHeight = window.screen.height;\n  const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n  let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n  const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n  const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n  const windows = platform === 'Win32';\n  let macos = platform === 'MacIntel';\n\n  // iPadOs 13 fix\n  const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n  if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n    ipad = ua.match(/(Version)\\/([\\d.]+)/);\n    if (!ipad) ipad = [0, 1, '13_0_0'];\n    macos = false;\n  }\n\n  // Android\n  if (android && !windows) {\n    device.os = 'android';\n    device.android = true;\n  }\n  if (ipad || iphone || ipod) {\n    device.os = 'ios';\n    device.ios = true;\n  }\n\n  // Export object\n  return device;\n}\nfunction getDevice(overrides) {\n  if (overrides === void 0) {\n    overrides = {};\n  }\n  if (!deviceCached) {\n    deviceCached = calcDevice(overrides);\n  }\n  return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n  const window = getWindow();\n  const device = getDevice();\n  let needPerspectiveFix = false;\n  function isSafari() {\n    const ua = window.navigator.userAgent.toLowerCase();\n    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n  }\n  if (isSafari()) {\n    const ua = String(window.navigator.userAgent);\n    if (ua.includes('Version/')) {\n      const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n      needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n    }\n  }\n  const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n  const isSafariBrowser = isSafari();\n  const need3dFix = isSafariBrowser || isWebView && device.ios;\n  return {\n    isSafari: needPerspectiveFix || isSafariBrowser,\n    needPerspectiveFix,\n    need3dFix,\n    isWebView\n  };\n}\nfunction getBrowser() {\n  if (!browser) {\n    browser = calcBrowser();\n  }\n  return browser;\n}\n\nfunction Resize(_ref) {\n  let {\n    swiper,\n    on,\n    emit\n  } = _ref;\n  const window = getWindow();\n  let observer = null;\n  let animationFrame = null;\n  const resizeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('beforeResize');\n    emit('resize');\n  };\n  const createObserver = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    observer = new ResizeObserver(entries => {\n      animationFrame = window.requestAnimationFrame(() => {\n        const {\n          width,\n          height\n        } = swiper;\n        let newWidth = width;\n        let newHeight = height;\n        entries.forEach(_ref2 => {\n          let {\n            contentBoxSize,\n            contentRect,\n            target\n          } = _ref2;\n          if (target && target !== swiper.el) return;\n          newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n          newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n        });\n        if (newWidth !== width || newHeight !== height) {\n          resizeHandler();\n        }\n      });\n    });\n    observer.observe(swiper.el);\n  };\n  const removeObserver = () => {\n    if (animationFrame) {\n      window.cancelAnimationFrame(animationFrame);\n    }\n    if (observer && observer.unobserve && swiper.el) {\n      observer.unobserve(swiper.el);\n      observer = null;\n    }\n  };\n  const orientationChangeHandler = () => {\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\n    emit('orientationchange');\n  };\n  on('init', () => {\n    if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n      createObserver();\n      return;\n    }\n    window.addEventListener('resize', resizeHandler);\n    window.addEventListener('orientationchange', orientationChangeHandler);\n  });\n  on('destroy', () => {\n    removeObserver();\n    window.removeEventListener('resize', resizeHandler);\n    window.removeEventListener('orientationchange', orientationChangeHandler);\n  });\n}\n\nfunction Observer(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  const observers = [];\n  const window = getWindow();\n  const attach = function (target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n    const observer = new ObserverFunc(mutations => {\n      // The observerUpdate event should only be triggered\n      // once despite the number of mutations.  Additional\n      // triggers are redundant and are very costly\n      if (swiper.__preventObserver__) return;\n      if (mutations.length === 1) {\n        emit('observerUpdate', mutations[0]);\n        return;\n      }\n      const observerUpdate = function observerUpdate() {\n        emit('observerUpdate', mutations[0]);\n      };\n      if (window.requestAnimationFrame) {\n        window.requestAnimationFrame(observerUpdate);\n      } else {\n        window.setTimeout(observerUpdate, 0);\n      }\n    });\n    observer.observe(target, {\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n      childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options).childList,\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n    });\n    observers.push(observer);\n  };\n  const init = () => {\n    if (!swiper.params.observer) return;\n    if (swiper.params.observeParents) {\n      const containerParents = elementParents(swiper.hostEl);\n      for (let i = 0; i < containerParents.length; i += 1) {\n        attach(containerParents[i]);\n      }\n    }\n    // Observe container\n    attach(swiper.hostEl, {\n      childList: swiper.params.observeSlideChildren\n    });\n\n    // Observe wrapper\n    attach(swiper.wrapperEl, {\n      attributes: false\n    });\n  };\n  const destroy = () => {\n    observers.forEach(observer => {\n      observer.disconnect();\n    });\n    observers.splice(0, observers.length);\n  };\n  extendParams({\n    observer: false,\n    observeParents: false,\n    observeSlideChildren: false\n  });\n  on('init', init);\n  on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n  on(events, handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    events.split(' ').forEach(event => {\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n      self.eventsListeners[event][method](handler);\n    });\n    return self;\n  },\n  once(events, handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    function onceHandler() {\n      self.off(events, onceHandler);\n      if (onceHandler.__emitterProxy) {\n        delete onceHandler.__emitterProxy;\n      }\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      handler.apply(self, args);\n    }\n    onceHandler.__emitterProxy = handler;\n    return self.on(events, onceHandler, priority);\n  },\n  onAny(handler, priority) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (typeof handler !== 'function') return self;\n    const method = priority ? 'unshift' : 'push';\n    if (self.eventsAnyListeners.indexOf(handler) < 0) {\n      self.eventsAnyListeners[method](handler);\n    }\n    return self;\n  },\n  offAny(handler) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsAnyListeners) return self;\n    const index = self.eventsAnyListeners.indexOf(handler);\n    if (index >= 0) {\n      self.eventsAnyListeners.splice(index, 1);\n    }\n    return self;\n  },\n  off(events, handler) {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsListeners) return self;\n    events.split(' ').forEach(event => {\n      if (typeof handler === 'undefined') {\n        self.eventsListeners[event] = [];\n      } else if (self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach((eventHandler, index) => {\n          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n            self.eventsListeners[event].splice(index, 1);\n          }\n        });\n      }\n    });\n    return self;\n  },\n  emit() {\n    const self = this;\n    if (!self.eventsListeners || self.destroyed) return self;\n    if (!self.eventsListeners) return self;\n    let events;\n    let data;\n    let context;\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n      events = args[0];\n      data = args.slice(1, args.length);\n      context = self;\n    } else {\n      events = args[0].events;\n      data = args[0].data;\n      context = args[0].context || self;\n    }\n    data.unshift(context);\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\n    eventsArray.forEach(event => {\n      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n        self.eventsAnyListeners.forEach(eventHandler => {\n          eventHandler.apply(context, [event, ...data]);\n        });\n      }\n      if (self.eventsListeners && self.eventsListeners[event]) {\n        self.eventsListeners[event].forEach(eventHandler => {\n          eventHandler.apply(context, data);\n        });\n      }\n    });\n    return self;\n  }\n};\n\nfunction updateSize() {\n  const swiper = this;\n  let width;\n  let height;\n  const el = swiper.el;\n  if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n    width = swiper.params.width;\n  } else {\n    width = el.clientWidth;\n  }\n  if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n    height = swiper.params.height;\n  } else {\n    height = el.clientHeight;\n  }\n  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n    return;\n  }\n\n  // Subtract paddings\n  width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n  height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n  if (Number.isNaN(width)) width = 0;\n  if (Number.isNaN(height)) height = 0;\n  Object.assign(swiper, {\n    width,\n    height,\n    size: swiper.isHorizontal() ? width : height\n  });\n}\n\nfunction updateSlides() {\n  const swiper = this;\n  function getDirectionPropertyValue(node, label) {\n    return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n  }\n  const params = swiper.params;\n  const {\n    wrapperEl,\n    slidesEl,\n    size: swiperSize,\n    rtlTranslate: rtl,\n    wrongRTL\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n  const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n  let snapGrid = [];\n  const slidesGrid = [];\n  const slidesSizesGrid = [];\n  let offsetBefore = params.slidesOffsetBefore;\n  if (typeof offsetBefore === 'function') {\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\n  }\n  let offsetAfter = params.slidesOffsetAfter;\n  if (typeof offsetAfter === 'function') {\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\n  }\n  const previousSnapGridLength = swiper.snapGrid.length;\n  const previousSlidesGridLength = swiper.slidesGrid.length;\n  let spaceBetween = params.spaceBetween;\n  let slidePosition = -offsetBefore;\n  let prevSlideSize = 0;\n  let index = 0;\n  if (typeof swiperSize === 'undefined') {\n    return;\n  }\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n  } else if (typeof spaceBetween === 'string') {\n    spaceBetween = parseFloat(spaceBetween);\n  }\n  swiper.virtualSize = -spaceBetween;\n\n  // reset margins\n  slides.forEach(slideEl => {\n    if (rtl) {\n      slideEl.style.marginLeft = '';\n    } else {\n      slideEl.style.marginRight = '';\n    }\n    slideEl.style.marginBottom = '';\n    slideEl.style.marginTop = '';\n  });\n\n  // reset cssMode offsets\n  if (params.centeredSlides && params.cssMode) {\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n  }\n  const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n  if (gridEnabled) {\n    swiper.grid.initSlides(slides);\n  } else if (swiper.grid) {\n    swiper.grid.unsetSlides();\n  }\n\n  // Calc slides\n  let slideSize;\n  const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n    return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n  }).length > 0;\n  for (let i = 0; i < slidesLength; i += 1) {\n    slideSize = 0;\n    let slide;\n    if (slides[i]) slide = slides[i];\n    if (gridEnabled) {\n      swiper.grid.updateSlide(i, slide, slides);\n    }\n    if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n    if (params.slidesPerView === 'auto') {\n      if (shouldResetSlideSize) {\n        slides[i].style[swiper.getDirectionLabel('width')] = ``;\n      }\n      const slideStyles = getComputedStyle(slide);\n      const currentTransform = slide.style.transform;\n      const currentWebKitTransform = slide.style.webkitTransform;\n      if (currentTransform) {\n        slide.style.transform = 'none';\n      }\n      if (currentWebKitTransform) {\n        slide.style.webkitTransform = 'none';\n      }\n      if (params.roundLengths) {\n        slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n      } else {\n        // eslint-disable-next-line\n        const width = getDirectionPropertyValue(slideStyles, 'width');\n        const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n        const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n        const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n        const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n        const boxSizing = slideStyles.getPropertyValue('box-sizing');\n        if (boxSizing && boxSizing === 'border-box') {\n          slideSize = width + marginLeft + marginRight;\n        } else {\n          const {\n            clientWidth,\n            offsetWidth\n          } = slide;\n          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n        }\n      }\n      if (currentTransform) {\n        slide.style.transform = currentTransform;\n      }\n      if (currentWebKitTransform) {\n        slide.style.webkitTransform = currentWebKitTransform;\n      }\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n    } else {\n      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\n      if (slides[i]) {\n        slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n      }\n    }\n    if (slides[i]) {\n      slides[i].swiperSlideSize = slideSize;\n    }\n    slidesSizesGrid.push(slideSize);\n    if (params.centeredSlides) {\n      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n    } else {\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n      slidesGrid.push(slidePosition);\n      slidePosition = slidePosition + slideSize + spaceBetween;\n    }\n    swiper.virtualSize += slideSize + spaceBetween;\n    prevSlideSize = slideSize;\n    index += 1;\n  }\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n    wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n  }\n  if (params.setWrapperSize) {\n    wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n  }\n  if (gridEnabled) {\n    swiper.grid.updateWrapperSize(slideSize, snapGrid);\n  }\n\n  // Remove last grid elements depending on width\n  if (!params.centeredSlides) {\n    const newSlidesGrid = [];\n    for (let i = 0; i < snapGrid.length; i += 1) {\n      let slidesGridItem = snapGrid[i];\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n        newSlidesGrid.push(slidesGridItem);\n      }\n    }\n    snapGrid = newSlidesGrid;\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n      snapGrid.push(swiper.virtualSize - swiperSize);\n    }\n  }\n  if (isVirtual && params.loop) {\n    const size = slidesSizesGrid[0] + spaceBetween;\n    if (params.slidesPerGroup > 1) {\n      const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n      const groupSize = size * params.slidesPerGroup;\n      for (let i = 0; i < groups; i += 1) {\n        snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n      }\n    }\n    for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n      if (params.slidesPerGroup === 1) {\n        snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n      }\n      slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n      swiper.virtualSize += size;\n    }\n  }\n  if (snapGrid.length === 0) snapGrid = [0];\n  if (spaceBetween !== 0) {\n    const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n    slides.filter((_, slideIndex) => {\n      if (!params.cssMode || params.loop) return true;\n      if (slideIndex === slides.length - 1) {\n        return false;\n      }\n      return true;\n    }).forEach(slideEl => {\n      slideEl.style[key] = `${spaceBetween}px`;\n    });\n  }\n  if (params.centeredSlides && params.centeredSlidesBounds) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (spaceBetween || 0);\n    });\n    allSlidesSize -= spaceBetween;\n    const maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0;\n    snapGrid = snapGrid.map(snap => {\n      if (snap <= 0) return -offsetBefore;\n      if (snap > maxSnap) return maxSnap + offsetAfter;\n      return snap;\n    });\n  }\n  if (params.centerInsufficientSlides) {\n    let allSlidesSize = 0;\n    slidesSizesGrid.forEach(slideSizeValue => {\n      allSlidesSize += slideSizeValue + (spaceBetween || 0);\n    });\n    allSlidesSize -= spaceBetween;\n    const offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0);\n    if (allSlidesSize + offsetSize < swiperSize) {\n      const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 2;\n      snapGrid.forEach((snap, snapIndex) => {\n        snapGrid[snapIndex] = snap - allSlidesOffset;\n      });\n      slidesGrid.forEach((snap, snapIndex) => {\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\n      });\n    }\n  }\n  Object.assign(swiper, {\n    slides,\n    snapGrid,\n    slidesGrid,\n    slidesSizesGrid\n  });\n  if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n    setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n    const addToSnapGrid = -swiper.snapGrid[0];\n    const addToSlidesGrid = -swiper.slidesGrid[0];\n    swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n    swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n  }\n  if (slidesLength !== previousSlidesLength) {\n    swiper.emit('slidesLengthChange');\n  }\n  if (snapGrid.length !== previousSnapGridLength) {\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\n    swiper.emit('snapGridLengthChange');\n  }\n  if (slidesGrid.length !== previousSlidesGridLength) {\n    swiper.emit('slidesGridLengthChange');\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  swiper.emit('slidesUpdated');\n  if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n    const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n    const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n    if (slidesLength <= params.maxBackfaceHiddenSlides) {\n      if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n    } else if (hasClassBackfaceClassAdded) {\n      swiper.el.classList.remove(backFaceHiddenClass);\n    }\n  }\n}\n\nfunction updateAutoHeight(speed) {\n  const swiper = this;\n  const activeSlides = [];\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n  let newHeight = 0;\n  let i;\n  if (typeof speed === 'number') {\n    swiper.setTransition(speed);\n  } else if (speed === true) {\n    swiper.setTransition(swiper.params.speed);\n  }\n  const getSlideByIndex = index => {\n    if (isVirtual) {\n      return swiper.slides[swiper.getSlideIndexByData(index)];\n    }\n    return swiper.slides[index];\n  };\n  // Find slides currently in view\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n    if (swiper.params.centeredSlides) {\n      (swiper.visibleSlides || []).forEach(slide => {\n        activeSlides.push(slide);\n      });\n    } else {\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n        const index = swiper.activeIndex + i;\n        if (index > swiper.slides.length && !isVirtual) break;\n        activeSlides.push(getSlideByIndex(index));\n      }\n    }\n  } else {\n    activeSlides.push(getSlideByIndex(swiper.activeIndex));\n  }\n\n  // Find new height from highest slide in view\n  for (i = 0; i < activeSlides.length; i += 1) {\n    if (typeof activeSlides[i] !== 'undefined') {\n      const height = activeSlides[i].offsetHeight;\n      newHeight = height > newHeight ? height : newHeight;\n    }\n  }\n\n  // Update Height\n  if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n  const swiper = this;\n  const slides = swiper.slides;\n  // eslint-disable-next-line\n  const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n  for (let i = 0; i < slides.length; i += 1) {\n    slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n  }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n  if (condition && !slideEl.classList.contains(className)) {\n    slideEl.classList.add(className);\n  } else if (!condition && slideEl.classList.contains(className)) {\n    slideEl.classList.remove(className);\n  }\n};\nfunction updateSlidesProgress(translate) {\n  if (translate === void 0) {\n    translate = this && this.translate || 0;\n  }\n  const swiper = this;\n  const params = swiper.params;\n  const {\n    slides,\n    rtlTranslate: rtl,\n    snapGrid\n  } = swiper;\n  if (slides.length === 0) return;\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n  let offsetCenter = -translate;\n  if (rtl) offsetCenter = translate;\n  swiper.visibleSlidesIndexes = [];\n  swiper.visibleSlides = [];\n  let spaceBetween = params.spaceBetween;\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n  } else if (typeof spaceBetween === 'string') {\n    spaceBetween = parseFloat(spaceBetween);\n  }\n  for (let i = 0; i < slides.length; i += 1) {\n    const slide = slides[i];\n    let slideOffset = slide.swiperSlideOffset;\n    if (params.cssMode && params.centeredSlides) {\n      slideOffset -= slides[0].swiperSlideOffset;\n    }\n    const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n    const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n    const slideBefore = -(offsetCenter - slideOffset);\n    const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n    const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n    const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n    if (isVisible) {\n      swiper.visibleSlides.push(slide);\n      swiper.visibleSlidesIndexes.push(i);\n    }\n    toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n    toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n    slide.progress = rtl ? -slideProgress : slideProgress;\n    slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n  }\n}\n\nfunction updateProgress(translate) {\n  const swiper = this;\n  if (typeof translate === 'undefined') {\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\n    // eslint-disable-next-line\n    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n  }\n  const params = swiper.params;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  let {\n    progress,\n    isBeginning,\n    isEnd,\n    progressLoop\n  } = swiper;\n  const wasBeginning = isBeginning;\n  const wasEnd = isEnd;\n  if (translatesDiff === 0) {\n    progress = 0;\n    isBeginning = true;\n    isEnd = true;\n  } else {\n    progress = (translate - swiper.minTranslate()) / translatesDiff;\n    const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n    const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n    isBeginning = isBeginningRounded || progress <= 0;\n    isEnd = isEndRounded || progress >= 1;\n    if (isBeginningRounded) progress = 0;\n    if (isEndRounded) progress = 1;\n  }\n  if (params.loop) {\n    const firstSlideIndex = swiper.getSlideIndexByData(0);\n    const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n    const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n    const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n    const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n    const translateAbs = Math.abs(translate);\n    if (translateAbs >= firstSlideTranslate) {\n      progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n    } else {\n      progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n    }\n    if (progressLoop > 1) progressLoop -= 1;\n  }\n  Object.assign(swiper, {\n    progress,\n    progressLoop,\n    isBeginning,\n    isEnd\n  });\n  if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n  if (isBeginning && !wasBeginning) {\n    swiper.emit('reachBeginning toEdge');\n  }\n  if (isEnd && !wasEnd) {\n    swiper.emit('reachEnd toEdge');\n  }\n  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n    swiper.emit('fromEdge');\n  }\n  swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n  if (condition && !slideEl.classList.contains(className)) {\n    slideEl.classList.add(className);\n  } else if (!condition && slideEl.classList.contains(className)) {\n    slideEl.classList.remove(className);\n  }\n};\nfunction updateSlidesClasses() {\n  const swiper = this;\n  const {\n    slides,\n    params,\n    slidesEl,\n    activeIndex\n  } = swiper;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  const getFilteredSlide = selector => {\n    return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n  };\n  let activeSlide;\n  let prevSlide;\n  let nextSlide;\n  if (isVirtual) {\n    if (params.loop) {\n      let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n      if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n      if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n    } else {\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n    }\n  } else {\n    if (gridEnabled) {\n      activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];\n      nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];\n      prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];\n    } else {\n      activeSlide = slides[activeIndex];\n    }\n  }\n  if (activeSlide) {\n    if (!gridEnabled) {\n      // Next Slide\n      nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n      if (params.loop && !nextSlide) {\n        nextSlide = slides[0];\n      }\n\n      // Prev Slide\n      prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n      if (params.loop && !prevSlide === 0) {\n        prevSlide = slides[slides.length - 1];\n      }\n    }\n  }\n  slides.forEach(slideEl => {\n    toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n    toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n    toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n  });\n  swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n  if (!swiper || swiper.destroyed || !swiper.params) return;\n  const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n  const slideEl = imageEl.closest(slideSelector());\n  if (slideEl) {\n    let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n    if (!lazyEl && swiper.isElement) {\n      if (slideEl.shadowRoot) {\n        lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n      } else {\n        // init later\n        requestAnimationFrame(() => {\n          if (slideEl.shadowRoot) {\n            lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n            if (lazyEl) lazyEl.remove();\n          }\n        });\n      }\n    }\n    if (lazyEl) lazyEl.remove();\n  }\n};\nconst unlazy = (swiper, index) => {\n  if (!swiper.slides[index]) return;\n  const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n  if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n  if (!swiper || swiper.destroyed || !swiper.params) return;\n  let amount = swiper.params.lazyPreloadPrevNext;\n  const len = swiper.slides.length;\n  if (!len || !amount || amount < 0) return;\n  amount = Math.min(amount, len);\n  const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n  const activeIndex = swiper.activeIndex;\n  if (swiper.params.grid && swiper.params.grid.rows > 1) {\n    const activeColumn = activeIndex;\n    const preloadColumns = [activeColumn - amount];\n    preloadColumns.push(...Array.from({\n      length: amount\n    }).map((_, i) => {\n      return activeColumn + slidesPerView + i;\n    }));\n    swiper.slides.forEach((slideEl, i) => {\n      if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n    });\n    return;\n  }\n  const slideIndexLastInView = activeIndex + slidesPerView - 1;\n  if (swiper.params.rewind || swiper.params.loop) {\n    for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n      const realIndex = (i % len + len) % len;\n      if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n    }\n  } else {\n    for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n      if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n        unlazy(swiper, i);\n      }\n    }\n  }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n  const {\n    slidesGrid,\n    params\n  } = swiper;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  let activeIndex;\n  for (let i = 0; i < slidesGrid.length; i += 1) {\n    if (typeof slidesGrid[i + 1] !== 'undefined') {\n      if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n        activeIndex = i;\n      } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n        activeIndex = i + 1;\n      }\n    } else if (translate >= slidesGrid[i]) {\n      activeIndex = i;\n    }\n  }\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n  }\n  return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n  const swiper = this;\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  const {\n    snapGrid,\n    params,\n    activeIndex: previousIndex,\n    realIndex: previousRealIndex,\n    snapIndex: previousSnapIndex\n  } = swiper;\n  let activeIndex = newActiveIndex;\n  let snapIndex;\n  const getVirtualRealIndex = aIndex => {\n    let realIndex = aIndex - swiper.virtual.slidesBefore;\n    if (realIndex < 0) {\n      realIndex = swiper.virtual.slides.length + realIndex;\n    }\n    if (realIndex >= swiper.virtual.slides.length) {\n      realIndex -= swiper.virtual.slides.length;\n    }\n    return realIndex;\n  };\n  if (typeof activeIndex === 'undefined') {\n    activeIndex = getActiveIndexByTranslate(swiper);\n  }\n  if (snapGrid.indexOf(translate) >= 0) {\n    snapIndex = snapGrid.indexOf(translate);\n  } else {\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n  }\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  if (activeIndex === previousIndex && !swiper.params.loop) {\n    if (snapIndex !== previousSnapIndex) {\n      swiper.snapIndex = snapIndex;\n      swiper.emit('snapIndexChange');\n    }\n    return;\n  }\n  if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n    swiper.realIndex = getVirtualRealIndex(activeIndex);\n    return;\n  }\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n  // Get real index\n  let realIndex;\n  if (swiper.virtual && params.virtual.enabled && params.loop) {\n    realIndex = getVirtualRealIndex(activeIndex);\n  } else if (gridEnabled) {\n    const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];\n    let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n    if (Number.isNaN(activeSlideIndex)) {\n      activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n    }\n    realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n  } else if (swiper.slides[activeIndex]) {\n    const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n    if (slideIndex) {\n      realIndex = parseInt(slideIndex, 10);\n    } else {\n      realIndex = activeIndex;\n    }\n  } else {\n    realIndex = activeIndex;\n  }\n  Object.assign(swiper, {\n    previousSnapIndex,\n    snapIndex,\n    previousRealIndex,\n    realIndex,\n    previousIndex,\n    activeIndex\n  });\n  if (swiper.initialized) {\n    preload(swiper);\n  }\n  swiper.emit('activeIndexChange');\n  swiper.emit('snapIndexChange');\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n    if (previousRealIndex !== realIndex) {\n      swiper.emit('realIndexChange');\n    }\n    swiper.emit('slideChange');\n  }\n}\n\nfunction updateClickedSlide(el, path) {\n  const swiper = this;\n  const params = swiper.params;\n  let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n  if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n    [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n      if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n        slide = pathEl;\n      }\n    });\n  }\n  let slideFound = false;\n  let slideIndex;\n  if (slide) {\n    for (let i = 0; i < swiper.slides.length; i += 1) {\n      if (swiper.slides[i] === slide) {\n        slideFound = true;\n        slideIndex = i;\n        break;\n      }\n    }\n  }\n  if (slide && slideFound) {\n    swiper.clickedSlide = slide;\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n    } else {\n      swiper.clickedIndex = slideIndex;\n    }\n  } else {\n    swiper.clickedSlide = undefined;\n    swiper.clickedIndex = undefined;\n    return;\n  }\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n    swiper.slideToClickedSlide();\n  }\n}\n\nvar update = {\n  updateSize,\n  updateSlides,\n  updateAutoHeight,\n  updateSlidesOffset,\n  updateSlidesProgress,\n  updateProgress,\n  updateSlidesClasses,\n  updateActiveIndex,\n  updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n  if (axis === void 0) {\n    axis = this.isHorizontal() ? 'x' : 'y';\n  }\n  const swiper = this;\n  const {\n    params,\n    rtlTranslate: rtl,\n    translate,\n    wrapperEl\n  } = swiper;\n  if (params.virtualTranslate) {\n    return rtl ? -translate : translate;\n  }\n  if (params.cssMode) {\n    return translate;\n  }\n  let currentTranslate = getTranslate(wrapperEl, axis);\n  currentTranslate += swiper.cssOverflowAdjustment();\n  if (rtl) currentTranslate = -currentTranslate;\n  return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n  const swiper = this;\n  const {\n    rtlTranslate: rtl,\n    params,\n    wrapperEl,\n    progress\n  } = swiper;\n  let x = 0;\n  let y = 0;\n  const z = 0;\n  if (swiper.isHorizontal()) {\n    x = rtl ? -translate : translate;\n  } else {\n    y = translate;\n  }\n  if (params.roundLengths) {\n    x = Math.floor(x);\n    y = Math.floor(y);\n  }\n  swiper.previousTranslate = swiper.translate;\n  swiper.translate = swiper.isHorizontal() ? x : y;\n  if (params.cssMode) {\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n  } else if (!params.virtualTranslate) {\n    if (swiper.isHorizontal()) {\n      x -= swiper.cssOverflowAdjustment();\n    } else {\n      y -= swiper.cssOverflowAdjustment();\n    }\n    wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n  }\n\n  // Check if we need to update progress\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n  }\n  if (newProgress !== progress) {\n    swiper.updateProgress(translate);\n  }\n  swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n  return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n  return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n  if (translate === void 0) {\n    translate = 0;\n  }\n  if (speed === void 0) {\n    speed = this.params.speed;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (translateBounds === void 0) {\n    translateBounds = true;\n  }\n  const swiper = this;\n  const {\n    params,\n    wrapperEl\n  } = swiper;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n  const minTranslate = swiper.minTranslate();\n  const maxTranslate = swiper.maxTranslate();\n  let newTranslate;\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n  // Update progress\n  swiper.updateProgress(newTranslate);\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    if (speed === 0) {\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: -newTranslate,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: -newTranslate,\n        behavior: 'smooth'\n      });\n    }\n    return true;\n  }\n  if (speed === 0) {\n    swiper.setTransition(0);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionEnd');\n    }\n  } else {\n    swiper.setTransition(speed);\n    swiper.setTranslate(newTranslate);\n    if (runCallbacks) {\n      swiper.emit('beforeTransitionStart', speed, internal);\n      swiper.emit('transitionStart');\n    }\n    if (!swiper.animating) {\n      swiper.animating = true;\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n          if (!swiper || swiper.destroyed) return;\n          if (e.target !== this) return;\n          swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n          swiper.onTranslateToWrapperTransitionEnd = null;\n          delete swiper.onTranslateToWrapperTransitionEnd;\n          swiper.animating = false;\n          if (runCallbacks) {\n            swiper.emit('transitionEnd');\n          }\n        };\n      }\n      swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n    }\n  }\n  return true;\n}\n\nvar translate = {\n  getTranslate: getSwiperTranslate,\n  setTranslate,\n  minTranslate,\n  maxTranslate,\n  translateTo\n};\n\nfunction setTransition(duration, byController) {\n  const swiper = this;\n  if (!swiper.params.cssMode) {\n    swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n    swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n  }\n  swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n  let {\n    swiper,\n    runCallbacks,\n    direction,\n    step\n  } = _ref;\n  const {\n    activeIndex,\n    previousIndex\n  } = swiper;\n  let dir = direction;\n  if (!dir) {\n    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n  }\n  swiper.emit(`transition${step}`);\n  if (runCallbacks && activeIndex !== previousIndex) {\n    if (dir === 'reset') {\n      swiper.emit(`slideResetTransition${step}`);\n      return;\n    }\n    swiper.emit(`slideChangeTransition${step}`);\n    if (dir === 'next') {\n      swiper.emit(`slideNextTransition${step}`);\n    } else {\n      swiper.emit(`slidePrevTransition${step}`);\n    }\n  }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  if (params.cssMode) return;\n  if (params.autoHeight) {\n    swiper.updateAutoHeight();\n  }\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'Start'\n  });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  swiper.animating = false;\n  if (params.cssMode) return;\n  swiper.setTransition(0);\n  transitionEmit({\n    swiper,\n    runCallbacks,\n    direction,\n    step: 'End'\n  });\n}\n\nvar transition = {\n  setTransition,\n  transitionStart,\n  transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n  if (index === void 0) {\n    index = 0;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (typeof index === 'string') {\n    index = parseInt(index, 10);\n  }\n  const swiper = this;\n  let slideIndex = index;\n  if (slideIndex < 0) slideIndex = 0;\n  const {\n    params,\n    snapGrid,\n    slidesGrid,\n    previousIndex,\n    activeIndex,\n    rtlTranslate: rtl,\n    wrapperEl,\n    enabled\n  } = swiper;\n  if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n    return false;\n  }\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n  const translate = -snapGrid[snapIndex];\n  // Normalize slideIndex\n  if (params.normalizeSlideIndex) {\n    for (let i = 0; i < slidesGrid.length; i += 1) {\n      const normalizedTranslate = -Math.floor(translate * 100);\n      const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n      const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\n        if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n          slideIndex = i;\n        } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n          slideIndex = i + 1;\n        }\n      } else if (normalizedTranslate >= normalizedGrid) {\n        slideIndex = i;\n      }\n    }\n  }\n  // Directions locks\n  if (swiper.initialized && slideIndex !== activeIndex) {\n    if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n      return false;\n    }\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n      if ((activeIndex || 0) !== slideIndex) {\n        return false;\n      }\n    }\n  }\n  if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n    swiper.emit('beforeSlideChangeStart');\n  }\n\n  // Update progress\n  swiper.updateProgress(translate);\n  let direction;\n  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n  // initial virtual\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n  const isInitialVirtual = isVirtual && initial;\n  // Update Index\n  if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) {\n    swiper.updateActiveIndex(slideIndex);\n    // Update Height\n    if (params.autoHeight) {\n      swiper.updateAutoHeight();\n    }\n    swiper.updateSlidesClasses();\n    if (params.effect !== 'slide') {\n      swiper.setTranslate(translate);\n    }\n    if (direction !== 'reset') {\n      swiper.transitionStart(runCallbacks, direction);\n      swiper.transitionEnd(runCallbacks, direction);\n    }\n    return false;\n  }\n  if (params.cssMode) {\n    const isH = swiper.isHorizontal();\n    const t = rtl ? translate : -translate;\n    if (speed === 0) {\n      if (isVirtual) {\n        swiper.wrapperEl.style.scrollSnapType = 'none';\n        swiper._immediateVirtual = true;\n      }\n      if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n        swiper._cssModeVirtualInitialSet = true;\n        requestAnimationFrame(() => {\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n        });\n      } else {\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n      }\n      if (isVirtual) {\n        requestAnimationFrame(() => {\n          swiper.wrapperEl.style.scrollSnapType = '';\n          swiper._immediateVirtual = false;\n        });\n      }\n    } else {\n      if (!swiper.support.smoothScroll) {\n        animateCSSModeScroll({\n          swiper,\n          targetPosition: t,\n          side: isH ? 'left' : 'top'\n        });\n        return true;\n      }\n      wrapperEl.scrollTo({\n        [isH ? 'left' : 'top']: t,\n        behavior: 'smooth'\n      });\n    }\n    return true;\n  }\n  swiper.setTransition(speed);\n  swiper.setTranslate(translate);\n  swiper.updateActiveIndex(slideIndex);\n  swiper.updateSlidesClasses();\n  swiper.emit('beforeTransitionStart', speed, internal);\n  swiper.transitionStart(runCallbacks, direction);\n  if (speed === 0) {\n    swiper.transitionEnd(runCallbacks, direction);\n  } else if (!swiper.animating) {\n    swiper.animating = true;\n    if (!swiper.onSlideToWrapperTransitionEnd) {\n      swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n        if (!swiper || swiper.destroyed) return;\n        if (e.target !== this) return;\n        swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n        swiper.onSlideToWrapperTransitionEnd = null;\n        delete swiper.onSlideToWrapperTransitionEnd;\n        swiper.transitionEnd(runCallbacks, direction);\n      };\n    }\n    swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n  }\n  return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n  if (index === void 0) {\n    index = 0;\n  }\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (typeof index === 'string') {\n    const indexAsNumber = parseInt(index, 10);\n    index = indexAsNumber;\n  }\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n  let newIndex = index;\n  if (swiper.params.loop) {\n    if (swiper.virtual && swiper.params.virtual.enabled) {\n      // eslint-disable-next-line\n      newIndex = newIndex + swiper.virtual.slidesBefore;\n    } else {\n      let targetSlideIndex;\n      if (gridEnabled) {\n        const slideIndex = newIndex * swiper.params.grid.rows;\n        targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n      } else {\n        targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n      }\n      const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n      const {\n        centeredSlides\n      } = swiper.params;\n      let slidesPerView = swiper.params.slidesPerView;\n      if (slidesPerView === 'auto') {\n        slidesPerView = swiper.slidesPerViewDynamic();\n      } else {\n        slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n        if (centeredSlides && slidesPerView % 2 === 0) {\n          slidesPerView = slidesPerView + 1;\n        }\n      }\n      let needLoopFix = cols - targetSlideIndex < slidesPerView;\n      if (centeredSlides) {\n        needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n      }\n      if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n        needLoopFix = false;\n      }\n      if (needLoopFix) {\n        const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n        swiper.loopFix({\n          direction,\n          slideTo: true,\n          activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n          slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n        });\n      }\n      if (gridEnabled) {\n        const slideIndex = newIndex * swiper.params.grid.rows;\n        newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n      } else {\n        newIndex = swiper.getSlideIndexByData(newIndex);\n      }\n    }\n  }\n  requestAnimationFrame(() => {\n    swiper.slideTo(newIndex, speed, runCallbacks, internal);\n  });\n  return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    enabled,\n    params,\n    animating\n  } = swiper;\n  if (!enabled || swiper.destroyed) return swiper;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  let perGroup = params.slidesPerGroup;\n  if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n    perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n  }\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  if (params.loop) {\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\n    swiper.loopFix({\n      direction: 'next'\n    });\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\n    if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n      requestAnimationFrame(() => {\n        swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n      });\n      return true;\n    }\n  }\n  if (params.rewind && swiper.isEnd) {\n    return swiper.slideTo(0, speed, runCallbacks, internal);\n  }\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  const {\n    params,\n    snapGrid,\n    slidesGrid,\n    rtlTranslate,\n    enabled,\n    animating\n  } = swiper;\n  if (!enabled || swiper.destroyed) return swiper;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  const isVirtual = swiper.virtual && params.virtual.enabled;\n  if (params.loop) {\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\n    swiper.loopFix({\n      direction: 'prev'\n    });\n    // eslint-disable-next-line\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\n  }\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n  function normalize(val) {\n    if (val < 0) return -Math.floor(Math.abs(val));\n    return Math.floor(val);\n  }\n  const normalizedTranslate = normalize(translate);\n  const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\n    let prevSnapIndex;\n    snapGrid.forEach((snap, snapIndex) => {\n      if (normalizedTranslate >= snap) {\n        // prevSnap = snap;\n        prevSnapIndex = snapIndex;\n      }\n    });\n    if (typeof prevSnapIndex !== 'undefined') {\n      prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n    }\n  }\n  let prevIndex = 0;\n  if (typeof prevSnap !== 'undefined') {\n    prevIndex = slidesGrid.indexOf(prevSnap);\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n      prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n      prevIndex = Math.max(prevIndex, 0);\n    }\n  }\n  if (params.rewind && swiper.isBeginning) {\n    const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n  } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n    requestAnimationFrame(() => {\n      swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n    });\n    return true;\n  }\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n  if (runCallbacks === void 0) {\n    runCallbacks = true;\n  }\n  if (threshold === void 0) {\n    threshold = 0.5;\n  }\n  const swiper = this;\n  if (swiper.destroyed) return;\n  if (typeof speed === 'undefined') {\n    speed = swiper.params.speed;\n  }\n  let index = swiper.activeIndex;\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n  if (translate >= swiper.snapGrid[snapIndex]) {\n    // The current translate is on or after the current snap index, so the choice\n    // is between the current index and the one after it.\n    const currentSnap = swiper.snapGrid[snapIndex];\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\n    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n      index += swiper.params.slidesPerGroup;\n    }\n  } else {\n    // The current translate is before the current snap index, so the choice\n    // is between the current index and the one before it.\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\n    const currentSnap = swiper.snapGrid[snapIndex];\n    if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n      index -= swiper.params.slidesPerGroup;\n    }\n  }\n  index = Math.max(index, 0);\n  index = Math.min(index, swiper.slidesGrid.length - 1);\n  return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n  const swiper = this;\n  if (swiper.destroyed) return;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n  let slideToIndex = swiper.clickedIndex;\n  let realIndex;\n  const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n  if (params.loop) {\n    if (swiper.animating) return;\n    realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n    if (params.centeredSlides) {\n      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n        swiper.loopFix();\n        slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n        nextTick(() => {\n          swiper.slideTo(slideToIndex);\n        });\n      } else {\n        swiper.slideTo(slideToIndex);\n      }\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n      swiper.loopFix();\n      slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n      nextTick(() => {\n        swiper.slideTo(slideToIndex);\n      });\n    } else {\n      swiper.slideTo(slideToIndex);\n    }\n  } else {\n    swiper.slideTo(slideToIndex);\n  }\n}\n\nvar slide = {\n  slideTo,\n  slideToLoop,\n  slideNext,\n  slidePrev,\n  slideReset,\n  slideToClosest,\n  slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n  const initSlides = () => {\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    slides.forEach((el, index) => {\n      el.setAttribute('data-swiper-slide-index', index);\n    });\n  };\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n  const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n  const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n  const addBlankSlides = amountOfSlides => {\n    for (let i = 0; i < amountOfSlides; i += 1) {\n      const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n      swiper.slidesEl.append(slideEl);\n    }\n  };\n  if (shouldFillGroup) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else if (shouldFillGrid) {\n    if (params.loopAddBlankSlides) {\n      const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n      addBlankSlides(slidesToAdd);\n      swiper.recalcSlides();\n      swiper.updateSlides();\n    } else {\n      showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n    }\n    initSlides();\n  } else {\n    initSlides();\n  }\n  swiper.loopFix({\n    slideRealIndex,\n    direction: params.centeredSlides ? undefined : 'next'\n  });\n}\n\nfunction loopFix(_temp) {\n  let {\n    slideRealIndex,\n    slideTo = true,\n    direction,\n    setTranslate,\n    activeSlideIndex,\n    byController,\n    byMousewheel\n  } = _temp === void 0 ? {} : _temp;\n  const swiper = this;\n  if (!swiper.params.loop) return;\n  swiper.emit('beforeLoopFix');\n  const {\n    slides,\n    allowSlidePrev,\n    allowSlideNext,\n    slidesEl,\n    params\n  } = swiper;\n  const {\n    centeredSlides\n  } = params;\n  swiper.allowSlidePrev = true;\n  swiper.allowSlideNext = true;\n  if (swiper.virtual && params.virtual.enabled) {\n    if (slideTo) {\n      if (!params.centeredSlides && swiper.snapIndex === 0) {\n        swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n      } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n        swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n      } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n        swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n      }\n    }\n    swiper.allowSlidePrev = allowSlidePrev;\n    swiper.allowSlideNext = allowSlideNext;\n    swiper.emit('loopFix');\n    return;\n  }\n  let slidesPerView = params.slidesPerView;\n  if (slidesPerView === 'auto') {\n    slidesPerView = swiper.slidesPerViewDynamic();\n  } else {\n    slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n    if (centeredSlides && slidesPerView % 2 === 0) {\n      slidesPerView = slidesPerView + 1;\n    }\n  }\n  const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n  let loopedSlides = slidesPerGroup;\n  if (loopedSlides % slidesPerGroup !== 0) {\n    loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n  }\n  loopedSlides += params.loopAdditionalSlides;\n  swiper.loopedSlides = loopedSlides;\n  const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n  if (slides.length < slidesPerView + loopedSlides) {\n    showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n  } else if (gridEnabled && params.grid.fill === 'row') {\n    showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n  }\n  const prependSlidesIndexes = [];\n  const appendSlidesIndexes = [];\n  let activeIndex = swiper.activeIndex;\n  if (typeof activeSlideIndex === 'undefined') {\n    activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n  } else {\n    activeIndex = activeSlideIndex;\n  }\n  const isNext = direction === 'next' || !direction;\n  const isPrev = direction === 'prev' || !direction;\n  let slidesPrepended = 0;\n  let slidesAppended = 0;\n  const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n  const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n  const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n  // prepend last slides before start\n  if (activeColIndexWithShift < loopedSlides) {\n    slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n    for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        const colIndexToPrepend = cols - index - 1;\n        for (let i = slides.length - 1; i >= 0; i -= 1) {\n          if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n        }\n        // slides.forEach((slide, slideIndex) => {\n        //   if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n        // });\n      } else {\n        prependSlidesIndexes.push(cols - index - 1);\n      }\n    }\n  } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n    slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n    for (let i = 0; i < slidesAppended; i += 1) {\n      const index = i - Math.floor(i / cols) * cols;\n      if (gridEnabled) {\n        slides.forEach((slide, slideIndex) => {\n          if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n        });\n      } else {\n        appendSlidesIndexes.push(index);\n      }\n    }\n  }\n  swiper.__preventObserver__ = true;\n  requestAnimationFrame(() => {\n    swiper.__preventObserver__ = false;\n  });\n  if (isPrev) {\n    prependSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.prepend(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  if (isNext) {\n    appendSlidesIndexes.forEach(index => {\n      slides[index].swiperLoopMoveDOM = true;\n      slidesEl.append(slides[index]);\n      slides[index].swiperLoopMoveDOM = false;\n    });\n  }\n  swiper.recalcSlides();\n  if (params.slidesPerView === 'auto') {\n    swiper.updateSlides();\n  } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n    swiper.slides.forEach((slide, slideIndex) => {\n      swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n    });\n  }\n  if (params.watchSlidesProgress) {\n    swiper.updateSlidesOffset();\n  }\n  if (slideTo) {\n    if (prependSlidesIndexes.length > 0 && isPrev) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        if (setTranslate) {\n          const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n          swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n          swiper.touchEventsData.currentTranslate = swiper.translate;\n        }\n      }\n    } else if (appendSlidesIndexes.length > 0 && isNext) {\n      if (typeof slideRealIndex === 'undefined') {\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n        const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n        const diff = newSlideTranslate - currentSlideTranslate;\n        if (byMousewheel) {\n          swiper.setTranslate(swiper.translate - diff);\n        } else {\n          swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n          if (setTranslate) {\n            swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n            swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n          }\n        }\n      } else {\n        const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n        swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n      }\n    }\n  }\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.controller && swiper.controller.control && !byController) {\n    const loopParams = {\n      slideRealIndex,\n      direction,\n      setTranslate,\n      activeSlideIndex,\n      byController: true\n    };\n    if (Array.isArray(swiper.controller.control)) {\n      swiper.controller.control.forEach(c => {\n        if (!c.destroyed && c.params.loop) c.loopFix({\n          ...loopParams,\n          slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n        });\n      });\n    } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n      swiper.controller.control.loopFix({\n        ...loopParams,\n        slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n      });\n    }\n  }\n  swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n  const swiper = this;\n  const {\n    params,\n    slidesEl\n  } = swiper;\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n  swiper.recalcSlides();\n  const newSlidesOrder = [];\n  swiper.slides.forEach(slideEl => {\n    const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n    newSlidesOrder[index] = slideEl;\n  });\n  swiper.slides.forEach(slideEl => {\n    slideEl.removeAttribute('data-swiper-slide-index');\n  });\n  newSlidesOrder.forEach(slideEl => {\n    slidesEl.append(slideEl);\n  });\n  swiper.recalcSlides();\n  swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n  loopCreate,\n  loopFix,\n  loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n  const swiper = this;\n  if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n  const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  el.style.cursor = 'move';\n  el.style.cursor = moving ? 'grabbing' : 'grab';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\n\nfunction unsetGrabCursor() {\n  const swiper = this;\n  if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n    return;\n  }\n  if (swiper.isElement) {\n    swiper.__preventObserver__ = true;\n  }\n  swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n  if (swiper.isElement) {\n    requestAnimationFrame(() => {\n      swiper.__preventObserver__ = false;\n    });\n  }\n}\n\nvar grabCursor = {\n  setGrabCursor,\n  unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n  if (base === void 0) {\n    base = this;\n  }\n  function __closestFrom(el) {\n    if (!el || el === getDocument() || el === getWindow()) return null;\n    if (el.assignedSlot) el = el.assignedSlot;\n    const found = el.closest(selector);\n    if (!found && !el.getRootNode) {\n      return null;\n    }\n    return found || __closestFrom(el.getRootNode().host);\n  }\n  return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n  const window = getWindow();\n  const {\n    params\n  } = swiper;\n  const edgeSwipeDetection = params.edgeSwipeDetection;\n  const edgeSwipeThreshold = params.edgeSwipeThreshold;\n  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n    if (edgeSwipeDetection === 'prevent') {\n      event.preventDefault();\n      return true;\n    }\n    return false;\n  }\n  return true;\n}\nfunction onTouchStart(event) {\n  const swiper = this;\n  const document = getDocument();\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  const data = swiper.touchEventsData;\n  if (e.type === 'pointerdown') {\n    if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n      return;\n    }\n    data.pointerId = e.pointerId;\n  } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n    data.touchId = e.targetTouches[0].identifier;\n  }\n  if (e.type === 'touchstart') {\n    // don't proceed touch event\n    preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n    return;\n  }\n  const {\n    params,\n    touches,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && e.pointerType === 'mouse') return;\n  if (swiper.animating && params.preventInteractionOnTransition) {\n    return;\n  }\n  if (!swiper.animating && params.cssMode && params.loop) {\n    swiper.loopFix();\n  }\n  let targetEl = e.target;\n  if (params.touchEventsTarget === 'wrapper') {\n    if (!elementIsChildOf(targetEl, swiper.wrapperEl)) return;\n  }\n  if ('which' in e && e.which === 3) return;\n  if ('button' in e && e.button > 0) return;\n  if (data.isTouched && data.isMoved) return;\n\n  // change target el for shadow root component\n  const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n  // eslint-disable-next-line\n  const eventPath = e.composedPath ? e.composedPath() : e.path;\n  if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n    targetEl = eventPath[0];\n  }\n  const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n  const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n  // use closestElement for shadow root element to get the actual closest for nested shadow root element\n  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n    swiper.allowClick = true;\n    return;\n  }\n  if (params.swipeHandler) {\n    if (!targetEl.closest(params.swipeHandler)) return;\n  }\n  touches.currentX = e.pageX;\n  touches.currentY = e.pageY;\n  const startX = touches.currentX;\n  const startY = touches.currentY;\n\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n  if (!preventEdgeSwipe(swiper, e, startX)) {\n    return;\n  }\n  Object.assign(data, {\n    isTouched: true,\n    isMoved: false,\n    allowTouchCallbacks: true,\n    isScrolling: undefined,\n    startMoving: undefined\n  });\n  touches.startX = startX;\n  touches.startY = startY;\n  data.touchStartTime = now();\n  swiper.allowClick = true;\n  swiper.updateSize();\n  swiper.swipeDirection = undefined;\n  if (params.threshold > 0) data.allowThresholdMove = false;\n  let preventDefault = true;\n  if (targetEl.matches(data.focusableElements)) {\n    preventDefault = false;\n    if (targetEl.nodeName === 'SELECT') {\n      data.isTouched = false;\n    }\n  }\n  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) {\n    document.activeElement.blur();\n  }\n  const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n  if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n    e.preventDefault();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n    swiper.freeMode.onTouchStart();\n  }\n  swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n  const document = getDocument();\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  const {\n    params,\n    touches,\n    rtlTranslate: rtl,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && event.pointerType === 'mouse') return;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  if (e.type === 'pointermove') {\n    if (data.touchId !== null) return; // return from pointer if we use touch\n    const id = e.pointerId;\n    if (id !== data.pointerId) return;\n  }\n  let targetTouch;\n  if (e.type === 'touchmove') {\n    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n    if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n  } else {\n    targetTouch = e;\n  }\n  if (!data.isTouched) {\n    if (data.startMoving && data.isScrolling) {\n      swiper.emit('touchMoveOpposite', e);\n    }\n    return;\n  }\n  const pageX = targetTouch.pageX;\n  const pageY = targetTouch.pageY;\n  if (e.preventedByNestedSwiper) {\n    touches.startX = pageX;\n    touches.startY = pageY;\n    return;\n  }\n  if (!swiper.allowTouchMove) {\n    if (!e.target.matches(data.focusableElements)) {\n      swiper.allowClick = false;\n    }\n    if (data.isTouched) {\n      Object.assign(touches, {\n        startX: pageX,\n        startY: pageY,\n        currentX: pageX,\n        currentY: pageY\n      });\n      data.touchStartTime = now();\n    }\n    return;\n  }\n  if (params.touchReleaseOnEdges && !params.loop) {\n    if (swiper.isVertical()) {\n      // Vertical\n      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n        data.isTouched = false;\n        data.isMoved = false;\n        return;\n      }\n    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n      return;\n    }\n  }\n  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {\n    document.activeElement.blur();\n  }\n  if (document.activeElement) {\n    if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n      data.isMoved = true;\n      swiper.allowClick = false;\n      return;\n    }\n  }\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchMove', e);\n  }\n  touches.previousX = touches.currentX;\n  touches.previousY = touches.currentY;\n  touches.currentX = pageX;\n  touches.currentY = pageY;\n  const diffX = touches.currentX - touches.startX;\n  const diffY = touches.currentY - touches.startY;\n  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n  if (typeof data.isScrolling === 'undefined') {\n    let touchAngle;\n    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n      data.isScrolling = false;\n    } else {\n      // eslint-disable-next-line\n      if (diffX * diffX + diffY * diffY >= 25) {\n        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n      }\n    }\n  }\n  if (data.isScrolling) {\n    swiper.emit('touchMoveOpposite', e);\n  }\n  if (typeof data.startMoving === 'undefined') {\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n      data.startMoving = true;\n    }\n  }\n  if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n    data.isTouched = false;\n    return;\n  }\n  if (!data.startMoving) {\n    return;\n  }\n  swiper.allowClick = false;\n  if (!params.cssMode && e.cancelable) {\n    e.preventDefault();\n  }\n  if (params.touchMoveStopPropagation && !params.nested) {\n    e.stopPropagation();\n  }\n  let diff = swiper.isHorizontal() ? diffX : diffY;\n  let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n  if (params.oneWayMovement) {\n    diff = Math.abs(diff) * (rtl ? 1 : -1);\n    touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n  }\n  touches.diff = diff;\n  diff *= params.touchRatio;\n  if (rtl) {\n    diff = -diff;\n    touchesDiff = -touchesDiff;\n  }\n  const prevTouchesDirection = swiper.touchesDirection;\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n  swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n  const isLoop = swiper.params.loop && !params.cssMode;\n  const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n  if (!data.isMoved) {\n    if (isLoop && allowLoopFix) {\n      swiper.loopFix({\n        direction: swiper.swipeDirection\n      });\n    }\n    data.startTranslate = swiper.getTranslate();\n    swiper.setTransition(0);\n    if (swiper.animating) {\n      const evt = new window.CustomEvent('transitionend', {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          bySwiperTouchMove: true\n        }\n      });\n      swiper.wrapperEl.dispatchEvent(evt);\n    }\n    data.allowMomentumBounce = false;\n    // Grab Cursor\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n      swiper.setGrabCursor(true);\n    }\n    swiper.emit('sliderFirstMove', e);\n  }\n  let loopFixed;\n  new Date().getTime();\n  if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n    Object.assign(touches, {\n      startX: pageX,\n      startY: pageY,\n      currentX: pageX,\n      currentY: pageY,\n      startTranslate: data.currentTranslate\n    });\n    data.loopSwapReset = true;\n    data.startTranslate = data.currentTranslate;\n    return;\n  }\n  swiper.emit('sliderMove', e);\n  data.isMoved = true;\n  data.currentTranslate = diff + data.startTranslate;\n  let disableParentSwiper = true;\n  let resistanceRatio = params.resistanceRatio;\n  if (params.touchReleaseOnEdges) {\n    resistanceRatio = 0;\n  }\n  if (diff > 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) {\n      swiper.loopFix({\n        direction: 'prev',\n        setTranslate: true,\n        activeSlideIndex: 0\n      });\n    }\n    if (data.currentTranslate > swiper.minTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n      }\n    }\n  } else if (diff < 0) {\n    if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) {\n      swiper.loopFix({\n        direction: 'next',\n        setTranslate: true,\n        activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n      });\n    }\n    if (data.currentTranslate < swiper.maxTranslate()) {\n      disableParentSwiper = false;\n      if (params.resistance) {\n        data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n      }\n    }\n  }\n  if (disableParentSwiper) {\n    e.preventedByNestedSwiper = true;\n  }\n\n  // Directions locks\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n    data.currentTranslate = data.startTranslate;\n  }\n  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n    data.currentTranslate = data.startTranslate;\n  }\n\n  // Threshold\n  if (params.threshold > 0) {\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n      if (!data.allowThresholdMove) {\n        data.allowThresholdMove = true;\n        touches.startX = touches.currentX;\n        touches.startY = touches.currentY;\n        data.currentTranslate = data.startTranslate;\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n        return;\n      }\n    } else {\n      data.currentTranslate = data.startTranslate;\n      return;\n    }\n  }\n  if (!params.followFinger || params.cssMode) return;\n\n  // Update active index in free mode\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n    swiper.freeMode.onTouchMove();\n  }\n  // Update progress\n  swiper.updateProgress(data.currentTranslate);\n  // Update translate\n  swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n  const swiper = this;\n  const data = swiper.touchEventsData;\n  let e = event;\n  if (e.originalEvent) e = e.originalEvent;\n  let targetTouch;\n  const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n  if (!isTouchEvent) {\n    if (data.touchId !== null) return; // return from pointer if we use touch\n    if (e.pointerId !== data.pointerId) return;\n    targetTouch = e;\n  } else {\n    targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n    if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n  }\n  if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n    const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n    if (!proceed) {\n      return;\n    }\n  }\n  data.pointerId = null;\n  data.touchId = null;\n  const {\n    params,\n    touches,\n    rtlTranslate: rtl,\n    slidesGrid,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  if (!params.simulateTouch && e.pointerType === 'mouse') return;\n  if (data.allowTouchCallbacks) {\n    swiper.emit('touchEnd', e);\n  }\n  data.allowTouchCallbacks = false;\n  if (!data.isTouched) {\n    if (data.isMoved && params.grabCursor) {\n      swiper.setGrabCursor(false);\n    }\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n\n  // Return Grab Cursor\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n    swiper.setGrabCursor(false);\n  }\n\n  // Time diff\n  const touchEndTime = now();\n  const timeDiff = touchEndTime - data.touchStartTime;\n\n  // Tap, doubleTap, Click\n  if (swiper.allowClick) {\n    const pathTree = e.path || e.composedPath && e.composedPath();\n    swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n    swiper.emit('tap click', e);\n    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n      swiper.emit('doubleTap doubleClick', e);\n    }\n  }\n  data.lastClickTime = now();\n  nextTick(() => {\n    if (!swiper.destroyed) swiper.allowClick = true;\n  });\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n    data.isTouched = false;\n    data.isMoved = false;\n    data.startMoving = false;\n    return;\n  }\n  data.isTouched = false;\n  data.isMoved = false;\n  data.startMoving = false;\n  let currentPos;\n  if (params.followFinger) {\n    currentPos = rtl ? swiper.translate : -swiper.translate;\n  } else {\n    currentPos = -data.currentTranslate;\n  }\n  if (params.cssMode) {\n    return;\n  }\n  if (params.freeMode && params.freeMode.enabled) {\n    swiper.freeMode.onTouchEnd({\n      currentPos\n    });\n    return;\n  }\n\n  // Find current slide\n  const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n  let stopIndex = 0;\n  let groupSize = swiper.slidesSizesGrid[0];\n  for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n    const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\n      if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n        stopIndex = i;\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\n      }\n    } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n      stopIndex = i;\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n    }\n  }\n  let rewindFirstIndex = null;\n  let rewindLastIndex = null;\n  if (params.rewind) {\n    if (swiper.isBeginning) {\n      rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n    } else if (swiper.isEnd) {\n      rewindFirstIndex = 0;\n    }\n  }\n  // Find current slide size\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n  const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n  if (timeDiff > params.longSwipesMs) {\n    // Long touches\n    if (!params.longSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    if (swiper.swipeDirection === 'next') {\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n    }\n    if (swiper.swipeDirection === 'prev') {\n      if (ratio > 1 - params.longSwipesRatio) {\n        swiper.slideTo(stopIndex + increment);\n      } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n        swiper.slideTo(rewindLastIndex);\n      } else {\n        swiper.slideTo(stopIndex);\n      }\n    }\n  } else {\n    // Short swipes\n    if (!params.shortSwipes) {\n      swiper.slideTo(swiper.activeIndex);\n      return;\n    }\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n    if (!isNavButtonTarget) {\n      if (swiper.swipeDirection === 'next') {\n        swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n      }\n      if (swiper.swipeDirection === 'prev') {\n        swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n      }\n    } else if (e.target === swiper.navigation.nextEl) {\n      swiper.slideTo(stopIndex + increment);\n    } else {\n      swiper.slideTo(stopIndex);\n    }\n  }\n}\n\nfunction onResize() {\n  const swiper = this;\n  const {\n    params,\n    el\n  } = swiper;\n  if (el && el.offsetWidth === 0) return;\n\n  // Breakpoints\n  if (params.breakpoints) {\n    swiper.setBreakpoint();\n  }\n\n  // Save locks\n  const {\n    allowSlideNext,\n    allowSlidePrev,\n    snapGrid\n  } = swiper;\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n  // Disable locks on resize\n  swiper.allowSlideNext = true;\n  swiper.allowSlidePrev = true;\n  swiper.updateSize();\n  swiper.updateSlides();\n  swiper.updateSlidesClasses();\n  const isVirtualLoop = isVirtual && params.loop;\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n  } else {\n    if (swiper.params.loop && !isVirtual) {\n      swiper.slideToLoop(swiper.realIndex, 0, false, true);\n    } else {\n      swiper.slideTo(swiper.activeIndex, 0, false, true);\n    }\n  }\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n    clearTimeout(swiper.autoplay.resizeTimeout);\n    swiper.autoplay.resizeTimeout = setTimeout(() => {\n      if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n        swiper.autoplay.resume();\n      }\n    }, 500);\n  }\n  // Return locks after resize\n  swiper.allowSlidePrev = allowSlidePrev;\n  swiper.allowSlideNext = allowSlideNext;\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n    swiper.checkOverflow();\n  }\n}\n\nfunction onClick(e) {\n  const swiper = this;\n  if (!swiper.enabled) return;\n  if (!swiper.allowClick) {\n    if (swiper.params.preventClicks) e.preventDefault();\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\n      e.stopPropagation();\n      e.stopImmediatePropagation();\n    }\n  }\n}\n\nfunction onScroll() {\n  const swiper = this;\n  const {\n    wrapperEl,\n    rtlTranslate,\n    enabled\n  } = swiper;\n  if (!enabled) return;\n  swiper.previousTranslate = swiper.translate;\n  if (swiper.isHorizontal()) {\n    swiper.translate = -wrapperEl.scrollLeft;\n  } else {\n    swiper.translate = -wrapperEl.scrollTop;\n  }\n  // eslint-disable-next-line\n  if (swiper.translate === 0) swiper.translate = 0;\n  swiper.updateActiveIndex();\n  swiper.updateSlidesClasses();\n  let newProgress;\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n  if (translatesDiff === 0) {\n    newProgress = 0;\n  } else {\n    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n  }\n  if (newProgress !== swiper.progress) {\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n  }\n  swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n  const swiper = this;\n  processLazyPreloader(swiper, e.target);\n  if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n    return;\n  }\n  swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n  const swiper = this;\n  if (swiper.documentTouchHandlerProceeded) return;\n  swiper.documentTouchHandlerProceeded = true;\n  if (swiper.params.touchReleaseOnEdges) {\n    swiper.el.style.touchAction = 'auto';\n  }\n}\n\nconst events = (swiper, method) => {\n  const document = getDocument();\n  const {\n    params,\n    el,\n    wrapperEl,\n    device\n  } = swiper;\n  const capture = !!params.nested;\n  const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n  const swiperMethod = method;\n  if (!el || typeof el === 'string') return;\n\n  // Touch Events\n  document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n    passive: false,\n    capture\n  });\n  el[domMethod]('touchstart', swiper.onTouchStart, {\n    passive: false\n  });\n  el[domMethod]('pointerdown', swiper.onTouchStart, {\n    passive: false\n  });\n  document[domMethod]('touchmove', swiper.onTouchMove, {\n    passive: false,\n    capture\n  });\n  document[domMethod]('pointermove', swiper.onTouchMove, {\n    passive: false,\n    capture\n  });\n  document[domMethod]('touchend', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerup', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointercancel', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('touchcancel', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerout', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('pointerleave', swiper.onTouchEnd, {\n    passive: true\n  });\n  document[domMethod]('contextmenu', swiper.onTouchEnd, {\n    passive: true\n  });\n\n  // Prevent Links Clicks\n  if (params.preventClicks || params.preventClicksPropagation) {\n    el[domMethod]('click', swiper.onClick, true);\n  }\n  if (params.cssMode) {\n    wrapperEl[domMethod]('scroll', swiper.onScroll);\n  }\n\n  // Resize handler\n  if (params.updateOnWindowResize) {\n    swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n  } else {\n    swiper[swiperMethod]('observerUpdate', onResize, true);\n  }\n\n  // Images loader\n  el[domMethod]('load', swiper.onLoad, {\n    capture: true\n  });\n};\nfunction attachEvents() {\n  const swiper = this;\n  const {\n    params\n  } = swiper;\n  swiper.onTouchStart = onTouchStart.bind(swiper);\n  swiper.onTouchMove = onTouchMove.bind(swiper);\n  swiper.onTouchEnd = onTouchEnd.bind(swiper);\n  swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n  if (params.cssMode) {\n    swiper.onScroll = onScroll.bind(swiper);\n  }\n  swiper.onClick = onClick.bind(swiper);\n  swiper.onLoad = onLoad.bind(swiper);\n  events(swiper, 'on');\n}\nfunction detachEvents() {\n  const swiper = this;\n  events(swiper, 'off');\n}\nvar events$1 = {\n  attachEvents,\n  detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n  return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n  const swiper = this;\n  const {\n    realIndex,\n    initialized,\n    params,\n    el\n  } = swiper;\n  const breakpoints = params.breakpoints;\n  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n  // Get breakpoint for window width and update parameters\n  const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n  const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n  const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n  const wasMultiRow = isGridEnabled(swiper, params);\n  const isMultiRow = isGridEnabled(swiper, breakpointParams);\n  const wasGrabCursor = swiper.params.grabCursor;\n  const isGrabCursor = breakpointParams.grabCursor;\n  const wasEnabled = params.enabled;\n  if (wasMultiRow && !isMultiRow) {\n    el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n    swiper.emitContainerClasses();\n  } else if (!wasMultiRow && isMultiRow) {\n    el.classList.add(`${params.containerModifierClass}grid`);\n    if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n      el.classList.add(`${params.containerModifierClass}grid-column`);\n    }\n    swiper.emitContainerClasses();\n  }\n  if (wasGrabCursor && !isGrabCursor) {\n    swiper.unsetGrabCursor();\n  } else if (!wasGrabCursor && isGrabCursor) {\n    swiper.setGrabCursor();\n  }\n\n  // Toggle navigation, pagination, scrollbar\n  ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n    if (typeof breakpointParams[prop] === 'undefined') return;\n    const wasModuleEnabled = params[prop] && params[prop].enabled;\n    const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n    if (wasModuleEnabled && !isModuleEnabled) {\n      swiper[prop].disable();\n    }\n    if (!wasModuleEnabled && isModuleEnabled) {\n      swiper[prop].enable();\n    }\n  });\n  const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n  const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n  const wasLoop = params.loop;\n  if (directionChanged && initialized) {\n    swiper.changeDirection();\n  }\n  extend(swiper.params, breakpointParams);\n  const isEnabled = swiper.params.enabled;\n  const hasLoop = swiper.params.loop;\n  Object.assign(swiper, {\n    allowTouchMove: swiper.params.allowTouchMove,\n    allowSlideNext: swiper.params.allowSlideNext,\n    allowSlidePrev: swiper.params.allowSlidePrev\n  });\n  if (wasEnabled && !isEnabled) {\n    swiper.disable();\n  } else if (!wasEnabled && isEnabled) {\n    swiper.enable();\n  }\n  swiper.currentBreakpoint = breakpoint;\n  swiper.emit('_beforeBreakpoint', breakpointParams);\n  if (initialized) {\n    if (needsReLoop) {\n      swiper.loopDestroy();\n      swiper.loopCreate(realIndex);\n      swiper.updateSlides();\n    } else if (!wasLoop && hasLoop) {\n      swiper.loopCreate(realIndex);\n      swiper.updateSlides();\n    } else if (wasLoop && !hasLoop) {\n      swiper.loopDestroy();\n    }\n  }\n  swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n  if (base === void 0) {\n    base = 'window';\n  }\n  if (!breakpoints || base === 'container' && !containerEl) return undefined;\n  let breakpoint = false;\n  const window = getWindow();\n  const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n  const points = Object.keys(breakpoints).map(point => {\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\n      const minRatio = parseFloat(point.substr(1));\n      const value = currentHeight * minRatio;\n      return {\n        value,\n        point\n      };\n    }\n    return {\n      value: point,\n      point\n    };\n  });\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n  for (let i = 0; i < points.length; i += 1) {\n    const {\n      point,\n      value\n    } = points[i];\n    if (base === 'window') {\n      if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n        breakpoint = point;\n      }\n    } else if (value <= containerEl.clientWidth) {\n      breakpoint = point;\n    }\n  }\n  return breakpoint || 'max';\n}\n\nvar breakpoints = {\n  setBreakpoint,\n  getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n  const resultClasses = [];\n  entries.forEach(item => {\n    if (typeof item === 'object') {\n      Object.keys(item).forEach(classNames => {\n        if (item[classNames]) {\n          resultClasses.push(prefix + classNames);\n        }\n      });\n    } else if (typeof item === 'string') {\n      resultClasses.push(prefix + item);\n    }\n  });\n  return resultClasses;\n}\nfunction addClasses() {\n  const swiper = this;\n  const {\n    classNames,\n    params,\n    rtl,\n    el,\n    device\n  } = swiper;\n  // prettier-ignore\n  const suffixes = prepareClasses(['initialized', params.direction, {\n    'free-mode': swiper.params.freeMode && params.freeMode.enabled\n  }, {\n    'autoheight': params.autoHeight\n  }, {\n    'rtl': rtl\n  }, {\n    'grid': params.grid && params.grid.rows > 1\n  }, {\n    'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n  }, {\n    'android': device.android\n  }, {\n    'ios': device.ios\n  }, {\n    'css-mode': params.cssMode\n  }, {\n    'centered': params.cssMode && params.centeredSlides\n  }, {\n    'watch-progress': params.watchSlidesProgress\n  }], params.containerModifierClass);\n  classNames.push(...suffixes);\n  el.classList.add(...classNames);\n  swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n  const swiper = this;\n  const {\n    el,\n    classNames\n  } = swiper;\n  if (!el || typeof el === 'string') return;\n  el.classList.remove(...classNames);\n  swiper.emitContainerClasses();\n}\n\nvar classes = {\n  addClasses,\n  removeClasses\n};\n\nfunction checkOverflow() {\n  const swiper = this;\n  const {\n    isLocked: wasLocked,\n    params\n  } = swiper;\n  const {\n    slidesOffsetBefore\n  } = params;\n  if (slidesOffsetBefore) {\n    const lastSlideIndex = swiper.slides.length - 1;\n    const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n    swiper.isLocked = swiper.size > lastSlideRightEdge;\n  } else {\n    swiper.isLocked = swiper.snapGrid.length === 1;\n  }\n  if (params.allowSlideNext === true) {\n    swiper.allowSlideNext = !swiper.isLocked;\n  }\n  if (params.allowSlidePrev === true) {\n    swiper.allowSlidePrev = !swiper.isLocked;\n  }\n  if (wasLocked && wasLocked !== swiper.isLocked) {\n    swiper.isEnd = false;\n  }\n  if (wasLocked !== swiper.isLocked) {\n    swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n  }\n}\nvar checkOverflow$1 = {\n  checkOverflow\n};\n\nvar defaults = {\n  init: true,\n  direction: 'horizontal',\n  oneWayMovement: false,\n  swiperElementNodeName: 'SWIPER-CONTAINER',\n  touchEventsTarget: 'wrapper',\n  initialSlide: 0,\n  speed: 300,\n  cssMode: false,\n  updateOnWindowResize: true,\n  resizeObserver: true,\n  nested: false,\n  createElements: false,\n  eventsPrefix: 'swiper',\n  enabled: true,\n  focusableElements: 'input, select, option, textarea, button, video, label',\n  // Overrides\n  width: null,\n  height: null,\n  //\n  preventInteractionOnTransition: false,\n  // ssr\n  userAgent: null,\n  url: null,\n  // To support iOS's swipe-to-go-back gesture (when being used in-app).\n  edgeSwipeDetection: false,\n  edgeSwipeThreshold: 20,\n  // Autoheight\n  autoHeight: false,\n  // Set wrapper width\n  setWrapperSize: false,\n  // Virtual Translate\n  virtualTranslate: false,\n  // Effects\n  effect: 'slide',\n  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n  // Breakpoints\n  breakpoints: undefined,\n  breakpointsBase: 'window',\n  // Slides grid\n  spaceBetween: 0,\n  slidesPerView: 1,\n  slidesPerGroup: 1,\n  slidesPerGroupSkip: 0,\n  slidesPerGroupAuto: false,\n  centeredSlides: false,\n  centeredSlidesBounds: false,\n  slidesOffsetBefore: 0,\n  // in px\n  slidesOffsetAfter: 0,\n  // in px\n  normalizeSlideIndex: true,\n  centerInsufficientSlides: false,\n  // Disable swiper and hide navigation when container not overflow\n  watchOverflow: true,\n  // Round length\n  roundLengths: false,\n  // Touches\n  touchRatio: 1,\n  touchAngle: 45,\n  simulateTouch: true,\n  shortSwipes: true,\n  longSwipes: true,\n  longSwipesRatio: 0.5,\n  longSwipesMs: 300,\n  followFinger: true,\n  allowTouchMove: true,\n  threshold: 5,\n  touchMoveStopPropagation: false,\n  touchStartPreventDefault: true,\n  touchStartForcePreventDefault: false,\n  touchReleaseOnEdges: false,\n  // Unique Navigation Elements\n  uniqueNavElements: true,\n  // Resistance\n  resistance: true,\n  resistanceRatio: 0.85,\n  // Progress\n  watchSlidesProgress: false,\n  // Cursor\n  grabCursor: false,\n  // Clicks\n  preventClicks: true,\n  preventClicksPropagation: true,\n  slideToClickedSlide: false,\n  // loop\n  loop: false,\n  loopAddBlankSlides: true,\n  loopAdditionalSlides: 0,\n  loopPreventsSliding: true,\n  // rewind\n  rewind: false,\n  // Swiping/no swiping\n  allowSlidePrev: true,\n  allowSlideNext: true,\n  swipeHandler: null,\n  // '.swipe-handler',\n  noSwiping: true,\n  noSwipingClass: 'swiper-no-swiping',\n  noSwipingSelector: null,\n  // Passive Listeners\n  passiveListeners: true,\n  maxBackfaceHiddenSlides: 10,\n  // NS\n  containerModifierClass: 'swiper-',\n  // NEW\n  slideClass: 'swiper-slide',\n  slideBlankClass: 'swiper-slide-blank',\n  slideActiveClass: 'swiper-slide-active',\n  slideVisibleClass: 'swiper-slide-visible',\n  slideFullyVisibleClass: 'swiper-slide-fully-visible',\n  slideNextClass: 'swiper-slide-next',\n  slidePrevClass: 'swiper-slide-prev',\n  wrapperClass: 'swiper-wrapper',\n  lazyPreloaderClass: 'swiper-lazy-preloader',\n  lazyPreloadPrevNext: 0,\n  // Callbacks\n  runCallbacksOnInit: true,\n  // Internals\n  _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n  return function extendParams(obj) {\n    if (obj === void 0) {\n      obj = {};\n    }\n    const moduleParamName = Object.keys(obj)[0];\n    const moduleParams = obj[moduleParamName];\n    if (typeof moduleParams !== 'object' || moduleParams === null) {\n      extend(allModulesParams, obj);\n      return;\n    }\n    if (params[moduleParamName] === true) {\n      params[moduleParamName] = {\n        enabled: true\n      };\n    }\n    if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n      params[moduleParamName].auto = true;\n    }\n    if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n      params[moduleParamName].auto = true;\n    }\n    if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n      extend(allModulesParams, obj);\n      return;\n    }\n    if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n      params[moduleParamName].enabled = true;\n    }\n    if (!params[moduleParamName]) params[moduleParamName] = {\n      enabled: false\n    };\n    extend(allModulesParams, obj);\n  };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n  eventsEmitter,\n  update,\n  translate,\n  transition,\n  slide,\n  loop,\n  grabCursor,\n  events: events$1,\n  breakpoints,\n  checkOverflow: checkOverflow$1,\n  classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n  constructor() {\n    let el;\n    let params;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n      params = args[0];\n    } else {\n      [el, params] = args;\n    }\n    if (!params) params = {};\n    params = extend({}, params);\n    if (el && !params.el) params.el = el;\n    const document = getDocument();\n    if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n      const swipers = [];\n      document.querySelectorAll(params.el).forEach(containerEl => {\n        const newParams = extend({}, params, {\n          el: containerEl\n        });\n        swipers.push(new Swiper(newParams));\n      });\n      // eslint-disable-next-line no-constructor-return\n      return swipers;\n    }\n\n    // Swiper Instance\n    const swiper = this;\n    swiper.__swiper__ = true;\n    swiper.support = getSupport();\n    swiper.device = getDevice({\n      userAgent: params.userAgent\n    });\n    swiper.browser = getBrowser();\n    swiper.eventsListeners = {};\n    swiper.eventsAnyListeners = [];\n    swiper.modules = [...swiper.__modules__];\n    if (params.modules && Array.isArray(params.modules)) {\n      swiper.modules.push(...params.modules);\n    }\n    const allModulesParams = {};\n    swiper.modules.forEach(mod => {\n      mod({\n        params,\n        swiper,\n        extendParams: moduleExtendParams(params, allModulesParams),\n        on: swiper.on.bind(swiper),\n        once: swiper.once.bind(swiper),\n        off: swiper.off.bind(swiper),\n        emit: swiper.emit.bind(swiper)\n      });\n    });\n\n    // Extend defaults with modules params\n    const swiperParams = extend({}, defaults, allModulesParams);\n\n    // Extend defaults with passed params\n    swiper.params = extend({}, swiperParams, extendedDefaults, params);\n    swiper.originalParams = extend({}, swiper.params);\n    swiper.passedParams = extend({}, params);\n\n    // add event listeners\n    if (swiper.params && swiper.params.on) {\n      Object.keys(swiper.params.on).forEach(eventName => {\n        swiper.on(eventName, swiper.params.on[eventName]);\n      });\n    }\n    if (swiper.params && swiper.params.onAny) {\n      swiper.onAny(swiper.params.onAny);\n    }\n\n    // Extend Swiper\n    Object.assign(swiper, {\n      enabled: swiper.params.enabled,\n      el,\n      // Classes\n      classNames: [],\n      // Slides\n      slides: [],\n      slidesGrid: [],\n      snapGrid: [],\n      slidesSizesGrid: [],\n      // isDirection\n      isHorizontal() {\n        return swiper.params.direction === 'horizontal';\n      },\n      isVertical() {\n        return swiper.params.direction === 'vertical';\n      },\n      // Indexes\n      activeIndex: 0,\n      realIndex: 0,\n      //\n      isBeginning: true,\n      isEnd: false,\n      // Props\n      translate: 0,\n      previousTranslate: 0,\n      progress: 0,\n      velocity: 0,\n      animating: false,\n      cssOverflowAdjustment() {\n        // Returns 0 unless `translate` is > 2**23\n        // Should be subtracted from css values to prevent overflow\n        return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n      },\n      // Locks\n      allowSlideNext: swiper.params.allowSlideNext,\n      allowSlidePrev: swiper.params.allowSlidePrev,\n      // Touch Events\n      touchEventsData: {\n        isTouched: undefined,\n        isMoved: undefined,\n        allowTouchCallbacks: undefined,\n        touchStartTime: undefined,\n        isScrolling: undefined,\n        currentTranslate: undefined,\n        startTranslate: undefined,\n        allowThresholdMove: undefined,\n        // Form elements to match\n        focusableElements: swiper.params.focusableElements,\n        // Last click time\n        lastClickTime: 0,\n        clickTimeout: undefined,\n        // Velocities\n        velocities: [],\n        allowMomentumBounce: undefined,\n        startMoving: undefined,\n        pointerId: null,\n        touchId: null\n      },\n      // Clicks\n      allowClick: true,\n      // Touches\n      allowTouchMove: swiper.params.allowTouchMove,\n      touches: {\n        startX: 0,\n        startY: 0,\n        currentX: 0,\n        currentY: 0,\n        diff: 0\n      },\n      // Images\n      imagesToLoad: [],\n      imagesLoaded: 0\n    });\n    swiper.emit('_swiper');\n\n    // Init\n    if (swiper.params.init) {\n      swiper.init();\n    }\n\n    // Return app instance\n    // eslint-disable-next-line no-constructor-return\n    return swiper;\n  }\n  getDirectionLabel(property) {\n    if (this.isHorizontal()) {\n      return property;\n    }\n    // prettier-ignore\n    return {\n      'width': 'height',\n      'margin-top': 'margin-left',\n      'margin-bottom ': 'margin-right',\n      'margin-left': 'margin-top',\n      'margin-right': 'margin-bottom',\n      'padding-left': 'padding-top',\n      'padding-right': 'padding-bottom',\n      'marginRight': 'marginBottom'\n    }[property];\n  }\n  getSlideIndex(slideEl) {\n    const {\n      slidesEl,\n      params\n    } = this;\n    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n    const firstSlideIndex = elementIndex(slides[0]);\n    return elementIndex(slideEl) - firstSlideIndex;\n  }\n  getSlideIndexByData(index) {\n    return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n  }\n  recalcSlides() {\n    const swiper = this;\n    const {\n      slidesEl,\n      params\n    } = swiper;\n    swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n  }\n  enable() {\n    const swiper = this;\n    if (swiper.enabled) return;\n    swiper.enabled = true;\n    if (swiper.params.grabCursor) {\n      swiper.setGrabCursor();\n    }\n    swiper.emit('enable');\n  }\n  disable() {\n    const swiper = this;\n    if (!swiper.enabled) return;\n    swiper.enabled = false;\n    if (swiper.params.grabCursor) {\n      swiper.unsetGrabCursor();\n    }\n    swiper.emit('disable');\n  }\n  setProgress(progress, speed) {\n    const swiper = this;\n    progress = Math.min(Math.max(progress, 0), 1);\n    const min = swiper.minTranslate();\n    const max = swiper.maxTranslate();\n    const current = (max - min) * progress + min;\n    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n    swiper.updateActiveIndex();\n    swiper.updateSlidesClasses();\n  }\n  emitContainerClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const cls = swiper.el.className.split(' ').filter(className => {\n      return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n    });\n    swiper.emit('_containerClasses', cls.join(' '));\n  }\n  getSlideClasses(slideEl) {\n    const swiper = this;\n    if (swiper.destroyed) return '';\n    return slideEl.className.split(' ').filter(className => {\n      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n    }).join(' ');\n  }\n  emitSlidesClasses() {\n    const swiper = this;\n    if (!swiper.params._emitClasses || !swiper.el) return;\n    const updates = [];\n    swiper.slides.forEach(slideEl => {\n      const classNames = swiper.getSlideClasses(slideEl);\n      updates.push({\n        slideEl,\n        classNames\n      });\n      swiper.emit('_slideClass', slideEl, classNames);\n    });\n    swiper.emit('_slideClasses', updates);\n  }\n  slidesPerViewDynamic(view, exact) {\n    if (view === void 0) {\n      view = 'current';\n    }\n    if (exact === void 0) {\n      exact = false;\n    }\n    const swiper = this;\n    const {\n      params,\n      slides,\n      slidesGrid,\n      slidesSizesGrid,\n      size: swiperSize,\n      activeIndex\n    } = swiper;\n    let spv = 1;\n    if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n    if (params.centeredSlides) {\n      let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n      let breakLoop;\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += Math.ceil(slides[i].swiperSlideSize);\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\n        if (slides[i] && !breakLoop) {\n          slideSize += slides[i].swiperSlideSize;\n          spv += 1;\n          if (slideSize > swiperSize) breakLoop = true;\n        }\n      }\n    } else {\n      // eslint-disable-next-line\n      if (view === 'current') {\n        for (let i = activeIndex + 1; i < slides.length; i += 1) {\n          const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      } else {\n        // previous\n        for (let i = activeIndex - 1; i >= 0; i -= 1) {\n          const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n          if (slideInView) {\n            spv += 1;\n          }\n        }\n      }\n    }\n    return spv;\n  }\n  update() {\n    const swiper = this;\n    if (!swiper || swiper.destroyed) return;\n    const {\n      snapGrid,\n      params\n    } = swiper;\n    // Breakpoints\n    if (params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n    [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      }\n    });\n    swiper.updateSize();\n    swiper.updateSlides();\n    swiper.updateProgress();\n    swiper.updateSlidesClasses();\n    function setTranslate() {\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n      swiper.setTranslate(newTranslate);\n      swiper.updateActiveIndex();\n      swiper.updateSlidesClasses();\n    }\n    let translated;\n    if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n      setTranslate();\n      if (params.autoHeight) {\n        swiper.updateAutoHeight();\n      }\n    } else {\n      if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n        const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n        translated = swiper.slideTo(slides.length - 1, 0, false, true);\n      } else {\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n      }\n      if (!translated) {\n        setTranslate();\n      }\n    }\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n      swiper.checkOverflow();\n    }\n    swiper.emit('update');\n  }\n  changeDirection(newDirection, needUpdate) {\n    if (needUpdate === void 0) {\n      needUpdate = true;\n    }\n    const swiper = this;\n    const currentDirection = swiper.params.direction;\n    if (!newDirection) {\n      // eslint-disable-next-line\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n    }\n    if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n      return swiper;\n    }\n    swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n    swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n    swiper.emitContainerClasses();\n    swiper.params.direction = newDirection;\n    swiper.slides.forEach(slideEl => {\n      if (newDirection === 'vertical') {\n        slideEl.style.width = '';\n      } else {\n        slideEl.style.height = '';\n      }\n    });\n    swiper.emit('changeDirection');\n    if (needUpdate) swiper.update();\n    return swiper;\n  }\n  changeLanguageDirection(direction) {\n    const swiper = this;\n    if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n    swiper.rtl = direction === 'rtl';\n    swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n    if (swiper.rtl) {\n      swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n      swiper.el.dir = 'rtl';\n    } else {\n      swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n      swiper.el.dir = 'ltr';\n    }\n    swiper.update();\n  }\n  mount(element) {\n    const swiper = this;\n    if (swiper.mounted) return true;\n\n    // Find el\n    let el = element || swiper.params.el;\n    if (typeof el === 'string') {\n      el = document.querySelector(el);\n    }\n    if (!el) {\n      return false;\n    }\n    el.swiper = swiper;\n    if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n      swiper.isElement = true;\n    }\n    const getWrapperSelector = () => {\n      return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n    };\n    const getWrapper = () => {\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n        const res = el.shadowRoot.querySelector(getWrapperSelector());\n        // Children needs to return slot items\n        return res;\n      }\n      return elementChildren(el, getWrapperSelector())[0];\n    };\n    // Find Wrapper\n    let wrapperEl = getWrapper();\n    if (!wrapperEl && swiper.params.createElements) {\n      wrapperEl = createElement('div', swiper.params.wrapperClass);\n      el.append(wrapperEl);\n      elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n        wrapperEl.append(slideEl);\n      });\n    }\n    Object.assign(swiper, {\n      el,\n      wrapperEl,\n      slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n      hostEl: swiper.isElement ? el.parentNode.host : el,\n      mounted: true,\n      // RTL\n      rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n      wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n    });\n    return true;\n  }\n  init(el) {\n    const swiper = this;\n    if (swiper.initialized) return swiper;\n    const mounted = swiper.mount(el);\n    if (mounted === false) return swiper;\n    swiper.emit('beforeInit');\n\n    // Set breakpoint\n    if (swiper.params.breakpoints) {\n      swiper.setBreakpoint();\n    }\n\n    // Add Classes\n    swiper.addClasses();\n\n    // Update size\n    swiper.updateSize();\n\n    // Update slides\n    swiper.updateSlides();\n    if (swiper.params.watchOverflow) {\n      swiper.checkOverflow();\n    }\n\n    // Set Grab Cursor\n    if (swiper.params.grabCursor && swiper.enabled) {\n      swiper.setGrabCursor();\n    }\n\n    // Slide To Initial Slide\n    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n      swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n    } else {\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n    }\n\n    // Create loop\n    if (swiper.params.loop) {\n      swiper.loopCreate();\n    }\n\n    // Attach events\n    swiper.attachEvents();\n    const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n    if (swiper.isElement) {\n      lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n    }\n    lazyElements.forEach(imageEl => {\n      if (imageEl.complete) {\n        processLazyPreloader(swiper, imageEl);\n      } else {\n        imageEl.addEventListener('load', e => {\n          processLazyPreloader(swiper, e.target);\n        });\n      }\n    });\n    preload(swiper);\n\n    // Init Flag\n    swiper.initialized = true;\n    preload(swiper);\n\n    // Emit\n    swiper.emit('init');\n    swiper.emit('afterInit');\n    return swiper;\n  }\n  destroy(deleteInstance, cleanStyles) {\n    if (deleteInstance === void 0) {\n      deleteInstance = true;\n    }\n    if (cleanStyles === void 0) {\n      cleanStyles = true;\n    }\n    const swiper = this;\n    const {\n      params,\n      el,\n      wrapperEl,\n      slides\n    } = swiper;\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n      return null;\n    }\n    swiper.emit('beforeDestroy');\n\n    // Init Flag\n    swiper.initialized = false;\n\n    // Detach events\n    swiper.detachEvents();\n\n    // Destroy loop\n    if (params.loop) {\n      swiper.loopDestroy();\n    }\n\n    // Cleanup styles\n    if (cleanStyles) {\n      swiper.removeClasses();\n      if (el && typeof el !== 'string') {\n        el.removeAttribute('style');\n      }\n      if (wrapperEl) {\n        wrapperEl.removeAttribute('style');\n      }\n      if (slides && slides.length) {\n        slides.forEach(slideEl => {\n          slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n          slideEl.removeAttribute('style');\n          slideEl.removeAttribute('data-swiper-slide-index');\n        });\n      }\n    }\n    swiper.emit('destroy');\n\n    // Detach emitter events\n    Object.keys(swiper.eventsListeners).forEach(eventName => {\n      swiper.off(eventName);\n    });\n    if (deleteInstance !== false) {\n      if (swiper.el && typeof swiper.el !== 'string') {\n        swiper.el.swiper = null;\n      }\n      deleteProps(swiper);\n    }\n    swiper.destroyed = true;\n    return null;\n  }\n  static extendDefaults(newDefaults) {\n    extend(extendedDefaults, newDefaults);\n  }\n  static get extendedDefaults() {\n    return extendedDefaults;\n  }\n  static get defaults() {\n    return defaults;\n  }\n  static installModule(mod) {\n    if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n    const modules = Swiper.prototype.__modules__;\n    if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n      modules.push(mod);\n    }\n  }\n  static use(module) {\n    if (Array.isArray(module)) {\n      module.forEach(m => Swiper.installModule(m));\n      return Swiper;\n    }\n    Swiper.installModule(module);\n    return Swiper;\n  }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n  Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n  });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n  if (swiper.params.createElements) {\n    Object.keys(checkProps).forEach(key => {\n      if (!params[key] && params.auto === true) {\n        let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n        if (!element) {\n          element = createElement('div', checkProps[key]);\n          element.className = checkProps[key];\n          swiper.el.append(element);\n        }\n        params[key] = element;\n        originalParams[key] = element;\n      }\n    });\n  }\n  return params;\n}\n\nexport { createElementIfNotDefined as c };\n","import { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction Navigation(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  extendParams({\n    navigation: {\n      nextEl: null,\n      prevEl: null,\n      hideOnClick: false,\n      disabledClass: 'swiper-button-disabled',\n      hiddenClass: 'swiper-button-hidden',\n      lockClass: 'swiper-button-lock',\n      navigationDisabledClass: 'swiper-navigation-disabled'\n    }\n  });\n  swiper.navigation = {\n    nextEl: null,\n    prevEl: null\n  };\n  function getEl(el) {\n    let res;\n    if (el && typeof el === 'string' && swiper.isElement) {\n      res = swiper.el.querySelector(el) || swiper.hostEl.querySelector(el);\n      if (res) return res;\n    }\n    if (el) {\n      if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n      if (swiper.params.uniqueNavElements && typeof el === 'string' && res && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n        res = swiper.el.querySelector(el);\n      } else if (res && res.length === 1) {\n        res = res[0];\n      }\n    }\n    if (el && !res) return el;\n    // if (Array.isArray(res) && res.length === 1) res = res[0];\n    return res;\n  }\n  function toggleEl(el, disabled) {\n    const params = swiper.params.navigation;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      if (subEl) {\n        subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n        if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n        if (swiper.params.watchOverflow && swiper.enabled) {\n          subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n        }\n      }\n    });\n  }\n  function update() {\n    // Update Navigation Buttons\n    const {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    if (swiper.params.loop) {\n      toggleEl(prevEl, false);\n      toggleEl(nextEl, false);\n      return;\n    }\n    toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n    toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n  }\n  function onPrevClick(e) {\n    e.preventDefault();\n    if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n    swiper.slidePrev();\n    emit('navigationPrev');\n  }\n  function onNextClick(e) {\n    e.preventDefault();\n    if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n    swiper.slideNext();\n    emit('navigationNext');\n  }\n  function init() {\n    const params = swiper.params.navigation;\n    swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n      nextEl: 'swiper-button-next',\n      prevEl: 'swiper-button-prev'\n    });\n    if (!(params.nextEl || params.prevEl)) return;\n    let nextEl = getEl(params.nextEl);\n    let prevEl = getEl(params.prevEl);\n    Object.assign(swiper.navigation, {\n      nextEl,\n      prevEl\n    });\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const initButton = (el, dir) => {\n      if (el) {\n        el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n      }\n      if (!swiper.enabled && el) {\n        el.classList.add(...params.lockClass.split(' '));\n      }\n    };\n    nextEl.forEach(el => initButton(el, 'next'));\n    prevEl.forEach(el => initButton(el, 'prev'));\n  }\n  function destroy() {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const destroyButton = (el, dir) => {\n      el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n      el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n    };\n    nextEl.forEach(el => destroyButton(el, 'next'));\n    prevEl.forEach(el => destroyButton(el, 'prev'));\n  }\n  on('init', () => {\n    if (swiper.params.navigation.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      update();\n    }\n  });\n  on('toEdge fromEdge lock unlock', () => {\n    update();\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    if (swiper.enabled) {\n      update();\n      return;\n    }\n    [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.add(swiper.params.navigation.lockClass));\n  });\n  on('click', (_s, e) => {\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    const targetEl = e.target;\n    let targetIsButton = prevEl.includes(targetEl) || nextEl.includes(targetEl);\n    if (swiper.isElement && !targetIsButton) {\n      const path = e.path || e.composedPath && e.composedPath();\n      if (path) {\n        targetIsButton = path.find(pathEl => nextEl.includes(pathEl) || prevEl.includes(pathEl));\n      }\n    }\n    if (swiper.params.navigation.hideOnClick && !targetIsButton) {\n      if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n      let isHidden;\n      if (nextEl.length) {\n        isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n      } else if (prevEl.length) {\n        isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n      }\n      if (isHidden === true) {\n        emit('navigationShow');\n      } else {\n        emit('navigationHide');\n      }\n      [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n    }\n  });\n  const enable = () => {\n    swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n    init();\n    update();\n  };\n  const disable = () => {\n    swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n    destroy();\n  };\n  Object.assign(swiper.navigation, {\n    enable,\n    disable,\n    update,\n    init,\n    destroy\n  });\n}\n\nexport { Navigation as default };\n","function classesToSelector(classes) {\n  if (classes === void 0) {\n    classes = '';\n  }\n  return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n  .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, f as elementOuterSize, h as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on,\n    emit\n  } = _ref;\n  const pfx = 'swiper-pagination';\n  extendParams({\n    pagination: {\n      el: null,\n      bulletElement: 'span',\n      clickable: false,\n      hideOnClick: false,\n      renderBullet: null,\n      renderProgressbar: null,\n      renderFraction: null,\n      renderCustom: null,\n      progressbarOpposite: false,\n      type: 'bullets',\n      // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n      dynamicBullets: false,\n      dynamicMainBullets: 1,\n      formatFractionCurrent: number => number,\n      formatFractionTotal: number => number,\n      bulletClass: `${pfx}-bullet`,\n      bulletActiveClass: `${pfx}-bullet-active`,\n      modifierClass: `${pfx}-`,\n      currentClass: `${pfx}-current`,\n      totalClass: `${pfx}-total`,\n      hiddenClass: `${pfx}-hidden`,\n      progressbarFillClass: `${pfx}-progressbar-fill`,\n      progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n      clickableClass: `${pfx}-clickable`,\n      lockClass: `${pfx}-lock`,\n      horizontalClass: `${pfx}-horizontal`,\n      verticalClass: `${pfx}-vertical`,\n      paginationDisabledClass: `${pfx}-disabled`\n    }\n  });\n  swiper.pagination = {\n    el: null,\n    bullets: []\n  };\n  let bulletSize;\n  let dynamicBulletIndex = 0;\n  function isPaginationDisabled() {\n    return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n  }\n  function setSideBullets(bulletEl, position) {\n    const {\n      bulletActiveClass\n    } = swiper.params.pagination;\n    if (!bulletEl) return;\n    bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n    if (bulletEl) {\n      bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n      bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n      if (bulletEl) {\n        bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n      }\n    }\n  }\n  function getMoveDirection(prevIndex, nextIndex, length) {\n    prevIndex = prevIndex % length;\n    nextIndex = nextIndex % length;\n    if (nextIndex === prevIndex + 1) {\n      return 'next';\n    } else if (nextIndex === prevIndex - 1) {\n      return 'previous';\n    }\n    return;\n  }\n  function onBulletClick(e) {\n    const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n    if (!bulletEl) {\n      return;\n    }\n    e.preventDefault();\n    const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n    if (swiper.params.loop) {\n      if (swiper.realIndex === index) return;\n      const moveDirection = getMoveDirection(swiper.realIndex, index, swiper.slides.length);\n      if (moveDirection === 'next') {\n        swiper.slideNext();\n      } else if (moveDirection === 'previous') {\n        swiper.slidePrev();\n      } else {\n        swiper.slideToLoop(index);\n      }\n    } else {\n      swiper.slideTo(index);\n    }\n  }\n  function update() {\n    // Render || Update Pagination bullets/items\n    const rtl = swiper.rtl;\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    let el = swiper.pagination.el;\n    el = makeElementsArray(el);\n    // Current/Total\n    let current;\n    let previousIndex;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n    const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n    if (swiper.params.loop) {\n      previousIndex = swiper.previousRealIndex || 0;\n      current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n    } else if (typeof swiper.snapIndex !== 'undefined') {\n      current = swiper.snapIndex;\n      previousIndex = swiper.previousSnapIndex;\n    } else {\n      previousIndex = swiper.previousIndex || 0;\n      current = swiper.activeIndex || 0;\n    }\n    // Types\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n      const bullets = swiper.pagination.bullets;\n      let firstIndex;\n      let lastIndex;\n      let midIndex;\n      if (params.dynamicBullets) {\n        bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n        el.forEach(subEl => {\n          subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n        });\n        if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n          dynamicBulletIndex += current - (previousIndex || 0);\n          if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n            dynamicBulletIndex = params.dynamicMainBullets - 1;\n          } else if (dynamicBulletIndex < 0) {\n            dynamicBulletIndex = 0;\n          }\n        }\n        firstIndex = Math.max(current - dynamicBulletIndex, 0);\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n        midIndex = (lastIndex + firstIndex) / 2;\n      }\n      bullets.forEach(bulletEl => {\n        const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n        bulletEl.classList.remove(...classesToRemove);\n      });\n      if (el.length > 1) {\n        bullets.forEach(bullet => {\n          const bulletIndex = elementIndex(bullet);\n          if (bulletIndex === current) {\n            bullet.classList.add(...params.bulletActiveClass.split(' '));\n          } else if (swiper.isElement) {\n            bullet.setAttribute('part', 'bullet');\n          }\n          if (params.dynamicBullets) {\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n              bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n            }\n            if (bulletIndex === firstIndex) {\n              setSideBullets(bullet, 'prev');\n            }\n            if (bulletIndex === lastIndex) {\n              setSideBullets(bullet, 'next');\n            }\n          }\n        });\n      } else {\n        const bullet = bullets[current];\n        if (bullet) {\n          bullet.classList.add(...params.bulletActiveClass.split(' '));\n        }\n        if (swiper.isElement) {\n          bullets.forEach((bulletEl, bulletIndex) => {\n            bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n          });\n        }\n        if (params.dynamicBullets) {\n          const firstDisplayedBullet = bullets[firstIndex];\n          const lastDisplayedBullet = bullets[lastIndex];\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\n            if (bullets[i]) {\n              bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n            }\n          }\n          setSideBullets(firstDisplayedBullet, 'prev');\n          setSideBullets(lastDisplayedBullet, 'next');\n        }\n      }\n      if (params.dynamicBullets) {\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n        const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n        const offsetProp = rtl ? 'right' : 'left';\n        bullets.forEach(bullet => {\n          bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n        });\n      }\n    }\n    el.forEach((subEl, subElIndex) => {\n      if (params.type === 'fraction') {\n        subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n          fractionEl.textContent = params.formatFractionCurrent(current + 1);\n        });\n        subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n          totalEl.textContent = params.formatFractionTotal(total);\n        });\n      }\n      if (params.type === 'progressbar') {\n        let progressbarDirection;\n        if (params.progressbarOpposite) {\n          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n        } else {\n          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n        }\n        const scale = (current + 1) / total;\n        let scaleX = 1;\n        let scaleY = 1;\n        if (progressbarDirection === 'horizontal') {\n          scaleX = scale;\n        } else {\n          scaleY = scale;\n        }\n        subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n          progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n          progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n        });\n      }\n      if (params.type === 'custom' && params.renderCustom) {\n        subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n        if (subElIndex === 0) emit('paginationRender', subEl);\n      } else {\n        if (subElIndex === 0) emit('paginationRender', subEl);\n        emit('paginationUpdate', subEl);\n      }\n      if (swiper.params.watchOverflow && swiper.enabled) {\n        subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n      }\n    });\n  }\n  function render() {\n    // Render Container\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n    let el = swiper.pagination.el;\n    el = makeElementsArray(el);\n    let paginationHTML = '';\n    if (params.type === 'bullets') {\n      let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n      if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n        numberOfBullets = slidesLength;\n      }\n      for (let i = 0; i < numberOfBullets; i += 1) {\n        if (params.renderBullet) {\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n        } else {\n          // prettier-ignore\n          paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n        }\n      }\n    }\n    if (params.type === 'fraction') {\n      if (params.renderFraction) {\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n      } else {\n        paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n      }\n    }\n    if (params.type === 'progressbar') {\n      if (params.renderProgressbar) {\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n      } else {\n        paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n      }\n    }\n    swiper.pagination.bullets = [];\n    el.forEach(subEl => {\n      if (params.type !== 'custom') {\n        subEl.innerHTML = paginationHTML || '';\n      }\n      if (params.type === 'bullets') {\n        swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n      }\n    });\n    if (params.type !== 'custom') {\n      emit('paginationRender', el[0]);\n    }\n  }\n  function init() {\n    swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n      el: 'swiper-pagination'\n    });\n    const params = swiper.params.pagination;\n    if (!params.el) return;\n    let el;\n    if (typeof params.el === 'string' && swiper.isElement) {\n      el = swiper.el.querySelector(params.el);\n    }\n    if (!el && typeof params.el === 'string') {\n      el = [...document.querySelectorAll(params.el)];\n    }\n    if (!el) {\n      el = params.el;\n    }\n    if (!el || el.length === 0) return;\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n      el = [...swiper.el.querySelectorAll(params.el)];\n      // check if it belongs to another nested Swiper\n      if (el.length > 1) {\n        el = el.filter(subEl => {\n          if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n          return true;\n        })[0];\n      }\n    }\n    if (Array.isArray(el) && el.length === 1) el = el[0];\n    Object.assign(swiper.pagination, {\n      el\n    });\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      if (params.type === 'bullets' && params.clickable) {\n        subEl.classList.add(...(params.clickableClass || '').split(' '));\n      }\n      subEl.classList.add(params.modifierClass + params.type);\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n      if (params.type === 'bullets' && params.dynamicBullets) {\n        subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n        dynamicBulletIndex = 0;\n        if (params.dynamicMainBullets < 1) {\n          params.dynamicMainBullets = 1;\n        }\n      }\n      if (params.type === 'progressbar' && params.progressbarOpposite) {\n        subEl.classList.add(params.progressbarOppositeClass);\n      }\n      if (params.clickable) {\n        subEl.addEventListener('click', onBulletClick);\n      }\n      if (!swiper.enabled) {\n        subEl.classList.add(params.lockClass);\n      }\n    });\n  }\n  function destroy() {\n    const params = swiper.params.pagination;\n    if (isPaginationDisabled()) return;\n    let el = swiper.pagination.el;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => {\n        subEl.classList.remove(params.hiddenClass);\n        subEl.classList.remove(params.modifierClass + params.type);\n        subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n        if (params.clickable) {\n          subEl.classList.remove(...(params.clickableClass || '').split(' '));\n          subEl.removeEventListener('click', onBulletClick);\n        }\n      });\n    }\n    if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n  }\n  on('changeDirection', () => {\n    if (!swiper.pagination || !swiper.pagination.el) return;\n    const params = swiper.params.pagination;\n    let {\n      el\n    } = swiper.pagination;\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.classList.remove(params.horizontalClass, params.verticalClass);\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n    });\n  });\n  on('init', () => {\n    if (swiper.params.pagination.enabled === false) {\n      // eslint-disable-next-line\n      disable();\n    } else {\n      init();\n      render();\n      update();\n    }\n  });\n  on('activeIndexChange', () => {\n    if (typeof swiper.snapIndex === 'undefined') {\n      update();\n    }\n  });\n  on('snapIndexChange', () => {\n    update();\n  });\n  on('snapGridLengthChange', () => {\n    render();\n    update();\n  });\n  on('destroy', () => {\n    destroy();\n  });\n  on('enable disable', () => {\n    let {\n      el\n    } = swiper.pagination;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n    }\n  });\n  on('lock unlock', () => {\n    update();\n  });\n  on('click', (_s, e) => {\n    const targetEl = e.target;\n    const el = makeElementsArray(swiper.pagination.el);\n    if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n      if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n      const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n      if (isHidden === true) {\n        emit('paginationShow');\n      } else {\n        emit('paginationHide');\n      }\n      el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n    }\n  });\n  const enable = () => {\n    swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n    let {\n      el\n    } = swiper.pagination;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n    }\n    init();\n    render();\n    update();\n  };\n  const disable = () => {\n    swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n    let {\n      el\n    } = swiper.pagination;\n    if (el) {\n      el = makeElementsArray(el);\n      el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n    }\n    destroy();\n  };\n  Object.assign(swiper.pagination, {\n    enable,\n    disable,\n    render,\n    update,\n    init,\n    destroy\n  });\n}\n\nexport { Pagination as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElement, h as elementIndex, m as makeElementsArray } from '../shared/utils.mjs';\n\nfunction A11y(_ref) {\n  let {\n    swiper,\n    extendParams,\n    on\n  } = _ref;\n  extendParams({\n    a11y: {\n      enabled: true,\n      notificationClass: 'swiper-notification',\n      prevSlideMessage: 'Previous slide',\n      nextSlideMessage: 'Next slide',\n      firstSlideMessage: 'This is the first slide',\n      lastSlideMessage: 'This is the last slide',\n      paginationBulletMessage: 'Go to slide {{index}}',\n      slideLabelMessage: '{{index}} / {{slidesLength}}',\n      containerMessage: null,\n      containerRoleDescriptionMessage: null,\n      containerRole: null,\n      itemRoleDescriptionMessage: null,\n      slideRole: 'group',\n      id: null,\n      scrollOnFocus: true\n    }\n  });\n  swiper.a11y = {\n    clicked: false\n  };\n  let liveRegion = null;\n  let preventFocusHandler;\n  let focusTargetSlideEl;\n  let visibilityChangedTimestamp = new Date().getTime();\n  function notify(message) {\n    const notification = liveRegion;\n    if (notification.length === 0) return;\n    notification.innerHTML = '';\n    notification.innerHTML = message;\n  }\n  function getRandomNumber(size) {\n    if (size === void 0) {\n      size = 16;\n    }\n    const randomChar = () => Math.round(16 * Math.random()).toString(16);\n    return 'x'.repeat(size).replace(/x/g, randomChar);\n  }\n  function makeElFocusable(el) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('tabIndex', '0');\n    });\n  }\n  function makeElNotFocusable(el) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('tabIndex', '-1');\n    });\n  }\n  function addElRole(el, role) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('role', role);\n    });\n  }\n  function addElRoleDescription(el, description) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-roledescription', description);\n    });\n  }\n  function addElControls(el, controls) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-controls', controls);\n    });\n  }\n  function addElLabel(el, label) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-label', label);\n    });\n  }\n  function addElId(el, id) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('id', id);\n    });\n  }\n  function addElLive(el, live) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-live', live);\n    });\n  }\n  function disableEl(el) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-disabled', true);\n    });\n  }\n  function enableEl(el) {\n    el = makeElementsArray(el);\n    el.forEach(subEl => {\n      subEl.setAttribute('aria-disabled', false);\n    });\n  }\n  function onEnterOrSpaceKey(e) {\n    if (e.keyCode !== 13 && e.keyCode !== 32) return;\n    const params = swiper.params.a11y;\n    const targetEl = e.target;\n    if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\n      if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;\n    }\n    if (swiper.navigation && swiper.navigation.prevEl && swiper.navigation.nextEl) {\n      const prevEls = makeElementsArray(swiper.navigation.prevEl);\n      const nextEls = makeElementsArray(swiper.navigation.nextEl);\n      if (nextEls.includes(targetEl)) {\n        if (!(swiper.isEnd && !swiper.params.loop)) {\n          swiper.slideNext();\n        }\n        if (swiper.isEnd) {\n          notify(params.lastSlideMessage);\n        } else {\n          notify(params.nextSlideMessage);\n        }\n      }\n      if (prevEls.includes(targetEl)) {\n        if (!(swiper.isBeginning && !swiper.params.loop)) {\n          swiper.slidePrev();\n        }\n        if (swiper.isBeginning) {\n          notify(params.firstSlideMessage);\n        } else {\n          notify(params.prevSlideMessage);\n        }\n      }\n    }\n    if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) {\n      targetEl.click();\n    }\n  }\n  function updateNavigation() {\n    if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n    const {\n      nextEl,\n      prevEl\n    } = swiper.navigation;\n    if (prevEl) {\n      if (swiper.isBeginning) {\n        disableEl(prevEl);\n        makeElNotFocusable(prevEl);\n      } else {\n        enableEl(prevEl);\n        makeElFocusable(prevEl);\n      }\n    }\n    if (nextEl) {\n      if (swiper.isEnd) {\n        disableEl(nextEl);\n        makeElNotFocusable(nextEl);\n      } else {\n        enableEl(nextEl);\n        makeElFocusable(nextEl);\n      }\n    }\n  }\n  function hasPagination() {\n    return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n  }\n  function hasClickablePagination() {\n    return hasPagination() && swiper.params.pagination.clickable;\n  }\n  function updatePagination() {\n    const params = swiper.params.a11y;\n    if (!hasPagination()) return;\n    swiper.pagination.bullets.forEach(bulletEl => {\n      if (swiper.params.pagination.clickable) {\n        makeElFocusable(bulletEl);\n        if (!swiper.params.pagination.renderBullet) {\n          addElRole(bulletEl, 'button');\n          addElLabel(bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, elementIndex(bulletEl) + 1));\n        }\n      }\n      if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) {\n        bulletEl.setAttribute('aria-current', 'true');\n      } else {\n        bulletEl.removeAttribute('aria-current');\n      }\n    });\n  }\n  const initNavEl = (el, wrapperId, message) => {\n    makeElFocusable(el);\n    if (el.tagName !== 'BUTTON') {\n      addElRole(el, 'button');\n      el.addEventListener('keydown', onEnterOrSpaceKey);\n    }\n    addElLabel(el, message);\n    addElControls(el, wrapperId);\n  };\n  const handlePointerDown = e => {\n    if (focusTargetSlideEl && focusTargetSlideEl !== e.target && !focusTargetSlideEl.contains(e.target)) {\n      preventFocusHandler = true;\n    }\n    swiper.a11y.clicked = true;\n  };\n  const handlePointerUp = () => {\n    preventFocusHandler = false;\n    requestAnimationFrame(() => {\n      requestAnimationFrame(() => {\n        if (!swiper.destroyed) {\n          swiper.a11y.clicked = false;\n        }\n      });\n    });\n  };\n  const onVisibilityChange = e => {\n    visibilityChangedTimestamp = new Date().getTime();\n  };\n  const handleFocus = e => {\n    if (swiper.a11y.clicked || !swiper.params.a11y.scrollOnFocus) return;\n    if (new Date().getTime() - visibilityChangedTimestamp < 100) return;\n    const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n    if (!slideEl || !swiper.slides.includes(slideEl)) return;\n    focusTargetSlideEl = slideEl;\n    const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n    const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n    if (isActive || isVisible) return;\n    if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n    if (swiper.isHorizontal()) {\n      swiper.el.scrollLeft = 0;\n    } else {\n      swiper.el.scrollTop = 0;\n    }\n    requestAnimationFrame(() => {\n      if (preventFocusHandler) return;\n      if (swiper.params.loop) {\n        swiper.slideToLoop(parseInt(slideEl.getAttribute('data-swiper-slide-index')), 0);\n      } else {\n        swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n      }\n      preventFocusHandler = false;\n    });\n  };\n  const initSlides = () => {\n    const params = swiper.params.a11y;\n    if (params.itemRoleDescriptionMessage) {\n      addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\n    }\n    if (params.slideRole) {\n      addElRole(swiper.slides, params.slideRole);\n    }\n    const slidesLength = swiper.slides.length;\n    if (params.slideLabelMessage) {\n      swiper.slides.forEach((slideEl, index) => {\n        const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;\n        const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n        addElLabel(slideEl, ariaLabelMessage);\n      });\n    }\n  };\n  const init = () => {\n    const params = swiper.params.a11y;\n    swiper.el.append(liveRegion);\n\n    // Container\n    const containerEl = swiper.el;\n    if (params.containerRoleDescriptionMessage) {\n      addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\n    }\n    if (params.containerMessage) {\n      addElLabel(containerEl, params.containerMessage);\n    }\n    if (params.containerRole) {\n      addElRole(containerEl, params.containerRole);\n    }\n\n    // Wrapper\n    const wrapperEl = swiper.wrapperEl;\n    const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n    const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n    addElId(wrapperEl, wrapperId);\n    addElLive(wrapperEl, live);\n\n    // Slide\n    initSlides();\n\n    // Navigation\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation ? swiper.navigation : {};\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    if (nextEl) {\n      nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));\n    }\n    if (prevEl) {\n      prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));\n    }\n\n    // Pagination\n    if (hasClickablePagination()) {\n      const paginationEl = makeElementsArray(swiper.pagination.el);\n      paginationEl.forEach(el => {\n        el.addEventListener('keydown', onEnterOrSpaceKey);\n      });\n    }\n\n    // Tab focus\n    const document = getDocument();\n    document.addEventListener('visibilitychange', onVisibilityChange);\n    swiper.el.addEventListener('focus', handleFocus, true);\n    swiper.el.addEventListener('focus', handleFocus, true);\n    swiper.el.addEventListener('pointerdown', handlePointerDown, true);\n    swiper.el.addEventListener('pointerup', handlePointerUp, true);\n  };\n  function destroy() {\n    if (liveRegion) liveRegion.remove();\n    let {\n      nextEl,\n      prevEl\n    } = swiper.navigation ? swiper.navigation : {};\n    nextEl = makeElementsArray(nextEl);\n    prevEl = makeElementsArray(prevEl);\n    if (nextEl) {\n      nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n    }\n    if (prevEl) {\n      prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n    }\n\n    // Pagination\n    if (hasClickablePagination()) {\n      const paginationEl = makeElementsArray(swiper.pagination.el);\n      paginationEl.forEach(el => {\n        el.removeEventListener('keydown', onEnterOrSpaceKey);\n      });\n    }\n    const document = getDocument();\n    document.removeEventListener('visibilitychange', onVisibilityChange);\n    // Tab focus\n    if (swiper.el && typeof swiper.el !== 'string') {\n      swiper.el.removeEventListener('focus', handleFocus, true);\n      swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n      swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n    }\n  }\n  on('beforeInit', () => {\n    liveRegion = createElement('span', swiper.params.a11y.notificationClass);\n    liveRegion.setAttribute('aria-live', 'assertive');\n    liveRegion.setAttribute('aria-atomic', 'true');\n  });\n  on('afterInit', () => {\n    if (!swiper.params.a11y.enabled) return;\n    init();\n  });\n  on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n    if (!swiper.params.a11y.enabled) return;\n    initSlides();\n  });\n  on('fromEdge toEdge afterInit lock unlock', () => {\n    if (!swiper.params.a11y.enabled) return;\n    updateNavigation();\n  });\n  on('paginationUpdate', () => {\n    if (!swiper.params.a11y.enabled) return;\n    updatePagination();\n  });\n  on('destroy', () => {\n    if (!swiper.params.a11y.enabled) return;\n    destroy();\n  });\n}\n\nexport { A11y as default };\n","import getFormattedClassnames from 'utils/getFormattedClassnames';\nimport breakpoints from 'utils/breakpoints';\nimport { componentProvider } from 'js-component-framework';\nimport Carousel from './carousel';\nimport moduleStyles from './carousel.module.scss';\nimport './carousel.scss';\n\nconst carouselClassnames = sciencenewsClassnames.carousel;\nconst carouselSelectors = getFormattedClassnames(carouselClassnames);\n\n/* eslint-disable global-require, import/no-dynamic-require, import/no-webpack-loader-syntax */\nconst previous = require('!svg-inline-loader!./previous.svg');\nconst next = require('!svg-inline-loader!./next.svg');\n/* eslint-enable */\n\nconst CarouselConfig = {\n  name: 'carousel',\n  component: Carousel,\n  querySelector: {\n    swiper: '.swiper',\n    controlsWrapper: carouselSelectors.controlsWrapper,\n  },\n  querySelectorAll: {\n    slides: carouselSelectors.wrapper,\n  },\n  options: {\n    perPage: {\n      320: 1,\n      768: 2,\n      1024: 4,\n    },\n    draggable: ! breakpoints.lgMin.matches,\n    icons: {\n      previous,\n      next,\n    },\n    moduleStyles,\n  },\n};\n\ncomponentProvider(CarouselConfig);\nexport default CarouselConfig;\n","import Swiper from 'swiper';\nimport { A11y, Navigation, Pagination } from 'swiper/modules';\nimport { __, sprintf, setLocaleData } from '@wordpress/i18n';\nimport uniqueId from 'a11y/lib/uniqueId';\n\n/**\n * Carousel component.\n *\n * @param {NodeList}    slides          The carousel list items.\n * @param {HTMLElement} controlsWrapper The wrapper within which the carousel controls will be appended.\n */\nexport default class Carousel {\n  /**\n   * Class constructor\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    // Register text domain.\n    setLocaleData({ '': {} }, 'sciencenews');\n\n    const { controlsWrapper, slides } = this.children;\n    const { moduleStyles } = this.options;\n    Object.assign(this, { controlsWrapper, slides, moduleStyles });\n\n    /**\n     * The total number of slides in the carousel.\n     * @type {Number}\n     */\n    this.slideCount = this.slides.length;\n\n    // Bind class methods\n    this.createControl = this.createControl.bind(this);\n    this.addIndicators = this.addIndicators.bind(this);\n    this.addCarouselControls = this.addCarouselControls.bind(this);\n    this.updateIndicators = this.updateIndicators.bind(this);\n    this.completeCarouselSetup = this.completeCarouselSetup.bind(this);\n\n    this.init();\n  }\n\n  /**\n   * Initialize the carousel.\n   */\n  init() {\n    const {\n      perPage: perPageOption,\n      draggable,\n      loop,\n    } = this.options;\n    const { perPage: perPageAttr } = this.element.dataset;\n\n    let perPage = 1;\n\n    // If both options and attribute are undefined, use the default perPage value.\n    if (undefined !== perPageOption || undefined !== perPageAttr) {\n      // Use options.perPage unless this.element has a `data-per-page` attribute.\n      perPage = (undefined === perPageAttr)\n        ? perPageOption\n        : JSON.parse(perPageAttr);\n    }\n\n    // Configure breakpoints.\n    const breakpoints = {};\n    if ('object' === typeof perPage) {\n      Object.keys(perPage).forEach((key) => {\n        breakpoints[key] = {\n          slidesPerView: perPage[key],\n          slidesPerGroup: 1,\n        };\n      });\n    }\n\n    // Configure pagination.\n    const { showIndicators = false } = this.options;\n    const pagination = showIndicators ? { el: '.swiper-pagination' } : false;\n\n    // Initialize Swiper.\n    if (1 < this.slideCount) {\n      this.carousel = new Swiper(\n        this.children.swiper,\n        {\n          breakpoints,\n          draggable,\n          duration: 300,\n          loop,\n          on: {\n            beforeInit: this.addCarouselControls,\n            slideChange: this.updateIndicators,\n          },\n          slidesPerGroup: 1,\n          slidesPerView: 'number' === typeof perPage ? perPage : 1,\n          spaceBetween: 20,\n          modules: [A11y, Navigation, Pagination],\n          a11y: {\n            containerRole: '',\n            slideRole: false,\n          },\n          navigation: {\n            nextEl: '.swiper__button-next',\n            prevEl: '.swiper__button-previous',\n          },\n          pagination,\n        },\n      );\n\n      // Tie a bow on it.\n      this.completeCarouselSetup();\n    }\n  }\n\n  /**\n   * Create a list element contining a control button.\n   *\n   * @param {String} context The button context (next/previous).\n   *\n   * @return {HTMLElement} <li><button></li>.\n   */\n  createControl(context) {\n    const { icons: { [context]: icon } } = this.options;\n    const li = document.createElement('li');\n    li.classList.add(this.moduleStyles[context]);\n\n    const button = document.createElement('button');\n    button.id = uniqueId();\n\n    const ariaLabel = sprintf(__('%s slide', 'sciencenews'), context);\n    button.setAttribute('aria-label', ariaLabel);\n    button.classList.add(`swiper__button-${context}`);\n\n    // Create a document fragment from the SVG icon string.\n    const range = document.createRange();\n    const fragment = range.createContextualFragment(icon);\n\n    // Add the button icon\n    button.appendChild(fragment);\n\n    li.appendChild(button);\n\n    return li;\n  }\n\n  /**\n   * Finishes carousel per-page and attribute setup.\n   * Must be run after onInit()\n   */\n  completeCarouselSetup() {\n    const { showIndicators = false } = this.options;\n\n    this.element.setAttribute('role', 'region');\n    this.element.tabIndex = 0;\n\n    if (showIndicators) {\n      this.addIndicators();\n    }\n  }\n\n  /**\n   * Adds slide indicators.\n   */\n  addIndicators() {\n    const indicators = document.createElement('div');\n    indicators.classList.add(this.moduleStyles.indicators, 'swiper-pagination');\n\n    for (let i = 0; i < this.slideCount; i += 1) {\n      const indicator = document.createElement('span');\n      indicator.classList.add(this.moduleStyles.indicator);\n      if (0 === i) {\n        indicator.classList.add(this.moduleStyles.indicatorActive);\n      }\n\n      indicators.appendChild(indicator);\n    }\n\n    this.element.prepend(indicators);\n  }\n\n  /**\n   * Add the carousel controls.\n   */\n  addCarouselControls() {\n    const { controlsWrapper } = this.children;\n    this.element.classList.add('initialized');\n\n    const controls = document.createElement('ul');\n    const ariaLabel = __('Carousel controls', 'sciencenews');\n    controls.setAttribute('aria-label', ariaLabel);\n    controls.classList.add(this.moduleStyles.controls);\n\n    // Add the 'previous' button .\n    const previous = this.createControl('previous');\n    this.prev = previous.querySelector('button');\n    // Previous is disabled until there's a slide to which we can navigate.\n    this.prev.setAttribute('aria-disabled', 'true');\n    controls.appendChild(previous); // append the <li>\n\n    // Add the 'next' button\n    const next = this.createControl('next');\n    this.next = next.querySelector('button');\n    controls.appendChild(next); // append the <li>\n\n    controlsWrapper.appendChild(controls); // append the <li>\n  }\n\n  /**\n   * Updates slide indicators for the current slide.\n   */\n  updateIndicators() {\n    const currentSlide = this?.carousel?.realIndex || 0;\n    const indicatorWrapper = this.element\n      .querySelector(`.${this.moduleStyles.indicators}`);\n\n    if (null !== indicatorWrapper) {\n      const indicators = Array.from(indicatorWrapper.children);\n\n      for (let i = 0; i < indicators.length; i += 1) {\n        if (indicators[i].classList.contains(\n          this.moduleStyles.indicatorActive,\n        )) {\n          indicators[i].classList.remove(this.moduleStyles.indicatorActive);\n        }\n\n        if (i === currentSlide) {\n          indicators[i].classList.add(this.moduleStyles.indicatorActive);\n        }\n      }\n    }\n  }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"controls\":\"carousel-module__controls___XQPjd\",\"previous\":\"carousel-module__previous___IfM5M\",\"next\":\"carousel-module__next___ZpMh_\"};","import CarouselConfig from 'components/carousel';\nimport moduleStyles from './carousel.module.scss';\nimport './carousel.scss';\n\n/* eslint-disable global-require, import/no-dynamic-require, import/no-webpack-loader-syntax, max-len */\nconst previous = require('!svg-inline-loader!./simple-arrow-left.svg');\nconst next = require('!svg-inline-loader!./simple-arrow-right.svg');\n/* eslint-enable */\n\n// Replace the icons used in the parent theme.\nObject.assign(\n  CarouselConfig.options,\n  { icons: { previous, next }, moduleStyles },\n);\n","// extracted by mini-css-extract-plugin\nexport default {\"controls\":\"carousel-module__controls___ZojAW\",\"previous\":\"carousel-module__previous___oay9d\",\"next\":\"carousel-module__next___PmMba\"};","import { componentProvider } from 'js-component-framework';\nimport VideoPlayer from './video-player';\nimport './video-player.scss';\n\nconst videoPlayerConfig = {\n  name: 'video-player',\n  component: VideoPlayer,\n  querySelector: {\n    videoContainer: '[id^=\"video-container-\"]',\n    videoLink: '.thumbnail',\n    thumbnail: '.figure',\n    videoIcon: 'span[data-video-loading]',\n  },\n  querySelectorAll: {},\n  options: {\n    playerVars: {\n      modestbranding: 1,\n      rel: 0,\n      autoplay: false,\n      enablejsapi: 1,\n      playsinline: 1,\n    },\n  },\n};\n\ncomponentProvider(videoPlayerConfig);\n","/* global YT */\nimport fastdom from 'fastdom';\nimport keyCodes from 'a11y/lib/keyCodes';\n\nexport default class VideoPlayer {\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    const {\n      children: {\n        videoContainer,\n        videoLink,\n      },\n      options: {\n        playerVars,\n      },\n    } = this;\n    const { videoId } = videoLink.dataset;\n\n    /**\n     * The player ID passed to the YouTube API.\n     * @type {String}\n     */\n    this.playerId = videoContainer.id;\n\n    /**\n     * Holds an instance of the YouTube player.\n     * @type {Object}\n     */\n    this.player = {};\n\n    /**\n     * Hold the iframe element once the player is instantiated.\n     * @type {HTMLElement}\n     */\n    this.iframeElement = null;\n\n    /**\n     * Holds video options.\n     * @type {Object}\n     */\n    this.videoOptions = {\n      videoId,\n      playerVars,\n      events: {\n        onReady: this.playerReady.bind(this),\n      },\n    };\n\n    // Bind class methods\n    this.insertYouTubeScript = this.insertYouTubeScript.bind(this);\n    this.youTubeIframeAPIReady = this.youTubeIframeAPIReady.bind(this);\n    this.calcInitialIframeSize = this.calcInitialIframeSize.bind(this);\n    this.handleKeydown = this.handleKeydown.bind(this);\n    this.loadVideo = this.loadVideo.bind(this);\n    this.killPlayer = this.killPlayer.bind(this);\n    this.resizeIframe = this.resizeIframe.bind(this);\n    this.registerEventListeners = this.registerEventListeners.bind(this);\n\n    this.registerEventListeners();\n  }\n\n  /**\n   * Add spacebar support to the video link's click handler.\n   *\n   * This component adds a button role to the video link. This ensures the\n   * \"button\" behaves as expected.\n   *\n   * @param  {Object} event The event object.\n   */\n  handleKeydown(event) {\n    const { SPACE } = keyCodes;\n\n    if (SPACE === event.keyCode) {\n      event.preventDefault();\n      this.loadVideo(event);\n    }\n  }\n\n  /**\n   * Register event listeners for the video player.\n   */\n  registerEventListeners() {\n    const { videoLink, videoIcon } = this.children;\n\n    videoIcon.removeAttribute('data-video-loading');\n    videoLink.setAttribute('role', 'button');\n    videoLink.addEventListener('keydown', this.handleKeydown);\n    videoLink.addEventListener('click', this.loadVideo);\n  }\n\n  /**\n   * Insert the YT iframe API script tag to the page head.\n   *\n   * Defines a global variable, player, which refers to the video player and\n   * constructs the video player object.\n   */\n  insertYouTubeScript() {\n    const youTubeScriptEl = document.getElementById('yt-iframe-api');\n    if (null === youTubeScriptEl) {\n      const tag = document.createElement('script');\n      tag.id = 'yt-iframe-api';\n      tag.src = 'https://www.youtube.com/iframe_api';\n      const firstScriptTag = document.getElementsByTagName('script')[0];\n      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n    }\n\n    const lastOnReady = window.onYouTubeIframeAPIReady;\n\n    window.onYouTubeIframeAPIReady = () => {\n      if ('function' === typeof lastOnReady) {\n        lastOnReady();\n      }\n\n      this.youTubeIframeAPIReady();\n    };\n  }\n\n  /**\n   * The player API code is downloaded and ready.\n   * Add event listeners and DOM attributes.\n   */\n  youTubeIframeAPIReady() {\n    fastdom.measure(this.calcInitialIframeSize);\n\n    fastdom.mutate(() => {\n      this.element.classList.add('player-active');\n\n      if (this.player instanceof YT.Player) {\n        this.playerReady();\n      } else {\n        this.player = new YT.Player(this.playerId, this.videoOptions);\n        this.playerReady();\n      }\n\n      this.iframeElement = document.getElementById(this.playerId);\n    });\n\n    window.addEventListener('resize', this.resizeIframe);\n  }\n\n  /**\n   * Calculate the initial dimensions available to maintain video aspect ratio.\n   */\n  calcInitialIframeSize() {\n    // Base the dimensions on the available width.\n    const width = this.element.offsetWidth;\n    const height = Math.floor(width * (9 / 16));\n\n    Object.assign(this.videoOptions, { height, width });\n  }\n\n  /**\n   * Resize the iframe on window resize to maintain the proper width.\n   */\n  resizeIframe() {\n    if (null !== this.iframeElement) {\n      fastdom.measure(() => {\n        const newWidth = this.element.offsetWidth;\n\n        fastdom.mutate(() => {\n          this.iframeElement.setAttribute('height', newWidth * (9 / 16));\n          this.iframeElement.setAttribute('width', newWidth);\n        });\n      });\n    }\n  }\n\n  /**\n   * Load the selected video in the thumbnail space.\n   *\n   * @param {Object} event The event object.\n   */\n  loadVideo(event) {\n    const { videoId } = this.videoOptions;\n\n    if (videoId) {\n      event.preventDefault();\n\n      if (! window.YT?.Player) {\n        this.insertYouTubeScript();\n      } else {\n        this.youTubeIframeAPIReady();\n      }\n    }\n  }\n\n  /**\n   * The video player is ready, to play the video.\n   *\n   * @param  {Object} event The event object.\n   */\n  playerReady(event) {\n    const { height, width } = this.videoOptions;\n    const player = (undefined === event) ? YT.get(this.playerId) : event.target;\n\n    player.setSize(width, height);\n    if (player.playVideo) {\n      player.playVideo();\n    }\n  }\n\n  /**\n   * Destroy the player and restore the hero\n   */\n  killPlayer() {\n    if (this.player instanceof YT.Player) {\n      this.player.destroy();\n      this.player = {};\n      this.element.classList.remove('player-active');\n    }\n  }\n}\n","import { componentProvider } from 'js-component-framework';\nimport WidgetResources from './widget-resources';\nimport './widget-resources.scss';\n\nconst widgetResourcesConfig = {\n  component: WidgetResources,\n  name: 'widget-resources',\n  querySelector: {\n    formContent: '.widget-resources__form-content',\n    content: '.widget-resources__content',\n  },\n};\n\ncomponentProvider(widgetResourcesConfig);\n\n","import Cookies from 'js-cookie';\nimport { setFormAssemblyState } from 'utils/FormAssemblySubmit';\nimport cookieName from 'components/restricted-content/restrictedContentCookieName'; // eslint-disable-line max-len\n\n/**\n * Component for Resources Widget Form.\n */\nexport default class WidgetResources {\n  /**\n   * Start the component.\n   */\n  constructor({ element, children, options }) {\n    this.element = element;\n    this.children = children;\n    this.options = options;\n\n    // Bind class methods.\n    this.init = this.init.bind(this);\n    this.handleFormState = this.handleFormState.bind(this);\n\n    if ('true' !== Cookies.get(cookieName)) {\n      this.init();\n    } else {\n      this.element.classList.add('login-form--success');\n    }\n  }\n\n  /**\n   * Handle form submission state.\n   *\n   * @param {Event} event The event object.\n   */\n  handleFormState(event) {\n    const { detail = {} } = event;\n    const { status = '' } = detail;\n\n    setFormAssemblyState(this.element, detail);\n\n    if ('success' === status) {\n      Cookies.set(cookieName, true, { expires: 30 });\n    } else {\n      Cookies.remove(cookieName);\n    }\n  }\n\n  /**\n   * Initialize the FormAssemblySubmit instance.\n   */\n  init() {\n    this.element.classList.remove('login-form--loading');\n\n    this.element.addEventListener('sn.formstatechange', this.handleFormState);\n  }\n}\n"],"names":["module","exports","debug","raf","win","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","FastDom","self","this","reads","writes","bind","scheduleFlush","fastdom","scheduled","flush","error","length","runTasks","e","message","catch","remove","array","item","index","indexOf","splice","prototype","constructor","tasks","task","shift","measure","fn","ctx","push","mutate","clear","extend","props","Error","child","Object","create","target","source","key","hasOwnProperty","mixin","initialize","window","factory","i","result","arguments","attributes","decode","s","replace","decodeURIComponent","init","converter","api","set","value","document","path","defaults","expires","Date","toUTCString","JSON","stringify","test","write","encodeURIComponent","String","escape","stringifiedAttributes","attributeName","split","cookie","get","json","jar","cookies","parts","slice","join","charAt","name","read","parse","getJSON","withConverter","options","head","tail","size","memoized","args","node","len","searchCache","next","prev","val","Array","apply","maxSize","re","not_string","not_bool","not_type","not_primitive","number","numeric_arg","not_json","text","modulo","placeholder","key_access","index_access","sign","sprintf","parse_tree","argv","arg","k","ph","pad","pad_character","pad_length","is_positive","cursor","tree_length","output","keys","undefined","param_no","type","Function","isNaN","TypeError","parseInt","toString","fromCharCode","width","precision","parseFloat","toExponential","toFixed","Number","toPrecision","substring","call","toLowerCase","valueOf","toUpperCase","pad_char","repeat","align","sprintf_format","fmt","sprintf_cache","match","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","sprintf_parse","vsprintf","concat","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","obj","prop","p","callback","readyState","addEventListener","once","componentProvider","config","component","Component","load","querySelector","querySelectorAll","selector","root","componentEls","console","log","from","map","element","children","forEach","elementKey","nodeList","getComponentArgs","isArray","event","componentLoader","getFormattedClassnames","namespace","reduce","acc","PRECEDENCE","OPENERS","TERMINATORS","PATTERN","logErrorOnce","_typeof","Symbol","iterator","_defineProperty","input","hint","prim","toPrimitive","res","configurable","writable","OPERATORS","b","c","DEFAULT_OPTIONS","contextDelimiter","onMissingKey","Tannin","data","pluralForms","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","_objectSpread","getOwnPropertyDescriptors","defineProperties","getPluralForm","domain","plural","pf","evaluate","plural_forms","part","trim","substr","getPluralExpression","expression","terms","operator","term","stack","pop","reverse","postfix","variables","j","getOperatorResult","earlyReturn","compile","dcnpgettext","context","singular","entry","DEFAULT_LOCALE_DATA","I18N_HOOK_REGEXP","hookName","hooks","storeKey","priority","hooksStore","handler","handlers","__current","hookInfo","currentIndex","runs","doAction","removeAll","handlersRemoved","_loop","some","hook","returnFirstArg","_len","_key","_hooksStore$__current","_hooksStore$__current2","defaultHooks","_Hooks","instance","Constructor","_classCallCheck","actions","filters","addAction","addFilter","removeAction","removeFilter","hasAction","hasFilter","removeAllActions","removeAllFilters","applyFilters","currentAction","currentFilter","doingAction","doingFilter","didAction","didFilter","i18n","initialData","initialDomain","tannin","listeners","Set","notifyListeners","listener","doSetLocaleData","setLocaleData","single","getFilterDomain","_x","translation","onHookAddedOrRemoved","getLocaleData","resetLocaleData","subscribe","add","delete","__","_n","_nx","isRTL","hasTranslation","_tannin$data","_tannin$data2","createI18n","freeze","TAB","RETURN","ESC","SPACE","END","HOME","LEFT","UP","RIGHT","DOWN","interactiveChildren","selectors","interactiveElements","Popup","stringDescription","assign","interactiveChildElements","firstItem","lastItem","state","expanded","setup","destroy","manageExpandedState","setExpandedState","controllerKeyDownHandler","targetKeyDownHandler","closeOnTabOut","closeOnOutsideClick","expand","controller","setAttribute","toStringTag","popup","id","nextElementSibling","body","removeAttribute","removeEventListener","keyCodes","keyCode","stopPropagation","preventDefault","focus","activeElement","shiftKey","lastChild","contains","MenuItem","nextElementIsUl","nodeName","list","menuItem","listItems","handleListKeydown","menuItems","itemLink","firstElementChild","menuItemsLength","link","parentElement","siblingList","previousSibling","activeDescendant","menuLastIndex","activeIndex","includes","nextIndex","siblingElement","toArray","maybeAnArray","shouldBeAnArray","HTMLElement","NodeList","rovingTabIndex","items","allow","allowedElements","allItems","tabIndexAllow","tabIndexDeny","Menu","menu","popups","manageState","handleMenuBarKeydown","handleMenuBarClick","newState","menuBarItems","menuItemsCollection","menuItemsArray","menuLength","lastIndex","menuBarItem","Throttle","frequency","timeout","requestTick","update","clearTimeout","bp","bpMinRems","bpMaxRems","matchMedia","uniquId","radix","attr","Math","random","createScreenReaderText","innerText","span","createElement","classList","GroupWidget","getItemParent","itemChild","childOf","dataset","itemParent","getElementById","articleItems","prepItems","updateActiveState","clearActiveState","getParentPopup","handleListBlur","parentPopup","parent","uniqueId","newlyActive","initialListDescribedby","addHelpText","_ref","helpSpan","appendChild","activeListDescribedby","listIsActive","hasAttribute","parentItem","activeChildIndex","firstChild","nextElement","menuSelectors","sciencenewsClassnames","dropdownSingleSelectors","handleTopicLeadKeydown","articleList","groups","articleListSupport","setupArticleListSupport","setDropdownPositioning","breakpoints","lgMin","addListener","singlePopups","articles","group","observer","disconnect","controllerLeft","offsetLeft","controllerCenter","offsetWidth","dropdownRight","innerWidth","style","right","MutationObserver","mutationsList","mutation","getAttribute","clientWidth","transform","observe","matches","topicsMenu","singleDropdownLists","dropdown","resize","Disclosure","loadOpen","allowOutsideClick","onOpen","onClose","toggleExpandedState","disclosure","getClassnameFromComponent","className","camelcasedClassName","word","navBarSelectors","getElementFromComponent","all","componentClassname","searchSelectors","moveComponent","updateControllerText","navBarWrapper","navBar","actionsList","controllerParent","targetParent","insertBefore","clip","openText","closeText","wrapper","toggle","open","close","getDropdownIcon","icon","require","createRange","createContextualFragment","menuStylesheet","persist","persistMenuButton","primaryMenu","stylesheet","hasChildren","submenuLinks","topics","topicsMegaMenu","menuButton","handleBreakpointChanges","setUpMenuButton","useHamburgerMenu","setUpPrimaryMenu","setUpPrimaryMenuItem","setUpSecondaryMenuItems","addKeydownPatches","removeKeydownPatches","patchTopLevelKeydown","patchNavBarKeydown","patchMenuButtonKeydown","patchPrimaryMenuFirstItem","patchTopicsMenuFirstItem","nodeListLength","dropdownIcon","FormAssemblySubmit","form","HTMLFormElement","validateEmailInput","formSubmit","checkEmailInput","updateState","updateReadyState","status","CustomEvent","bubbles","composed","detail","dispatchEvent","emailInput","nonceInput","submit","honeyPot","formId","control","pattern","patternRegExp","RegExp","fieldValue","pathname","search","location","honeyPotValue","nonceValue","emailValue","string","request","XMLHttpRequest","action","setRequestHeader","send","encodeURI","onreadystatechange","DONE","setFormAssemblyState","classes","loading","success","formAssemblySubmit","AriaComponent","searchString","referenceElements","setState","getState","setSelfReference","warnDeprecated","stateWasUpdated","elements","componentName","deleteSelfReferences","unsupported","supported","use","warn","HTMLCollection","ProgrammaticDialog","super","content","onInit","onStateChange","onDestroy","handleTargetKeydown","hideOnOutsideClick","handleKeydownEsc","show","hide","setInteractiveChildren","setDialogController","controllerClick","controllerIsNotAButton","controllerKeydown","firstInteractiveChild","lastInteractiveChild","arrayOfItems","getFirstAndLastItems","getUniqueId","contentLength","clicked","amScripts","global","sitePrefix","handleFormState","Cookies","cookieName","faReadyState","dialog","cookieSelectors","src","handleButtonClick","prefix","button","openPopup","ppwContent","sectionContainer","innerHTML","ppwButton","screen","height","print","ssrDocument","blur","createEvent","initEvent","childNodes","getElementsByTagName","createElementNS","importNode","hash","host","hostname","href","origin","protocol","doc","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","getComputedStyle","getPropertyValue","Image","cancelAnimationFrame","delay","now","to","noExtend","nextSource","nodeType","keysArray","nextKey","desc","__swiper__","el","varName","varValue","setProperty","animateCSSModeScroll","swiper","targetPosition","side","startPosition","translate","time","startTime","duration","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","max","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","HTMLSlotElement","assignedElements","showWarning","err","tag","elementStyle","elementIndex","parents","elementOuterSize","includeMargins","support","deviceCached","browser","getSupport","smoothScroll","documentElement","touch","DocumentTouch","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","os","calcDevice","eventsEmitter","on","events","eventsListeners","destroyed","method","onceHandler","off","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","emit","_len2","_key2","unshift","toggleSlideClasses$1","slideEl","condition","toggleSlideClasses","processLazyPreloader","imageEl","closest","isElement","slideClass","lazyEl","lazyPreloaderClass","shadowRoot","unlazy","slides","preload","amount","lazyPreloadPrevNext","slidesPerView","slidesPerViewDynamic","ceil","grid","rows","activeColumn","preloadColumns","_","column","slideIndexLastInView","rewind","loop","realIndex","updateSize","clientHeight","isHorizontal","isVertical","updateSlides","getDirectionPropertyValue","label","getDirectionLabel","slidesEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginRight","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","slideSize","initSlides","unsetSlides","shouldResetSlideSize","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","webkitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","slidesBefore","slidesAfter","groupSize","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","offsetSize","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","getSlideIndexByData","visibleSlides","offsetHeight","minusOffset","offsetTop","swiperSlideOffset","cssOverflowAdjustment","updateSlidesProgress","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","slideVisibleClass","slideFullyVisibleClass","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","autoHeight","updateSlidesClasses","getFilteredSlide","activeSlide","prevSlide","nextSlide","nextEls","elementNextAll","prevEls","previousElementSibling","elementPrevAll","slideActiveClass","slideNextClass","slidePrevClass","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","normalizeSlideIndex","getActiveIndexByTranslate","skip","firstSlideInColumn","activeSlideIndex","initialized","runCallbacksOnInit","updateClickedSlide","pathEl","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","transitionEmit","runCallbacks","direction","step","slideTo","internal","initial","animating","preventInteractionOnTransition","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","setTranslate","transitionStart","transitionEnd","isH","t","_immediateVirtual","_cssModeVirtualInitialSet","initialSlide","behavior","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","targetSlideIndex","cols","needLoopFix","loopFix","slideRealIndex","slideNext","perGroup","slidesPerGroupAuto","increment","loopPreventsSliding","_clientLeft","clientLeft","slidePrev","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","slideSelector","loopedSlides","getSlideIndex","loopCreate","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","slideBlankClass","append","loopAddBlankSlides","recalcSlides","byController","byMousewheel","loopAdditionalSlides","fill","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","__preventObserver__","swiperLoopMoveDOM","prepend","currentSlideTranslate","diff","touchEventsData","startTranslate","currentTranslate","loopParams","loopDestroy","newSlidesOrder","swiperSlideIndex","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","onTouchStart","originalEvent","pointerId","targetTouches","touchId","identifier","pageX","touches","simulateTouch","pointerType","targetEl","touchEventsTarget","isChild","elementIsChildOf","which","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","found","getRootNode","closestElement","allowClick","swipeHandler","currentX","currentY","pageY","startY","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","previousX","previousY","diffX","diffY","sqrt","touchAngle","atan2","preventTouchMoveFromPointerMove","cancelable","touchMoveStopPropagation","nested","touchesDiff","oneWayMovement","touchRatio","prevTouchesDirection","touchesDirection","isLoop","allowLoopFix","getTranslate","evt","bySwiperTouchMove","allowMomentumBounce","grabCursor","setGrabCursor","loopSwapReset","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","isSafari","isWebView","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","isVirtualLoop","autoplay","running","paused","resizeTimeout","resume","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","newProgress","previousTranslate","scrollLeft","scrollTop","onLoad","onDocumentTouchStart","documentTouchHandlerProceeded","touchAction","capture","domMethod","swiperMethod","passive","updateOnWindowResize","isGridEnabled","swiperElementNodeName","resizeObserver","createElements","eventsPrefix","url","virtualTranslate","breakpointsBase","uniqueNavElements","passiveListeners","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","x","y","translateTo","translateBounds","newTranslate","onTranslateToWrapperTransitionEnd","transition","transitionDuration","transitionDelay","moving","isLocked","unsetGrabCursor","attachEvents","detachEvents","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","emitContainerClasses","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","wasLoop","changeDirection","isEnabled","hasLoop","containerEl","currentHeight","innerHeight","points","point","minRatio","sort","wasLocked","lastSlideRightEdge","addClasses","classNames","suffixes","entries","resultClasses","prepareClasses","removeClasses","extendedDefaults","Swiper","swipers","newParams","needPerspectiveFix","major","minor","num","isSafariBrowser","need3dFix","calcBrowser","modules","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","trunc","clickTimeout","velocities","imagesToLoad","imagesLoaded","property","setProgress","cls","getSlideClasses","updates","view","exact","spv","breakLoop","translateValue","translated","complete","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","parentNode","getWrapperSelector","slideSlots","hostEl","lazyElements","deleteInstance","cleanStyles","deleteProps","extendDefaults","newDefaults","installModule","m","checkProps","Navigation","getEl","toggleEl","disabled","subEl","disabledClass","tagName","lockClass","onPrevClick","onNextClick","initButton","destroyButton","hideOnClick","hiddenClass","navigationDisabledClass","_s","targetIsButton","find","pagination","clickable","isHidden","Pagination","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","position","onBulletClick","moveDirection","total","firstIndex","midIndex","classesToRemove","suffix","flat","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","textContent","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","render","paginationHTML","numberOfBullets","A11y","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","containerRole","itemRoleDescriptionMessage","slideRole","scrollOnFocus","preventFocusHandler","focusTargetSlideEl","liveRegion","visibilityChangedTimestamp","notify","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","click","hasPagination","hasClickablePagination","initNavEl","wrapperId","controls","addElControls","handlePointerDown","handlePointerUp","onVisibilityChange","handleFocus","isActive","sourceCapabilities","firesTouchEvents","round","live","addElLive","updateNavigation","updatePagination","prototypeGroup","protoMethod","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","unobserve","observers","attach","WebkitMutationObserver","mutations","observerUpdate","childList","characterData","observeParents","observeSlideChildren","containerParents","carouselSelectors","carousel","previous","CarouselConfig","controlsWrapper","moduleStyles","slideCount","createControl","addIndicators","addCarouselControls","updateIndicators","completeCarouselSetup","perPage","perPageOption","draggable","perPageAttr","showIndicators","beforeInit","slideChange","icons","li","ariaLabel","format","fragment","tabIndex","indicators","indicator","indicatorActive","currentSlide","indicatorWrapper","videoContainer","videoLink","playerVars","videoId","playerId","player","iframeElement","videoOptions","onReady","playerReady","insertYouTubeScript","youTubeIframeAPIReady","calcInitialIframeSize","handleKeydown","loadVideo","killPlayer","resizeIframe","registerEventListeners","videoIcon","firstScriptTag","lastOnReady","onYouTubeIframeAPIReady","YT","Player","setSize","playVideo","thumbnail","modestbranding","rel","enablejsapi","playsinline","formContent"],"sourceRoot":""}