{"version":3,"file":"js/centennial-milestones.bundle.min.js","mappings":"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","sources":["webpack://sciencenews/./node_modules/memize/index.js","webpack://sciencenews/./node_modules/sprintf-js/src/sprintf.js","webpack://sciencenews/webpack/bootstrap","webpack://sciencenews/webpack/runtime/compat get default export","webpack://sciencenews/webpack/runtime/define property getters","webpack://sciencenews/webpack/runtime/hasOwnProperty shorthand","webpack://sciencenews/./node_modules/js-component-framework/es/domContentLoaded.js","webpack://sciencenews/./node_modules/js-component-framework/es/componentProvider.js","webpack://sciencenews/./node_modules/js-component-framework/es/componentLoader.js","webpack://sciencenews/./client/src/js/utils/getFormattedClassnames.js","webpack://sciencenews/./client/src/js/utils/getElementFromComponent.js","webpack://sciencenews/./client/src/js/utils/getClassnameFromComponent.js","webpack://sciencenews/./client/src/js/utils/camelCaseString.js","webpack://sciencenews/./node_modules/@tannin/postfix/index.js","webpack://sciencenews/./node_modules/@wordpress/i18n/build-module/sprintf.js","webpack://sciencenews/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://sciencenews/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://sciencenews/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://sciencenews/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://sciencenews/./node_modules/@tannin/evaluate/index.js","webpack://sciencenews/./node_modules/tannin/index.js","webpack://sciencenews/./node_modules/@wordpress/i18n/build-module/create-i18n.js","webpack://sciencenews/./node_modules/@tannin/plural-forms/index.js","webpack://sciencenews/./node_modules/@tannin/compile/index.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/validateNamespace.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/validateHookName.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/createAddHook.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/createRemoveHook.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/createHasHook.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/createRunHook.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/createCurrentHook.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/createDoingHook.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/createDidHook.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/index.js","webpack://sciencenews/./node_modules/@wordpress/hooks/build-module/createHooks.js","webpack://sciencenews/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://sciencenews/./node_modules/@wordpress/i18n/build-module/default-i18n.js","webpack://sciencenews/./client/src/components/filter-milestones/index.js","webpack://sciencenews/./client/src/components/filter-milestones/filter-milestones.js","webpack://sciencenews/./node_modules/aria-components/src/AriaComponent.js","webpack://sciencenews/./node_modules/aria-components/src/lib/keyCodes.js","webpack://sciencenews/./node_modules/aria-components/src/lib/interactiveChildren.js","webpack://sciencenews/./node_modules/aria-components/src/lib/rovingTabIndex.js","webpack://sciencenews/./node_modules/aria-components/src/lib/uniqueId.js","webpack://sciencenews/./node_modules/aria-components/src/lib/getFirstAndLastItems.js","webpack://sciencenews/./node_modules/aria-components/src/Popup/index.js","webpack://sciencenews/./node_modules/aria-components/src/lib/Search.js","webpack://sciencenews/./node_modules/aria-components/src/Disclosure/index.js","webpack://sciencenews/./node_modules/aria-components/src/lib/isInstanceOf.js","webpack://sciencenews/./node_modules/aria-components/src/Menu/index.js","webpack://sciencenews/./node_modules/aria-components/src/lib/nextPrevious.js","webpack://sciencenews/./node_modules/aria-components/src/MenuButton/index.js","webpack://sciencenews/./client/src/components/milestones-jump-to-decade/index.js","webpack://sciencenews/./client/src/components/milestones-jump-to-decade/milestones-jump-to-decade.js"],"sourcesContent":["/**\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","// 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","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 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","var PRECEDENCE, OPENERS, TERMINATORS, PATTERN;\n\n/**\n * Operator precedence mapping.\n *\n * @type {Object}\n */\nPRECEDENCE = {\n\t'(': 9,\n\t'!': 8,\n\t'*': 7,\n\t'/': 7,\n\t'%': 7,\n\t'+': 6,\n\t'-': 6,\n\t'<': 5,\n\t'<=': 5,\n\t'>': 5,\n\t'>=': 5,\n\t'==': 4,\n\t'!=': 4,\n\t'&&': 3,\n\t'||': 2,\n\t'?': 1,\n\t'?:': 1,\n};\n\n/**\n * Characters which signal pair opening, to be terminated by terminators.\n *\n * @type {string[]}\n */\nOPENERS = [ '(', '?' ];\n\n/**\n * Characters which signal pair termination, the value an array with the\n * opener as its first member. The second member is an optional operator\n * replacement to push to the stack.\n *\n * @type {string[]}\n */\nTERMINATORS = {\n\t')': [ '(' ],\n\t':': [ '?', '?:' ],\n};\n\n/**\n * Pattern matching operators and openers.\n *\n * @type {RegExp}\n */\nPATTERN = /<=|>=|==|!=|&&|\\|\\||\\?:|\\(|!|\\*|\\/|%|\\+|-|<|>|\\?|\\)|:/;\n\n/**\n * Given a C expression, returns the equivalent postfix (Reverse Polish)\n * notation terms as an array.\n *\n * If a postfix string is desired, simply `.join( ' ' )` the result.\n *\n * @example\n *\n * ```js\n * import postfix from '@tannin/postfix';\n *\n * postfix( 'n > 1' );\n * // ⇒ [ 'n', '1', '>' ]\n * ```\n *\n * @param {string} expression C expression.\n *\n * @return {string[]} Postfix terms.\n */\nexport default function postfix( expression ) {\n\tvar terms = [],\n\t\tstack = [],\n\t\tmatch, operator, term, element;\n\n\twhile ( ( match = expression.match( PATTERN ) ) ) {\n\t\toperator = match[ 0 ];\n\n\t\t// Term is the string preceding the operator match. It may contain\n\t\t// whitespace, and may be empty (if operator is at beginning).\n\t\tterm = expression.substr( 0, match.index ).trim();\n\t\tif ( term ) {\n\t\t\tterms.push( term );\n\t\t}\n\n\t\twhile ( ( element = stack.pop() ) ) {\n\t\t\tif ( TERMINATORS[ operator ] ) {\n\t\t\t\tif ( TERMINATORS[ operator ][ 0 ] === element ) {\n\t\t\t\t\t// Substitution works here under assumption that because\n\t\t\t\t\t// the assigned operator will no longer be a terminator, it\n\t\t\t\t\t// will be pushed to the stack during the condition below.\n\t\t\t\t\toperator = TERMINATORS[ operator ][ 1 ] || operator;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if ( OPENERS.indexOf( element ) >= 0 || PRECEDENCE[ element ] < PRECEDENCE[ operator ] ) {\n\t\t\t\t// Push to stack if either an opener or when pop reveals an\n\t\t\t\t// element of lower precedence.\n\t\t\t\tstack.push( element );\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// For each popped from stack, push to terms.\n\t\t\tterms.push( element );\n\t\t}\n\n\t\tif ( ! TERMINATORS[ operator ] ) {\n\t\t\tstack.push( operator );\n\t\t}\n\n\t\t// Slice matched fragment from expression to continue match.\n\t\texpression = expression.substr( match.index + operator.length );\n\t}\n\n\t// Push remainder of operand, if exists, to terms.\n\texpression = expression.trim();\n\tif ( expression ) {\n\t\tterms.push( expression );\n\t}\n\n\t// Pop remaining items from stack into terms.\n\treturn terms.concat( stack.reverse() );\n}\n","/**\n * External dependencies\n */\nimport memoize from 'memize';\nimport sprintfjs from 'sprintf-js';\n/**\n * Log to console, once per message; or more precisely, per referentially equal\n * argument set. Because Jed throws errors, we log these to the console instead\n * to avoid crashing the application.\n *\n * @param {...*} args Arguments to pass to `console.error`\n */\n\nvar logErrorOnce = memoize(console.error); // eslint-disable-line no-console\n\n/**\n * Returns a formatted string. If an error occurs in applying the format, the\n * original format string is returned.\n *\n * @param {string} format The format of the string to generate.\n * @param {...*} args Arguments to apply to the format.\n *\n * @see https://www.npmjs.com/package/sprintf-js\n *\n * @return {string} The formatted string.\n */\n\nexport function sprintf(format) {\n try {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return sprintfjs.sprintf.apply(sprintfjs, [format].concat(args));\n } catch (error) {\n logErrorOnce('sprintf error: \\n\\n' + error.toString());\n return format;\n }\n}\n//# sourceMappingURL=sprintf.js.map","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","/**\n * Operator callback functions.\n *\n * @type {Object}\n */\nvar OPERATORS = {\n\t'!': function( a ) {\n\t\treturn ! a;\n\t},\n\t'*': function( a, b ) {\n\t\treturn a * b;\n\t},\n\t'/': function( a, b ) {\n\t\treturn a / b;\n\t},\n\t'%': function( a, b ) {\n\t\treturn a % b;\n\t},\n\t'+': function( a, b ) {\n\t\treturn a + b;\n\t},\n\t'-': function( a, b ) {\n\t\treturn a - b;\n\t},\n\t'<': function( a, b ) {\n\t\treturn a < b;\n\t},\n\t'<=': function( a, b ) {\n\t\treturn a <= b;\n\t},\n\t'>': function( a, b ) {\n\t\treturn a > b;\n\t},\n\t'>=': function( a, b ) {\n\t\treturn a >= b;\n\t},\n\t'==': function( a, b ) {\n\t\treturn a === b;\n\t},\n\t'!=': function( a, b ) {\n\t\treturn a !== b;\n\t},\n\t'&&': function( a, b ) {\n\t\treturn a && b;\n\t},\n\t'||': function( a, b ) {\n\t\treturn a || b;\n\t},\n\t'?:': function( a, b, c ) {\n\t\tif ( a ) {\n\t\t\tthrow b;\n\t\t}\n\n\t\treturn c;\n\t},\n};\n\n/**\n * Given an array of postfix terms and operand variables, returns the result of\n * the postfix evaluation.\n *\n * @example\n *\n * ```js\n * import evaluate from '@tannin/evaluate';\n *\n * // 3 + 4 * 5 / 6 ⇒ '3 4 5 * 6 / +'\n * const terms = [ '3', '4', '5', '*', '6', '/', '+' ];\n *\n * evaluate( terms, {} );\n * // ⇒ 6.333333333333334\n * ```\n *\n * @param {string[]} postfix Postfix terms.\n * @param {Object} variables Operand variables.\n *\n * @return {*} Result of evaluation.\n */\nexport default function evaluate( postfix, variables ) {\n\tvar stack = [],\n\t\ti, j, args, getOperatorResult, term, value;\n\n\tfor ( i = 0; i < postfix.length; i++ ) {\n\t\tterm = postfix[ i ];\n\n\t\tgetOperatorResult = OPERATORS[ term ];\n\t\tif ( getOperatorResult ) {\n\t\t\t// Pop from stack by number of function arguments.\n\t\t\tj = getOperatorResult.length;\n\t\t\targs = Array( j );\n\t\t\twhile ( j-- ) {\n\t\t\t\targs[ j ] = stack.pop();\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tvalue = getOperatorResult.apply( null, args );\n\t\t\t} catch ( earlyReturn ) {\n\t\t\t\treturn earlyReturn;\n\t\t\t}\n\t\t} else if ( variables.hasOwnProperty( term ) ) {\n\t\t\tvalue = variables[ term ];\n\t\t} else {\n\t\t\tvalue = +term;\n\t\t}\n\n\t\tstack.push( value );\n\t}\n\n\treturn stack[ 0 ];\n}\n","import pluralForms from '@tannin/plural-forms';\n\n/**\n * Tannin constructor options.\n *\n * @typedef {Object} TanninOptions\n *\n * @property {string} [contextDelimiter] Joiner in string lookup with context.\n * @property {Function} [onMissingKey] Callback to invoke when key missing.\n */\n\n/**\n * Domain metadata.\n *\n * @typedef {Object} TanninDomainMetadata\n *\n * @property {string} [domain] Domain name.\n * @property {string} [lang] Language code.\n * @property {(string|Function)} [plural_forms] Plural forms expression or\n * function evaluator.\n */\n\n/**\n * Domain translation pair respectively representing the singular and plural\n * translation.\n *\n * @typedef {[string,string]} TanninTranslation\n */\n\n/**\n * Locale data domain. The key is used as reference for lookup, the value an\n * array of two string entries respectively representing the singular and plural\n * translation.\n *\n * @typedef {{[key:string]:TanninDomainMetadata|TanninTranslation,'':TanninDomainMetadata|TanninTranslation}} TanninLocaleDomain\n */\n\n/**\n * Jed-formatted locale data.\n *\n * @see http://messageformat.github.io/Jed/\n *\n * @typedef {{[domain:string]:TanninLocaleDomain}} TanninLocaleData\n */\n\n/**\n * Default Tannin constructor options.\n *\n * @type {TanninOptions}\n */\nvar DEFAULT_OPTIONS = {\n\tcontextDelimiter: '\\u0004',\n\tonMissingKey: null,\n};\n\n/**\n * Given a specific locale data's config `plural_forms` value, returns the\n * expression.\n *\n * @example\n *\n * ```\n * getPluralExpression( 'nplurals=2; plural=(n != 1);' ) === '(n != 1)'\n * ```\n *\n * @param {string} pf Locale data plural forms.\n *\n * @return {string} Plural forms expression.\n */\nfunction getPluralExpression( pf ) {\n\tvar parts, i, part;\n\n\tparts = pf.split( ';' );\n\n\tfor ( i = 0; i < parts.length; i++ ) {\n\t\tpart = parts[ i ].trim();\n\t\tif ( part.indexOf( 'plural=' ) === 0 ) {\n\t\t\treturn part.substr( 7 );\n\t\t}\n\t}\n}\n\n/**\n * Tannin constructor.\n *\n * @class\n *\n * @param {TanninLocaleData} data Jed-formatted locale data.\n * @param {TanninOptions} [options] Tannin options.\n */\nexport default function Tannin( data, options ) {\n\tvar key;\n\n\t/**\n\t * Jed-formatted locale data.\n\t *\n\t * @name Tannin#data\n\t * @type {TanninLocaleData}\n\t */\n\tthis.data = data;\n\n\t/**\n\t * Plural forms function cache, keyed by plural forms string.\n\t *\n\t * @name Tannin#pluralForms\n\t * @type {Object}\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} 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 & {__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","import { componentProvider } from 'js-component-framework';\nimport FilterMilestones from './filter-milestones';\n\nconst FilterMilestonesConfig = {\n name: 'filter-milestones',\n component: FilterMilestones,\n querySelector: {},\n querySelectorAll: {},\n options: {\n hide: 'snc-hide',\n linkActive: 'snc-active',\n },\n};\n\ncomponentProvider(FilterMilestonesConfig);\n","import getElementFromComponent from 'utils/getElementFromComponent';\nimport {\n __,\n sprintf,\n setLocaleData,\n} from '@wordpress/i18n';\n\n/**\n * Component for filtering milestones.\n */\nexport default class FilterMilestones {\n /**\n * Get unique ids from an array.\n *\n * @param {Array} Array with duplicate values.\n * @returns {Array} Array with unique values.\n */\n static unique(array) {\n return [...new Set(array)];\n }\n\n /**\n * Get base URL.\n *\n * @returns {String}\n */\n static getBaseUrl() {\n return new URL(window.location);\n }\n\n /**\n * Check if item has ids.\n *\n * @param {Node} item Item node.\n * @param {Array} ids Array of ids.\n */\n static hasTypes(item, ids, type) {\n const {\n [type]: dataType,\n } = item.dataset;\n\n const [hasTypes] = ids\n .filter((value) => dataType\n .includes(Number(value)));\n\n return (undefined !== hasTypes);\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 // Register text domain.\n setLocaleData({ '': {} }, 'sciencenews');\n\n // Bind class methods.\n this.init = this.init.bind(this);\n this.handleFilter = this.handleFilter.bind(this);\n this.getParamIds = this.getParamIds.bind(this);\n this.filterPosts = this.filterPosts.bind(this);\n this.pushHistory = this.pushHistory.bind(this);\n this.updateState = this.updateState.bind(this);\n this.getAllInputIds = this.getAllInputIds.bind(this);\n this.getAllActiveInputIds = this.getAllActiveInputIds.bind(this);\n this.handleSelected = this.handleSelected.bind(this);\n this.createItem = this.createItem.bind(this);\n this.updateTotalCount = this.updateTotalCount.bind(this);\n\n // Get lists of posts.\n this.items = Array.from(getElementFromComponent(\n 'list-item',\n 'snc-milestones-posts-section',\n true,\n ));\n\n // Get total count from h2 heading.\n this.totalCount = getElementFromComponent(\n 'heading',\n 'snc-milestones-archive',\n ).querySelector('i');\n\n // Hold list of searched ids.\n this.filteredIds = [];\n\n // Hold list of inputs.\n this.inputs = Array.from(this.element.querySelectorAll('input'));\n\n // Hold object of label text references.\n this.labels = Array.from(this.element.querySelectorAll('label'))\n .reduce((acc, label) => {\n const labelFor = label.getAttribute('for');\n return { ...acc, [labelFor]: label.innerText.trim() };\n }, {});\n\n // Component type.\n this.type = this.element.dataset.filterType;\n\n // Get h2 heading child selected spans.\n this.selectedIds = getElementFromComponent(\n `selected-${this.type}`,\n 'snc-milestones-archive',\n );\n\n const {\n hide,\n linkActive,\n } = this.options;\n\n Object.assign(this, {\n hide,\n linkActive,\n });\n\n // Handle init.\n this.init();\n\n // Update posts.\n this.element.addEventListener('change', this.handleFilter);\n }\n\n /**\n * Handle filtered items.\n *\n * @param {Event} event The Event object.\n */\n handleFilter(event) {\n const { target } = event;\n\n // Get object ID.\n const objectID = target.id;\n\n // Reset?\n let isReset = this.type === objectID;\n\n if (isReset) {\n // Reset active/checked inputs.\n this.inputs.forEach((input, index) => {\n // eslint-disable-next-line no-param-reassign\n input.checked = 0 === index;\n });\n\n this.filteredIds = [];\n } else {\n // Unchecked first one if necessary.\n if (this.inputs[0].checked) {\n this.inputs[0].checked = false;\n }\n\n if (! target.checked) {\n // Set the first one active if there is no other.\n if (! this.getAllActiveInputIds().length) {\n this.inputs[0].checked = true;\n\n // Also, set to true to reset the state.\n isReset = true;\n\n // Empty list of filtered ids.\n this.filteredIds = [];\n }\n\n // Remove current item ID from the list.\n this.filteredIds = this.filteredIds\n .filter((id) => id !== objectID);\n } else {\n // Add current ID to the list.\n this.filteredIds.push(objectID);\n }\n }\n\n // Update history state and URL params.\n this.pushHistory(isReset);\n\n // Filter posts.\n this.filterPosts();\n\n // Update Selected heading.\n if (null !== this.selectedIds) {\n this.handleSelected();\n }\n\n // Set total count.\n this.updateTotalCount();\n }\n\n /**\n * Handle selected items.\n */\n handleSelected() {\n // Get the span.\n const span = this.selectedIds.querySelector('span');\n\n // Remove it.\n span.remove();\n\n // Reset? Add default one.\n if (! this.filteredIds.length) {\n this.createItem(sprintf(\n // translators: %1$s Name of the current component.\n __('All %1$s', 'sciencenews'),\n this.type[0].toUpperCase() + this.type.slice(1),\n ));\n } else {\n const labelNames = this.filteredIds.map((item) => this.labels[item]);\n\n // Recreate it with new or without old ones.\n this.createItem(labelNames.join('; '));\n }\n }\n\n /**\n * Get all input IDs.\n *\n * @returns {Array} An array with all input IDs.\n */\n getAllInputIds() {\n return this.inputs\n .filter((input) => (this.type !== input.id) && 0 !== Number(input.id))\n .map((item) => item.id);\n }\n\n /**\n * Get all active input Ids.\n *\n * @returns {Array} An array with all active input IDs.\n */\n getAllActiveInputIds() {\n return this.inputs\n .filter((input) => (true === input.checked) && 0 !== Number(input.id))\n .map((item) => item.id);\n }\n\n /**\n * Get ids from the url param.\n *\n * @returns {Array} An array of param IDs.\n */\n getParamIds() {\n const ids = this.constructor.getBaseUrl().searchParams.get(this.type);\n\n // Bail early.\n if (null === ids) {\n return [];\n }\n\n // Get ids.\n return this.constructor.unique(ids.split(','))\n .filter((item) => 0 !== Number(item));\n }\n\n /**\n * Handle component initialization.\n */\n init() {\n const ids = this.getParamIds();\n const currentState = window.history.state;\n const activeInputIds = (0 < ids.length) ? this.getAllActiveInputIds() : [];\n let newState = {\n items: {},\n };\n\n if (null === currentState) {\n newState = {\n items: {\n [this.type]: activeInputIds,\n },\n };\n } else {\n newState = {\n items: this.updateState(currentState.items, activeInputIds),\n };\n }\n\n // Update state.\n window.history.replaceState(newState, '');\n\n // Set all active inputs.\n this.filteredIds = activeInputIds;\n\n // Filter posts.\n this.filterPosts();\n\n // Set total count.\n this.updateTotalCount();\n }\n\n /**\n * Update the URL.\n *\n * @param {Boolean} clear Are we clearing the current component state?\n */\n pushHistory(clear = false) {\n const currentState = window.history.state;\n const baseUrl = this.constructor.getBaseUrl();\n\n if (true === clear) {\n baseUrl.searchParams.delete(this.type);\n } else {\n baseUrl.searchParams.set(this.type, this.filteredIds.join(','));\n }\n\n // Update history state.\n window.history.replaceState(\n {\n items: this.updateState(currentState.items, this.filteredIds),\n },\n '',\n baseUrl,\n );\n }\n\n /**\n * Update total count.\n */\n updateTotalCount() {\n this.totalCount.innerText = this.items\n .filter((item) => ! item.classList.contains(this.hide))\n .length;\n }\n\n /**\n * Filter posts.\n */\n filterPosts() {\n const {\n items: {\n themes: themeIds = [],\n connections: connectionIds = [],\n },\n } = window.history.state;\n\n const emptyState = (! themeIds.length && ! connectionIds.length);\n const bothTypes = (themeIds.length && connectionIds.length);\n\n /**\n * Brief explanation of how this is working.\n *\n * We hide the items by default. And we show them based on:\n *\n * - show if: themes and connections are empty (clean state).\n * - show if: we have both types in the state, and the current item have ids\n * from both types.\n * - show if: the current item have ids from one of the types in the state\n * and the state has only one type.\n */\n this.items.forEach((item) => {\n let hideItem = true;\n\n const showTheme = this.constructor\n .hasTypes(item, themeIds, 'themes');\n\n const showConnection = this.constructor\n .hasTypes(item, connectionIds, 'connections');\n\n switch (true) {\n case emptyState:\n hideItem = false;\n break;\n\n case bothTypes && (showTheme && showConnection):\n hideItem = false;\n break;\n\n case (! bothTypes && (showTheme || showConnection)):\n hideItem = false;\n break;\n\n default:\n hideItem = true;\n }\n\n item.classList.toggle(this.hide, hideItem);\n });\n }\n\n /**\n * Update state of the current component.\n *\n * @param {Object} items\n * @param {Array} ids\n * @returns {Object}\n */\n updateState(items, ids) {\n return Object.assign(items, {\n [this.type]: ids,\n });\n }\n\n /**\n * Create Node.\n *\n * @param {String} itemLabel Item label.\n */\n createItem(itemLabel) {\n const span = document.createElement('span');\n const spanLabel = document.createTextNode(itemLabel);\n\n span.appendChild(spanLabel);\n\n this.selectedIds.appendChild(span);\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 * 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","/**\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","/**\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 { 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","import AriaComponent from '../AriaComponent';\nimport keyCodes from '../lib/keyCodes';\nimport interactiveChildren from '../lib/interactiveChildren';\nimport { tabIndexDeny, tabIndexAllow } from '../lib/rovingTabIndex';\nimport { setUniqueId } from '../lib/uniqueId';\nimport getFirstAndLastItems from '../lib/getFirstAndLastItems';\n\n/**\n * Class for setting up an interactive popup element that can be triggered by a\n * controlling element.\n */\nexport default class Popup extends AriaComponent {\n /**\n * Create a MenuBar.\n * @constructor\n *\n * @param {object} config The config object.\n */\n constructor(config) {\n super(config);\n\n /**\n * The component name.\n *\n * @type {string}\n */\n this.componentName = 'Popup';\n\n /**\n * Component configuration options.\n *\n * @type {object}\n */\n const options = {\n /**\n * The element used to trigger the Popup element.\n *\n * @type {HTMLButtonElement}\n */\n controller: null,\n\n /**\n * The Popup's target element.\n *\n * @type {HTMLElement}\n */\n target: null,\n\n /**\n * The value of `aria-haspopup` must match the role of the Popup container.\n * Options: menu, listbox, tree, grid, or dialog,\n *\n * @type {string}\n */\n type: 'true', // 'true' === 'menu' in UAs that don't support WAI-ARIA 1.1\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 // Save references to the controller and target.\n Object.assign(this, options, config);\n\n // Intial component state.\n this.state = { expanded: false };\n\n // Bind class methods.\n this.init = this.init.bind(this);\n this.setInteractiveChildren = this.setInteractiveChildren.bind(this);\n this.stateWasUpdated = this.stateWasUpdated.bind(this);\n this.hide = this.hide.bind(this);\n this.show = this.show.bind(this);\n this.controllerClickHandler = this.controllerClickHandler.bind(this);\n this.controllerKeyDownHandler = this.controllerKeyDownHandler.bind(this);\n this.targetKeyDownHandler = this.targetKeyDownHandler.bind(this);\n this.hideOnTabOut = this.hideOnTabOut.bind(this);\n this.hideOnOutsideClick = this.hideOnOutsideClick.bind(this);\n this.destroy = this.destroy.bind(this);\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 // Check for a valid controller and target before initializing.\n if (null !== this.controller && null !== this.target) {\n this.init();\n }\n }\n\n /**\n * Collect and prepare the target element's interactive child elements.\n */\n setInteractiveChildren() {\n const { expanded } = this.state;\n /**\n * The target element's interactive child elements.\n *\n * @type {array}\n */\n this.interactiveChildElements = interactiveChildren(this.target);\n\n /*\n * Allow/deny tabbing to interactive children.\n * Focusable content should have tabindex='-1' unless the popup is expanded.\n */\n if (expanded) {\n tabIndexAllow(this.interactiveChildElements);\n } else {\n tabIndexDeny(this.interactiveChildElements);\n }\n\n /*\n * Collect first and last interactive child elements from target and merge\n * them in as instance properties.\n */\n if (0 < this.interactiveChildElements.length) {\n const [\n firstInteractiveChild,\n lastInteractiveChild,\n ] = getFirstAndLastItems(this.interactiveChildElements);\n\n Object.assign(this, { firstInteractiveChild, lastInteractiveChild });\n }\n }\n\n /**\n * Set up the component's DOM attributes and event listeners.\n */\n init() {\n /*\n * A reference to the class instance added to the controller and target\n * elements to enable external interactions with this instance.\n */\n super.setSelfReference([this.controller, this.target]);\n\n // Set up interactive child elements.\n this.setInteractiveChildren();\n\n // Add target attribute.\n setUniqueId(this.target);\n\n // Add controller attributes\n this.controller.setAttribute('aria-haspopup', this.type);\n this.controller.setAttribute('aria-expanded', 'false');\n this.controller.setAttribute('aria-controls', this.target.id);\n setUniqueId(this.controller);\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 /*\n * Establishes a relationship when the DOM heirarchy doesn't represent that\n * a relationship exists.\n */\n if (this.target !== this.controller.nextElementSibling) {\n this.controller.setAttribute('aria-owns', this.target.id);\n }\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 // Add event listeners\n this.controller.addEventListener('click', this.controllerClickHandler);\n this.controller.addEventListener('keydown', this.controllerKeyDownHandler);\n this.target.addEventListener('keydown', this.targetKeyDownHandler);\n document.body.addEventListener('click', this.hideOnOutsideClick);\n\n // Run {initCallback}\n this.onInit.call(this);\n }\n\n /**\n * Update the component attributes based on updated state.\n *\n * @param {object} state The component state.\n */\n stateWasUpdated() {\n const { expanded } = this.state;\n\n this.controller.setAttribute('aria-expanded', `${expanded}`);\n\n /*\n * Update Popup and interactive children's attributes.\n */\n if (expanded) {\n this.target.setAttribute('aria-hidden', 'false');\n this.target.removeAttribute('hidden');\n\n tabIndexAllow(this.interactiveChildElements);\n } else {\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\n // Run {stateChangeCallback}\n this.onStateChange.call(this, this.state);\n }\n\n /**\n * Handle keydown events on the Popup controller.\n *\n * @param {Event} event The event object.\n */\n controllerKeyDownHandler(event) {\n const { expanded } = this.state;\n const {\n ESC,\n TAB,\n SPACE,\n RETURN,\n } = keyCodes;\n const { keyCode } = event;\n\n if ([SPACE, RETURN].includes(keyCode)) {\n /*\n * Treat the Spacebar and Return keys as clicks in case the controller is\n * not a