{"version":3,"file":"js/global.bundle.min.js","mappings":"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","sources":["webpack://the-wrap/./node_modules/js-component-framework/es/domContentLoaded.js","webpack://the-wrap/./node_modules/js-component-framework/es/componentProvider.js","webpack://the-wrap/./node_modules/js-component-framework/es/componentLoader.js","webpack://the-wrap/./client/src/components/site-header/menu.js","webpack://the-wrap/./client/src/js/utils/breakpoints.js","webpack://the-wrap/./client/src/components/site-header/menu-button.js","webpack://the-wrap/./client/src/js/utils/getInteractiveChildren.js","webpack://the-wrap/./client/src/js/utils/getFirstAndLastItems.js","webpack://the-wrap/./client/src/js/utils/toArray.js","webpack://the-wrap/./client/src/js/PopOver.js","webpack://the-wrap/./client/src/components/site-header/search-toggle.js","webpack://the-wrap/./client/src/js/Accordion.js","webpack://the-wrap/./client/src/components/site-footer/index.js"],"sourcesContent":["/**\n * Executes the given callback when DOMContentLoaded is ready.\n *\n * @param {function} cb Callback to execute once DOMContentLoaded completes.\n */\nconst domContentLoaded = cb => {\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n cb();\n }\n document.addEventListener('DOMContentLoaded', cb, {\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 if (load !== false) {\n // Load the provider function.\n componentLoader(init, load);\n return undefined;\n }\n return init;\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}","import { componentProvider } from 'js-component-framework/es';\n\n/**\n * Class to set up an interactive Menu element.\n *\n * https://www.w3.org/WAI/ARIA/apg/example-index/disclosure/disclosure-navigation.html\n */\nexport default class Menu {\n /**\n * Tracks the active submenu Disclosure.\n * @private\n *\n * @type {object}\n */\n #activeDisclosure = undefined;\n\n /**\n * Create a Menu.\n * @constructor\n *\n * @param {HTMLUListElement} options.element The menu list element.\n */\n constructor({ element }) {\n /**\n * the component element.\n *\n * @type {HTMLULElement}\n */\n this.element = element;\n\n /**\n * Submenu Disclosures.\n *\n * @type {array}\n */\n this.disclosures = [];\n\n /**\n * The clas to add to disclosure parent items when the submenu is expanded.\n *\n * @type {string}\n */\n this.expandedItemClass = 'menu__item--submenu-is-expanded';\n\n /**\n * The current Menu item, if any.\n *\n * @type {HTMLAnchorElement}\n */\n this.ariaCurrentPage = null;\n\n // Make sure the component element is a list.\n if (['UL', 'OL'].includes(element.nodeName)) {\n this.init();\n }\n }\n\n /**\n * Set the active Disclosure ID, which conditionally sets the active Disclosure.\n *\n * @param {string} disclosureId The Disclosure ID.\n */\n set activeDisclosureId(disclosureId) {\n // Find the Disclosure by ID.\n const disclosure = this.disclosures.find((obj) => obj.id === disclosureId);\n\n // Get the Disclosure's current state.\n const isActiveId = (\n undefined !== this.activeDisclosureId\n && this.activeDisclosureId === disclosureId\n );\n\n // Toggle the Disclosure's state.\n this.setDisclosureState(disclosure, !isActiveId);\n\n // Deactivate the currently-active disclosure, if any.\n this.setDisclosureState(this.activeDisclosure, false);\n\n // If `disclosureId` was the active ID, then it is no longer active.\n this.#activeDisclosure = isActiveId ? undefined : disclosure;\n\n if (this.activeDisclosureId) {\n document.body.addEventListener('keydown', this.bodyHandleKeydown);\n } else {\n document.body.removeEventListener('keydown', this.bodyHandleKeydown);\n }\n }\n\n /**\n * Returns the active Disclosure ID.\n *\n * @return {string|undefined}\n */\n get activeDisclosureId() {\n return this.activeDisclosure?.id;\n }\n\n /**\n * Returns the active Disclosure.\n *\n * @return {object|undefined}\n */\n get activeDisclosure() {\n return this.#activeDisclosure;\n }\n\n /**\n * Initialize and save a submenu Disclosure.\n *\n * @param {array} disclosures The array of previous disclosures.\n * @param {HTMLLIElement} menuChild The menu item.\n * @return {array} A collection of submenu Disclosures.\n */\n initSubmenuDisclosure = (disclosures, menuChild) => {\n let controller = menuChild.querySelector(':scope > [aria-controls]');\n\n if (controller === null) {\n const [firstChild, ...theRest] = Array.from(menuChild.children);\n\n // Try to use the first child of the menu item.\n controller = firstChild;\n\n if (controller == null || !controller.matches('a,button')) {\n // The first child isn't a link or button, so find the first instance of either.\n [controller] = Array.from(theRest).filter((child) => child.matches('a,button'));\n }\n }\n\n if (controller == null) {\n return disclosures;\n }\n\n const target = controller.parentElement.querySelector('ul');\n if (target == null) {\n return disclosures;\n }\n\n controller.setAttribute('aria-expanded', false);\n target.setAttribute('aria-hidden', true);\n\n // Do this last to be sure the target has an ID.\n controller.setAttribute('aria-controls', target.id);\n\n controller.addEventListener('click', this.controllerHandleClick);\n controller.addEventListener('keydown', this.controllerHandleKeydown);\n\n const disclosure = {\n id: controller.id,\n controller,\n target,\n };\n\n return [...disclosures, disclosure];\n };\n\n /**\n * Collect menu links and recursively instantiate sublist menu items.\n */\n init = () => {\n // Set and collect submenu Disclosures.\n this.disclosures = Array.from(this.element.children)\n .reduce(this.initSubmenuDisclosure, []);\n\n if (this.disclosures.length > 0) {\n this.element.addEventListener('focusout', this.menuHandleFocusout);\n }\n\n // Save the current page's link for later reference.\n this.ariaCurrentPage = this.element.querySelector('[aria-current=\"page\"]');\n this.element.addEventListener('keydown', this.menuHandleKeydown);\n };\n\n /**\n * Update attributes based on expanded state.\n *\n * @param {object} disclosure The Disclosure to update.\n * @param {boolean} expanded The expected updated Disclosure state.\n */\n setDisclosureState = (disclosure, expanded) => {\n if (undefined !== disclosure) {\n disclosure.controller.setAttribute('aria-expanded', expanded);\n disclosure.target.setAttribute('aria-hidden', !expanded);\n\n const disclosureParent = disclosure.controller?.parentElement;\n const methodName = expanded ? 'add' : 'remove';\n\n if (undefined !== disclosureParent) {\n disclosureParent.classList[methodName](this.expandedItemClass);\n }\n }\n };\n\n /**\n * Activate the submenu Disclosure on controller click.\n *\n * @param {Event} event The Event object.\n */\n controllerHandleClick = (event) => {\n event.preventDefault();\n\n this.activeDisclosureId = event.target.id;\n };\n\n /**\n * Toggle Disclosures on controller keydown.\n *\n * @param {Event} event The Event object.\n */\n controllerHandleKeydown = (event) => {\n const { target, key } = event;\n\n if ([' ', 'Enter'].includes(key)) {\n event.preventDefault();\n event.stopPropagation();\n\n this.activeDisclosureId = target.id;\n }\n };\n\n /**\n * Close any active submenu Disclosure when the menu no longer contains the\n * active element.\n *\n * @param {Event} event The Event object.\n */\n menuHandleFocusout = (event) => {\n if (!this.element.contains(event.relatedTarget)) {\n this.activeDisclosureId = undefined;\n }\n };\n\n /**\n * Add the aria-active attribute to the focused menu item, removing it from\n * any other item in the processs.\n *\n * @param {Event} event The Event object.\n */\n menuHandleKeydown = (event) => {\n const { target, key } = event;\n\n if (\n [' ', 'Enter'].includes(key)\n && !target.hasAttribute('aria-controls')\n && !target.hasAttribute('aria-current')\n ) {\n this.ariaCurrentPage?.removeAttribute('aria-current');\n target.setAttribute('aria-current', 'page');\n\n this.ariaCurrentPage = target;\n }\n };\n\n /**\n * Close any active submenu Disclosure when the Escape key is pressed.\n *\n * @param {Event} event The Event object.\n */\n bodyHandleKeydown = (event) => {\n if (\n event.key === 'Escape'\n && undefined !== this.activeDisclosureId\n ) {\n const { controller, target } = this.activeDisclosure;\n\n this.activeDisclosureId = undefined;\n\n if (target.contains(document.activeElement)) {\n controller.focus();\n }\n }\n };\n}\n\ncomponentProvider({ name: 'menu', component: Menu });\n","import config from '../../../config/breakpoints.json';\n\n/**\n * Format global breakpoint values.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList\n *\n * @return {Object} An object of `key: MediaQueryList` pairs.\n */\nfunction formatBreakpoints() {\n return Object.keys(config).reduce((acc, bp) => {\n const bpMinRems = `${config[bp] / 16}rem`;\n const bpMaxRems = `${(config[bp] - 1) / 16}rem`;\n\n acc[`${bp}Min`] = window.matchMedia(`(min-width: ${bpMinRems})`);\n acc[`${bp}Max`] = window.matchMedia(`(max-width: ${bpMaxRems})`);\n\n return acc;\n }, {});\n}\n\nconst breakpoints = formatBreakpoints();\nexport default breakpoints;\n","import { componentProvider } from 'js-component-framework/es';\n\nimport getInteractiveChildren from '@/js/utils/getInteractiveChildren';\nimport getFirstAndLastItems from '@/js/utils/getFirstAndLastItems';\nimport breakpoints from '@/js/utils/breakpoints';\n\n/**\n * MenuButton component.\n */\nexport default class MenuButton {\n /**\n * Initial expanded state.\n * @private\n *\n * @type {Boolean}\n */\n #expandedState = false;\n\n /**\n * Gets the target element based on the controller's `aria-controls` attribute.\n *\n * @param {HTMLButtonElement} controller The component's controlling element.\n * @return {HTMLElement|null}\n */\n static getTargetElement(controller) {\n if (!controller.hasAttribute('aria-controls')) {\n const message = 'The component element is missing the required \\'aria-controls\\' attribute';\n throw new Error(`Configuration error: ${message}`);\n }\n\n const targetId = controller.getAttribute('aria-controls');\n const target = document.getElementById(targetId);\n\n if (target === null) {\n const message = `A target element with ID of '${targetId}' is not found`;\n throw new Error(`Configuration error: ${message}`);\n }\n\n return target;\n }\n\n /**\n * Starts the component\n *\n * @param {HTMLElement} options.element The component element.\n * @param {object} options.options The options object.\n */\n constructor({ element, options }) {\n // Collect elements.\n this.controller = element;\n this.target = this.constructor.getTargetElement(element);\n\n /**\n * Whether the component has been initialized.\n *\n * @type {Boolean}\n */\n this.initialized = false;\n\n /**\n * Component configuration options.\n *\n * @type {object}\n */\n const { close, useTransition } = {\n /**\n * Whether the CSS uses a transition, which will impact the ability to\n * focus elements within the target element.\n *\n * @type {boolean}\n */\n useTransition: false,\n\n /**\n * The selector for the target's close button.\n *\n * @type {string}\n */\n close: '',\n\n // Merge options with defaults.\n ...options,\n };\n\n this.useTransition = useTransition;\n\n if (close !== '') {\n /**\n * The element used to hide the target.\n *\n * @type {HTMLButtonElement}\n */\n this.closeButton = document.querySelector(close);\n }\n\n breakpoints.lgMin.addEventListener('change', this.init);\n this.init();\n }\n\n /**\n * Conditionally initialize the MenuButton.\n */\n init = () => {\n if (breakpoints.lgMin.matches) {\n if (this.initialized) {\n // Destroy for large screens.\n this.destroy();\n }\n } else {\n this.setUp();\n }\n };\n\n /**\n * Sets up the component's DOM attributes and event listeners.\n */\n setUp = () => {\n /*\n * Set the target 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('role', 'dialog');\n this.target.setAttribute('aria-modal', 'true');\n\n // Add event listeners\n this.controller.addEventListener('click', this.show);\n this.target.addEventListener('keydown', this.handleTargetKeydown);\n\n if (this.closeButton != null) {\n this.closeButton.addEventListener('click', this.handleCloseButtonClick);\n this.closeButton.addEventListener('keydown', this.handleCloseButtonKeydown);\n }\n\n if (this.useTransition) {\n this.target.addEventListener('transitionend', this.handleTargetShown);\n }\n\n this.initialized = true;\n };\n\n /**\n * Sets expanded state.\n *\n * @param {bool} newState The expected expanded state.\n */\n set expanded(newState) {\n this.#expandedState = newState;\n\n requestAnimationFrame(() => {\n this.controller.setAttribute('aria-expanded', this.expanded);\n });\n\n // Update target attributes and activeElement.\n if (this.expanded) {\n requestAnimationFrame(() => {\n this.target.setAttribute('aria-hidden', 'false');\n });\n\n if (!this.useTransition) {\n this.closeButton.focus();\n }\n } else {\n requestAnimationFrame(() => {\n this.target.setAttribute('aria-hidden', 'true');\n });\n }\n\n /*\n * Collect first and last interactive child elements from the target element\n * and merge them in as instance properties.\n *\n * Hidden elements are excluded, so we do this (once) after the expanded\n * state changes.\n */\n if (!this.firstInteractiveChild || !this.lastInteractiveChild) {\n // Collect the target element's interactive child elements.\n const interactiveChildElements = getInteractiveChildren(this.target);\n\n if (interactiveChildElements.length > 0) {\n const [\n firstInteractiveChild,\n lastInteractiveChild,\n ] = getFirstAndLastItems(interactiveChildElements);\n\n this.firstInteractiveChild = firstInteractiveChild;\n this.lastInteractiveChild = lastInteractiveChild;\n }\n }\n }\n\n /**\n * Returns expanded state.\n *\n * @return {bool} The current expanded state.\n */\n get expanded() {\n return this.#expandedState;\n }\n\n /**\n * Handles keydown events on the target.\n *\n * @param {Event} event The Event object.\n */\n handleTargetKeydown = (event) => {\n const { code, shiftKey } = event;\n const { activeElement } = document;\n\n if (code === 'Escape' && this.expanded) {\n event.preventDefault();\n\n // Hide the target when the Escape key is pressed.\n requestAnimationFrame(() => {\n this.hide();\n });\n } else if (code === 'Tab') {\n // Trap tabs within the modal.\n // The close button is outside the modal, so we have to patch it in.\n if (shiftKey) {\n if (this.firstInteractiveChild === activeElement) {\n event.preventDefault();\n\n if (this.closeButton) {\n this.closeButton.focus();\n } else {\n this.lastInteractiveChild.focus();\n }\n }\n } else if (this.lastInteractiveChild === activeElement) {\n event.preventDefault();\n\n if (this.closeButton) {\n this.closeButton.focus();\n } else {\n this.firstInteractiveChild.focus();\n }\n }\n }\n };\n\n /**\n * Handles click events on the close button.\n *\n * @param {Event} event The Event object.\n */\n handleCloseButtonClick = (event) => {\n if (this.expanded) {\n event.preventDefault();\n\n requestAnimationFrame(() => {\n this.hide();\n });\n }\n };\n\n /**\n * Handles close button keydown events.\n *\n * @param {Event} event The Event object.\n */\n handleCloseButtonKeydown = (event) => {\n const { code, shiftKey } = event;\n\n if (code === 'Escape' && this.expanded) {\n event.preventDefault();\n\n // Hide the target when the Escape key is pressed.\n requestAnimationFrame(() => {\n this.hide();\n });\n } else if (code === 'Tab' && this.expanded) {\n event.preventDefault();\n\n // Includes the close button in trapped tabs.\n if (shiftKey) {\n this.lastInteractiveChild.focus();\n } else {\n this.firstInteractiveChild.focus();\n }\n }\n };\n\n /**\n * Handles visible target after a CSS transition.\n */\n handleTargetShown = (event) => {\n // Bail early if the transition is on a child element.\n if (this.target !== event.target) {\n return;\n }\n\n this.closeButton.focus();\n };\n\n /**\n * Updates component state to show the target element.\n */\n show = () => {\n this.expanded = true;\n };\n\n /**\n * Updates component state to hide the target element.\n */\n hide = () => {\n this.expanded = false;\n\n // Move focus to the controller.\n this.controller.focus();\n };\n\n /**\n * Removes all attributes and event listeners added by this class.\n */\n destroy = () => {\n // Remove controller attributes.\n this.controller.removeAttribute('aria-expanded');\n\n // Remove target attributes.\n this.target.removeAttribute('aria-hidden');\n this.target.removeAttribute('role');\n this.target.removeAttribute('aria-modal');\n\n // Remove event listeners.\n this.controller.removeEventListener('click', this.show);\n this.target.removeEventListener('keydown', this.handleTargetKeydown);\n\n if (this.closeButton != null) {\n this.closeButton.removeEventListener('click', this.handleCloseButtonClick);\n this.closeButton.removeEventListener('keydown', this.handleCloseButtonKeydown);\n }\n\n if (this.useTransition) {\n this.target.removeEventListener('transitionend', this.handleTargetShown);\n }\n\n // Reset initial state by setting the private field so the setter doesn't run.\n this.#expandedState = false;\n };\n}\n\nconst menuButtonConfig = {\n name: 'menu-button',\n component: MenuButton,\n options: {\n close: '.site-header__menu-close',\n },\n};\n\ncomponentProvider(menuButtonConfig);\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 getInteractiveChildren(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 // Filter out hidden elements.\n return Array.from(interactiveElements).filter((el) => el.offsetParent !== null);\n}\n\nexport default getInteractiveChildren;\n","import toArray from './toArray';\n\n/**\n * Get the first and last items from and Array or NodeList.\n *\n * @param {array|NodeList} items The Array or NodeList from which to retrieve the items.\n * @return {array} The first and last items.\n */\nexport default function getFirstAndLastItems(items) {\n // Ensure we're working with an Array;\n const arrayOfItems = toArray(items);\n const lastIndex = (arrayOfItems.length - 1);\n\n // Get the first and last items by index.\n const {\n 0: firstItem,\n [lastIndex]: lastItem,\n } = arrayOfItems;\n\n return [firstItem, lastItem];\n}\n","/**\n * Create an array from a value.\n *\n * @param {Mixed} maybeAnArray An HTMLElement, NodeList, or Array of elements.\n */\nexport default function toArray(maybeAnArray) {\n if (Array.isArray(maybeAnArray)) {\n return maybeAnArray;\n }\n\n if (maybeAnArray instanceof HTMLElement) {\n // Convert a single element to an Array.\n return new Array(maybeAnArray);\n }\n\n if (\n maybeAnArray instanceof NodeList\n || maybeAnArray instanceof HTMLCollection\n ) {\n return Array.from(maybeAnArray);\n }\n\n return [];\n}\n","/**\n * PopOver class.\n */\nexport default class PopOver {\n /**\n * Initial expanded state.\n * @private\n *\n * @type {Boolean}\n */\n #expandedState = false;\n\n /**\n * Get the target element based on the controller's `aria-controls` attribute.\n *\n * @param {HTMLButtonElement} controller The component's controlling element.\n * @return {HTMLElement|null}\n */\n static getTargetElement(controller) {\n if (!controller.hasAttribute('aria-controls')) {\n const message = 'The component element is missing the required \\'aria-controls\\' attribute';\n throw new Error(`Configuration error: ${message}`);\n }\n\n const targetId = controller.getAttribute('aria-controls');\n const target = document.getElementById(targetId);\n\n if (target === null) {\n const message = `A target element with ID of '${targetId}' is not found`;\n throw new Error(`Configuration error: ${message}`);\n }\n\n return target;\n }\n\n /**\n * Start the component\n */\n constructor(controller) {\n // Collect elements.\n this.controller = controller;\n this.target = this.constructor.getTargetElement(controller);\n\n this.init();\n }\n\n /**\n * Sets up the component's DOM attributes and event listeners.\n */\n init = () => {\n // Patch button role for non-button controller.\n if (this.controller.nodeName !== 'BUTTON') {\n this.controller.setAttribute('role', 'button');\n this.controller.addEventListener('keydown', this.handleControllerKeydown);\n }\n\n // The button is collapsed by default.\n requestAnimationFrame(() => {\n this.controller.setAttribute('aria-expanded', 'false');\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 requestAnimationFrame(() => {\n this.target.setAttribute('aria-hidden', 'true');\n });\n\n // Add event listeners\n this.controller.addEventListener('click', this.handleControllerClick);\n this.target.addEventListener('focusout', this.handleTargetFocusout);\n }\n\n /**\n * Sets expanded state.\n *\n * @param {bool} newState The expected expanded state.\n */\n set expanded(newExpanded) {\n this.#expandedState = newExpanded;\n\n requestAnimationFrame(() => {\n this.controller.setAttribute('aria-expanded', this.expanded);\n this.target.setAttribute('aria-hidden', !this.expanded);\n });\n\n if (this.expanded) {\n document.body.addEventListener('keydown', this.handleBodyKeydown);\n } else {\n document.body.removeEventListener('keydown', this.handleBodyKeydown);\n }\n }\n\n /**\n * Returns expanded state.\n *\n * @return {bool} The current expanded state.\n */\n get expanded() {\n return this.#expandedState;\n }\n\n /**\n * Handle controller clicks.\n *\n * @param {Event} event The event object.\n */\n handleControllerClick = (event) => {\n event.preventDefault();\n\n this.toggle();\n };\n\n /**\n * Treats the Spacebar and Return keys as clicks in case the controller is\n * not a