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