{"version":3,"file":"js/magazine.bundle.min.js","mappings":"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","sources":["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/../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/@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/@wordpress/i18n/build-module/sprintf.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/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/restricted-content/restrictedContentCookieName.js","webpack://sns/../sciencenews/client/src/components/restricted-content/login-form/index.js","webpack://sns/../sciencenews/client/src/components/restricted-content/login-form/login-form.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/modal-access/index.js","webpack://sns/../sciencenews/client/src/components/restricted-content/modal-access/modal-access.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/components/newsletter-signup/index.js","webpack://sns/../sciencenews/client/src/components/newsletter-signup/newsletter-signup.js","webpack://sns/../sciencenews/client/src/components/cookie-banner/index.js","webpack://sns/../sciencenews/client/src/components/cookie-banner/cookie-banner.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"],"sourcesContent":["/*!\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](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); }","/* 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","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 * 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","/**\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","/**\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","/**\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 LoginForm from './login-form';\n\nconst loginFormConfig = {\n  name: 'login-form',\n  component: LoginForm,\n};\n\ncomponentProvider(loginFormConfig);\n","import Cookies from 'js-cookie';\nimport { setFormAssemblyState } from 'js/utils/FormAssemblySubmit';\nimport cookieName from '../restrictedContentCookieName';\n\n/**\n * Component for Login Modal.\n */\nexport default class LoginForm {\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    }\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\n      // Redirect to the homepage.\n      const { origin } = window.location;\n      window.location.href = origin;\n    }\n  }\n\n  /**\n   * Initialize the FormAssemblySubmit instance.\n   */\n  init() {\n    this.element.addEventListener('sn.formstatechange', this.handleFormState);\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","import { componentProvider } from 'js-component-framework';\nimport ModalAccess from './modal-access';\nimport './modal-access.scss';\n\nconst modalAccessConfig = {\n  name: 'modal-access',\n  component: ModalAccess,\n};\n\ncomponentProvider(modalAccessConfig);\n","import Cookies from 'js-cookie';\nimport ProgrammaticDialog from 'js/utils/ProgrammaticDialog';\nimport { setFormAssemblyState } from 'js/utils/FormAssemblySubmit';\nimport cookieName from '../restrictedContentCookieName';\n\n/**\n * ModalAccess component.\n */\nexport default class ModalAccess {\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.setup = this.setup.bind(this);\n    this.init = this.init.bind(this);\n    this.handleDialogStateChange = this.handleDialogStateChange.bind(this);\n    this.handleFormState = this.handleFormState.bind(this);\n    this.handlePaywallState = this.handlePaywallState.bind(this);\n\n    /**\n     * The Dialog wrapper.\n     *\n     * @type {HTMLElement}\n     */\n    this.target = document.getElementById('modal-access');\n\n    if (null != this.target) {\n      this.setup();\n    }\n  }\n\n  /**\n   * Handle Dialog state changes.\n   *\n   * @param {Object} state The current Dialog state.\n   */\n  handleDialogStateChange({ expanded }) {\n    if (expanded) {\n      // Allow the modal to be closed by the user.\n      document.body.addEventListener('click', this.dialog.hideOnOutsideClick);\n      document.body.addEventListener('keydown', this.dialog.handleKeydownEsc);\n    } else {\n      document.body.removeEventListener(\n        'click',\n        this.dialog.hideOnOutsideClick,\n      );\n      document.body.removeEventListener(\n        'keydown',\n        this.dialog.handleKeydownEsc,\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.target, detail);\n\n    if ('success' === status) {\n      Cookies.set(cookieName, true, { expires: 30 });\n\n      // Hide, then destroy, the Dialog. We don't need it anymore.\n      this.dialog.hide();\n      this.dialog.destroy();\n\n      if (this.element.hasAttribute('download')) {\n        this.element.click();\n      } else {\n        const { href } = this.element;\n        window.location.href = href;\n      }\n    }\n  }\n\n  /**\n   * Handle modal-signup state changes to remove the modal-access when a user\n   * successfully submits their email address.\n   *\n   * @param {Event} event The event object.\n   */\n  handlePaywallState(event) {\n    const { detail = {} } = event;\n    const { status = '' } = detail;\n\n    if ('success' === status) {\n      // Hide, then destroy, the Dialog. We don't need it anymore.\n      this.dialog.hide();\n      this.dialog.destroy();\n    }\n  }\n\n  /**\n   * Determine if the modal should display.\n   */\n  setup() {\n    const modalSignup = (\n      document.querySelector('[data-component=\"modal-signup\"]')\n    );\n\n    /*\n     * Listen for modal-signup events so we're not presenting this modal after\n     * a same-page signup.\n     */\n    if (null !== modalSignup) {\n      modalSignup.addEventListener('sn.formstatechange', this.handlePaywallState); // eslint-disable-line max-len\n    }\n\n    if ('true' !== Cookies.get(cookieName)) {\n      this.init();\n    }\n  }\n\n  /**\n   * Initialize the modal.\n   */\n  init() {\n    // Instantiate the Dialog.\n    this.dialog = new ProgrammaticDialog(\n      this.target,\n      { onStateChange: this.handleDialogStateChange },\n    );\n\n    // Set the component element as the Dialog controller.\n    this.dialog.setDialogController(this.element);\n\n    // Set up the close button.\n    const close = this.target.querySelector('.modal-access__close');\n    if (null !== close) {\n      close.addEventListener('click', this.dialog.hide);\n    }\n\n    this.target.addEventListener('sn.formstatechange', this.handleFormState);\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","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","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","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 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"],"names":["factory","extend","i","result","arguments","length","attributes","key","decode","s","replace","decodeURIComponent","init","converter","api","set","value","document","path","defaults","expires","Date","toUTCString","JSON","stringify","test","e","write","encodeURIComponent","String","escape","stringifiedAttributes","attributeName","split","cookie","get","json","jar","cookies","parts","slice","join","charAt","name","read","parse","getJSON","remove","withConverter","module","exports","fn","options","head","tail","size","memoized","args","node","len","searchCache","next","prev","val","Array","apply","maxSize","clear","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","Error","param_no","type","Function","isNaN","TypeError","parseInt","toString","fromCharCode","width","precision","parseFloat","toExponential","toFixed","Number","toPrecision","substring","Object","prototype","call","toLowerCase","valueOf","toUpperCase","pad_char","repeat","align","sprintf_format","fmt","sprintf_cache","match","_fmt","arg_names","exec","push","SyntaxError","field_list","replacement_field","field_match","sprintf_parse","vsprintf","concat","create","window","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","obj","prop","hasOwnProperty","callback","readyState","addEventListener","once","componentProvider","config","component","Component","load","querySelector","querySelectorAll","selector","root","componentEls","console","error","log","from","map","element","children","forEach","elementKey","nodeList","getComponentArgs","isArray","event","componentLoader","getFormattedClassnames","namespace","reduce","acc","PRECEDENCE","OPENERS","TERMINATORS","PATTERN","_typeof","Symbol","iterator","constructor","_defineProperty","input","hint","prim","toPrimitive","res","configurable","writable","OPERATORS","b","c","DEFAULT_OPTIONS","contextDelimiter","onMissingKey","Tannin","data","this","pluralForms","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","_objectSpread","target","source","getOwnPropertyDescriptors","defineProperties","getPluralForm","domain","plural","pf","evaluate","plural_forms","part","trim","indexOf","substr","getPluralExpression","expression","terms","operator","term","stack","index","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","splice","__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","bind","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","item","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","setTimeout","requestAnimationFrame","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","child","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","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","amScripts","global","sitePrefix","handleFormState","Cookies","cookieName","origin","href","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","handleDialogStateChange","handlePaywallState","_ref2","dialog","click","modalSignup","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","cookieSelectors","handleButtonClick","prefix","button"],"sourceRoot":""}