{"version":3,"file":"front.js","sources":["../../sources/javascripts/utils/extend.js","../../sources/javascripts/utils/FocusTrapper.js","../../sources/javascripts/utils/Toggler.js","../../sources/javascripts/front/components/Header.js","../../node_modules/throttle-debounce/esm/index.js","../../sources/javascripts/utils/getCSSCustomProp.js","../../sources/javascripts/front/modules/header.js","../../sources/javascripts/front/components/Form/Field.js","../../sources/javascripts/utils/arrayAreIdenticals.js","../../sources/javascripts/utils/getFragmentFromString.js","../../sources/javascripts/front/modules/print.js","../../sources/javascripts/front/modules/fields.js","../../node_modules/focus-visible/dist/focus-visible.js"],"sourcesContent":["/**\n * Merge objects function\n *\n * Credit: https://gomakethings.com/merging-objects-with-vanilla-javascript/\n *\n * Usage: extend(obj1, obj2);\n * Support deep merge: extend(true, obj1, obj2);\n */\n\nexport default function extend() {\n\n // Variables\n let extended = {};\n let deep = false;\n let i = 0;\n\n // Check if a deep merge\n if (typeof (arguments[0]) === 'boolean') {\n deep = arguments[0];\n i++;\n }\n\n // Merge the object into the extended object\n const merge = function (obj) {\n for (let prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n if (deep && Object.prototype.toString.call(obj[prop]) === '[object Object]') {\n // If we're doing a deep merge and the property is an object\n extended[prop] = extend(true, extended[prop], obj[prop]);\n } else {\n // Otherwise, do a regular merge\n extended[prop] = obj[prop];\n }\n }\n }\n };\n\n // Loop through each object and conduct a merge\n for (; i < arguments.length; i++) {\n merge(arguments[i]);\n }\n\n return extended;\n\n};\n","import extend from './extend';\n\n/**\n * FOCUS TRAPPER\n *\n * Loop focus in a container (in a modal for example).\n */\n\nexport default class FocusTrapper {\n constructor(container, settings) {\n const _ = this;\n\n _.settings = extend(true, {\n selector: 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])', // https://gomakethings.com/how-to-get-the-first-and-last-focusable-elements-in-the-dom/\n }, settings || {});\n\n _.container = container;\n _.lastFocusableBeforeCatch = null;\n _.firstFocusable = null;\n _.lastFocusable = null;\n // Global status, catching : have trapped focus, resting : focus is free\n _.state = 'resting';\n\n // We ensure that the target container can be focus\n if (_.container.getAttribute('tabindex') === null) {\n _.container.setAttribute('tabindex', '-1');\n }\n\n _.handleKeydown = _.handleKeydown.bind(_);\n }\n\n // Update observables elements\n update() {\n const _ = this;\n\n const focusables = _.container.querySelectorAll(_.settings.selector);\n const visibleFocusables = [];\n\n for (let i = 0; i < focusables.length; i++) {\n if (focusables[i].offsetWidth > 0 && focusables[i].offsetHeight > 0) {\n visibleFocusables.push(focusables[i])\n }\n }\n\n [_.firstFocusable] = visibleFocusables;\n _.lastFocusable = visibleFocusables[visibleFocusables.length - 1];\n }\n\n // Activate trapping\n catch() {\n const _ = this;\n\n _.lastFocusableBeforeCatch = document.activeElement;\n\n _.update();\n\n _.container.focus();\n _.container.addEventListener('keydown', _.handleKeydown);\n\n _.state = 'catching';\n }\n\n // Deactivate trapping\n release() {\n const _ = this;\n\n if (_.lastFocusableBeforeCatch) {\n _.lastFocusableBeforeCatch.focus();\n _.lastFocusableBeforeCatch = null;\n }\n\n _.container.removeEventListener('keydown', _.handleKeydown);\n\n _.state = 'resting';\n }\n\n // Detect if we need to loop forward or back\n handleKeydown(e) {\n const _ = this;\n\n if (e.which === 9) {\n if (e.shiftKey && (e.target === _.firstFocusable || e.target === _.container)) {\n e.preventDefault();\n _.lastFocusable.focus();\n }\n\n if (!e.shiftKey && e.target === _.lastFocusable) {\n e.preventDefault();\n _.firstFocusable.focus();\n }\n }\n }\n}\n","import extend from './extend';\n\n/**\n* TOGGLER\n*\n* Helps you to create a11y driven toggable (open / close) scripts.\n*/\nexport default class Toggler {\n constructor(elements, settings) {\n const _ = this;\n\n _.settings = extend(true, {\n // Set it to rue if you want only one item active at a time\n oneAtATime: false,\n // Set it to true if you want that a click outside of current element closes it\n outsideClose: false,\n // Set it to true if you want that escape key closes the current element\n escClose: false,\n // Callbacks methods for more control on wanted behaviors\n callbacks: {\n beforeOpen: () => { },\n afterOpen: () => { },\n beforeClose: () => { },\n afterClose: () => { },\n beforeAttach: () => { },\n afterAttach: () => { },\n beforeDetach: () => { },\n afterDetach: () => { },\n },\n }, settings || {});\n\n // Colection of items arranged like [content to toggle, togglers]\n _.items = [];\n // Detect non native togglers for adding a11y features\n _.nonNativeTogglers = [];\n // Current ID of open content\n _.currentId = null;\n // Global status, enabled : toggling is activated, disabled : toggling is deactivated\n _.status = 'disabled';\n\n // Parse received elements\n for (let i = 0; i < elements.length; i++) {\n const item = {\n content: elements[i][0],\n togglers: elements[i][1],\n nonNativeTogglers: [],\n };\n\n for (let j = 0; j < item.togglers.length; j++) {\n if (!item.togglers[j].matches('button, [href], [tabindex]:not([tabindex=\"-1\"])')) {\n _.nonNativeTogglers.push(item.togglers[j]);\n }\n }\n\n // Add it a custom id if they don't have one\n // https://gist.github.com/gordonbrander/2230317\n // In addition we always prefix the custom ID by the character i to avoid querySelector\n // issues, see : https://stackoverflow.com/questions/37270787/uncaught-syntaxerror-failed-to-execute-queryselector-on-document\n const id = item.content.hasAttribute('id') ? item.content.getAttribute('id') : `i${Math.random().toString(36).substr(2, 9)}`;\n\n item.content.setAttribute('id', id);\n item.id = id;\n\n _.items.push(item);\n }\n\n _.handleTogglerClick = _.handleTogglerClick.bind(_);\n _.handleNonNativeTogglersKeyup = _.handleNonNativeTogglersKeyup.bind(_);\n _.handleNonNativeTogglersKeydown = _.handleNonNativeTogglersKeydown.bind(_);\n _.handleOutsideClick = _.handleOutsideClick.bind(_);\n _.handleEscKey = _.handleEscKey.bind(_);\n }\n\n // Activate toggling\n attach() {\n const _ = this;\n\n _.settings.callbacks.beforeAttach(_);\n\n for (let i = 0; i < _.items.length; i++) {\n _.items[i].content.setAttribute('aria-hidden', true);\n for (let j = 0; j < _.items[i].togglers.length; j++) {\n _.items[i].togglers[j].setAttribute('aria-controls', _.items[i].id);\n _.items[i].togglers[j].setAttribute('aria-expanded', false);\n _.items[i].togglers[j].addEventListener('click', _.handleTogglerClick);\n }\n }\n\n if (_.nonNativeTogglers) {\n for (let i = 0; i < _.nonNativeTogglers.length; i++) {\n _.nonNativeTogglers[i].setAttribute('tabindex', '0');\n _.nonNativeTogglers[i].addEventListener('keyup', _.handleNonNativeTogglersKeyup);\n }\n\n document.addEventListener('keydown', _.handleNonNativeTogglersKeydown);\n }\n\n if (_.settings.outsideClose) {\n document.addEventListener('click', _.handleOutsideClick);\n }\n\n if (_.settings.escClose) {\n document.addEventListener('keyup', _.handleEscKey);\n }\n\n _.status = 'enabled';\n\n _.settings.callbacks.afterAttach(_);\n }\n\n // Deactivate toggling\n detach() {\n const _ = this;\n\n _.settings.callbacks.beforeDetach(_);\n\n for (let i = 0; i < _.items.length; i++) {\n _.items[i].content.removeAttribute('aria-hidden');\n for (let j = 0; j < _.items[i].togglers.length; j++) {\n _.items[i].togglers[j].removeAttribute('aria-controls');\n _.items[i].togglers[j].removeAttribute('aria-expanded');\n _.items[i].togglers[j].removeEventListener('click', _.handleTogglerClick);\n }\n }\n\n if (_.nonNativeTogglers) {\n for (let i = 0; i < _.nonNativeTogglers.length; i++) {\n _.nonNativeTogglers[i].removeAttribute('tabindex');\n _.nonNativeTogglers[i].removeEventListener('keyup', _.handleNonNativeTogglersKeyup);\n }\n\n document.removeEventListener('keydown', _.handleNonNativeTogglersKeydown);\n }\n\n if (_.settings.outsideClose) {\n document.removeEventListener('click', _.handleOutsideClick);\n }\n\n if (_.settings.escClose) {\n document.removeEventListener('keyup', _.handleEscKey);\n }\n\n _.status = 'disabled';\n\n _.settings.callbacks.afterDetach(_);\n }\n\n // Open or close\n toggle(id) {\n const _ = this;\n\n if (document.querySelector(`#${id}`).getAttribute('aria-hidden') === 'true') {\n _.open(id);\n } else {\n _.close(id);\n }\n }\n\n // Open content\n open(id) {\n const _ = this;\n\n if (_.settings.oneAtATime && _.currentId) {\n _.close(_.currentId);\n }\n\n const content = document.querySelector(`#${id}`);\n const togglers = document.querySelectorAll(`[aria-controls=\"${id}\"]`);\n\n _.settings.callbacks.beforeOpen(content, togglers);\n\n for (let i = 0; i < togglers.length; i++) {\n togglers[i].setAttribute('aria-expanded', true);\n }\n content.setAttribute('aria-hidden', false);\n\n _.currentId = id;\n\n _.settings.callbacks.afterOpen(content, togglers);\n }\n\n // Close content\n close(id) {\n const _ = this;\n\n const content = document.querySelector(`#${id}`);\n const togglers = document.querySelectorAll(`[aria-controls=\"${id}\"]`);\n\n _.settings.callbacks.beforeClose(content, togglers);\n\n for (let i = 0; i < togglers.length; i++) {\n togglers[i].setAttribute('aria-expanded', false);\n }\n content.setAttribute('aria-hidden', true);\n\n _.currentId = null;\n\n _.settings.callbacks.afterClose(content, togglers);\n }\n\n // Click on toggler\n handleTogglerClick(e) {\n const _ = this;\n\n e.preventDefault();\n\n _.toggle(e.currentTarget.getAttribute('aria-controls'));\n }\n\n // Prevent space key to scroll the page if we are on a non native toggler\n handleNonNativeTogglersKeydown(e) {\n const _ = this;\n\n if (_.nonNativeTogglers.includes(e.target) && e.which === 32) {\n e.preventDefault();\n }\n }\n\n // Toggle from a non native toggler\n handleNonNativeTogglersKeyup(e) {\n const _ = this;\n\n if (e.which === 32 || e.which === 13) {\n e.preventDefault();\n _.toggle(e.target.getAttribute('aria-controls'));\n }\n }\n\n // Close when clicking outside of current element\n handleOutsideClick(e) {\n const _ = this;\n\n if (!_.currentId) return;\n\n let currentItem;\n\n for (let i = 0; i < _.items.length; i++) {\n if (_.items[i].id === _.currentId) {\n currentItem = _.items[i];\n }\n }\n\n let clickOnContent = false;\n if (!currentItem.content.contains(e.target)) {\n clickOnContent = true;\n }\n\n let clickOnToggler = false;\n for (let i = 0; i < currentItem.togglers.length; i++) {\n if (!currentItem.togglers[i].contains(e.target)) {\n clickOnToggler = true;\n }\n }\n\n if (!clickOnContent && !clickOnToggler) {\n _.close(_.currentId);\n }\n }\n\n // Close when escape key is pressed\n handleEscKey(e) {\n const _ = this;\n\n if (_.currentId && e.which === 27) {\n _.close(_.currentId);\n }\n }\n}\n","import { throttle } from 'throttle-debounce';\nimport FocusTrapper from '../../utils/FocusTrapper';\nimport Toggler from '../../utils/Toggler';\nimport getCSSCustomProp from '../../utils/getCSSCustomProp';\n\nexport default class Header {\n constructor(root) {\n // Elements\n this.$root = root;\n this.$burger = this.$root.querySelectorAll('.js-header-burger');\n this.$navigation = this.$root.querySelector('.js-header-nav');\n this.$navigationInner = this.$root.querySelector('.js-header-nav-inner');\n this.$submenuRoots = this.$root.querySelectorAll('.js-header-submenu-root');\n\n // Throttled functions\n this.throttledWatchResize = throttle(250, this.watchResize.bind(this));\n\n // Variables\n this.nav2ColBP = getCSSCustomProp('--header-nav-2col-bp', undefined, 'int');\n this.navIsOn2Col = () => window.matchMedia(`(min-width: ${this.nav2ColBP}em)`).matches;\n\n // Focus trapper for navigation\n this.navFocusTrapper = new FocusTrapper(this.$navigationInner);\n\n // Togglers syndication\n this.togglers = {\n nav: null,\n submenus: null,\n };\n\n // Nav toggler\n this.togglers.nav = new Toggler([[this.$navigation, this.$burger]], {\n escClose: true,\n callbacks: {\n afterOpen: () => {\n this.navFocusTrapper.catch();\n\n document.body.classList.add('nav-is-open');\n document.body.classList.add('no-scroll');\n },\n afterClose: () => {\n this.navFocusTrapper.release();\n\n document.body.classList.remove('nav-is-open');\n document.body.classList.remove('no-scroll');\n\n // Ensure submenus or subrubrics are also closed\n if (this.togglers.submenus.currentId) {\n this.togglers.submenus.close(this.togglers.submenus.currentId);\n }\n },\n },\n });\n\n // Submenus toggler\n const submenuTogglerItems = [];\n\n for (let i = 0; i < this.$submenuRoots.length; i++) {\n submenuTogglerItems.push([\n this.$submenuRoots[i].querySelector('.js-header-submenu-menu'),\n this.$submenuRoots[i].querySelectorAll('.js-header-submenu-parent'),\n ]);\n }\n\n this.togglers.submenus = new Toggler(submenuTogglerItems, {\n oneAtATime: true,\n callbacks: {\n afterOpen: ($content) => {\n this.navFocusTrapper.update();\n document.body.classList.add('submenu-is-open');\n\n if (this.navIsOn2Col()) {\n this.$navigationInner.style.minHeight = `${$content.offsetHeight}px`;\n }\n },\n afterClose: () => {\n this.navFocusTrapper.update();\n\n document.body.classList.remove('submenu-is-open');\n\n this.$navigationInner.style.minHeight = '';\n },\n },\n });\n }\n\n mount() {\n this.togglers.nav.attach();\n this.togglers.submenus.attach();\n\n this.watchResize();\n\n window.addEventListener('resize', this.throttledWatchResize);\n }\n\n unmount() {\n this.togglers.nav.detach();\n this.togglers.submenus.detach();\n\n window.removeEventListener('resize', this.throttledWatchResize);\n }\n\n watchResize() {\n if (this.navIsOn2Col()) {\n if (this.togglers.submenus.currentId) {\n this.$navigationInner.style.minHeight = `${document.querySelector(`#${this.togglers.submenus.currentId}`).offsetHeight}px`;\n }\n } else {\n this.$navigationInner.style.minHeight = '';\n }\n }\n}\n","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {boolean} [noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n * the internal counter is reset).\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the throttled-function is executed.\n * @param {boolean} [debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n * schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function} A new, throttled, function.\n */\nfunction throttle (delay, noTrailing, callback, debounceMode) {\n /*\n * After wrapper has stopped being called, this timeout ensures that\n * `callback` is executed at the proper times in `throttle` and `end`\n * debounce modes.\n */\n var timeoutID;\n var cancelled = false; // Keep track of the last time `callback` was executed.\n\n var lastExec = 0; // Function to clear existing timeout\n\n function clearExistingTimeout() {\n if (timeoutID) {\n clearTimeout(timeoutID);\n }\n } // Function to cancel next exec\n\n\n function cancel() {\n clearExistingTimeout();\n cancelled = true;\n } // `noTrailing` defaults to falsy.\n\n\n if (typeof noTrailing !== 'boolean') {\n debounceMode = callback;\n callback = noTrailing;\n noTrailing = undefined;\n }\n /*\n * The `wrapper` function encapsulates all of the throttling / debouncing\n * functionality and when executed will limit the rate at which `callback`\n * is executed.\n */\n\n\n function wrapper() {\n for (var _len = arguments.length, arguments_ = new Array(_len), _key = 0; _key < _len; _key++) {\n arguments_[_key] = arguments[_key];\n }\n\n var self = this;\n var elapsed = Date.now() - lastExec;\n\n if (cancelled) {\n return;\n } // Execute `callback` and update the `lastExec` timestamp.\n\n\n function exec() {\n lastExec = Date.now();\n callback.apply(self, arguments_);\n }\n /*\n * If `debounceMode` is true (at begin) this is used to clear the flag\n * to allow future `callback` executions.\n */\n\n\n function clear() {\n timeoutID = undefined;\n }\n\n if (debounceMode && !timeoutID) {\n /*\n * Since `wrapper` is being called for the first time and\n * `debounceMode` is true (at begin), execute `callback`.\n */\n exec();\n }\n\n clearExistingTimeout();\n\n if (debounceMode === undefined && elapsed > delay) {\n /*\n * In throttle mode, if `delay` time has been exceeded, execute\n * `callback`.\n */\n exec();\n } else if (noTrailing !== true) {\n /*\n * In trailing throttle mode, since `delay` time has not been\n * exceeded, schedule `callback` to execute `delay` ms after most\n * recent execution.\n *\n * If `debounceMode` is true (at begin), schedule `clear` to execute\n * after `delay` ms.\n *\n * If `debounceMode` is false (at end), schedule `callback` to\n * execute after `delay` ms.\n */\n timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n }\n }\n\n wrapper.cancel = cancel; // Return the wrapper function.\n\n return wrapper;\n}\n\n/* eslint-disable no-undefined */\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {boolean} [atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n *\n * @returns {Function} A new, debounced function.\n */\n\nfunction debounce (delay, atBegin, callback) {\n return callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n}\n\nexport { debounce, throttle };\n//# sourceMappingURL=index.js.map\n","/**\n * Pass in an element and its CSS Custom Property that you want the value of.\n * Optionally, you can determine what datatype you get back.\n *\n * Credit : https://piccalil.li/tutorial/get-css-custom-property-value-with-javascript/\n *\n * @param {String} propKey\n * @param {HTMLELement} element=document.documentElement\n * @param {String} castAs='string'\n * @returns {*}\n */\nexport default function(propKey, element = document.documentElement, castAs = 'string') {\n let response = getComputedStyle(element).getPropertyValue(propKey);\n\n // Tidy up the string if there's something to work with\n if (response.length) {\n response = response.replace(/\\'|\"/g, '').trim();\n }\n\n // Convert the response into a whatever type we wanted\n switch (castAs) {\n case 'number':\n case 'int':\n return parseInt(response, 10);\n case 'float':\n return parseFloat(response, 10);\n case 'boolean':\n case 'bool':\n return response === 'true' || response === '1';\n }\n\n // Return the string response by default\n return response;\n};\n","import Header from '../components/Header';\n\nconst $header = document.querySelector('.js-header');\n\nif ($header) {\n const header = new Header($header);\n header.mount();\n}\n","import arrayAreIdenticals from '../../../utils/arrayAreIdenticals';\nimport extend from '../../../utils/extend';\nimport getFragmentFromString from '../../../utils/getFragmentFromString';\n\nexport default class Field {\n constructor($element, options) {\n this.$element = $element;\n\n this.options = extend({\n errorTemplate: (text, id) => `\n
\n \n \n \n \n \n

${text}

\n
\n `,\n }, options);\n\n this.$control = this.$element.querySelector('.c-form-field__control');\n this.type = this.$element.getAttribute('data-type');\n this.isASet = ['input-set', 'option-set'].includes(this.type);\n this.$inputs = this.$element.querySelectorAll('.c-form-input, .c-form-option');\n this.$inputControls = this.$element.querySelectorAll('.c-form-input__control, .c-form-option__input');\n this.errorID = `${this.$element.getAttribute('data-prefix')}error`;\n this.$error = this.$element.querySelector('.c-form-note--error');\n this.$errorText = this.$error ? this.$error.querySelector('.c-form-note__text') : null;\n this.hasError = !!this.$error;\n this.valueInError = this.$error ? this.getValue() : '';\n\n this.handleChange = this.handleChange.bind(this);\n }\n\n mount() {\n if (this.isASet) {\n this.$inputControls.forEach(($inputControl) => {\n $inputControl.addEventListener('change', this.handleChange);\n });\n } else {\n this.$inputControls[0].addEventListener('change', this.handleChange);\n }\n }\n\n unmount() {\n if (this.isASet) {\n this.$inputControls.forEach(($inputControl) => {\n $inputControl.removeEventListener('change', this.handleChange);\n });\n } else {\n this.$inputControls[0].removeEventListener('change', this.handleChange);\n }\n }\n\n handleChange() {\n if (this.hasError && !arrayAreIdenticals(this.getValue(), this.valueInError)) {\n this.removeError();\n }\n }\n\n getValue() {\n const value = [];\n\n switch (this.type) {\n case 'input-set':\n this.$inputControls.forEach(($inputControl) => {\n value.push($inputControl.value);\n });\n break;\n case 'single-option':\n value.push(this.$inputControls[0].checked);\n break;\n case 'option-set':\n this.$inputControls.forEach(($inputControl) => {\n value.push($inputControl.checked);\n });\n break;\n default:\n value.push(this.$inputControls[0].value);\n break;\n }\n\n return value;\n }\n\n setError(text) {\n const firstError = !this.$error;\n\n if (firstError) {\n this.$error = getFragmentFromString(this.options.errorTemplate(text, this.errorID));\n } else {\n this.$errorText.innerText = text;\n }\n\n if (!this.hasError) {\n this.$element.insertBefore(this.$error, this.$control);\n }\n\n if (firstError) {\n this.$error = this.$element.querySelector('.c-form-note--error');\n this.$errorText = this.$error.querySelector('.c-form-note__text');\n }\n\n this.$inputs.forEach(($input) => {\n if (['single-option', 'option-set'].includes(this.type)) {\n $input.classList.add('c-form-option--error');\n } else {\n $input.classList.add('c-form-input--error');\n }\n });\n this.addAriaDescribedby([this.errorID]);\n this.hasError = true;\n this.valueInError = this.getValue();\n }\n\n removeError() {\n this.hasError = false;\n\n this.$error.remove();\n this.$inputs.forEach(($input) => {\n if (['single-option', 'option-set'].includes(this.type)) {\n $input.classList.remove('c-form-option--error');\n } else {\n $input.classList.remove('c-form-input--error');\n }\n });\n this.removeAriaDescribedby([this.errorID]);\n this.hasError = false;\n }\n\n setAriaDescribedby(value) {\n if (this.isASet) {\n if (value) {\n this.$element.setAttribute('aria-describedby', value);\n } else {\n this.$element.removeAttribute('aria-describedby');\n }\n } else if (value) {\n this.$inputControls[0].setAttribute('aria-describedby', value);\n } else {\n this.$inputControls[0].removeAttribute('aria-describedby');\n }\n }\n\n addAriaDescribedby(ids = []) {\n let existingIDs = [];\n\n if (this.isASet) {\n existingIDs = this.$element.getAttribute('aria-describedby').split(' ');\n } else {\n existingIDs = this.$inputControls[0].getAttribute('aria-describedby').split(' ');\n }\n\n this.setAriaDescribedby(existingIDs.concat(ids).join(' '));\n }\n\n removeAriaDescribedby(ids = []) {\n let existingIDs = [];\n\n if (this.isASet) {\n existingIDs = this.$element.getAttribute('aria-describedby').split(' ');\n } else {\n existingIDs = this.$inputControls[0].getAttribute('aria-describedby').split(' ');\n }\n\n ids.forEach((id) => {\n if (existingIDs.includes(id)) {\n existingIDs.splice(existingIDs.indexOf(id), 1);\n }\n });\n\n this.setAriaDescribedby(existingIDs.join(' '));\n }\n}\n","export default function arrayAreIdenticals(a, b) {\n return a.length === b.length && a.every((v, i) => v === b[i]);\n}\n","// Inspired from https://davidwalsh.name/convert-html-stings-dom-nodes\nexport default function getFragmentFromString(htmlString) {\n return document.createRange().createContextualFragment(htmlString);\n}\n","let $closedDetails;\n\n// Doing things when opening print modal\nwindow.addEventListener('beforeprint', () => {\n // Load [loading=\"lazy\"] images\n const $lazyImages = document.querySelectorAll('img[loading=\"lazy\"]');\n\n $lazyImages.forEach(($img) => {\n $img.removeAttribute('loading');\n });\n\n // Open details elements\n $closedDetails = document.querySelectorAll('details:not([open])');\n\n $closedDetails.forEach(($details) => {\n $details.open = true;\n });\n});\n\n// Doing things when closing the print modal\nwindow.addEventListener('afterprint', () => {\n // Close details elements\n $closedDetails.forEach(($details) => {\n $details.open = false;\n });\n\n $closedDetails = null;\n});\n","import Field from '../components/Form/Field';\n\nwindow.addEventListener('DOMContentLoaded', () => {\n const $fields = document.querySelectorAll('.js-form-field');\n\n if ($fields.length) {\n $fields.forEach(($field) => {\n const field = new Field($field);\n field.mount();\n });\n }\n});\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on whenever the\n // window blurs, even if you're tabbing out of the page. ¯\\_(ツ)_/¯\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n"],"names":["extend","extended","deep","i","arguments","merge","obj","prop","hasOwnProperty","Object","prototype","toString","call","length","FocusTrapper","constructor","container","settings","_","this","selector","lastFocusableBeforeCatch","firstFocusable","lastFocusable","state","getAttribute","setAttribute","handleKeydown","bind","update","focusables","querySelectorAll","visibleFocusables","offsetWidth","offsetHeight","push","catch","document","activeElement","focus","addEventListener","release","removeEventListener","e","which","shiftKey","target","preventDefault","Toggler","elements","oneAtATime","outsideClose","escClose","callbacks","beforeOpen","afterOpen","beforeClose","afterClose","beforeAttach","afterAttach","beforeDetach","afterDetach","items","nonNativeTogglers","currentId","status","item","content","togglers","j","matches","id","hasAttribute","Math","random","substr","handleTogglerClick","handleNonNativeTogglersKeyup","handleNonNativeTogglersKeydown","handleOutsideClick","handleEscKey","attach","detach","removeAttribute","toggle","querySelector","open","close","currentTarget","includes","currentItem","clickOnContent","contains","clickOnToggler","Header","root","$root","$burger","$navigation","$navigationInner","$submenuRoots","throttledWatchResize","delay","noTrailing","callback","debounceMode","timeoutID","cancelled","lastExec","clearExistingTimeout","clearTimeout","wrapper","_len","arguments_","Array","_key","self","elapsed","Date","exec","clear","setTimeout","throttle","watchResize","nav2ColBP","propKey","element","documentElement","castAs","response","getComputedStyle","getPropertyValue","replace","trim","parseInt","parseFloat","getCSSCustomProp","undefined","navIsOn2Col","window","matchMedia","navFocusTrapper","nav","submenus","body","classList","add","remove","submenuTogglerItems","$content","style","minHeight","mount","unmount","$header","Field","$element","options","errorTemplate","text","$control","type","isASet","$inputs","$inputControls","errorID","$error","$errorText","hasError","valueInError","getValue","handleChange","forEach","$inputControl","a","b","every","v","removeError","value","checked","setError","firstError","htmlString","createRange","createContextualFragment","innerText","insertBefore","$input","addAriaDescribedby","removeAriaDescribedby","setAriaDescribedby","ids","existingIDs","split","concat","join","splice","indexOf","$closedDetails","$fields","$field","$img","$details","applyFocusVisiblePolyfill","scope","hadKeyboardEvent","hadFocusVisibleRecently","hadFocusVisibleRecentlyTimeout","inputTypesAllowlist","search","url","tel","email","password","number","date","month","week","time","datetime","isValidFocusTarget","el","nodeName","focusTriggersKeyboardModality","tagName","readOnly","isContentEditable","addFocusVisibleClass","removeFocusVisibleClass","onKeyDown","metaKey","altKey","ctrlKey","onPointerDown","onFocus","onBlur","onVisibilityChange","visibilityState","addInitialPointerMoveListeners","onInitialPointerMove","removeInitialPointerMoveListeners","toLowerCase","nodeType","Node","DOCUMENT_FRAGMENT_NODE","host","DOCUMENT_NODE","event","CustomEvent","error","createEvent","initCustomEvent","dispatchEvent","factory"],"mappings":"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"}