// modules are defined as an array // [ module function, map of requires ] // // map of requires is short require name -> numeric require // // anything defined in a previous bundle is accessed via the // orig method which is the require for previous bundles (function ( modules, entry, mainEntry, parcelRequireName, externals, distDir, publicUrl, devServer ) { /* eslint-disable no-undef */ var globalObject = typeof globalThis !== 'undefined' ? globalThis : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}; /* eslint-enable no-undef */ // Save the require from previous bundle to this closure if any var previousRequire = typeof globalObject[parcelRequireName] === 'function' && globalObject[parcelRequireName]; var importMap = previousRequire.i || {}; var cache = previousRequire.cache || {}; // Do not use `require` to prevent Webpack from trying to bundle this call var nodeRequire = typeof module !== 'undefined' && typeof module.require === 'function' && module.require.bind(module); function newRequire(name, jumped) { if (!cache[name]) { if (!modules[name]) { if (externals[name]) { return externals[name]; } // if we cannot find the module within our internal map or // cache jump to the current global require ie. the last bundle // that was added to the page. var currentRequire = typeof globalObject[parcelRequireName] === 'function' && globalObject[parcelRequireName]; if (!jumped && currentRequire) { return currentRequire(name, true); } // If there are other bundles on this page the require from the // previous one is saved to 'previousRequire'. Repeat this as // many times as there are bundles until the module is found or // we exhaust the require chain. if (previousRequire) { return previousRequire(name, true); } // Try the node require function if it exists. if (nodeRequire && typeof name === 'string') { return nodeRequire(name); } var err = new Error("Cannot find module '" + name + "'"); err.code = 'MODULE_NOT_FOUND'; throw err; } localRequire.resolve = resolve; localRequire.cache = {}; var module = (cache[name] = new newRequire.Module(name)); modules[name][0].call( module.exports, localRequire, module, module.exports, globalObject ); } return cache[name].exports; function localRequire(x) { var res = localRequire.resolve(x); if (res === false) { return {}; } // Synthesize a module to follow re-exports. if (Array.isArray(res)) { var m = {__esModule: true}; res.forEach(function (v) { var key = v[0]; var id = v[1]; var exp = v[2] || v[0]; var x = newRequire(id); if (key === '*') { Object.keys(x).forEach(function (key) { if ( key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(m, key) ) { return; } Object.defineProperty(m, key, { enumerable: true, get: function () { return x[key]; }, }); }); } else if (exp === '*') { Object.defineProperty(m, key, { enumerable: true, value: x, }); } else { Object.defineProperty(m, key, { enumerable: true, get: function () { if (exp === 'default') { return x.__esModule ? x.default : x; } return x[exp]; }, }); } }); return m; } return newRequire(res); } function resolve(x) { var id = modules[name][1][x]; return id != null ? id : x; } } function Module(moduleName) { this.id = moduleName; this.bundle = newRequire; this.require = nodeRequire; this.exports = {}; } newRequire.isParcelRequire = true; newRequire.Module = Module; newRequire.modules = modules; newRequire.cache = cache; newRequire.parent = previousRequire; newRequire.distDir = distDir; newRequire.publicUrl = publicUrl; newRequire.devServer = devServer; newRequire.i = importMap; newRequire.register = function (id, exports) { modules[id] = [ function (require, module) { module.exports = exports; }, {}, ]; }; // Only insert newRequire.load when it is actually used. // The code in this file is linted against ES5, so dynamic import is not allowed. // INSERT_LOAD_HERE Object.defineProperty(newRequire, 'root', { get: function () { return globalObject[parcelRequireName]; }, }); globalObject[parcelRequireName] = newRequire; for (var i = 0; i < entry.length; i++) { newRequire(entry[i]); } if (mainEntry) { // Expose entry point to Node, AMD or browser globals // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js var mainExports = newRequire(mainEntry); // CommonJS if (typeof exports === 'object' && typeof module !== 'undefined') { module.exports = mainExports; // RequireJS } else if (typeof define === 'function' && define.amd) { define(function () { return mainExports; }); } } })({"eX5PS":[function(require,module,exports,__globalThis) { /* eslint-disable max-len, no-param-reassign, no-unused-vars */ /** * Air theme JavaScript. */ // Import modules var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); var _reframeJs = require("reframe.js"); var _reframeJsDefault = parcelHelpers.interopDefault(_reframeJs); var _externalLink = require("./modules/external-link"); var _anchors = require("./modules/anchors"); var _anchorsDefault = parcelHelpers.interopDefault(_anchors); var _top = require("./modules/top"); var _topDefault = parcelHelpers.interopDefault(_top); var _a11YSkipLink = require("./modules/a11y-skip-link"); var _a11YSkipLinkDefault = parcelHelpers.interopDefault(_a11YSkipLink); var _a11YFocusSearchField = require("./modules/a11y-focus-search-field"); var _a11YFocusSearchFieldDefault = parcelHelpers.interopDefault(_a11YFocusSearchField); var _navigation = require("./modules/navigation"); // Define Javascript is active by changing the body class document.body.classList.remove('no-js'); document.body.classList.add('js'); document.addEventListener('DOMContentLoaded', ()=>{ (0, _anchorsDefault.default)(); (0, _topDefault.default)(); (0, _externalLink.styleExternalLinks)(); (0, _externalLink.initExternalLinkLabels)(); (0, _a11YSkipLinkDefault.default)(); (0, _a11YFocusSearchFieldDefault.default)(); // Init navigation // If you want to enable click based navigation, comment navDesktop() and uncomment navClick() // Remember to enable styles in assets/src/sass/navigation/navigation.scss (0, _navigation.navDesktop)(); // navClick(); (0, _navigation.navMobile)(); // Uncomment if you like to use a sticky navigation // navSticky(); // Fit video embeds to container (0, _reframeJsDefault.default)('.wp-has-aspect-ratio iframe'); }); },{"reframe.js":"bkavh","./modules/external-link":"9J9X5","./modules/anchors":"3Ru5C","./modules/top":"jy8xH","./modules/a11y-skip-link":"dTsEP","./modules/a11y-focus-search-field":"7NBWY","./modules/navigation":"ds5aQ","@parcel/transformer-js/src/esmodule-helpers.js":"eF9qW"}],"bkavh":[function(require,module,exports,__globalThis) { /** reframe.js - Reframe.js: responsive iframes for embedded content @version v4.0.2 @link https://github.com/yowainwright/reframe.ts#readme @author Jeff Wainwright (http://jeffry.in) @license MIT **/ /** * REFRAME.TS 🖼 * --- * @param target * @param cName * @summary defines the height/width ratio of the targeted */ var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); parcelHelpers.export(exports, "default", ()=>reframe); function reframe(target, cName) { var _a, _b; var frames = typeof target === 'string' ? document.querySelectorAll(target) : target; var c = cName || 'js-reframe'; if (!('length' in frames)) frames = [ frames ]; for(var i = 0; i < frames.length; i += 1){ var frame = frames[i]; var hasClass = frame.className.split(' ').indexOf(c) !== -1; if (hasClass || frame.style.width.indexOf('%') > -1) return; // get height width attributes var height = frame.getAttribute('height') || frame.offsetHeight; var width = frame.getAttribute('width') || frame.offsetWidth; var heightNumber = typeof height === 'string' ? parseInt(height) : height; var widthNumber = typeof width === 'string' ? parseInt(width) : width; // general targeted sizes var padding = heightNumber / widthNumber * 100; // created element of general reframed item // => set necessary styles of created element var div = document.createElement('div'); div.className = c; var divStyles = div.style; divStyles.position = 'relative'; divStyles.width = '100%'; divStyles.paddingTop = "".concat(padding, "%"); // set necessary styles of targeted var frameStyle = frame.style; frameStyle.position = 'absolute'; frameStyle.width = '100%'; frameStyle.height = '100%'; frameStyle.left = '0'; frameStyle.top = '0'; // reframe targeted (_a = frame.parentNode) === null || _a === void 0 || _a.insertBefore(div, frame); (_b = frame.parentNode) === null || _b === void 0 || _b.removeChild(frame); div.appendChild(frame); } } },{"@parcel/transformer-js/src/esmodule-helpers.js":"eF9qW"}],"eF9qW":[function(require,module,exports,__globalThis) { exports.interopDefault = function(a) { return a && a.__esModule ? a : { default: a }; }; exports.defineInteropFlag = function(a) { Object.defineProperty(a, '__esModule', { value: true }); }; exports.exportAll = function(source, dest) { Object.keys(source).forEach(function(key) { if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) return; Object.defineProperty(dest, key, { enumerable: true, get: function() { return source[key]; } }); }); return dest; }; exports.export = function(dest, destName, get) { Object.defineProperty(dest, destName, { enumerable: true, get: get }); }; },{}],"9J9X5":[function(require,module,exports,__globalThis) { /* eslint-disable no-param-reassign */ var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); /** * Try to get image alt texts from inside a link * to use in aria-label, when only elements inside * of link are images * @param {*} link DOM link element * @returns string */ parcelHelpers.export(exports, "getChildAltText", ()=>getChildAltText); parcelHelpers.export(exports, "styleExternalLinks", ()=>styleExternalLinks); parcelHelpers.export(exports, "initExternalLinkLabels", ()=>initExternalLinkLabels); var _localization = require("./localization"); var _localizationDefault = parcelHelpers.interopDefault(_localization); function isLinkExternal(link, localDomains) { // Empty links are not external if (!link.length) return false; const exceptions = [ '#', 'tel:', 'mailto:', '/' ]; // Check if the url starts with some of the exceptions const isException = exceptions.some((exception)=>{ const compare = new RegExp(`^${exception}`, 'g'); return compare.test(link); }); if (isException) return false; let linkUrl; try { linkUrl = new URL(link); } catch (error) { // eslint-disable-next-line no-console console.log(`Invalid URL: ${link}`); return false; } // Check if host is one of the local domains return !localDomains.some((domain)=>linkUrl.host === domain); } function getChildAltText(link) { const children = [ ...link.children ]; if (children.length === 0) return ''; const childImgs = children.filter((child)=>child.tagName.toLowerCase() === 'img'); // If there are other elements than img elements, no need to add aria-label if (children.length !== childImgs.length) return ''; // Find alt texts and add to array const altTexts = childImgs.filter((child)=>child.alt && child.alt !== '').map((child)=>child.alt); // If there is no alt texts, if (!altTexts.length) return ''; return altTexts.join(', '); } function styleExternalLinks() { let localDomains = [ window.location.host ]; if (typeof window.air_light_externalLinkDomains !== 'undefined') localDomains = localDomains.concat(window.air_light_externalLinkDomains); const links = document.querySelectorAll('a'); const externalLinks = [ ...links ].filter((link)=>isLinkExternal(link.href, localDomains)); // eslint-disable-next-line consistent-return externalLinks.forEach((externalLink)=>{ // Abort mission if there is only img element inside of link if (externalLink.childElementCount === 1 && externalLink.children[0].tagName.toLowerCase() === 'img') return false; if (!externalLink.classList.contains('no-external-link-label')) { const textContent = externalLink.textContent.trim().length ? externalLink.textContent.trim() : getChildAltText(externalLink); if (textContent && !externalLink.getAttribute('aria-label')) { const ariaLabel = externalLink.target === '_blank' ? `${textContent}: ${(0, _localizationDefault.default)('external_link')}, ${(0, _localizationDefault.default)('target_blank')}` : `${textContent}: ${(0, _localizationDefault.default)('external_link')}`; externalLink.setAttribute('aria-label', ariaLabel); } } // Arrow icon won't be added if one of these classes is defined for the link const classExceptions = [ 'no-external-link-indicator', 'global-link', 'button' ]; if (!classExceptions.some((className)=>externalLink.classList.contains(className))) { // Add SVG arrow icon externalLink.insertAdjacentHTML('beforeend', ''); externalLink.classList.add('is-external-link'); } }); } function initExternalLinkLabels() { // Add aria-labels to links without text or aria-labels and contain image with alt text const links = [ ...document.querySelectorAll('a') ]; // eslint-disable-next-line no-unused-vars const linksWithImgChildren = links.forEach((link)=>{ // If link already has text content or an aria label no need to add aria-label if (link.textContent.trim() !== '' || link.ariaLabel) return; const ariaLabel = getChildAltText(link); if (ariaLabel !== '') link.ariaLabel = ariaLabel; }); } },{"./localization":"eO6L7","@parcel/transformer-js/src/esmodule-helpers.js":"eF9qW"}],"eO6L7":[function(require,module,exports,__globalThis) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); parcelHelpers.export(exports, "default", ()=>getLocalization); function getLocalization(stringKey) { if (typeof window.air_light_screenReaderText === 'undefined' || typeof window.air_light_screenReaderText[stringKey] === 'undefined') { // eslint-disable-next-line no-console console.error(`Missing translation for ${stringKey}`); return ''; } return window.air_light_screenReaderText[stringKey]; } },{"@parcel/transformer-js/src/esmodule-helpers.js":"eF9qW"}],"3Ru5C":[function(require,module,exports,__globalThis) { /* eslint-disable no-param-reassign, no-undef */ var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); var _moveto = require("moveto"); var _movetoDefault = parcelHelpers.interopDefault(_moveto); const initAnchors = ()=>{ const easeFunctions = { easeInQuad (t, b, c, d) { t /= d; return c * t * t + b; }, easeOutQuad (t, b, c, d) { t /= d; return -c * t * (t - 2) + b; } }; const moveTo = new (0, _movetoDefault.default)({ ease: 'easeInQuad' }, easeFunctions); let triggers = document.querySelectorAll('a[href*="#"]:not([href="#"]):not(#top)'); triggers = Array.from(triggers); triggers.forEach((trigger)=>{ moveTo.registerTrigger(trigger); const targetId = trigger.hash.substring(1); const target = document.getElementById(targetId); trigger.addEventListener('click', (event)=>{ event.preventDefault(); // Prevent default behavior of anchor links // If the trigger is nav-link, close nav if (trigger.classList.contains('nav-link') || trigger.classList.contains('dropdown-item')) { document.body.classList.remove('js-nav-active'); // Additional navigation cleanup const html = document.documentElement; const container = document.getElementById('main-navigation-wrapper'); const menu = container?.querySelector('ul'); const button = document.getElementById('nav-toggle'); if (html) html.classList.remove('disable-scroll'); if (container) container.classList.remove('is-active'); if (button) { button.classList.remove('is-active'); button.setAttribute('aria-expanded', 'false'); } if (menu) menu.setAttribute('aria-expanded', 'false'); } // Check if the target element exists on the current page if (target) { // Scroll to the target element moveTo.move(target); // Update URL history window.history.pushState('', '', trigger.hash); // Focus on the target element after a delay setTimeout(()=>{ target.setAttribute('tabindex', '-1'); target.focus(); }, 500); } else // Navigate to the target page window.location.href = trigger.href; }); }); }; exports.default = initAnchors; },{"moveto":"5liko","@parcel/transformer-js/src/esmodule-helpers.js":"eF9qW"}],"5liko":[function(require,module,exports,__globalThis) { /*! * MoveTo - A lightweight scroll animation javascript library without any dependency. * Version 1.8.2 (28-06-2019 14:30) * Licensed under MIT * Copyright 2019 Hasan Aydoğdu */ "use strict"; var MoveTo = function() { /** * Defaults * @type {object} */ var defaults = { tolerance: 0, duration: 800, easing: 'easeOutQuart', container: window, callback: function callback() {} }; /** * easeOutQuart Easing Function * @param {number} t - current time * @param {number} b - start value * @param {number} c - change in value * @param {number} d - duration * @return {number} - calculated value */ function easeOutQuart(t, b, c, d) { t /= d; t--; return -c * (t * t * t * t - 1) + b; } /** * Merge two object * * @param {object} obj1 * @param {object} obj2 * @return {object} merged object */ function mergeObject(obj1, obj2) { var obj3 = {}; Object.keys(obj1).forEach(function(propertyName) { obj3[propertyName] = obj1[propertyName]; }); Object.keys(obj2).forEach(function(propertyName) { obj3[propertyName] = obj2[propertyName]; }); return obj3; } /** * Converts camel case to kebab case * @param {string} val the value to be converted * @return {string} the converted value */ function kebabCase(val) { return val.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); }); } /** * Count a number of item scrolled top * @param {Window|HTMLElement} container * @return {number} */ function countScrollTop(container) { if (container instanceof HTMLElement) return container.scrollTop; return container.pageYOffset; } /** * MoveTo Constructor * @param {object} options Options * @param {object} easeFunctions Custom ease functions */ function MoveTo() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var easeFunctions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; this.options = mergeObject(defaults, options); this.easeFunctions = mergeObject({ easeOutQuart: easeOutQuart }, easeFunctions); } /** * Register a dom element as trigger * @param {HTMLElement} dom Dom trigger element * @param {function} callback Callback function * @return {function|void} unregister function */ MoveTo.prototype.registerTrigger = function(dom, callback) { var _this = this; if (!dom) return; var href = dom.getAttribute('href') || dom.getAttribute('data-target'); // The element to be scrolled var target = href && href !== '#' ? document.getElementById(href.substring(1)) : document.body; var options = mergeObject(this.options, _getOptionsFromTriggerDom(dom, this.options)); if (typeof callback === 'function') options.callback = callback; var listener = function listener(e) { e.preventDefault(); _this.move(target, options); }; dom.addEventListener('click', listener, false); return function() { return dom.removeEventListener('click', listener, false); }; }; /** * Move * Scrolls to given element by using easeOutQuart function * @param {HTMLElement|number} target Target element to be scrolled or target position * @param {object} options Custom options */ MoveTo.prototype.move = function(target) { var _this2 = this; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (target !== 0 && !target) return; options = mergeObject(this.options, options); var distance = typeof target === 'number' ? target : target.getBoundingClientRect().top; var from = countScrollTop(options.container); var startTime = null; var lastYOffset; distance -= options.tolerance; // rAF loop var loop = function loop(currentTime) { var currentYOffset = countScrollTop(_this2.options.container); if (!startTime) // To starts time from 1, we subtracted 1 from current time // If time starts from 1 The first loop will not do anything, // because easing value will be zero startTime = currentTime - 1; var timeElapsed = currentTime - startTime; if (lastYOffset) { if (distance > 0 && lastYOffset > currentYOffset || distance < 0 && lastYOffset < currentYOffset) return options.callback(target); } lastYOffset = currentYOffset; var val = _this2.easeFunctions[options.easing](timeElapsed, from, distance, options.duration); options.container.scroll(0, val); if (timeElapsed < options.duration) window.requestAnimationFrame(loop); else { options.container.scroll(0, distance + from); options.callback(target); } }; window.requestAnimationFrame(loop); }; /** * Adds custom ease function * @param {string} name Ease function name * @param {function} fn Ease function */ MoveTo.prototype.addEaseFunction = function(name, fn) { this.easeFunctions[name] = fn; }; /** * Returns options which created from trigger dom element * @param {HTMLElement} dom Trigger dom element * @param {object} options The instance's options * @return {object} The options which created from trigger dom element */ function _getOptionsFromTriggerDom(dom, options) { var domOptions = {}; Object.keys(options).forEach(function(key) { var value = dom.getAttribute("data-mt-".concat(kebabCase(key))); if (value) domOptions[key] = isNaN(value) ? value : parseInt(value, 10); }); return domOptions; } return MoveTo; }(); module.exports = MoveTo; },{}],"jy8xH":[function(require,module,exports,__globalThis) { /* eslint-disable max-len */ var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); var _moveto = require("moveto"); var _movetoDefault = parcelHelpers.interopDefault(_moveto); const backToTop = ()=>{ // Back to top button const moveToTop = new (0, _movetoDefault.default)({ duration: 300, easing: 'easeOutQuart' }); const topButton = document.getElementById('top'); const focusableElements = document.querySelectorAll('button, a, input, select, textarea, [tabindex]:not([tabindex="-1"])'); function trackScroll() { const scrolled = window.pageYOffset; const scrollAmount = document.documentElement.clientHeight; if (scrolled > scrollAmount) topButton.classList.add('is-visible'); if (scrolled < scrollAmount) topButton.classList.remove('is-visible'); } function scroll(focusVisible) { // Check if user prefers reduced motion, if so, just scroll to top const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; if (prefersReducedMotion) { focusableElements[0].focus({ focusVisible }); return; } // Move smoothly to the first focusable element on the page moveToTop.move(focusableElements[0]); // Focus too, if on keyboard focusableElements[0].focus({ preventScroll: true, focusVisible }); } if (topButton) { topButton.addEventListener('click', (event)=>{ // Don't add hash in the end of the url event.preventDefault(); // Focus without visibility (as user is not using keyboard) scroll(false); }); topButton.addEventListener('keydown', (event)=>{ // Don't propagate keydown event to click event event.preventDefault(); // Scroll with focus visible scroll(true); }); } window.addEventListener('scroll', trackScroll); }; exports.default = backToTop; },{"moveto":"5liko","@parcel/transformer-js/src/esmodule-helpers.js":"eF9qW"}],"dTsEP":[function(require,module,exports,__globalThis) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); var _moveto = require("moveto"); var _movetoDefault = parcelHelpers.interopDefault(_moveto); const initA11ySkipLink = ()=>{ // Go through all the headings of the page and select the first one const a11ySkipLinkTarget = document.querySelectorAll('h1, h2, h3, h4, h5, h6')[0]; const a11ySkipLink = document.querySelectorAll('.skip-link')[0]; // Register trigger element // eslint-disable-next-line no-unused-vars, no-restricted-globals const moveTo = new (0, _movetoDefault.default)(); // When clicked, move focus to the target element if (a11ySkipLink) a11ySkipLink.addEventListener('click', ()=>{ a11ySkipLinkTarget.setAttribute('tabindex', '-1'); a11ySkipLinkTarget.focus(); moveTo.move(a11ySkipLinkTarget); }); }; exports.default = initA11ySkipLink; },{"moveto":"5liko","@parcel/transformer-js/src/esmodule-helpers.js":"eF9qW"}],"7NBWY":[function(require,module,exports,__globalThis) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); const initA11yFocusSearchField = ()=>{ const urlSearch = window.location.search; const urlParams = new URLSearchParams(urlSearch); if (urlParams.has('s')) { const searchField = document.querySelector('main input[name="s"]'); if (searchField) searchField.focus({ preventScroll: true }); } }; exports.default = initA11yFocusSearchField; },{"@parcel/transformer-js/src/esmodule-helpers.js":"eF9qW"}],"ds5aQ":[function(require,module,exports,__globalThis) { /** * Navigation.js module * The original, accessible navigation module for Air-light */ // Import functions needed for the navigation module var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); // Export different navigation functions parcelHelpers.export(exports, "navSticky", ()=>navSticky); parcelHelpers.export(exports, "navDesktop", ()=>navDesktop); parcelHelpers.export(exports, "navClick", ()=>navClick); parcelHelpers.export(exports, "navMobile", ()=>navMobile); var _addMultipleEventListeners = require("./navigation/add-multiple-event-listeners"); var _addMultipleEventListenersDefault = parcelHelpers.interopDefault(_addMultipleEventListeners); var _calculateBurgerMenuPosition = require("./navigation/calculate-burger-menu-position"); var _calculateBurgerMenuPositionDefault = parcelHelpers.interopDefault(_calculateBurgerMenuPosition); var _a11YFocusTrap = require("./navigation/a11y-focus-trap"); var _a11YFocusTrapDefault = parcelHelpers.interopDefault(_a11YFocusTrap); var _calculateDropdownToggleHeight = require("./navigation/calculate-dropdown-toggle-height"); var _calculateDropdownToggleHeightDefault = parcelHelpers.interopDefault(_calculateDropdownToggleHeight); var _checkForSubmenuOverflow = require("./navigation/check-for-submenu-overflow"); var _checkForSubmenuOverflowDefault = parcelHelpers.interopDefault(_checkForSubmenuOverflow); var _dropdownMenuOnHover = require("./navigation/dropdown-menu-on-hover"); var _dropdownMenuOnHoverDefault = parcelHelpers.interopDefault(_dropdownMenuOnHover); var _a11YAddDropdownToggleLabels = require("./navigation/a11y-add-dropdown-toggle-labels"); var _a11YAddDropdownToggleLabelsDefault = parcelHelpers.interopDefault(_a11YAddDropdownToggleLabels); var _a11YDropdownMenuKeyboardNavigation = require("./navigation/a11y-dropdown-menu-keyboard-navigation"); var _a11YDropdownMenuKeyboardNavigationDefault = parcelHelpers.interopDefault(_a11YDropdownMenuKeyboardNavigation); // Navigation desktop click functions var _convertDropdownMenuItems = require("./navigation/convert-dropdown-menu-items"); var _convertDropdownMenuItemsDefault = parcelHelpers.interopDefault(_convertDropdownMenuItems); var _closeSubMenuHandler = require("./navigation/close-sub-menu-handler"); var _closeSubMenuHandlerDefault = parcelHelpers.interopDefault(_closeSubMenuHandler); var _a11YAddDropdownToggleLabelsClick = require("./navigation/a11y-add-dropdown-toggle-labels-click"); var _a11YAddDropdownToggleLabelsClickDefault = parcelHelpers.interopDefault(_a11YAddDropdownToggleLabelsClick); var _a11YDropdownMenuKeyboardNavigationClick = require("./navigation/a11y-dropdown-menu-keyboard-navigation-click"); var _a11YDropdownMenuKeyboardNavigationClickDefault = parcelHelpers.interopDefault(_a11YDropdownMenuKeyboardNavigationClick); const navDesktop = ()=>{ const navPrimary = document.querySelector('.nav-primary'); // If .nav-primary doesn't exist, don't continue if (!navPrimary) return; // Define globals const menuItems = navPrimary.querySelectorAll('.menu-item'); // Define focusable elements on sub-menu (.menu-item a, .dropdown button) const focusableElementsforDropdown = document.querySelectorAll('.menu-item a, .dropdown button, .button-nav'); // If main-menu is not found, bail if (!document.getElementById('main-menu')) return; // Dropdown menus (0, _a11YAddDropdownToggleLabelsDefault.default)(menuItems); (0, _a11YDropdownMenuKeyboardNavigationDefault.default)(menuItems, focusableElementsforDropdown); // Dropdown on mouse hover (0, _dropdownMenuOnHoverDefault.default)(menuItems); // Check for submenu overflow (0, _checkForSubmenuOverflowDefault.default)(menuItems); }; const navClick = ()=>{ // If main-menu is not found, bail if (!document.getElementById('main-menu')) return; // Search for all menu items that have submenus const dropdownMenuItems = document.querySelectorAll('.menu-item-has-children'); // Convert submenus to clickable elements (0, _convertDropdownMenuItemsDefault.default)(dropdownMenuItems); // Define globals const menuItems = document.querySelectorAll('.menu-item'); // Define focusable elements on sub-menu (.menu-item a, .dropdown button) const focusableElementsforDropdown = document.querySelectorAll('.menu-item a, .dropdown button, .button-nav'); // Dropdown menus (0, _a11YAddDropdownToggleLabelsClickDefault.default)(menuItems); (0, _a11YDropdownMenuKeyboardNavigationClickDefault.default)(menuItems, focusableElementsforDropdown); // Handle different scenarios when menus should be closed (0, _closeSubMenuHandlerDefault.default)(menuItems); }; const navMobile = ()=>{ // If burger toggle is not found, bail if (!document.getElementById('nav-toggle')) { // eslint-disable-next-line no-console console.log('Warning: No nav-toggle found.'); return; } function navToggle(e) { // If clicked with mouse or enter key if (e.type === 'click' || e.keyCode === 13) { // Activate nav document.body.classList.toggle('js-nav-active'); // Scroll to top when triggering mobile navigation // to ensure no gaps are between header and navigation // Please note, if you use sticky-nav, comment out the next line window.scrollTo(0, 0); // Toggle aria-expanded attribute, if it's false, change to true and vice versa if (document.getElementById('nav-toggle').getAttribute('aria-expanded') === 'false') document.getElementById('nav-toggle').setAttribute('aria-expanded', 'true'); else document.getElementById('nav-toggle').setAttribute('aria-expanded', 'false'); // Toggle aria-label // eslint-disable-next-line camelcase, no-undef if (document.getElementById('nav-toggle').getAttribute('aria-label') === air_light_screenReaderText.expand_toggle) // eslint-disable-next-line camelcase, no-undef document.getElementById('nav-toggle').setAttribute('aria-label', air_light_screenReaderText.collapse_toggle); else // eslint-disable-next-line camelcase, no-undef document.getElementById('nav-toggle').setAttribute('aria-label', air_light_screenReaderText.expand_toggle); // Center vertically the absolute positioned mobile dropdown toggles by setting fixed height (0, _calculateDropdownToggleHeightDefault.default)(); // Focusable elements const navContainer = document.getElementById('nav'); const focusableElements = [ ...navContainer.querySelectorAll('a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])') ].filter((el)=>!el.hasAttribute('disabled')).filter((el)=>!!(el.offsetWidth || el.offsetHeight || el.getClientRects().length)); focusableElements.forEach((menuItem)=>{ menuItem.addEventListener('keydown', (0, _a11YFocusTrapDefault.default)); }); } } // When clicking #nav-toggle, add .js-nav-active body class (0, _addMultipleEventListenersDefault.default)(document.getElementById('nav-toggle'), [ 'click', 'keydown', 'keypress' ], navToggle); // Get all dropdown-toggles const dropdownToggles = document.querySelectorAll('.dropdown-toggle'); // Loop through dropdown-toggles dropdownToggles.forEach((dropdownToggle)=>{ // When clicking a dropdown-toggle, add .js-dropdown-active class to the parent .menu-item (0, _addMultipleEventListenersDefault.default)(dropdownToggle, [ 'click', 'keydown', 'keypress' ], (0, _calculateDropdownToggleHeightDefault.default)); }); // Calculate mobile nav-toggle position (0, _calculateBurgerMenuPositionDefault.default)(); }; // Sticky navigation // eslint-disable-next-line no-unused-vars const navSticky = ()=>{ function initStickyNavStyles() { // Add default styles for sticky navigation as