{"version":3,"file":"Diagram.SiteNavigation.a3be4053.js","sources":["../../node_modules/mmenu-js/dist/core/oncanvas/options.js","../../node_modules/mmenu-js/dist/core/oncanvas/configs.js","../../node_modules/mmenu-js/dist/_modules/helpers.js","../../node_modules/mmenu-js/dist/_modules/i18n.js","../../node_modules/mmenu-js/dist/core/oncanvas/translations/de.js","../../node_modules/mmenu-js/dist/core/oncanvas/translations/fa.js","../../node_modules/mmenu-js/dist/core/oncanvas/translations/nl.js","../../node_modules/mmenu-js/dist/core/oncanvas/translations/pt_br.js","../../node_modules/mmenu-js/dist/core/oncanvas/translations/ru.js","../../node_modules/mmenu-js/dist/core/oncanvas/translations/sk.js","../../node_modules/mmenu-js/dist/core/oncanvas/translations/uk.js","../../node_modules/mmenu-js/dist/core/oncanvas/translations/index.js","../../node_modules/mmenu-js/dist/_modules/dom.js","../../node_modules/mmenu-js/dist/_modules/matchmedia.js","../../node_modules/mmenu-js/dist/core/oncanvas/mmenu.oncanvas.js","../../node_modules/mmenu-js/dist/core/offcanvas/options.js","../../node_modules/mmenu-js/dist/core/offcanvas/configs.js","../../node_modules/mmenu-js/dist/core/offcanvas/mmenu.offcanvas.js","../../node_modules/mmenu-js/dist/core/scrollbugfix/options.js","../../node_modules/mmenu-js/dist/_modules/support.js","../../node_modules/mmenu-js/dist/core/scrollbugfix/mmenu.scrollbugfix.js","../../node_modules/mmenu-js/dist/core/theme/options.js","../../node_modules/mmenu-js/dist/core/theme/mmenu.theme.js","../../node_modules/mmenu-js/dist/addons/backbutton/options.js","../../node_modules/mmenu-js/dist/addons/backbutton/mmenu.backbutton.js","../../node_modules/mmenu-js/dist/addons/counters/options.js","../../node_modules/mmenu-js/dist/addons/counters/mmenu.counters.js","../../node_modules/mmenu-js/dist/addons/iconbar/options.js","../../node_modules/mmenu-js/dist/addons/iconbar/mmenu.iconbar.js","../../node_modules/mmenu-js/dist/addons/iconpanels/_options.js","../../node_modules/mmenu-js/dist/addons/iconpanels/mmenu.iconpanels.js","../../node_modules/mmenu-js/dist/addons/navbars/configs.js","../../node_modules/mmenu-js/dist/addons/navbars/options.js","../../node_modules/mmenu-js/dist/addons/navbars/navbar.breadcrumbs.js","../../node_modules/mmenu-js/dist/addons/navbars/navbar.close.js","../../node_modules/mmenu-js/dist/addons/navbars/navbar.prev.js","../../node_modules/mmenu-js/dist/addons/navbars/navbar.searchfield.js","../../node_modules/mmenu-js/dist/addons/navbars/navbar.title.js","../../node_modules/mmenu-js/dist/addons/navbars/navbar.tabs.js","../../node_modules/mmenu-js/dist/addons/navbars/mmenu.navbars.js","../../node_modules/mmenu-js/dist/addons/pagescroll/options.js","../../node_modules/mmenu-js/dist/addons/pagescroll/configs.js","../../node_modules/mmenu-js/dist/addons/pagescroll/mmenu.pagescroll.js","../../node_modules/mmenu-js/dist/addons/searchfield/options.js","../../node_modules/mmenu-js/dist/addons/searchfield/configs.js","../../node_modules/mmenu-js/dist/addons/searchfield/translations/de.js","../../node_modules/mmenu-js/dist/addons/searchfield/translations/fa.js","../../node_modules/mmenu-js/dist/addons/searchfield/translations/nl.js","../../node_modules/mmenu-js/dist/addons/searchfield/translations/pt_br.js","../../node_modules/mmenu-js/dist/addons/searchfield/translations/ru.js","../../node_modules/mmenu-js/dist/addons/searchfield/translations/sk.js","../../node_modules/mmenu-js/dist/addons/searchfield/translations/uk.js","../../node_modules/mmenu-js/dist/addons/searchfield/translations/index.js","../../node_modules/mmenu-js/dist/addons/searchfield/mmenu.searchfield.js","../../node_modules/mmenu-js/dist/addons/sectionindexer/options.js","../../node_modules/mmenu-js/dist/addons/sectionindexer/mmenu.sectionindexer.js","../../node_modules/mmenu-js/dist/addons/setselected/options.js","../../node_modules/mmenu-js/dist/addons/setselected/mmenu.setselected.js","../../node_modules/mmenu-js/dist/addons/sidebar/options.js","../../node_modules/mmenu-js/dist/addons/sidebar/mmenu.sidebar.js","../../node_modules/mmenu-js/src/mmenu.js","../src/current/js/modules/Diagram.Toggle.js","../src/current/js/modules/Diagram.SiteNavigation.js"],"sourcesContent":["const options = {\n    hooks: {},\n    navbar: {\n        add: true,\n        title: 'Menu',\n        titleLink: 'parent'\n    },\n    slidingSubmenus: true\n};\nexport default options;\n","const configs = {\n    classNames: {\n        divider: 'Divider',\n        nolistview: 'NoListview',\n        nopanel: 'NoPanel',\n        panel: 'Panel',\n        selected: 'Selected',\n        vertical: 'Vertical'\n    },\n    language: null,\n    panelNodetype: ['ul', 'ol', 'div'],\n    screenReader: {\n        closeSubmenu: 'Close submenu',\n        openSubmenu: 'Open submenu',\n        toggleSubmenu: 'Toggle submenu'\n    }\n};\nexport default configs;\n","/**\n * Deep extend an object with the given defaults.\n * Note that the extended object is not a clone, meaning the original object will also be updated.\n *\n * @param \t{object}\torignl\tThe object to extend to.\n * @param \t{object}\tdfault\tThe object to extend from.\n * @return\t{object}\t\t\tThe extended \"orignl\" object.\n */\nexport const extend = (orignl, dfault) => {\n    if (type(orignl) != 'object') {\n        orignl = {};\n    }\n    if (type(dfault) != 'object') {\n        dfault = {};\n    }\n    for (let k in dfault) {\n        if (!dfault.hasOwnProperty(k)) {\n            continue;\n        }\n        if (typeof orignl[k] == 'undefined') {\n            orignl[k] = dfault[k];\n        }\n        else if (type(orignl[k]) == 'object') {\n            extend(orignl[k], dfault[k]);\n        }\n    }\n    return orignl;\n};\n/**\n * Detect the touch / dragging direction on a touch device.\n *\n * @param   {HTMLElement} surface   The element to monitor for touch events.\n * @return  {object}                Object with \"get\" function.\n */\nexport const touchDirection = (surface) => {\n    let direction = '';\n    let prevPosition = null;\n    surface.addEventListener('touchstart', (evnt) => {\n        if (evnt.touches.length === 1) {\n            direction = '';\n            prevPosition = evnt.touches[0].pageY;\n        }\n    });\n    surface.addEventListener('touchend', (evnt) => {\n        if (evnt.touches.length === 0) {\n            direction = '';\n            prevPosition = null;\n        }\n    });\n    surface.addEventListener('touchmove', (evnt) => {\n        direction = '';\n        if (prevPosition &&\n            evnt.touches.length === 1) {\n            const currentPosition = evnt.changedTouches[0].pageY;\n            if (currentPosition > prevPosition) {\n                direction = 'down';\n            }\n            else if (currentPosition < prevPosition) {\n                direction = 'up';\n            }\n            prevPosition = currentPosition;\n        }\n    });\n    return {\n        get: () => direction,\n    };\n};\n/**\n * Get the type of any given variable. Improvement of \"typeof\".\n *\n * @param \t{any}\t\tvariable\tThe variable.\n * @return\t{string}\t\t\t\tThe type of the variable in lowercase.\n */\nexport const type = (variable) => {\n    return {}.toString\n        .call(variable)\n        .match(/\\s([a-zA-Z]+)/)[1]\n        .toLowerCase();\n};\n/**\n * Get a (page wide) unique ID.\n */\nexport const uniqueId = () => {\n    return `mm-${__id++}`;\n};\nlet __id = 0;\n/**\n * Get a prefixed ID from a possibly orifinal ID.\n * @param id The possibly original ID.\n */\nexport const cloneId = (id) => {\n    if (id.slice(0, 9) == 'mm-clone-') {\n        return id;\n    }\n    return `mm-clone-${id}`;\n};\n/**\n * Get the original ID from a possibly prefixed ID.\n * @param id The possibly prefixed ID.\n */\nexport const originalId = (id) => {\n    if (id.slice(0, 9) == 'mm-clone-') {\n        return id.slice(9);\n    }\n    return id;\n};\n","import { extend } from './helpers';\nconst translations = {};\n/**\n * Show all translations.\n * @return {object}\tThe translations.\n */\nexport const show = () => {\n    return translations;\n};\n/**\n * Add translations to a language.\n * @param {object}  text        Object of key/value translations.\n * @param {string}  language    The translated language.\n */\nexport const add = (text, language) => {\n    if (typeof translations[language] === 'undefined') {\n        translations[language] = {};\n    }\n    extend(translations[language], text);\n};\n/**\n * Find a translated text in a language.\n * @param   {string} text       The text to find the translation for.\n * @param   {string} language   The language to search in.\n * @return  {string}            The translated text.\n */\nexport const get = (text, language) => {\n    if (typeof language === 'string' &&\n        typeof translations[language] !== 'undefined') {\n        return translations[language][text] || text;\n    }\n    return text;\n};\n","export default {\n    'Close submenu': 'Untermenü schließen',\n    'Menu': 'Menü',\n    'Open submenu': 'Untermenü öffnen',\n    'Toggle submenu': 'Untermenü wechseln'\n};\n","export default {\n    'Close submenu': 'بستن زیرمنو',\n    'Menu': 'منو',\n    'Open submenu': 'بازکردن زیرمنو',\n    'Toggle submenu': 'سوییچ زیرمنو'\n};\n","export default {\n    'Close submenu': 'Submenu sluiten',\n    'Menu': 'Menu',\n    'Open submenu': 'Submenu openen',\n    'Toggle submenu': 'Submenu wisselen'\n};\n","export default {\n    'Close submenu': 'Fechar submenu',\n    'Menu': 'Menu',\n    'Open submenu': 'Abrir submenu',\n    'Toggle submenu': 'Alternar submenu'\n};\n","export default {\n    'Close submenu': 'Закрыть подменю',\n    'Menu': 'Меню',\n    'Open submenu': 'Открыть подменю',\n    'Toggle submenu': 'Переключить подменю'\n};\n","export default {\n    'Close submenu': 'Zatvoriť submenu',\n    'Menu': 'Menu',\n    'Open submenu': 'Otvoriť submenu',\n    'Toggle submenu': 'Prepnúť submenu'\n};\n","export default {\n    'Close submenu': 'Закрити підменю',\n    'Menu': 'Меню',\n    'Open submenu': 'Відкрити підменю',\n    'Toggle submenu': 'Перемкнути підменю'\n};\n","import { add } from '../../../_modules/i18n';\nimport de from './de';\nimport fa from './fa';\nimport nl from './nl';\nimport pt_br from './pt_br';\nimport ru from './ru';\nimport sk from './sk';\nimport uk from './uk';\nexport default function () {\n    add(de, 'de');\n    add(fa, 'fa');\n    add(nl, 'nl');\n    add(pt_br, 'pt_br');\n    add(ru, 'ru');\n    add(sk, 'sk');\n    add(uk, 'uk');\n}\n","/**\n * Create an element with classname.\n *\n * @param \t{string}\t\tselector\tThe nodeName and classnames for the element to create.\n * @return\t{HTMLElement}\t\t\t\tThe created element.\n */\nexport const create = (selector) => {\n    const args = selector.split('.'), elem = document.createElement(args.shift());\n    elem.classList.add(...args);\n    return elem;\n};\n/**\n * Find all elements matching the selector.\n * Basically the same as element.querySelectorAll() but it returns an actuall array.\n *\n * @param \t{HTMLElement} \telement Element to search in.\n * @param \t{string}\t\tfilter\tThe filter to match.\n * @return\t{array}\t\t\t\t\tArray of elements that match the filter.\n */\nexport const find = (element, filter) => {\n    return filter.length ? [].slice.call(element.querySelectorAll(filter)) : [];\n};\n/**\n * Find all child elements matching the (optional) selector.\n *\n * @param \t{HTMLElement} \telement Element to search in.\n * @param \t{string}\t\tfilter\tThe filter to match.\n * @return\t{array}\t\t\t\t\tArray of child elements that match the filter.\n */\nexport const children = (element, filter) => {\n    const children = Array.prototype.slice.call(element.children);\n    return filter\n        ? children.filter((child) => child.matches(filter))\n        : children;\n};\n/**\n * Find all text from direct child element.\n *\n * @param \t{HTMLElement} \telement Element to search in.\n * @return\t{string}\t\t\t\tThe text.\n */\nexport const childText = (element) => {\n    return element\n        ? [].slice.call(element.childNodes)\n            .filter(node => node.nodeType === Node.TEXT_NODE)\n            .map(node => node.nodeValue.trim())\n            .join(' ')\n        : '';\n};\n/**\n * Find text excluding text from within child elements.\n * @param   {HTMLElement}   element Element to search in.\n * @return  {string}                The text.\n */\nexport const text = (element) => {\n    return [].slice.call(element.childNodes)\n        .filter((child) => !child.ariaHidden)\n        .map((child) => child.textContent)\n        .join(' ');\n};\n/**\n * Find all preceding elements matching the selector.\n *\n * @param \t{HTMLElement} \telement Element to start searching from.\n * @param \t{string}\t\tfilter\tThe filter to match.\n * @return\t{array}\t\t\t\t\tArray of preceding elements that match the selector.\n */\nexport const parents = (element, filter) => {\n    /** Array of preceding elements that match the selector. */\n    let parents = [];\n    /** Array of preceding elements that match the selector. */\n    let parent = element.parentElement;\n    while (parent) {\n        parents.push(parent);\n        parent = parent.parentElement;\n    }\n    return filter\n        ? parents.filter((parent) => parent.matches(filter))\n        : parents;\n};\n/**\n * Find all previous siblings matching the selecotr.\n *\n * @param \t{HTMLElement} \telement Element to start searching from.\n * @param \t{string}\t\tfilter\tThe filter to match.\n * @return\t{array}\t\t\t\t\tArray of previous siblings that match the selector.\n */\nexport const prevAll = (element, filter) => {\n    /** Array of previous siblings that match the selector. */\n    let previous = [];\n    /** Current element in the loop */\n    let current = element.previousElementSibling;\n    while (current) {\n        if (!filter || current.matches(filter)) {\n            previous.push(current);\n        }\n        current = current.previousElementSibling;\n    }\n    return previous;\n};\n/**\n * Get an element offset relative to the document.\n *\n * @param \t{HTMLElement}\t element \t\t\tElement to start measuring from.\n * @param \t{string}\t\t [direction=top] \tOffset top or left.\n * @return\t{number}\t\t\t\t\t\t\tThe element offset relative to the document.\n */\nexport const offset = (element, direction) => {\n    return (element.getBoundingClientRect()[direction] +\n        document.body[direction === 'left' ? 'scrollLeft' : 'scrollTop']);\n};\n/**\n * Filter out non-listitem listitems.\n * @param  {array} listitems \tElements to filter.\n * @return {array}\t\t\t\tThe filtered set of listitems.\n */\nexport const filterLI = (listitems) => {\n    return listitems.filter((listitem) => !listitem.matches('.mm-hidden'));\n};\n/**\n * Find anchors in listitems (excluding anchor that open a sub-panel).\n * @param  {array} \tlistitems \tElements to filter.\n * @return {array}\t\t\t\tThe found set of anchors.\n */\nexport const filterLIA = (listitems) => {\n    let anchors = [];\n    filterLI(listitems).forEach((listitem) => {\n        anchors.push(...children(listitem, 'a.mm-listitem__text'));\n    });\n    return anchors.filter((anchor) => !anchor.matches('.mm-btn--next'));\n};\n/**\n * Refactor a classname on multiple elements.\n * @param {HTMLElement} element \tElement to refactor.\n * @param {string}\t\toldClass \tClassname to remove.\n * @param {string}\t\tnewClass \tClassname to add.\n */\nexport const reClass = (element, oldClass, newClass) => {\n    if (element.matches('.' + oldClass)) {\n        element.classList.add(newClass);\n    }\n};\n","/** Collection of callback functions for media querys. */\nlet listeners = {};\n/**\n * Bind functions to a matchMedia listener (subscriber).\n *\n * @param {string|number} \tquery \tMedia query to match or number for min-width.\n * @param {function} \t\tyes \tFunction to invoke when the media query matches.\n * @param {function} \t\tno \t\tFunction to invoke when the media query doesn't match.\n */\nexport const add = (query, yes, no) => {\n    if (typeof query == 'number') {\n        query = '(min-width: ' + query + 'px)';\n    }\n    listeners[query] = listeners[query] || [];\n    listeners[query].push({ yes, no });\n};\n/**\n * Initialize the matchMedia listener.\n */\nexport const watch = () => {\n    for (let query in listeners) {\n        let mqlist = window.matchMedia(query);\n        fire(query, mqlist);\n        mqlist.onchange = (evnt) => {\n            fire(query, mqlist);\n        };\n    }\n};\n/**\n * Invoke the \"yes\" or \"no\" function for a matchMedia listener (publisher).\n *\n * @param {string} \t\t\tquery \tMedia query to check for.\n * @param {MediaQueryList} \tmqlist \tMedia query list to check with.\n */\nexport const fire = (query, mqlist) => {\n    var fn = mqlist.matches ? 'yes' : 'no';\n    for (let m = 0; m < listeners[query].length; m++) {\n        listeners[query][m][fn]();\n    }\n};\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, privateMap, value) {\n    if (!privateMap.has(receiver)) {\n        throw new TypeError(\"attempted to set private field on non-instance\");\n    }\n    privateMap.set(receiver, value);\n    return value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {\n    if (!privateMap.has(receiver)) {\n        throw new TypeError(\"attempted to get private field on non-instance\");\n    }\n    return privateMap.get(receiver);\n};\nvar _panelObserver, _listviewObserver, _listitemObserver;\nimport OPTIONS from './options';\nimport CONFIGS from './configs';\nimport translate from './translations';\nimport * as DOM from '../../_modules/dom';\nimport * as i18n from '../../_modules/i18n';\nimport * as media from '../../_modules/matchmedia';\nimport { extend, type, uniqueId, } from '../../_modules/helpers';\n//  Add the translations.\ntranslate();\n/**\n * Class for a mobile menu.\n */\nexport default class Mmenu {\n    /**\n     * Create a mobile menu.\n     * @param {HTMLElement|string} \tmenu\t\tThe menu node.\n     * @param {object} \t\t\t\t[option]\tOptions for the menu.\n     * @param {object} \t\t\t\t[configs]\tConfiguration options for the menu.\n     */\n    constructor(menu, options, configs) {\n        /** MutationObserver for adding a listview to a panel. */\n        _panelObserver.set(this, void 0);\n        /** MutationObserver for adding a listitem to a listview. */\n        _listviewObserver.set(this, void 0);\n        /** MutationObserver for adding a listview to a listitem. */\n        _listitemObserver.set(this, void 0);\n        //\tExtend options and configuration from defaults.\n        this.opts = extend(options, OPTIONS);\n        this.conf = extend(configs, CONFIGS);\n        //\tMethods to expose in the API.\n        this._api = [\n            'i18n',\n            'bind',\n            'openPanel',\n            'closePanel',\n            'setSelected',\n        ];\n        //\tStorage objects for nodes and hooks.\n        this.node = {};\n        this.hook = {};\n        //\tGet menu node from string or element.\n        this.node.menu =\n            typeof menu == 'string' ? document.querySelector(menu) : menu;\n        if (typeof this._deprecatedWarnings == 'function') {\n            this._deprecatedWarnings();\n        }\n        this.trigger('init:before');\n        this._initObservers();\n        this._initAddons();\n        this._initHooks();\n        this._initAPI();\n        this._initMenu();\n        this._initPanels();\n        this._initOpened();\n        media.watch();\n        this.trigger('init:after');\n        return this;\n    }\n    /**\n     * Open a panel.\n     * @param {HTMLElement} panel               Panel to open.\n     * @param {boolean}     [animation=true]    Whether or not to use an animation.\n     * @param {boolean}     [setfocus=true]     Whether or not to set focus to the panel.\n     */\n    openPanel(panel, animation = true, setfocus = true) {\n        //\tFind panel.\n        if (!panel) {\n            return;\n        }\n        panel = panel.closest('.mm-panel');\n        //\tInvoke \"before\" hook.\n        this.trigger('openPanel:before', [panel, {\n                animation,\n                setfocus\n            }]);\n        /** Wrapping listitem (for a vertical panel) */\n        const listitem = panel.closest('.mm-listitem--vertical');\n        //\tOpen a \"vertical\" panel.\n        if (listitem) {\n            listitem.classList.add('mm-listitem--opened');\n            /** The parent panel */\n            const parent = listitem.closest('.mm-panel');\n            this.openPanel(parent);\n            //\tOpen a \"horizontal\" panel.\n        }\n        else {\n            /** Currently opened panel. */\n            const current = DOM.children(this.node.pnls, '.mm-panel--opened')[0];\n            //  Ensure current panel stays on top while closing it.\n            if (panel.matches('.mm-panel--parent') && current) {\n                current.classList.add('mm-panel--highest');\n            }\n            //  Remove opened, parent, animation and highest classes from all panels.\n            const remove = ['mm-panel--opened', 'mm-panel--parent'];\n            const add = [];\n            if (animation) {\n                remove.push('mm-panel--noanimation');\n            }\n            else {\n                add.push('mm-panel--noanimation');\n            }\n            DOM.children(this.node.pnls, '.mm-panel').forEach(pnl => {\n                pnl.classList.add(...add);\n                pnl.classList.remove(...remove);\n                if (pnl !== current) {\n                    pnl.classList.remove('mm-panel--highest');\n                }\n                // Set inert attribute.\n                if (pnl === panel) {\n                    pnl.removeAttribute('inert');\n                }\n                else {\n                    pnl.setAttribute('inert', 'true');\n                }\n            });\n            //  Open new panel.\n            panel.classList.add('mm-panel--opened');\n            /** The parent panel */\n            let parent = DOM.find(this.node.pnls, `#${panel.dataset.mmParent}`)[0];\n            //\tSet parent panels as \"parent\".\n            while (parent) {\n                parent = parent.closest('.mm-panel');\n                parent.classList.add('mm-panel--parent');\n                parent = DOM.find(this.node.pnls, `#${parent.dataset.mmParent}`)[0];\n            }\n        }\n        //\tInvoke \"after\" hook.\n        this.trigger('openPanel:after', [panel, {\n                animation,\n                setfocus\n            }]);\n    }\n    /**\n     * Close a panel.\n     * @param {HTMLElement} panel               Panel to close.\n     * @param {boolean}     [animation=true]    Whether or not to use an animation.\n     * @param {boolean}     [setfocus=true]     Whether or not to set focus to the panel.\n     */\n    closePanel(panel, animation = true, setfocus = true) {\n        if (!panel) {\n            return;\n        }\n        if (!panel.matches('.mm-panel--opened') &&\n            !panel.parentElement.matches('.mm-listitem--opened')) {\n            return;\n        }\n        //\tInvoke \"before\" hook.\n        this.trigger('closePanel:before', [panel]);\n        //\tClose a \"vertical\" panel.\n        if (panel.parentElement.matches('.mm-listitem--vertical')) {\n            panel.parentElement.classList.remove('mm-listitem--opened');\n            //  Close a \"horizontal\" panel...\n        }\n        else {\n            //  ... open its parent...\n            if (panel.dataset.mmParent) {\n                const parent = DOM.find(this.node.pnls, `#${panel.dataset.mmParent}`)[0];\n                this.openPanel(parent, animation, setfocus);\n                // ... or the last opened\n            }\n            else {\n                const lastPanel = DOM.children(this.node.pnls, '.mm-panel--parent').pop();\n                if (lastPanel && lastPanel !== panel) {\n                    this.openPanel(lastPanel, animation, setfocus);\n                    // ... or the first panel.\n                }\n                else {\n                    const firstPanel = DOM.children(this.node.pnls, '.mm-panel')[0];\n                    if (firstPanel && firstPanel !== panel) {\n                        this.openPanel(firstPanel, animation, setfocus);\n                    }\n                }\n            }\n        }\n        //\tInvoke \"after\" hook.\n        this.trigger('closePanel:after', [panel]);\n    }\n    /**\n     * Toggle a panel opened/closed.\n     * @param {HTMLElement} panel Panel to open or close.\n     */\n    togglePanel(panel) {\n        const listitem = panel.parentElement;\n        /** The function to invoke (open or close). */\n        let fn = 'openPanel';\n        //\tToggle only works for \"vertical\" panels.\n        if (listitem.matches('.mm-listitem--opened') ||\n            panel.matches('.mm-panel--opened')) {\n            fn = 'closePanel';\n        }\n        this[fn](panel);\n    }\n    /**\n     * Display a listitem as being \"selected\".\n     * @param {HTMLElement} listitem Listitem to mark.\n     */\n    setSelected(listitem) {\n        //\tInvoke \"before\" hook.\n        this.trigger('setSelected:before', [listitem]);\n        //\tRemove the selected class from all listitems.\n        DOM.find(this.node.menu, '.mm-listitem--selected').forEach((li) => {\n            li.classList.remove('mm-listitem--selected');\n        });\n        //\tAdd the selected class to the provided listitem.\n        listitem.classList.add('mm-listitem--selected');\n        //\tInvoke \"after\" hook.\n        this.trigger('setSelected:after', [listitem]);\n    }\n    /**\n     * Bind functions to a hook (subscriber).\n     * @param {string} \t\thook The hook.\n     * @param {function} \tfunc The function.\n     */\n    bind(hook, func) {\n        //\tCreate an array for the hook if it does not yet excist.\n        this.hook[hook] = this.hook[hook] || [];\n        //\tPush the function to the array.\n        this.hook[hook].push(func);\n    }\n    /**\n     * Invoke the functions bound to a hook (publisher).\n     * @param {string} \thook  \tThe hook.\n     * @param {array}\t[args] \tArguments for the function.\n     */\n    trigger(hook, args) {\n        if (this.hook[hook]) {\n            for (var h = 0, l = this.hook[hook].length; h < l; h++) {\n                this.hook[hook][h].apply(this, args);\n            }\n        }\n    }\n    /**\n     * Create the observers.\n     */\n    _initObservers() {\n        __classPrivateFieldSet(this, _panelObserver, new MutationObserver((mutationsList) => {\n            mutationsList.forEach((mutation) => {\n                mutation.addedNodes.forEach((listview) => {\n                    if (listview.matches(this.conf.panelNodetype.join(', '))) {\n                        this._initListview(listview);\n                    }\n                });\n            });\n        }));\n        __classPrivateFieldSet(this, _listviewObserver, new MutationObserver((mutationsList) => {\n            mutationsList.forEach((mutation) => {\n                mutation.addedNodes.forEach((listitem) => {\n                    this._initListitem(listitem);\n                });\n            });\n        }));\n        __classPrivateFieldSet(this, _listitemObserver, new MutationObserver((mutationsList) => {\n            mutationsList.forEach((mutation) => {\n                mutation.addedNodes.forEach((subpanel) => {\n                    if (subpanel === null || subpanel === void 0 ? void 0 : subpanel.matches(this.conf.panelNodetype.join(', '))) {\n                        this._initSubPanel(subpanel);\n                    }\n                });\n            });\n        }));\n    }\n    /**\n     * Create the API.\n     */\n    _initAPI() {\n        //\tWe need this=that because:\n        //\t1) the \"arguments\" object can not be referenced in an arrow function in ES3 and ES5.\n        const that = this;\n        this.API = {};\n        this._api.forEach((fn) => {\n            this.API[fn] = function () {\n                return that[fn].apply(that, arguments); // 1)\n            };\n        });\n        //\tStore the API in the HTML node for external usage.\n        this.node.menu['mmApi'] = this.API;\n    }\n    /**\n     * Bind the hooks specified in the options (publisher).\n     */\n    _initHooks() {\n        for (let hook in this.opts.hooks) {\n            this.bind(hook, this.opts.hooks[hook]);\n        }\n    }\n    /**\n     * Initialize all available add-ons.\n     */\n    _initAddons() {\n        //\tInvoke \"before\" hook.\n        this.trigger('initAddons:before');\n        for (let addon in Mmenu.addons) {\n            Mmenu.addons[addon].call(this);\n        }\n        //\tInvoke \"after\" hook.\n        this.trigger('initAddons:after');\n    }\n    /**\n     * Initialize the menu.\n     */\n    _initMenu() {\n        //\tInvoke \"before\" hook.\n        this.trigger('initMenu:before');\n        //\tAdd class to the wrapper.\n        this.node.wrpr = this.node.wrpr || this.node.menu.parentElement;\n        this.node.wrpr.classList.add('mm-wrapper');\n        //\tAdd class to the menu.\n        this.node.menu.classList.add('mm-menu');\n        //\tAdd an ID to the menu if it does not yet have one.\n        this.node.menu.id = this.node.menu.id || uniqueId();\n        this.node.menu.setAttribute('aria-label', this.i18n(this.opts.navbar.title || 'Menu'));\n        this.node.menu.setAttribute('aria-modal', 'true');\n        this.node.menu.setAttribute('role', 'dialog');\n        /** All panel nodes in the menu. */\n        const panels = DOM.children(this.node.menu).filter((panel) => panel.matches(this.conf.panelNodetype.join(', ')));\n        //\tWrap the panels in a node.\n        this.node.pnls = DOM.create('div.mm-panels');\n        this.node.menu.append(this.node.pnls);\n        //  Initiate all panel like nodes\n        panels.forEach((panel) => {\n            this._initPanel(panel);\n        });\n        //\tInvoke \"after\" hook.\n        this.trigger('initMenu:after');\n    }\n    /**\n     * Initialize panels.\n     */\n    _initPanels() {\n        //\tInvoke \"before\" hook.\n        this.trigger('initPanels:before');\n        //\tOpen / close panels.\n        this.node.menu.addEventListener('click', event => {\n            var _a, _b;\n            /** The href attribute for the clicked anchor. */\n            const href = ((_b = (_a = event.target) === null || _a === void 0 ? void 0 : _a.closest('a[href]')) === null || _b === void 0 ? void 0 : _b.getAttribute('href')) || '';\n            if (href.slice(0, 1) === '#') {\n                try {\n                    /** The targeted panel */\n                    const panel = DOM.find(this.node.menu, href)[0];\n                    if (panel) {\n                        event.preventDefault();\n                        this.togglePanel(panel);\n                    }\n                }\n                catch (err) { }\n            }\n        }, {\n            // useCapture to ensure the logical order.\n            capture: true\n        });\n        //\tInvoke \"after\" hook.\n        this.trigger('initPanels:after');\n    }\n    /**\n     * Initialize a single panel.\n     * @param  {HTMLElement} \t\tpanel \tPanel to initialize.\n     * @return {HTMLElement|null} \t\t\tInitialized panel.\n     */\n    _initPanel(panel) {\n        var _a;\n        if (panel.matches('.mm-panel')) {\n            return;\n        }\n        //\tRefactor panel classnames\n        DOM.reClass(panel, this.conf.classNames.panel, 'mm-panel');\n        DOM.reClass(panel, this.conf.classNames.nopanel, 'mm-nopanel');\n        //\tStop if not supposed to be a panel.\n        if (panel.matches('.mm-nopanel')) {\n            return;\n        }\n        //\tInvoke \"before\" hook.\n        this.trigger('initPanel:before', [panel]);\n        //  Must have an ID\n        panel.id = panel.id || uniqueId();\n        //\tWrap UL/OL in DIV\n        if (panel.matches('ul, ol')) {\n            /** The panel. */\n            const wrapper = DOM.create('div');\n            //  Transport the ID\n            wrapper.id = panel.id;\n            panel.removeAttribute('id');\n            //  Transport \"mm-\" prefixed classnames.\n            [].slice\n                .call(panel.classList)\n                .filter((classname) => classname.slice(0, 3) === 'mm-')\n                .forEach((classname) => {\n                wrapper.classList.add(classname);\n                panel.classList.remove(classname);\n            });\n            //  Transport \"mm\" prefixed data attributes.\n            Object.keys(panel.dataset)\n                .filter((attr) => attr.slice(0, 2) === 'mm')\n                .forEach(attr => {\n                wrapper.dataset[attr] = panel.dataset[attr];\n                delete panel.dataset[attr];\n            });\n            //\tWrap the listview in the panel.\n            panel.before(wrapper);\n            wrapper.append(panel);\n            panel = wrapper;\n        }\n        panel.classList.add('mm-panel');\n        //  Append to the panels node if not vertically expanding\n        if (!((_a = panel.parentElement) === null || _a === void 0 ? void 0 : _a.matches('.mm-listitem--vertical'))) {\n            this.node.pnls.append(panel);\n        }\n        //  Initialize tha navbar.\n        this._initNavbar(panel);\n        //  Initialize the listview(s).\n        DOM.children(panel, 'ul, ol').forEach((listview) => {\n            this._initListview(listview);\n        });\n        // Observe the panel for added listviews.\n        __classPrivateFieldGet(this, _panelObserver).observe(panel, {\n            childList: true,\n        });\n        //\tInvoke \"after\" hook.\n        this.trigger('initPanel:after', [panel]);\n        return panel;\n    }\n    /**\n     * Initialize a navbar.\n     * @param {HTMLElement} panel Panel for the navbar.\n     */\n    _initNavbar(panel) {\n        //\tOnly one navbar per panel.\n        if (DOM.children(panel, '.mm-navbar').length) {\n            return;\n        }\n        /** The parent listitem. */\n        let parentListitem = null;\n        /** The parent panel. */\n        let parentPanel = null;\n        //  The parent listitem and parent panel\n        if (panel.dataset.mmParent) {\n            parentListitem = DOM.find(this.node.pnls, `#${panel.dataset.mmParent}`)[0];\n            parentPanel = parentListitem.closest('.mm-panel');\n            while (parentPanel.closest('.mm-listitem--vertical')) {\n                parentPanel = parentPanel.parentElement.closest('.mm-panel');\n            }\n        }\n        //  No navbar needed for vertical submenus.\n        if (parentListitem === null || parentListitem === void 0 ? void 0 : parentListitem.matches('.mm-listitem--vertical')) {\n            return;\n        }\n        //\tInvoke \"before\" hook.\n        this.trigger('initNavbar:before', [panel]);\n        /** The navbar element. */\n        const navbar = DOM.create('div.mm-navbar');\n        //  Hide navbar if specified in options.\n        if (!this.opts.navbar.add) {\n            navbar.classList.add('mm-hidden');\n        }\n        //  Add the back button.\n        if (parentPanel) {\n            /** The back button. */\n            const prev = DOM.create('a.mm-btn.mm-btn--prev.mm-navbar__btn');\n            prev.href = `#${parentPanel.id}`;\n            prev.setAttribute('aria-label', this.i18n(this.conf.screenReader.closeSubmenu));\n            navbar.append(prev);\n        }\n        /** The anchor that opens the panel. */\n        let opener = null;\n        //  The anchor is in a listitem.\n        if (parentListitem) {\n            opener = DOM.children(parentListitem, '.mm-listitem__text')[0];\n        }\n        //  The anchor is in a panel.\n        else if (parentPanel) {\n            opener = DOM.find(parentPanel, 'a[href=\"#' + panel.id + '\"]')[0];\n        }\n        //  Add the title.\n        /** The title */\n        const title = DOM.create('a.mm-navbar__title');\n        title.tabIndex = -1;\n        title.setAttribute('aria-hidden', 'true');\n        switch (this.opts.navbar.titleLink) {\n            case 'anchor':\n                if (opener) {\n                    title.href = opener.getAttribute('href');\n                }\n                break;\n            case 'parent':\n                if (parentPanel) {\n                    title.href = `#${parentPanel.id}`;\n                }\n                break;\n        }\n        /** Text in the title */\n        const titleText = DOM.create('span');\n        titleText.innerHTML =\n            panel.dataset.mmTitle ||\n                DOM.childText(opener) ||\n                this.i18n(this.opts.navbar.title || 'Menu');\n        //  Add to DOM\n        panel.prepend(navbar);\n        navbar.append(title);\n        title.append(titleText);\n        //\tInvoke \"after\" hook.\n        this.trigger('initNavbar:after', [panel]);\n    }\n    /**\n     * Initialize a listview.\n     * @param {HTMLElement} listview Listview to initialize.\n     */\n    _initListview(listview) {\n        //  Assert UL\n        if (!['htmlulistelement', 'htmlolistelement'].includes(type(listview))) {\n            return;\n        }\n        if (listview.matches('.mm-listview')) {\n            return;\n        }\n        DOM.reClass(listview, this.conf.classNames.nolistview, 'mm-nolistview');\n        if (listview.matches('.mm-nolistview')) {\n            return;\n        }\n        //\tInvoke \"before\" hook.\n        this.trigger('initListview:before', [listview]);\n        listview.classList.add('mm-listview');\n        //  Initiate the listitem(s).\n        DOM.children(listview).forEach((listitem) => {\n            this._initListitem(listitem);\n        });\n        // Observe the listview for added listitems.\n        __classPrivateFieldGet(this, _listviewObserver).observe(listview, {\n            childList: true,\n        });\n        //\tInvoke \"after\" hook.\n        this.trigger('initListview:after', [listview]);\n    }\n    /**\n     * Initialte a listitem.\n     * @param {HTMLElement} listitem Listitem to initiate.\n     */\n    _initListitem(listitem) {\n        //  Assert LI\n        if (!['htmllielement'].includes(type(listitem))) {\n            return;\n        }\n        if (listitem.matches('.mm-listitem')) {\n            return;\n        }\n        DOM.reClass(listitem, this.conf.classNames.divider, 'mm-divider');\n        if (listitem.matches('.mm-divider')) {\n            return;\n        }\n        //\tInvoke \"before\" hook.\n        this.trigger('initListitem:before', [listitem]);\n        listitem.classList.add('mm-listitem');\n        DOM.reClass(listitem, this.conf.classNames.selected, 'mm-listitem--selected');\n        DOM.children(listitem, 'a, span').forEach((text) => {\n            text.classList.add('mm-listitem__text');\n        });\n        //  Initiate the subpanel.\n        DOM.children(listitem, this.conf.panelNodetype.join(', ')).forEach((subpanel) => {\n            this._initSubPanel(subpanel);\n        });\n        // Observe the listitem for added listviews.\n        __classPrivateFieldGet(this, _listitemObserver).observe(listitem, {\n            childList: true,\n        });\n        //\tInvoke \"after\" hook.\n        this.trigger('initListitem:after', [listitem]);\n    }\n    /**\n     * Initiate a subpanel.\n     * @param {HTMLElement} subpanel Subpanel to initiate.\n     */\n    _initSubPanel(subpanel) {\n        if (subpanel.matches('.mm-panel')) {\n            return;\n        }\n        /** The parent element for the panel. */\n        const listitem = subpanel.parentElement;\n        /** Whether or not the listitem expands vertically */\n        const vertical = subpanel.matches('.' + this.conf.classNames.vertical) ||\n            !this.opts.slidingSubmenus;\n        // Make it expand vertically\n        if (vertical) {\n            listitem.classList.add('mm-listitem--vertical');\n        }\n        //  Force an ID\n        listitem.id = listitem.id || uniqueId();\n        subpanel.id = subpanel.id || uniqueId();\n        //  Store parent/child relation\n        listitem.dataset.mmChild = subpanel.id;\n        subpanel.dataset.mmParent = listitem.id;\n        /** The open link. */\n        let button = DOM.children(listitem, '.mm-btn')[0];\n        //  Init item text\n        if (!button) {\n            button = DOM.create('a.mm-btn.mm-btn--next.mm-listitem__btn');\n            DOM.children(listitem, 'a, span').forEach((text) => {\n                //  If the item has no link,\n                //      Replace the item with the open link.\n                if (text.matches('span')) {\n                    button.classList.add('mm-listitem__text');\n                    button.innerHTML = text.innerHTML;\n                    listitem.insertBefore(button, text.nextElementSibling);\n                    text.remove();\n                }\n                //  Otherwise, insert the button after the text.\n                else {\n                    listitem.insertBefore(button, text.nextElementSibling);\n                }\n            });\n            button.setAttribute('aria-label', this.i18n(this.conf.screenReader[listitem.matches('.mm-listitem--vertical')\n                ? 'toggleSubmenu'\n                : 'openSubmenu']));\n        }\n        button.href = `#${subpanel.id}`;\n        this._initPanel(subpanel);\n    }\n    /**\n     * Find and open the correct panel after creating the menu.\n     */\n    _initOpened() {\n        //\tInvoke \"before\" hook.\n        this.trigger('initOpened:before');\n        /** The selected listitem(s). */\n        const listitem = DOM.find(this.node.pnls, '.mm-listitem--selected').pop();\n        /**\tThe current opened panel. */\n        let panel = DOM.children(this.node.pnls, '.mm-panel')[0];\n        if (listitem) {\n            this.setSelected(listitem);\n            panel = listitem.closest('.mm-panel');\n        }\n        //\tOpen the current opened panel.\n        this.openPanel(panel, false, false);\n        //\tInvoke \"after\" hook.\n        this.trigger('initOpened:after');\n    }\n    /**\n     * Get the translation for a text.\n     * @param  {string}     text \tText to translate.\n     * @return {string}\t\t        The translated text.\n     */\n    i18n(text) {\n        return i18n.get(text, this.conf.language);\n    }\n    /**\n     * Get all translations for the given language.\n     * @return {object}\tThe translations.\n     */\n    static i18n(text = {}, language = '') {\n        if (text && language) {\n            i18n.add(text, language);\n        }\n        else {\n            return i18n.show();\n        }\n    }\n}\n_panelObserver = new WeakMap(), _listviewObserver = new WeakMap(), _listitemObserver = new WeakMap();\n/**\tAvailable add-ons for the plugin. */\nMmenu.addons = {};\n/**\tGlobally used HTML elements. */\nMmenu.node = {};\n/** Globally used v. */\nMmenu.vars = {};\n","const options = {\n    use: true,\n    position: 'left'\n};\nexport default options;\n","const configs = {\n    clone: false,\n    menu: {\n        insertMethod: 'append',\n        insertSelector: 'body'\n    },\n    page: {\n        nodetype: 'div',\n        selector: null,\n        noSelector: []\n    },\n    screenReader: {\n        closeMenu: 'Close menu',\n        openMenu: 'Open menu',\n    }\n};\nexport default configs;\n","import Mmenu from './../oncanvas/mmenu.oncanvas';\nimport OPTIONS from './options';\nimport CONFIGS from './configs';\nimport * as DOM from '../../_modules/dom';\nimport { extend, uniqueId, cloneId, originalId, } from '../../_modules/helpers';\nconst possiblePositions = [\n    'left',\n    'left-front',\n    'right',\n    'right-front',\n    'top',\n    'bottom'\n];\nexport default function () {\n    this.opts.offCanvas = this.opts.offCanvas || {};\n    this.conf.offCanvas = this.conf.offCanvas || {};\n    //\tExtend options.\n    const options = extend(this.opts.offCanvas, OPTIONS);\n    const configs = extend(this.conf.offCanvas, CONFIGS);\n    if (!options.use) {\n        return;\n    }\n    if (!possiblePositions.includes(options.position)) {\n        options.position = possiblePositions[0];\n    }\n    //\tAdd methods to the API.\n    this._api.push('open', 'close', 'setPage', 'position');\n    //  Clone menu if needed.\n    if (configs.clone) {\n        //\tClone the original menu and store it.\n        this.node.menu = this.node.menu.cloneNode(true);\n        //\tPrefix all ID's in the cloned menu.\n        if (this.node.menu.id) {\n            this.node.menu.id = cloneId(this.node.menu.id);\n        }\n        DOM.find(this.node.menu, '[id]').forEach((elem) => {\n            elem.id = cloneId(elem.id);\n        });\n    }\n    //  Prepend the menu to the <body>.\n    this.bind('initMenu:before', () => {\n        this.node.wrpr = document.querySelector(configs.menu.insertSelector);\n        this.node.wrpr[configs.menu.insertMethod](this.node.menu);\n    });\n    //\tSetup the UI blocker.\n    if (!Mmenu.node.blck) {\n        this.bind('initMenu:before', () => {\n            /** The UI blocker node. */\n            const blocker = DOM.create('a.mm-wrapper__blocker.mm-blocker.mm-slideout');\n            blocker.id = uniqueId();\n            blocker.setAttribute('aria-label', this.i18n(configs.screenReader.closeMenu));\n            blocker.setAttribute('inert', 'true');\n            //\tAppend the blocker node to the body.\n            document.querySelector(configs.menu.insertSelector).append(blocker);\n            //\tStore the blocker node.\n            Mmenu.node.blck = blocker;\n        });\n    }\n    this.bind('initMenu:after', () => {\n        //\tSetup the page.\n        this.setPage(Mmenu.node.page);\n        //\tSetup the menu.\n        this.node.menu.classList.add('mm-menu--offcanvas');\n        this.node.menu.setAttribute('inert', 'true');\n        if (possiblePositions.includes(options.position)) {\n            this.node.wrpr.classList.add(`mm-wrapper--position-${options.position}`);\n            this.node.menu.classList.add(`mm-menu--position-${options.position}`);\n        }\n        //\tOpen if url hash equals menu id (usefull when user clicks the hamburger icon before the menu is created)\n        let hash = window.location.hash;\n        if (hash) {\n            let id = originalId(this.node.menu.id);\n            if (id && id == hash.slice(1)) {\n                setTimeout(() => {\n                    this.open();\n                }, 1000);\n            }\n        }\n    });\n    //\tOpen / close the menu.\n    document.addEventListener('click', event => {\n        var _a;\n        /** THe href attribute for the clicked anchor. */\n        const href = (_a = event.target.closest('a')) === null || _a === void 0 ? void 0 : _a.getAttribute('href');\n        switch (href) {\n            //\tOpen menu if the clicked anchor links to the menu.\n            case `#${originalId(this.node.menu.id)}`:\n                event.preventDefault();\n                this.open();\n                break;\n            //\tClose menu if the clicked anchor links to the page.\n            case `#${originalId(Mmenu.node.page.id)}`:\n                event.preventDefault();\n                this.close();\n                break;\n        }\n    });\n    //\tClose the menu with ESC key.\n    document.addEventListener('keyup', (event) => {\n        if (event.key == 'Escape') {\n            this.close();\n        }\n    });\n}\n/**\n * Open the menu.\n */\nMmenu.prototype.open = function () {\n    if (this.node.menu.matches('.mm-menu--opened')) {\n        return;\n    }\n    //\tInvoke \"before\" hook.\n    this.trigger('open:before');\n    //\tOpen\n    this.node.wrpr.classList.add('mm-wrapper--opened', `mm-wrapper--position-${this.opts.offCanvas.position}`);\n    this.node.menu.classList.add('mm-menu--opened');\n    this.node.menu.removeAttribute('inert');\n    Mmenu.node.blck.removeAttribute('inert');\n    Mmenu.node.page.setAttribute('inert', 'true');\n    //  Store the last focesed element.\n    this.node.open = document.activeElement;\n    //\tInvoke \"after\" hook.\n    this.trigger('open:after');\n};\n/**\n * Close the menu.\n */\nMmenu.prototype.close = function () {\n    var _a;\n    if (!this.node.menu.matches('.mm-menu--opened')) {\n        return;\n    }\n    //\tInvoke \"before\" hook.\n    this.trigger('close:before');\n    this.node.wrpr.classList.remove('mm-wrapper--opened', `mm-wrapper--position-${this.opts.offCanvas.position}`);\n    this.node.menu.classList.remove('mm-menu--opened');\n    this.node.menu.setAttribute('inert', 'true');\n    Mmenu.node.blck.setAttribute('inert', 'true');\n    Mmenu.node.page.removeAttribute('inert');\n    /** Element to focus. */\n    const focus = this.node.open || document.querySelector(`[href=\"#${this.node.menu.id}\"]`) || null;\n    (_a = focus) === null || _a === void 0 ? void 0 : _a.focus();\n    // Prevent html/body from scrolling due to focus.\n    document.body.scrollLeft = 0;\n    document.documentElement.scrollLeft = 0;\n    //\tInvoke \"after\" hook.\n    this.trigger('close:after');\n};\n/**\n * Set the \"page\" node.\n *\n * @param {HTMLElement} page Element to set as the page.\n */\nMmenu.prototype.setPage = function (page) {\n    /** Offcanvas config */\n    const configs = this.conf.offCanvas;\n    //\tIf no page was specified, find it.\n    if (!page) {\n        /** Array of elements that are / could be \"the page\". */\n        let pages = typeof configs.page.selector == 'string'\n            ? DOM.find(document.body, configs.page.selector)\n            : DOM.children(document.body, configs.page.nodetype);\n        //\tFilter out elements that are absolutely not \"the page\".\n        pages = pages.filter((page) => !page.matches('.mm-menu, .mm-wrapper__blocker'));\n        //\tFilter out elements that are configured to not be \"the page\".\n        if (configs.page.noSelector.length) {\n            pages = pages.filter((page) => !page.matches(configs.page.noSelector.join(', ')));\n        }\n        //\tWrap multiple pages in a single element.\n        if (pages.length > 1) {\n            let wrapper = DOM.create('div');\n            pages[0].before(wrapper);\n            pages.forEach((page) => {\n                wrapper.append(page);\n            });\n            pages = [wrapper];\n        }\n        page = pages[0];\n    }\n    //\tInvoke \"before\" hook.\n    this.trigger('setPage:before', [page]);\n    //  Set the classes\n    page.classList.add('mm-page', 'mm-slideout');\n    //  Set the ID.\n    page.id = page.id || uniqueId();\n    //\tSync the blocker to target the page.\n    Mmenu.node.blck.setAttribute('href', `#${page.id}`);\n    //\tStore the page node.\n    Mmenu.node.page = page;\n    //\tInvoke \"after\" hook.\n    this.trigger('setPage:after', [page]);\n};\n","const options = {\n    fix: true\n};\nexport default options;\n","/** Whether or not touch gestures are supported by the browser. */\nexport const touch = 'ontouchstart' in window ||\n    (navigator.msMaxTouchPoints ? true : false) ||\n    false;\n","import OPTIONS from './options';\nimport * as DOM from '../../_modules/dom';\nimport * as support from '../../_modules/support';\nimport { extend, touchDirection } from '../../_modules/helpers';\nexport default function () {\n    //\tThe scrollBugFix add-on fixes a scrolling bug\n    //\t\t1) on touch devices\n    //\t\t2) in an off-canvas menu\n    if (!support.touch || // 1\n        !this.opts.offCanvas.use // 2\n    ) {\n        return;\n    }\n    this.opts.scrollBugFix = this.opts.scrollBugFix || {};\n    //\tExtend options.\n    const options = extend(this.opts.scrollBugFix, OPTIONS);\n    if (!options.fix) {\n        return;\n    }\n    /** The touch-direction instance. */\n    const touchDir = touchDirection(this.node.menu);\n    //  Prevent the page from scrolling when scrolling in the menu.\n    this.node.menu.addEventListener('scroll', evnt => {\n        evnt.preventDefault();\n        evnt.stopPropagation();\n    }, {\n        //  Make sure to tell the browser the event will be prevented.\n        passive: false,\n    });\n    //  Prevent the page from scrolling when dragging in the menu.\n    this.node.menu.addEventListener('touchmove', evnt => {\n        let wrapper = evnt.target.closest('.mm-panel, .mm-iconbar__top, .mm-iconbar__bottom');\n        if (wrapper && wrapper.closest('.mm-listitem--vertical')) {\n            wrapper = DOM.parents(wrapper, '.mm-panel').pop();\n        }\n        if (wrapper) {\n            //  When dragging a non-scrollable panel/iconbar,\n            //      we can simply stopPropagation.\n            if (wrapper.scrollHeight === wrapper.offsetHeight) {\n                evnt.stopPropagation();\n            }\n            //  When dragging a scrollable panel/iconbar,\n            //      that is fully scrolled up (or down).\n            //      It will not trigger the scroll event when dragging down (or up) (because you can't scroll up (or down)),\n            //      so we need to match the dragging direction with the scroll position before preventDefault and stopPropagation,\n            //      otherwise the panel would not scroll at all in any direction.\n            else if (\n            //  When scrolled up and dragging down\n            (wrapper.scrollTop == 0 && touchDir.get() == 'down') ||\n                //  When scrolled down and dragging up\n                (wrapper.scrollHeight ==\n                    wrapper.scrollTop + wrapper.offsetHeight &&\n                    touchDir.get() == 'up')) {\n                evnt.stopPropagation();\n            }\n            //  When dragging anything other than a panel/iconbar.\n        }\n        else {\n            evnt.stopPropagation();\n        }\n    }, {\n        //  Make sure to tell the browser the event can be prevented.\n        passive: false,\n    });\n    //  Some small additional improvements\n    //\tScroll the current opened panel to the top when opening the menu.\n    this.bind('open:after', () => {\n        var panel = DOM.children(this.node.pnls, '.mm-panel--opened')[0];\n        if (panel) {\n            panel.scrollTop = 0;\n        }\n    });\n    //\tFix issue after device rotation change.\n    window.addEventListener('orientationchange', (evnt) => {\n        var panel = DOM.children(this.node.pnls, '.mm-panel--opened')[0];\n        if (panel) {\n            panel.scrollTop = 0;\n            //\tApparently, changing the overflow-scrolling property triggers some event :)\n            panel.style['-webkit-overflow-scrolling'] = 'auto';\n            panel.style['-webkit-overflow-scrolling'] = 'touch';\n        }\n    });\n}\n","const options = 'light';\nexport default options;\n","import Mmenu from '../../core/oncanvas/mmenu.oncanvas';\nimport OPTIONS from './options';\n/** A list of available themes. */\nconst possibleThemes = [\n    'light',\n    'dark',\n    'white',\n    'black',\n    'light-contrast',\n    'dark-contrast',\n    'white-contrast',\n    'black-contrast'\n];\nexport default function () {\n    this.opts.theme = this.opts.theme || OPTIONS;\n    const theme = this.opts.theme;\n    if (!possibleThemes.includes(theme)) {\n        this.opts.theme = possibleThemes[0];\n    }\n    this._api.push('theme');\n    this.bind('initMenu:after', () => {\n        this.theme(this.opts.theme);\n    });\n}\n/**\n * Get or set the theme for the menu.\n *\n * @param {string} [position] The theme for the menu.\n */\nMmenu.prototype.theme = function (theme = null) {\n    /** The previously used theme */\n    const oldTheme = this.opts.theme;\n    if (theme) {\n        if (possibleThemes.includes(theme)) {\n            this.node.menu.classList.remove(`mm-menu--theme-${oldTheme}`);\n            this.node.menu.classList.add(`mm-menu--theme-${theme}`);\n            this.opts.theme = theme;\n        }\n    }\n    else {\n        return oldTheme;\n    }\n};\n","const options = {\n    close: false,\n    open: false\n};\nexport default options;\n","import OPTIONS from './options';\nimport * as DOM from '../../_modules/dom';\nimport { extend } from '../../_modules/helpers';\nexport default function () {\n    this.opts.backButton = this.opts.backButton || {};\n    if (!this.opts.offCanvas.use) {\n        return;\n    }\n    //\tExtend options.\n    const options = extend(this.opts.backButton, OPTIONS);\n    const _menu = `#${this.node.menu.id}`;\n    //\tClose menu\n    if (options.close) {\n        let states = [];\n        const setStates = () => {\n            states = [_menu];\n            DOM.children(this.node.pnls, '.mm-panel--opened, .mm-panel--parent').forEach((panel) => {\n                states.push('#' + panel.id);\n            });\n        };\n        this.bind('open:after', () => {\n            history.pushState(null, '', location.pathname + location.search + _menu);\n        });\n        this.bind('open:after', setStates);\n        this.bind('openPanel:after', setStates);\n        this.bind('close:after', () => {\n            states = [];\n            history.back();\n            history.pushState(null, '', location.pathname + location.search);\n        });\n        window.addEventListener('popstate', () => {\n            if (this.node.menu.matches('.mm-menu--opened')) {\n                if (states.length) {\n                    states = states.slice(0, -1);\n                    const hash = states[states.length - 1];\n                    if (hash == _menu) {\n                        this.close();\n                    }\n                    else {\n                        this.openPanel(this.node.menu.querySelector(hash));\n                        history.pushState(null, '', location.pathname + location.search + _menu);\n                    }\n                }\n            }\n        });\n    }\n    if (options.open) {\n        window.addEventListener('popstate', (evnt) => {\n            if (!this.node.menu.matches('.mm-menu--opened') && location.hash == _menu) {\n                this.open();\n            }\n        });\n    }\n}\n","const options = {\n    add: false\n};\nexport default options;\n","import OPTIONS from './options';\nimport * as DOM from '../../_modules/dom';\nimport { extend } from '../../_modules/helpers';\nexport default function () {\n    this.opts.counters = this.opts.counters || {};\n    //\tExtend options.\n    const options = extend(this.opts.counters, OPTIONS);\n    if (!options.add) {\n        return;\n    }\n    /**\n     * Counting the visible listitems and setting it to the counter element.\n     * @param {HTMLElement} panel Panel to count LIs in.\n     */\n    const count = (panel) => {\n        /** Parent panel for the mutated listitem. */\n        const parent = this.node.pnls.querySelector(`#${panel.dataset.mmParent}`);\n        if (!parent) {\n            return;\n        }\n        /** The counter for the listitem. */\n        const counter = parent.querySelector('.mm-counter');\n        if (!counter) {\n            return;\n        }\n        /** The listitems */\n        const listitems = [];\n        DOM.children(panel, '.mm-listview').forEach((listview) => {\n            listitems.push(...DOM.children(listview, '.mm-listitem'));\n        });\n        counter.innerHTML = DOM.filterLI(listitems).length.toString();\n    };\n    /** Mutation observer the the listitems. */\n    const listitemObserver = new MutationObserver((mutationsList) => {\n        mutationsList.forEach((mutation) => {\n            if (mutation.attributeName == 'class') {\n                count(mutation.target.closest('.mm-panel'));\n            }\n        });\n    });\n    //\tAdd the counters after a listview is initiated.\n    this.bind('initListview:after', (listview) => {\n        /** The panel where the listview is in. */\n        const panel = listview.closest('.mm-panel');\n        /** The parent LI for the panel */\n        const parent = this.node.pnls.querySelector(`#${panel.dataset.mmParent}`);\n        if (!parent) {\n            return;\n        }\n        /** The button inside the parent LI */\n        const button = DOM.children(parent, '.mm-btn')[0];\n        if (!button) {\n            return;\n        }\n        //\tCheck if no counter already excists.\n        if (!DOM.children(button, '.mm-counter').length) {\n            /** The counter for the listitem. */\n            const counter = DOM.create('span.mm-counter');\n            counter.setAttribute('aria-hidden', 'true');\n            button.prepend(counter);\n        }\n        //  Count immediately.\n        count(panel);\n    });\n    //  Count when LI classname changes.\n    this.bind('initListitem:after', (listitem) => {\n        /** The panel where the listitem is in. */\n        const panel = listitem.closest('.mm-panel');\n        if (!panel) {\n            return;\n        }\n        /** The parent LI for the panel. */\n        const parent = this.node.pnls.querySelector(`#${panel.dataset.mmParent}`);\n        if (!parent) {\n            return;\n        }\n        listitemObserver.observe(listitem, {\n            attributes: true\n        });\n    });\n}\n","const options = {\n    use: false,\n    top: [],\n    bottom: [],\n    position: 'left',\n    type: 'default'\n};\nexport default options;\n","import OPTIONS from './options';\nimport * as DOM from '../../_modules/dom';\nimport * as media from '../../_modules/matchmedia';\nimport { type, extend } from '../../_modules/helpers';\nexport default function () {\n    this.opts.iconbar = this.opts.iconbar || {};\n    //\tExtend options.\n    const options = extend(this.opts.iconbar, OPTIONS);\n    if (!options.use) {\n        return;\n    }\n    let iconbar;\n    ['top', 'bottom'].forEach((position, n) => {\n        let ctnt = options[position];\n        //\tExtend shorthand options\n        if (type(ctnt) != 'array') {\n            ctnt = [ctnt];\n        }\n        //\tCreate node\n        const part = DOM.create('div.mm-iconbar__' + position);\n        //\tAdd content\n        for (let c = 0, l = ctnt.length; c < l; c++) {\n            if (typeof ctnt[c] == 'string') {\n                part.innerHTML += ctnt[c];\n            }\n            else {\n                part.append(ctnt[c]);\n            }\n        }\n        if (part.children.length) {\n            if (!iconbar) {\n                iconbar = DOM.create('div.mm-iconbar');\n            }\n            iconbar.append(part);\n        }\n    });\n    //\tAdd to menu\n    if (iconbar) {\n        //\tAdd the iconbar.\n        this.bind('initMenu:after', () => {\n            this.node.menu.prepend(iconbar);\n        });\n        //\tEn-/disable the iconbar.\n        let classname = 'mm-menu--iconbar-' + options.position;\n        let enable = () => {\n            this.node.menu.classList.add(classname);\n        };\n        let disable = () => {\n            this.node.menu.classList.remove(classname);\n        };\n        if (typeof options.use == 'boolean') {\n            this.bind('initMenu:after', enable);\n        }\n        else {\n            media.add(options.use, enable, disable);\n        }\n        //\tTabs\n        if (options.type == 'tabs') {\n            iconbar.classList.add('mm-iconbar--tabs');\n            iconbar.addEventListener('click', (evnt) => {\n                const anchor = evnt.target.closest('.mm-iconbar__tab');\n                if (!anchor) {\n                    return;\n                }\n                if (anchor.matches('.mm-iconbar__tab--selected')) {\n                    evnt.stopImmediatePropagation();\n                    return;\n                }\n                try {\n                    const panel = DOM.find(this.node.menu, `${anchor.getAttribute('href')}.mm-panel`)[0];\n                    if (panel) {\n                        evnt.preventDefault();\n                        evnt.stopImmediatePropagation();\n                        this.openPanel(panel, false);\n                    }\n                }\n                catch (err) { }\n            });\n            const selectTab = (panel) => {\n                DOM.find(iconbar, 'a').forEach((anchor) => {\n                    anchor.classList.remove('mm-iconbar__tab--selected');\n                });\n                const anchor = DOM.find(iconbar, '[href=\"#' + panel.id + '\"]')[0];\n                if (anchor) {\n                    anchor.classList.add('mm-iconbar__tab--selected');\n                }\n                else {\n                    const parent = DOM.find(this.node.pnls, `#${panel.dataset.mmParent}`)[0];\n                    if (parent) {\n                        selectTab(parent.closest('.mm-panel'));\n                    }\n                }\n            };\n            this.bind('openPanel:before', selectTab);\n        }\n    }\n}\n","const options = {\n    add: false,\n    blockPanel: true,\n    visible: 3\n};\nexport default options;\n","import OPTIONS from './_options';\nimport * as DOM from '../../_modules/dom';\nimport { extend } from '../../_modules/helpers';\nexport default function () {\n    this.opts.iconPanels = this.opts.iconPanels || {};\n    //\tExtend options.\n    const options = extend(this.opts.iconPanels, OPTIONS);\n    let keepFirst = false;\n    if (options.visible == 'first') {\n        keepFirst = true;\n        options.visible = 1;\n    }\n    options.visible = Math.min(3, Math.max(1, options.visible));\n    options.visible++;\n    //\tAdd the iconpanels\n    if (options.add) {\n        this.bind('initMenu:after', () => {\n            this.node.menu.classList.add('mm-menu--iconpanel');\n        });\n        /** The classnames that can be set to a panel */\n        const classnames = [\n            'mm-panel--iconpanel-0',\n            'mm-panel--iconpanel-1',\n            'mm-panel--iconpanel-2',\n            'mm-panel--iconpanel-3'\n        ];\n        //  Show only the main panel.\n        if (keepFirst) {\n            this.bind('initMenu:after', () => {\n                var _a;\n                (_a = DOM.children(this.node.pnls, '.mm-panel')[0]) === null || _a === void 0 ? void 0 : _a.classList.add('mm-panel--iconpanel-first');\n            });\n            //  Show parent panel(s).\n        }\n        else {\n            this.bind('openPanel:after', (panel) => {\n                //  Do nothing when opening a vertical submenu\n                if (panel.closest('.mm-listitem--vertical')) {\n                    return;\n                }\n                let panels = DOM.children(this.node.pnls, '.mm-panel');\n                //\tFilter out panels that are not opened.\n                panels = panels.filter((panel) => panel.matches('.mm-panel--parent'));\n                //\tAdd the current panel to the list.\n                panels.push(panel);\n                //\tSlice the opened panels to the max visible amount.\n                panels = panels.slice(-options.visible);\n                //\tAdd the \"iconpanel\" classnames.\n                panels.forEach((panel, p) => {\n                    panel.classList.remove('mm-panel--iconpanel-first', ...classnames);\n                    panel.classList.add(`mm-panel--iconpanel-${p}`);\n                });\n            });\n        }\n        // this.bind('initPanel:after', (panel: HTMLElement) => {\n        //     if (!panel.closest('.mm-listitem--vertical') &&\n        //         !DOM.children(panel, '.mm-panel__blocker')[0]\n        //     ) {\n        //         const blocker = DOM.create('div.mm-blocker.mm-panel__blocker') as HTMLElement;\n        //         panel.prepend(blocker);\n        //     }\n        // });\n    }\n}\n","const configs = {\n    breadcrumbs: {\n        separator: '/',\n        removeFirst: false\n    }\n};\nexport default configs;\n","/**\n * Extend shorthand options.\n *\n * @param  {object} options The options to extend.\n * @return {object}\t\t\tThe extended options.\n */\nexport function extendShorthandOptions(options) {\n    if (typeof options == 'boolean' && options) {\n        options = {};\n    }\n    if (typeof options != 'object') {\n        options = {};\n    }\n    if (typeof options.content == 'undefined') {\n        options.content = ['prev', 'title'];\n    }\n    if (!(options.content instanceof Array)) {\n        options.content = [options.content];\n    }\n    if (typeof options.use == 'undefined') {\n        options.use = true;\n    }\n    return options;\n}\n;\n","import * as DOM from '../../_modules/dom';\nexport default function (navbar) {\n    //\tAdd content\n    var breadcrumbs = DOM.create('div.mm-navbar__breadcrumbs');\n    navbar.append(breadcrumbs);\n    this.bind('initNavbar:after', (panel) => {\n        if (panel.querySelector('.mm-navbar__breadcrumbs')) {\n            return;\n        }\n        DOM.children(panel, '.mm-navbar')[0].classList.add('mm-hidden');\n        var crumbs = [], breadcrumbs = DOM.create('span.mm-navbar__breadcrumbs'), current = panel, first = true;\n        while (current) {\n            current = current.closest('.mm-panel');\n            if (!current.parentElement.matches('.mm-listitem--vertical')) {\n                let title = DOM.find(current, '.mm-navbar__title span')[0];\n                if (title) {\n                    let text = title.textContent;\n                    if (text.length) {\n                        crumbs.unshift(first\n                            ? `<span>${text}</span>`\n                            : `<a \n                                    href=\"#${current.id}\" \n                                    title=\"${this.i18n(this.conf.screenReader.openSubmenu)}\"\n                                    >${text}</a>`);\n                    }\n                }\n                first = false;\n            }\n            current = DOM.find(this.node.pnls, `#${current.dataset.mmParent}`)[0];\n        }\n        if (this.conf.navbars.breadcrumbs.removeFirst) {\n            crumbs.shift();\n        }\n        breadcrumbs.innerHTML = crumbs.join('<span class=\"mm-separator\">' +\n            this.conf.navbars.breadcrumbs.separator +\n            '</span>');\n        DOM.children(panel, '.mm-navbar')[0].append(breadcrumbs);\n    });\n    //\tUpdate for to opened panel\n    this.bind('openPanel:before', (panel) => {\n        var crumbs = panel.querySelector('.mm-navbar__breadcrumbs');\n        breadcrumbs.innerHTML = crumbs ? crumbs.innerHTML : '';\n    });\n}\n","import * as DOM from '../../_modules/dom';\nexport default function (navbar) {\n    /** The close button. */\n    const close = DOM.create('a.mm-btn.mm-btn--close.mm-navbar__btn');\n    close.setAttribute('aria-label', this.i18n(this.conf.offCanvas.screenReader.closeMenu));\n    //\tAdd the button to the navbar.\n    navbar.append(close);\n    //\tUpdate to target the page node.\n    this.bind('setPage:after', (page) => {\n        close.href = `#${page.id}`;\n    });\n}\n","import * as DOM from '../../_modules/dom';\nexport default function (navbar) {\n    /** The prev button. */\n    let prev = DOM.create('a.mm-btn.mm-hidden');\n    //\tAdd button to navbar.\n    navbar.append(prev);\n    //  Hide navbar in the panel.\n    this.bind('initNavbar:after', (panel) => {\n        DOM.children(panel, '.mm-navbar')[0].classList.add('mm-hidden');\n    });\n    // Update the button href when opening a panel.\n    this.bind('openPanel:before', (panel) => {\n        if (panel.parentElement.matches('.mm-listitem--vertical')) {\n            return;\n        }\n        prev.classList.add('mm-hidden');\n        /** Original button in the panel. */\n        const original = panel.querySelector('.mm-navbar__btn.mm-btn--prev');\n        if (original) {\n            /** Clone of the original button in the panel. */\n            const clone = original.cloneNode(true);\n            prev.after(clone);\n            prev.remove();\n            prev = clone;\n        }\n    });\n}\n","import * as DOM from '../../_modules/dom';\nimport { uniqueId } from '../../_modules/helpers';\nexport default function (navbar) {\n    /** Empty wrapper for the searchfield. */\n    let wrapper = DOM.create('div.mm-navbar__searchfield');\n    wrapper.id = uniqueId();\n    //\tAdd button to navbar.\n    navbar.append(wrapper);\n    this.opts.searchfield = this.opts.searchfield || {};\n    this.opts.searchfield.add = true;\n    this.opts.searchfield.addTo = `#${wrapper.id}`;\n}\n","import * as DOM from '../../_modules/dom';\nexport default function (navbar) {\n    /** The title node in the navbar. */\n    let title = DOM.create('a.mm-navbar__title');\n    //\tAdd title to the navbar.\n    navbar.append(title);\n    //\tUpdate the title to the opened panel.\n    this.bind('openPanel:before', (panel) => {\n        //\tDo nothing in a vertically expanding panel.\n        if (panel.parentElement.matches('.mm-listitem--vertical')) {\n            return;\n        }\n        /** Original title in the panel. */\n        const original = panel.querySelector('.mm-navbar__title');\n        if (original) {\n            /** Clone of the original title in the panel. */\n            const clone = original.cloneNode(true);\n            title.after(clone);\n            title.remove();\n            title = clone;\n        }\n    });\n}\n","import * as DOM from '../../_modules/dom';\nexport default function (navbar) {\n    navbar.classList.add('mm-navbar--tabs');\n    navbar.closest('.mm-navbars').classList.add('mm-navbars--has-tabs');\n    DOM.children(navbar, 'a').forEach(anchor => {\n        anchor.classList.add('mm-navbar__tab');\n    });\n    /**\n     * Mark a tab as selected.\n     * @param {HTMLElement} panel Opened panel.\n     */\n    function selectTab(panel) {\n        /** The tab that links to the opened panel. */\n        const anchor = DOM.children(navbar, `.mm-navbar__tab[href=\"#${panel.id}\"]`)[0];\n        if (anchor) {\n            anchor.classList.add('mm-navbar__tab--selected');\n            // @ts-ignore\n            anchor.ariaExpanded = 'true';\n        }\n        else {\n            /** The parent listitem. */\n            const parent = DOM.find(this.node.pnls, `#${panel.dataset.mmParent}`)[0];\n            if (parent) {\n                selectTab.call(this, parent.closest('.mm-panel'));\n            }\n        }\n    }\n    this.bind('openPanel:before', (panel) => {\n        //  Remove selected class.\n        DOM.children(navbar, 'a').forEach(anchor => {\n            anchor.classList.remove('mm-navbar__tab--selected');\n            // @ts-ignore\n            anchor.ariaExpanded = 'false';\n        });\n        selectTab.call(this, panel);\n    });\n    this.bind('initPanels:after', () => {\n        //\tAdd animation class to panel.\n        navbar.addEventListener('click', event => {\n            var _a, _b, _c;\n            /** The href for the clicked tab. */\n            const href = (_b = (_a = event.target) === null || _a === void 0 ? void 0 : _a.closest('.mm-navbar__tab')) === null || _b === void 0 ? void 0 : _b.getAttribute('href');\n            try {\n                (_c = DOM.find(this.node.pnls, `${href}.mm-panel`)[0]) === null || _c === void 0 ? void 0 : _c.classList.add('mm-panel--noanimation');\n            }\n            catch (err) { }\n        }, {\n            // useCapture to ensure the logical order.\n            capture: true\n        });\n    });\n}\n","import CONFIGS from './configs';\nimport { extendShorthandOptions } from './options';\nimport { extend } from '../../_modules/helpers';\nimport * as DOM from '../../_modules/dom';\nimport * as media from '../../_modules/matchmedia';\nimport breadcrumbs from './navbar.breadcrumbs';\nimport close from './navbar.close';\nimport prev from './navbar.prev';\nimport searchfield from './navbar.searchfield';\nimport title from './navbar.title';\nimport tabs from './navbar.tabs';\nNavbars.navbarContents = {\n    breadcrumbs,\n    close,\n    prev,\n    searchfield,\n    title,\n};\nNavbars.navbarTypes = {\n    tabs,\n};\nexport default function Navbars() {\n    this.opts.navbars = this.opts.navbars || [];\n    this.conf.navbars = this.conf.navbars || {};\n    //\tExtend options.\n    extend(this.conf.navbars, CONFIGS);\n    let navs = this.opts.navbars;\n    if (typeof navs == 'undefined') {\n        return;\n    }\n    if (!(navs instanceof Array)) {\n        navs = [navs];\n    }\n    if (!navs.length) {\n        return;\n    }\n    var navbars = {};\n    navs.forEach((options) => {\n        options = extendShorthandOptions(options);\n        if (!options.use) {\n            return;\n        }\n        //\tCreate the navbar element.\n        const navbar = DOM.create('div.mm-navbar');\n        //\tGet the position for the navbar.\n        let { position } = options;\n        //\tRestrict the position to either \"bottom\" or \"top\" (default).\n        if (position !== 'bottom') {\n            position = 'top';\n        }\n        //\tCreate the wrapper for the navbar position.\n        if (!navbars[position]) {\n            navbars[position] = DOM.create('div.mm-navbars.mm-navbars--' + position);\n        }\n        navbars[position].append(navbar);\n        //\tAdd content to the navbar.\n        for (let c = 0, l = options.content.length; c < l; c++) {\n            const ctnt = options.content[c];\n            //\tThe content is a string.\n            if (typeof ctnt == 'string') {\n                const func = Navbars.navbarContents[ctnt];\n                //\tThe content refers to one of the navbar-presets (\"prev\", \"title\", etc).\n                if (typeof func == 'function') {\n                    //\tCall the preset function.\n                    func.call(this, navbar);\n                    //\tThe content is just HTML.\n                }\n                else {\n                    //\tAdd the HTML.\n                    //  Wrap the HTML in a single node\n                    let node = DOM.create('span');\n                    node.innerHTML = ctnt;\n                    //  If there was only a single node, use that.\n                    const children = DOM.children(node);\n                    if (children.length == 1) {\n                        node = children[0];\n                    }\n                    navbar.append(node);\n                }\n                //\tThe content is not a string, it must be an element.\n            }\n            else {\n                navbar.append(ctnt);\n            }\n        }\n        //\tThe type option is set.\n        if (typeof options.type == 'string') {\n            //\tThe function refers to one of the navbar-presets (\"tabs\").\n            const func = Navbars.navbarTypes[options.type];\n            if (typeof func == 'function') {\n                //\tCall the preset function.\n                func.call(this, navbar);\n            }\n        }\n        //\tEn-/disable the navbar.\n        let enable = () => {\n            navbar.classList.remove('mm-hidden');\n        };\n        let disable = () => {\n            navbar.classList.add('mm-hidden');\n        };\n        if (typeof options.use == 'boolean') {\n            this.bind('initMenu:after', enable);\n        }\n        else {\n            media.add(options.use, enable, disable);\n        }\n    });\n    //\tAdd to menu.\n    this.bind('initMenu:after', () => {\n        for (let position in navbars) {\n            this.node.pnls[position == 'bottom' ? 'after' : 'before'](navbars[position]);\n        }\n    });\n}\n","const options = {\n    scroll: false,\n    update: false\n};\nexport default options;\n","const configs = {\n    scrollOffset: 0,\n    updateOffset: 50\n};\nexport default configs;\n","import Mmenu from '../../core/oncanvas/mmenu.oncanvas';\nimport OPTIONS from './options';\nimport CONFIGS from './configs';\nimport * as DOM from '../../_modules/dom';\nimport { extend } from '../../_modules/helpers';\nexport default function () {\n    this.opts.pageScroll = this.opts.pageScroll || {};\n    this.conf.pageScroll = this.conf.pageScroll || {};\n    //\tExtend options.\n    const options = extend(this.opts.pageScroll, OPTIONS);\n    const configs = extend(this.conf.pageScroll, CONFIGS);\n    /** The currently \"active\" section */\n    var section;\n    function scrollTo() {\n        if (section) {\n            // section.scrollIntoView({ behavior: 'smooth' });\n            window.scrollTo({\n                top: section.getBoundingClientRect().top +\n                    document.scrollingElement.scrollTop -\n                    configs.scrollOffset,\n                behavior: 'smooth'\n            });\n        }\n        section = null;\n    }\n    function anchorInPage(href) {\n        try {\n            if (href.slice(0, 1) == '#') {\n                return DOM.find(Mmenu.node.page, href)[0];\n            }\n        }\n        catch (err) { }\n        return null;\n    }\n    if (this.opts.offCanvas.use && options.scroll) {\n        //\tScroll to section after clicking menu item.\n        this.bind('close:after', () => {\n            scrollTo();\n        });\n        this.node.menu.addEventListener('click', event => {\n            var _a, _b;\n            const href = ((_b = (_a = event.target) === null || _a === void 0 ? void 0 : _a.closest('a[href]')) === null || _b === void 0 ? void 0 : _b.getAttribute('href')) || '';\n            section = anchorInPage(href);\n            if (section) {\n                event.preventDefault();\n                //\tIf the sidebar add-on is \"expanded\"...\n                if (this.node.menu.matches('.mm-menu--sidebar-expanded') &&\n                    this.node.wrpr.matches('.mm-wrapper--sidebar-expanded')) {\n                    //\t... scroll the page to the section.\n                    scrollTo();\n                    //\t... otherwise...\n                }\n                else {\n                    //\t... close the menu.\n                    this.close();\n                }\n            }\n        });\n    }\n    //\tUpdate selected menu item after scrolling.\n    if (options.update) {\n        let scts = [];\n        this.bind('initListview:after', (listview) => {\n            const listitems = DOM.children(listview, '.mm-listitem');\n            DOM.filterLIA(listitems).forEach(anchor => {\n                const section = anchorInPage(anchor.getAttribute('href'));\n                if (section) {\n                    scts.unshift(section);\n                }\n            });\n        });\n        let _selected = -1;\n        window.addEventListener('scroll', evnt => {\n            const scrollTop = window.scrollY;\n            for (var s = 0; s < scts.length; s++) {\n                if (scts[s].offsetTop < scrollTop + configs.updateOffset) {\n                    if (_selected !== s) {\n                        _selected = s;\n                        let panel = DOM.children(this.node.pnls, '.mm-panel--opened')[0];\n                        let listitems = DOM.find(panel, '.mm-listitem');\n                        let anchors = DOM.filterLIA(listitems);\n                        anchors = anchors.filter(anchor => anchor.matches('[href=\"#' + scts[s].id + '\"]'));\n                        if (anchors.length) {\n                            this.setSelected(anchors[0].parentElement);\n                        }\n                    }\n                    break;\n                }\n            }\n        }, {\n            passive: true\n        });\n    }\n}\n","const options = {\n    add: false,\n    addTo: 'panels',\n    noResults: 'No results found.',\n    placeholder: 'Search',\n    search: true,\n    searchIn: 'panels',\n    splash: '',\n    title: 'Search',\n};\nexport default options;\n","const configs = {\n    cancel: true,\n    clear: true,\n    form: {},\n    input: {},\n    panel: {},\n    submit: false\n};\nexport default configs;\n","export default {\n    'cancel': 'abbrechen',\n    'Cancel searching': 'Suche abbrechen',\n    'Clear searchfield': 'Suchfeld löschen',\n    'No results found.': 'Keine Ergebnisse gefunden.',\n    'Search': 'Suche',\n};\n","export default {\n    'cancel': 'انصراف',\n    'Cancel searching': 'لغو جستجو',\n    'Clear searchfield': 'پاک کردن فیلد جستجو',\n    'No results found.': 'نتیجه‌ای یافت نشد.',\n    'Search': 'جستجو',\n};\n","export default {\n    'cancel': 'annuleren',\n    'Cancel searching': 'Zoeken annuleren',\n    'Clear searchfield': 'Zoekveld leeg maken',\n    'No results found.': 'Geen resultaten gevonden.',\n    'Search': 'Zoeken',\n};\n","export default {\n    'cancel': 'cancelar',\n    'Cancel searching': 'Cancelar pesquisa',\n    'Clear searchfield': 'Limpar campo de pesquisa',\n    'No results found.': 'Nenhum resultado encontrado.',\n    'Search': 'Buscar',\n};\n","export default {\n    'cancel': 'отменить',\n    'Cancel searching': 'Отменить поиск',\n    'Clear searchfield': 'Очистить поле поиска',\n    'No results found.': 'Ничего не найдено.',\n    'Search': 'Найти',\n};\n","export default {\n    'cancel': 'zrušiť',\n    'Cancel searching': 'Zrušiť vyhľadávanie',\n    'Clear searchfield': 'Vymazať pole vyhľadávania',\n    'No results found.': 'Neboli nájdené žiadne výsledky.',\n    'Search': 'Vyhľadávanie',\n};\n","export default {\n    'cancel': 'скасувати',\n    'Cancel searching': 'Скасувати пошук',\n    'Clear searchfield': 'Очистити поле пошуку',\n    'No results found.': 'Нічого не знайдено.',\n    'Search': 'Пошук',\n};\n","import { add } from '../../../_modules/i18n';\nimport de from './de';\nimport fa from './fa';\nimport nl from './nl';\nimport pt_br from './pt_br';\nimport ru from './ru';\nimport sk from './sk';\nimport uk from './uk';\nexport default function () {\n    add(de, 'de');\n    add(fa, 'fa');\n    add(nl, 'nl');\n    add(pt_br, 'pt_br');\n    add(ru, 'ru');\n    add(sk, 'sk');\n    add(uk, 'uk');\n}\n","import OPTIONS from './options';\nimport CONFIGS from './configs';\nimport translate from './translations';\nimport * as DOM from '../../_modules/dom';\nimport { extend } from '../../_modules/helpers';\n//  Add the translations.\ntranslate();\nexport default function () {\n    this.opts.searchfield = this.opts.searchfield || {};\n    this.conf.searchfield = this.conf.searchfield || {};\n    //\tExtend options.\n    const options = extend(this.opts.searchfield, OPTIONS);\n    const configs = extend(this.conf.searchfield, CONFIGS);\n    if (!options.add) {\n        return;\n    }\n    switch (options.addTo) {\n        case 'panels':\n            options.addTo = '.mm-panel';\n            break;\n        case 'searchpanel':\n            options.addTo = '.mm-panel--search';\n            break;\n    }\n    switch (options.searchIn) {\n        case 'panels':\n            options.searchIn = '.mm-panel';\n            break;\n    }\n    //  Add a searchfield to panels matching the \"addTo\" querySelector.\n    this.bind('initPanel:after', (panel) => {\n        if (panel.matches(options.addTo) &&\n            !panel.closest('.mm-listitem--vertical')) {\n            initPanel.call(this, panel);\n        }\n    });\n    this.bind('initMenu:after', () => {\n        //  Create the resultspanel.\n        const resultspanel = createResultsPanel.call(this);\n        initPanel.call(this, resultspanel);\n        //  Add a searchfield to anything other than a panel (most likely a navbar).\n        DOM.find(this.node.menu, options.addTo).forEach(wrapper => {\n            if (!wrapper.matches('.mm-panel')) {\n                /** The searchform. */\n                const form = createSearchfield.call(this, true);\n                //  Add the form to the panel.\n                wrapper.append(form);\n                /** The input node. */\n                const input = DOM.find(form, 'input')[0];\n                //  Bind events for opening and closing the resultspanel.\n                // With a splash...\n                if (options.splash.length) {\n                    //  Open on focus.\n                    input.addEventListener('focusin', () => {\n                        this.openPanel(resultspanel, false, false);\n                    });\n                    //  Show cancel button if searchpanel is opened.\n                    this.bind('openPanel:after', (panel) => {\n                        if (panel.matches('.mm-panel--search')) {\n                            form.classList.add('mm-searchfield--cancelable');\n                        }\n                        else {\n                            form.classList.remove('mm-searchfield--cancelable');\n                        }\n                    });\n                    // ...without splash.\n                }\n                else {\n                    //  Open resultspanel when searching.\n                    this.bind('search:after', () => {\n                        this.openPanel(resultspanel, false, false);\n                    });\n                    //  Close resultspanel when resetting.\n                    input.addEventListener('focusout', () => {\n                        if (!input.value.length) {\n                            this.closePanel(resultspanel, false);\n                        }\n                    });\n                }\n                //  Initialize searching.\n                initSearch.call(this, form);\n            }\n        });\n    });\n    //\tBlur searchfield\n    this.bind('close:before', () => {\n        DOM.find(this.node.menu, '.mm-searchfield input').forEach((input) => {\n            input.blur();\n        });\n    });\n}\n/**\n * Create the searchpanel.\n * @param {Mmenu} this\n */\nconst createResultsPanel = function () {\n    /** Options for the searchfield. */\n    const options = this.opts.searchfield;\n    /** Configs for the searchfield. */\n    const configs = this.conf.searchfield;\n    /** The panel. */\n    let panel = DOM.children(this.node.pnls, '.mm-panel--search')[0];\n    //\tOnly once\n    if (panel) {\n        return panel;\n    }\n    panel = DOM.create('div.mm-panel--search');\n    //\tAdd attributes to the panel.    \n    _addAttributes(panel, configs.panel);\n    //  Add a title to the panel.\n    if (options.title.length) {\n        panel.dataset.mmTitle = this.i18n(options.title);\n    }\n    //  Add a listview to the panel.\n    panel.append(DOM.create('ul'));\n    this._initPanel(panel);\n    return panel;\n};\n/**\n * Add a searchfield, splash message and no-results message to a panel.\n * @param {Mmenu}       this\n * @param {HTMLElement} panel The panel to initialise.\n */\nconst initPanel = function (panel) {\n    /** Options for the searchfield. */\n    const options = this.opts.searchfield;\n    //\tCreate the searchfield.\n    if (panel.matches(options.addTo)) {\n        /** Whether or not the panel is the resultspanel */\n        const isResultspanel = panel.matches('.mm-panel--search');\n        //  Only one per panel.\n        if (!DOM.find(panel, '.mm-searchfield').length) {\n            /** The searchform. */\n            const form = createSearchfield.call(this, isResultspanel);\n            if (isResultspanel) {\n                form.classList.add('mm-searchfield--cancelable');\n            }\n            //  Add the form to the panel.\n            panel.prepend(form);\n            //  Initialize searching.\n            initSearch.call(this, form);\n        }\n    }\n    //\tCreate the splash content.\n    if (options.splash.length &&\n        panel.matches('.mm-panel--search')) {\n        //  Only one per panel.\n        if (!DOM.find(panel, '.mm-panel__splash').length) {\n            /** The splash content node. */\n            const splash = DOM.create('div.mm-panel__splash');\n            splash.innerHTML = options.splash;\n            panel.append(splash);\n        }\n    }\n    //  Add no results message.\n    if (options.noResults.length) {\n        //\tOnly once per panel.\n        if (!DOM.find(panel, '.mm-panel__noresults').length) {\n            /** The no results message node. */\n            const message = DOM.create('div.mm-panel__noresults');\n            message.innerHTML = this.i18n(options.noResults);\n            panel.append(message);\n        }\n    }\n};\n/**\n * Create the searchfield.\n * @param {Mmenu}   this\n * @param {boolean} [addCancel=false] Whether or not to add the cancel button\n */\nconst createSearchfield = function (addCancel = false) {\n    /** Options for the searchfield. */\n    const options = this.opts.searchfield;\n    /** Configs for the searchfield. */\n    const configs = this.conf.searchfield;\n    /** The form node. */\n    const form = DOM.create('form.mm-searchfield');\n    //\tAdd attributes to the form\n    _addAttributes(form, configs.form);\n    /** The fieldset node. */\n    const field = DOM.create('div.mm-searchfield__input');\n    form.append(field);\n    /** The input node. */\n    const input = DOM.create('input');\n    field.append(input);\n    //\tAdd attributes to the input\n    input.type = 'text';\n    input.autocomplete = 'off';\n    input.placeholder = this.i18n(options.placeholder);\n    input.setAttribute('aria-label', this.i18n(options.placeholder));\n    _addAttributes(input, configs.input);\n    //\tAdd a button to submit to the form.\n    if (configs.submit) {\n        /** The submit button. */\n        const submit = DOM.create('button.mm-btnreset.mm-btn.mm-btn--next.mm-searchfield__btn');\n        submit.type = 'submit';\n        field.append(submit);\n    }\n    //\tAdd a button to clear the searchfield.\n    else if (configs.clear) {\n        /** The reset button. */\n        const reset = DOM.create('button.mm-btnreset.mm-btn.mm-btn--close.mm-searchfield__btn');\n        reset.type = 'reset';\n        reset.setAttribute('aria-label', this.i18n('Clear searchfield'));\n        field.append(reset);\n        //  Apparently, resetting a form doesn't trigger any event on the input,\n        //  so we manually dispatch the event, one frame later :/\n        form.addEventListener('reset', () => {\n            window.requestAnimationFrame(() => {\n                input.dispatchEvent(new Event('input'));\n            });\n        });\n    }\n    // Add a button to close the searchpanel.\n    if (configs.cancel && addCancel) {\n        /** The cancel button. */\n        const cancel = DOM.create('a.mm-searchfield__cancel');\n        cancel.href = '#';\n        cancel.setAttribute('aria-label', this.i18n('Cancel searching'));\n        cancel.textContent = this.i18n('cancel');\n        form.append(cancel);\n        // Close the search panel.\n        cancel.addEventListener('click', event => {\n            event.preventDefault();\n            this.closePanel(DOM.children(this.node.pnls, '.mm-panel--search')[0], false);\n        });\n    }\n    return form;\n};\n/**\n * Initialize the searching.\n * @param {Mmenu}       this\n * @param {HTMLElement} form The searchform.\n */\nconst initSearch = function (form) {\n    /** Options for the searchfield. */\n    const options = this.opts.searchfield;\n    /** The panel the results will be in. */\n    const resultspanel = form.closest('.mm-panel') || DOM.find(this.node.pnls, '.mm-panel--search')[0];\n    /** The input node. */\n    const input = DOM.find(form, 'input')[0];\n    /** Where to search. */\n    let searchIn = resultspanel.matches('.mm-panel--search')\n        ? DOM.children(this.node.pnls, options.searchIn)\n        : [resultspanel];\n    //  Filter out the resultspanel\n    searchIn = searchIn.filter(panel => !panel.matches('.mm-panel--search'));\n    /** Search */\n    const search = () => {\n        /** The searchquery */\n        const query = input.value.toLowerCase().trim();\n        if (query.length) {\n            form.classList.add('mm-searchfield--searching');\n        }\n        else {\n            form.classList.remove('mm-searchfield--searching');\n        }\n        if (!options.search) {\n            return;\n        }\n        /** All listitems */\n        const listitems = [];\n        searchIn.forEach(panel => {\n            //  Scroll all panels to top.\n            panel.scrollTop = 0;\n            //  Find listitems.\n            listitems.push(...DOM.find(panel, '.mm-listitem'));\n        });\n        //\tSearch\n        if (query.length) {\n            // Trigger event.\n            this.trigger('search:before');\n            resultspanel.classList.add('mm-panel--searching');\n            //\tAdd data attribute to the matching listitems.\n            listitems.forEach((listitem) => {\n                const text = DOM.children(listitem, '.mm-listitem__text')[0];\n                if (!text || DOM.text(text).toLowerCase().indexOf(query) > -1) {\n                    listitem.dataset.mmSearchresult = query;\n                }\n            });\n            /** The number of matching results. */\n            let count = 0;\n            //  Resultspanel: Copy results to resultspanel.\n            if (resultspanel.matches('.mm-panel--search')) {\n                count = _searchResultsPanel(resultspanel, query, searchIn);\n                //  Search per panel: Hide the non-matching listitems.\n            }\n            else {\n                count = _searchPerPanel(query, searchIn);\n            }\n            resultspanel.classList[count == 0 ? 'add' : 'remove']('mm-panel--noresults');\n            // Trigger event.\n            this.trigger('search:after');\n            //  Don't search, reset all.\n        }\n        else {\n            // Trigger event.\n            this.trigger('clear:before');\n            resultspanel.classList.remove('mm-panel--searching', 'mm-panel--noresults');\n            //  Resultspanel.\n            if (resultspanel.matches('.mm-panel--search')) {\n                _resetResultsPanel(resultspanel);\n                if (!options.splash) {\n                    this.closePanel(resultspanel, false, false);\n                }\n                //  Search per panel: Show all listitems and dividers.\n            }\n            else {\n                _resetPerPanel(searchIn);\n            }\n            // Trigger event.\n            this.trigger('clear:after');\n        }\n    };\n    input.addEventListener('input', search);\n    search();\n};\nconst _searchResultsPanel = (resultspanel, query, searchIn) => {\n    /** The listview for the results/ */\n    const listview = DOM.find(resultspanel, '.mm-listview')[0];\n    //  Clear listview.\n    listview.innerHTML = '';\n    /** Amount of resutls found. */\n    let count = 0;\n    searchIn.forEach(panel => {\n        /** The results in this panel. */\n        const results = DOM.find(panel, `[data-mm-searchresult=\"${query}\"]`);\n        count += results.length;\n        if (results.length) {\n            /** Title for the panel. */\n            const title = DOM.find(panel, '.mm-navbar__title')[0];\n            //  Add a divider to indicate in what panel the results are.\n            if (title) {\n                const divider = DOM.create('li.mm-divider');\n                divider.innerHTML = title.innerHTML;\n                listview.append(divider);\n            }\n            //  Add the results\n            results.forEach((result) => {\n                const clone = result.cloneNode(true);\n                listview.append(clone);\n            });\n        }\n    });\n    //  Remove inline subpanels.\n    DOM.find(listview, '.mm-panel').forEach(panel => {\n        panel.remove();\n    });\n    //  Remove ID's and data-attributes\n    ['id', 'data-mm-parent', 'data-mm-child'].forEach(attr => {\n        DOM.find(listview, `[${attr}]`).forEach(elem => {\n            elem.removeAttribute(attr);\n        });\n    });\n    //  Remove \"opened\" class\n    DOM.find(listview, '.mm-listitem--opened').forEach(listitem => {\n        listitem.classList.remove('mm-listitem--opened');\n    });\n    return count;\n};\nconst _resetResultsPanel = (resultspanel) => {\n    /** The listview for the results. */\n    const listview = DOM.find(resultspanel, '.mm-listview')[0];\n    //  Clear listview.\n    listview.innerHTML = '';\n};\nconst _searchPerPanel = (query, searchIn) => {\n    /** Amount of resutls found. */\n    let count = 0;\n    searchIn.forEach(panel => {\n        /** The results in this panel. */\n        const results = DOM.find(panel, `[data-mm-searchresult=\"${query}\"]`);\n        count += results.length;\n        if (results.length) {\n            //  Add first preceeding divider to the results.\n            results.forEach(result => {\n                const divider = DOM.prevAll(result, '.mm-divider')[0];\n                if (divider) {\n                    divider.dataset.mmSearchresult = query;\n                }\n            });\n        }\n        DOM.find(panel, '.mm-listitem, .mm-divider').forEach(item => {\n            //  Hide all\n            item.classList.add('mm-hidden');\n            //  Show matching + its parents.\n            if (item.dataset.mmSearchresult === query) {\n                [item, ...DOM.parents(item, '.mm-listitem')].forEach(item2 => {\n                    item2.classList.remove('mm-hidden');\n                });\n            }\n        });\n    });\n    return count;\n};\nconst _resetPerPanel = (searchIn) => {\n    searchIn.forEach((panel) => {\n        DOM.find(panel, '.mm-listitem, .mm-divider').forEach(item => {\n            item.classList.remove('mm-hidden');\n        });\n    });\n};\n/**\n * Add array of attributes to an element.\n * @param {HTMLEement}  element     The element to add the attributes to.\n * @param {Object}      attributes  The attributes to add.\n */\nconst _addAttributes = (element, attributes) => {\n    if (attributes) {\n        Object.keys(attributes).forEach(a => {\n            element[a] = attributes[a];\n        });\n    }\n};\n","const options = {\n    add: false,\n    addTo: 'panels'\n};\nexport default options;\n","import OPTIONS from './options';\nimport * as DOM from '../../_modules/dom';\nimport * as support from '../../_modules/support';\nimport { extend } from '../../_modules/helpers';\nexport default function () {\n    this.opts.sectionIndexer = this.opts.sectionIndexer || {};\n    //\tExtend options.\n    const options = extend(this.opts.sectionIndexer, OPTIONS);\n    if (!options.add) {\n        return;\n    }\n    this.bind('initPanels:after', () => {\n        //\tAdd the indexer, only if it does not allready excists\n        if (!this.node.indx) {\n            let buttons = '';\n            'abcdefghijklmnopqrstuvwxyz'.split('').forEach(letter => {\n                buttons += '<a href=\"#\">' + letter + '</a>';\n            });\n            let indexer = DOM.create('div.mm-sectionindexer');\n            indexer.innerHTML = buttons;\n            this.node.pnls.prepend(indexer);\n            this.node.indx = indexer;\n            //\tPrevent default behavior when clicking an anchor\n            this.node.indx.addEventListener('click', evnt => {\n                const anchor = evnt.target;\n                if (anchor.matches('a')) {\n                    evnt.preventDefault();\n                }\n            });\n            //\tScroll onMouseOver / onTouchStart\n            let mouseOverEvent = evnt => {\n                if (!evnt.target.matches('a')) {\n                    return;\n                }\n                const letter = evnt.target.textContent;\n                const panel = DOM.children(this.node.pnls, '.mm-panel--opened')[0];\n                let newTop = -1, oldTop = panel.scrollTop;\n                panel.scrollTop = 0;\n                DOM.find(panel, '.mm-divider')\n                    .filter(divider => !divider.matches('.mm-hidden'))\n                    .forEach(divider => {\n                    if (newTop < 0 &&\n                        letter ==\n                            divider.textContent\n                                .trim()\n                                .slice(0, 1)\n                                .toLowerCase()) {\n                        newTop = divider.offsetTop;\n                    }\n                });\n                panel.scrollTop = newTop > -1 ? newTop : oldTop;\n            };\n            if (support.touch) {\n                this.node.indx.addEventListener('touchstart', mouseOverEvent);\n                this.node.indx.addEventListener('touchmove', mouseOverEvent);\n            }\n            else {\n                this.node.indx.addEventListener('mouseover', mouseOverEvent);\n            }\n        }\n        //\tShow or hide the indexer\n        this.bind('openPanel:before', (panel) => {\n            const active = DOM.find(panel, '.mm-divider').filter(divider => !divider.matches('.mm-hidden')).length;\n            this.node.indx.classList[active ? 'add' : 'remove']('mm-sectionindexer--active');\n        });\n    });\n}\n","const options = {\n    current: true,\n    hover: false,\n    parent: false\n};\nexport default options;\n","import OPTIONS from './options';\nimport * as DOM from '../../_modules/dom';\nimport { extend } from '../../_modules/helpers';\nexport default function () {\n    this.opts.setSelected = this.opts.setSelected || {};\n    //\tExtend options.\n    const options = extend(this.opts.setSelected, OPTIONS);\n    //\tFind current by URL\n    if (options.current == 'detect') {\n        const findCurrent = (url) => {\n            url = url.split('?')[0].split('#')[0];\n            const anchor = this.node.menu.querySelector('a[href=\"' + url + '\"], a[href=\"' + url + '/\"]');\n            if (anchor) {\n                this.setSelected(anchor.parentElement);\n            }\n            else {\n                const arr = url.split('/').slice(0, -1);\n                if (arr.length) {\n                    findCurrent(arr.join('/'));\n                }\n            }\n        };\n        this.bind('initMenu:after', () => {\n            findCurrent.call(this, window.location.href);\n        });\n        //\tRemove current selected item\n    }\n    else if (!options.current) {\n        this.bind('initListview:after', (listview) => {\n            DOM.children(listview, '.mm-listitem--selected').forEach((listitem) => {\n                listitem.classList.remove('mm-listitem--selected');\n            });\n        });\n    }\n    //\tAdd :hover effect on items\n    if (options.hover) {\n        this.bind('initMenu:after', () => {\n            this.node.menu.classList.add('mm-menu--selected-hover');\n        });\n    }\n    //\tSet parent item selected for submenus\n    if (options.parent) {\n        this.bind('openPanel:after', (panel) => {\n            //\tRemove all\n            DOM.find(this.node.pnls, '.mm-listitem--selected-parent').forEach((listitem) => {\n                listitem.classList.remove('mm-listitem--selected-parent');\n            });\n            //\tMove up the DOM tree\n            let current = panel;\n            while (current) {\n                let li = DOM.find(this.node.pnls, `#${current.dataset.mmParent}`)[0];\n                current = li === null || li === void 0 ? void 0 : li.closest('.mm-panel');\n                if (li && !li.matches('.mm-listitem--vertical')) {\n                    li.classList.add('mm-listitem--selected-parent');\n                }\n            }\n        });\n        this.bind('initMenu:after', () => {\n            this.node.menu.classList.add('mm-menu--selected-parent');\n        });\n    }\n}\n","const options = {\n    collapsed: {\n        use: false,\n    },\n    expanded: {\n        use: false,\n        initial: 'open'\n    }\n};\nexport default options;\n","import Mmenu from '../../core/oncanvas/mmenu.oncanvas';\nimport OPTIONS from './options';\nimport * as media from '../../_modules/matchmedia';\nimport { extend } from '../../_modules/helpers';\nexport default function () {\n    // Only for off-canvas menus.\n    if (!this.opts.offCanvas.use) {\n        return;\n    }\n    this.opts.sidebar = this.opts.sidebar || {};\n    //\tExtend options.\n    const options = extend(this.opts.sidebar, OPTIONS);\n    //\tCollapsed\n    if (options.collapsed.use) {\n        //\tMake the menu collapsable.\n        this.bind('initMenu:after', () => {\n            this.node.menu.classList.add('mm-menu--sidebar-collapsed');\n        });\n        /** Enable the collapsed sidebar */\n        let enable = () => {\n            this.node.wrpr.classList.add('mm-wrapper--sidebar-collapsed');\n        };\n        /** Disable the collapsed sidebar */\n        let disable = () => {\n            this.node.wrpr.classList.remove('mm-wrapper--sidebar-collapsed');\n        };\n        if (typeof options.collapsed.use === 'boolean') {\n            this.bind('initMenu:after', enable);\n        }\n        else {\n            media.add(options.collapsed.use, enable, disable);\n        }\n    }\n    //\tExpanded\n    if (options.expanded.use) {\n        //\tMake the menu expandable\n        this.bind('initMenu:after', () => {\n            this.node.menu.classList.add('mm-menu--sidebar-expanded');\n        });\n        let expandedEnabled = false;\n        /** Enable the expanded sidebar */\n        let enable = () => {\n            expandedEnabled = true;\n            this.node.wrpr.classList.add('mm-wrapper--sidebar-expanded');\n            this.node.menu.removeAttribute('aria-modal');\n            this.open();\n            Mmenu.node.page.removeAttribute('inert');\n        };\n        /** Disable the expanded sidebar */\n        let disable = () => {\n            expandedEnabled = false;\n            this.node.wrpr.classList.remove('mm-wrapper--sidebar-expanded');\n            this.node.menu.setAttribute('aria-modal', 'true');\n            this.close();\n        };\n        if (typeof options.expanded.use == 'boolean') {\n            this.bind('initMenu:after', enable);\n        }\n        else {\n            media.add(options.expanded.use, enable, disable);\n        }\n        //  Store exanded state when opening and closing the menu.\n        this.bind('close:after', () => {\n            if (expandedEnabled) {\n                window.sessionStorage.setItem('mmenuExpandedState', 'closed');\n            }\n        });\n        this.bind('open:after', () => {\n            if (expandedEnabled) {\n                window.sessionStorage.setItem('mmenuExpandedState', 'open');\n                Mmenu.node.page.removeAttribute('inert');\n            }\n        });\n        //  Set the initial state\n        let initialState = options.expanded.initial;\n        const state = window.sessionStorage.getItem('mmenuExpandedState');\n        switch (state) {\n            case 'open':\n            case 'closed':\n                initialState = state;\n                break;\n        }\n        if (initialState === 'closed') {\n            this.bind('init:after', () => {\n                this.close();\n            });\n        }\n    }\n}\n","/*!\n * mmenu.js\n * mmenujs.com\n *\n * Copyright (c) Fred Heusschen\n * frebsite.nl\n */\n\n//\tCore\nimport Mmenu from '../dist/core/oncanvas/mmenu.oncanvas';\n\n//\tCore add-ons\nimport offcanvas from '../dist/core/offcanvas/mmenu.offcanvas';\nimport scrollBugFix from '../dist/core/scrollbugfix/mmenu.scrollbugfix';\nimport theme from '../dist/core/theme/mmenu.theme';\n\n//\tAdd-ons\nimport backButton from '../dist/addons/backbutton/mmenu.backbutton';\nimport counters from '../dist/addons/counters/mmenu.counters';\nimport iconbar from '../dist/addons/iconbar/mmenu.iconbar';\nimport iconPanels from '../dist/addons/iconpanels/mmenu.iconpanels';\nimport navbars from '../dist/addons/navbars/mmenu.navbars';\nimport pageScroll from '../dist/addons/pagescroll/mmenu.pagescroll';\nimport searchfield from '../dist/addons/searchfield/mmenu.searchfield';\nimport sectionIndexer from '../dist/addons/sectionindexer/mmenu.sectionindexer';\nimport setSelected from '../dist/addons/setselected/mmenu.setselected';\nimport sidebar from '../dist/addons/sidebar/mmenu.sidebar';\n\n\nMmenu.addons = {\n    //\tCore add-ons\n    offcanvas,\n    scrollBugFix,\n    theme,\n\n    //\tAdd-ons\n    backButton,\n    counters,\n    iconbar,\n    iconPanels,\n    navbars,\n    pageScroll,\n    searchfield,\n    sectionIndexer,\n    setSelected,\n    sidebar\n};\n\n//  Export module\nexport default Mmenu;\n\n//\tGlobal namespace\nif (window) {\n    window.Mmenu = Mmenu;\n}","export async function DiagramToggle($toggle, callback) {\r\n    // this will toggle the .active class of a targeted element (and its trigger) via a separate trigger (e.g. button)\r\n    // basic usage\r\n    //  - add a class to your target element (e.g. .js-my-target)\r\n    //  - add the .js-toggle class to your trigger element\r\n    //  - add the data-toggle-target=\".js-my-target\" attribute to trigger element and set the value to match the class on your target element\r\n    \r\n    callback = callback || null;\r\n    var targetVal = $toggle.data('toggle-target');\r\n    var $targetElement = $(targetVal);\r\n    // find all triggers with a related target (data-target attribute)\r\n    var $triggerElements = $('[data-toggle-target=\"' + targetVal + '\"]');\r\n    var isActive = $targetElement.hasClass('active') ? true : false;\r\n\r\n    if (isActive) {\r\n        $triggerElements.removeClass('active');\r\n        $targetElement.removeClass('active');\r\n        isActive = false;\r\n    } else {\r\n        $triggerElements.addClass('active');\r\n        $targetElement.addClass('active');\r\n        isActive = true;\r\n    }\r\n\r\n    $triggerElements.blur();\r\n\r\n    if (callback != null) {\r\n        return callback(isActive);\r\n    }\r\n}","import 'mmenu-js'\r\nimport { DiagramToggle } from './Diagram.Toggle.js'\r\nimport '@wearediagram/wsol.accordion';\r\n\r\nexport async function DiagramSiteNavigation() {\r\n\r\n    //Add current class to current nav item\r\n    $(function () {\r\n        if (location.pathname != \"/\") {\r\n            $('nav > ul > li > a[href^=\"/' + location.pathname.split(\"/\")[1] + '\"]').addClass('current');\r\n        }\r\n        $('nav a[href=\"' + window.location.pathname + '\"]').addClass('current').attr('aria-current', 'page');\r\n    });\r\n\r\n    //Open and close the search\r\n    if (typeof Diagram == \"undefined\") {\r\n        var Diagram = {};\r\n    }\r\n\r\n    Diagram.MainNav = [];\r\n    Diagram.MainNav.$searchToggle = $('.js-search-toggle');\r\n\r\n    $('.js-search-wrapper').removeClass('is-loading');\r\n\r\n    Diagram.MainNav.$searchToggle.on('click', function (e) {\r\n        e.stopPropagation();\r\n        DiagramToggle(Diagram.MainNav.$searchToggle, function (isActive) {\r\n            if (isActive) {\r\n                $('#header-search form').css('visibility', 'visible');\r\n                $('.js-header-search-input').focus();\r\n            } else {\r\n                $('#header-search form').css('visibility', 'hidden');\r\n                $(this).focus();\r\n            }\r\n        });\r\n        if ($(this).attr('aria-expanded') == 'false') {\r\n            $(this).attr('aria-expanded', 'true');\r\n        } else {\r\n            $(this).attr('aria-expanded', 'false');\r\n        }\r\n    });\r\n\r\n    //close search when tabbing on search button\r\n    $('#header-search button').on('keydown', function (e) {\r\n        if (e.which == 9) {\r\n            $('#header-search').removeClass('active');\r\n            $('#header-search form').css('visibility', 'hidden');\r\n            $('.js-search-toggle').removeClass('active').attr('aria-expanded', 'false');\r\n        }\r\n    });\r\n\r\n    //close search when clicking outside of search\r\n    $('body').on('click', function () {\r\n        if (Diagram.MainNav.$searchToggle.hasClass('active')) {\r\n            $('#header-search').removeClass('active');\r\n            $('#header-search form').css('visibility', 'hidden');\r\n            $('.js-search-toggle').removeClass('active').attr('aria-expanded', 'false');\r\n        }\r\n    });\r\n\r\n    $('.js-header-search-input').on('click', function (e) {\r\n        e.stopPropagation();\r\n    });\r\n\r\n\r\n\r\n    //Open and close i want to menu\r\n    $('body').on('click', '.i-want-to-toggle', function (e) {\r\n        e.stopPropagation();\r\n        DiagramToggle($(this));\r\n        if ($(this).attr('aria-expanded') == 'false') {\r\n            $(this).attr('aria-expanded', 'true').attr('aria-label', 'Close the I want to Menu');\r\n        } else {\r\n            $(this).attr('aria-expanded', 'false').attr('aria-label', 'Open the I want to Menu');\r\n        }\r\n    });\r\n\r\n    $('body').on('click', function () {\r\n        if ($('.i-want-to-toggle').hasClass('active')) {\r\n            $('.i-want-to-toggle').removeClass('active').attr('aria-expanded', 'false').attr('aria-label', 'Open the I want to Menu');\r\n            $('.js-i-want-to-menu').removeClass('active');\r\n        }\r\n    });\r\n\r\n    $('body').on('keydown', '.i-want-to-toggle', function (e) {\r\n        if (e.which == 13)  // enter\r\n        {\r\n            DiagramToggle($(this));\r\n            if ($(this).attr('aria-expanded') == 'false') {\r\n                $(this).attr('aria-expanded', 'true').attr('aria-label', 'Close the I want to Menu');\r\n                $(this).focus();\r\n            } else {\r\n                $(this).attr('aria-expanded', 'false').attr('aria-label', 'Open the I want to Menu');\r\n            }\r\n        }\r\n        if (e.which == 9 && e.shiftKey) //shift + tab\r\n        {\r\n            if ($('.i-want-to-toggle').hasClass('active')) {\r\n                $('.i-want-to-toggle').removeClass('active').attr('aria-expanded', 'false').attr('aria-label', 'Open the I want to Menu');\r\n                $('.js-i-want-to-menu').removeClass('active');\r\n            }      \r\n        }\r\n    });\r\n\r\n    $('body').on('blur', '.js-i-want-to-menu li:last-child a', function () {\r\n        $('.i-want-to-toggle').removeClass('active').attr('aria-expanded', 'false').attr('aria-label', 'Open the I want to Menu');;\r\n        $('.js-i-want-to-menu').removeClass('active');\r\n    })\r\n\r\n    //init Mmenu.js\r\n    const menu = new Mmenu(\"#menu-mobile\",\r\n        {\r\n            //Mmenu options\r\n            slidingSubmenus: true,\r\n            offCanvas: {\r\n                position: \"left-front\"\r\n            }\r\n        },\r\n        {\r\n            //Mmenu configuration\r\n            classNames: {\r\n                selected: \"active\"\r\n            },\r\n            offCanvas: {\r\n                page: {\r\n                    selector: \"#container\"\r\n                },\r\n                clone: false,\r\n            }\r\n        }\r\n    );\r\n    const api = menu.API;\r\n\r\n    //clone header elements into the cloned mmenu\r\n    if ($('.header-utility')) {\r\n        $('.header-utility').clone().appendTo($('#menu-mobile #mm-1'));\r\n    }\r\n    if ($('.header-btn')) {\r\n        $('.header-btn').clone().appendTo($('#menu-mobile #mm-1'));\r\n    }\r\n\r\n\r\n\r\n    //simulate click for custom back button using existing+hidden mmenu link\r\n    $(\".js-menu-back\").bind(\"click\", function () {\r\n        var $current_back_btn = $('#menu-mobile').find(\".mm-panel--opened .mm-btn--prev\")\r\n            //$back_href = $current_back_btn.attr('href')\r\n            ;\r\n        if ($current_back_btn.length) {\r\n            //console.log($back_href);\r\n            //console.log($current_back_btn);\r\n            $current_back_btn[0].click();\r\n        } else {\r\n            api.close();\r\n        }\r\n    });\r\n\r\n    //hide mobile menu back button. apply theme to mmenu\r\n    $('.header-mmenu .js-menu-back').addClass('transparent').attr('tabindex', -1);\r\n    //$('#menu-mobile').addClass('theme-inverted')\r\n\r\n    //hide logo when navigating mobile menu. swap theme\r\n    $('.mobile-menu-lvl1 .mm-btn--next').bind('click', function () {\r\n        $('.header-mmenu .header-logo').addClass('transparent').attr('tabindex', -1);\r\n        $('.header-mmenu .js-menu-back').removeAttr('tabindex').removeClass('transparent');\r\n        $('#menu-mobile').addClass('light-blue-bg');\r\n    });\r\n    //show logo when navigating mobile menu. swap theme\r\n    $('.mm-panel a[href=\"#mm-1\"]').bind('click', function () {\r\n        $('.header-mmenu .header-logo').removeAttr('tabindex').removeClass('transparent');\r\n        $('.header-mmenu .js-menu-back').addClass('transparent').attr('tabindex', -1);\r\n        $('#menu-mobile').removeClass('light-blue-bg');\r\n    });\r\n\r\n    ////swap moffitt theme when lvl 2 -> 3\r\n    //$('.mobile-menu-lvl2 .mm-btn--next').bind('click', function () {\r\n    //    $('#menu-mobile').addClass('theme-lightblue4').removeClass('theme-lightblue');\r\n    //});\r\n    ////swap moffitt theme when lvl 3 -> 2. Targets links in .mm-navbar\r\n    //$('.mobile-menu-lvl3 .mm-btn--prev').bind('click', function () {\r\n    //    $('#menu-mobile').addClass('theme-lightblue').removeClass('theme-lightblue4');\r\n    //});\r\n\r\n    // toggle .visually-hidden\r\n    $('a.header-menu-toggle--open').bind('click', function () {\r\n        $('#menu-mobile').removeClass('visually-hidden').attr('aria-hidden', 'false');\r\n    });\r\n    $('a.header-menu-toggle--close').bind('click', function () {\r\n        $('#menu-mobile').addClass('visually-hidden').attr('aria-hidden', 'true');\r\n        api.close();\r\n    });\r\n\r\n    $(document).on('breakpoint-match-charlie', function () {\r\n        api.close();\r\n    });\r\n\r\n    // update `aria-label` to include link text\r\n    $('.mobile-menu-lvl1 [data-mm-child]').each(function () {\r\n        let $link = $(this).find(\">a\");\r\n        $link.attr('aria-label', 'Open ' + $link.text() + ' submenu')\r\n    });\r\n\r\n\r\n    //mobile utility menu accordion init\r\n    //$('.header-utility').each(function () {\r\n    //    $(this).wsol_accordion({\r\n    //        headerSelector: '.js-accordion-header',\r\n    //        bodySelector: '.js-accordion-more',\r\n    //        itemSelector: '> div',\r\n    //        spriteContainer: '.js-accordion-header',\r\n    //        customSprite: function (item) {\r\n    //            return '<i class=\"fa-solid fa-angle-down\"></i>';\r\n    //        },\r\n    //        startFirstOpen: $(this).data('StartFirstOpen') || false\r\n    //    });\r\n    //});\r\n\r\n    // Desktop\r\n    /*\r\n*   This content is licensed according to the W3C Software License at\r\n*   https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\r\n*\r\n*   File:   menubar-navigation.js\r\n*\r\n*   Desc:   Creates a menubar of hierarchical set of links\r\n*/\r\n\r\n    'use strict';\r\n\r\n    class MenubarNavigation {\r\n        constructor(domNode) {\r\n            var linkURL, linkTitle;\r\n\r\n            this.domNode = domNode;\r\n\r\n            this.menuitems = [];\r\n            this.popups = [];\r\n            this.menuitemGroups = {};\r\n            this.menuOrientation = {};\r\n            this.isPopup = {};\r\n            this.isPopout = {};\r\n            this.openPopups = false;\r\n            this.menuLastClick = null;\r\n\r\n            this.firstChars = {}; // see Menubar init method\r\n            this.firstMenuitem = {}; // see Menubar init method\r\n            this.lastMenuitem = {}; // see Menubar init method\r\n\r\n            this.initMenu(domNode, 0);\r\n\r\n            domNode.addEventListener('focusin', this.onMenubarFocusin.bind(this));\r\n            domNode.addEventListener('focusout', this.onMenubarFocusout.bind(this));\r\n\r\n            window.addEventListener(\r\n                'pointerdown',\r\n                this.onBackgroundPointerdown.bind(this),\r\n                true\r\n            );\r\n\r\n            domNode.querySelector('[role=menuitem]').tabIndex = 0;\r\n        }\r\n\r\n        getParentMenuitem(menuitem) {\r\n            var node = menuitem.parentNode;\r\n            if (node) {\r\n                node = node.parentNode;\r\n                if (node) {\r\n                    node = node.previousElementSibling;\r\n                    if (node) {\r\n                        if (node.getAttribute('role') === 'menuitem') {\r\n                            return node;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n\r\n        updateContent(linkURL, linkName, moveFocus) {\r\n            //var pathNode;\r\n\r\n            if (typeof moveFocus !== 'boolean') {\r\n                moveFocus = true;\r\n            }\r\n\r\n            if (linkURL !== \"#\") {\r\n                document.location = linkURL;\r\n            }\r\n\r\n            //// Update aria-current\r\n            //this.menuitems.forEach((item) => {\r\n            //    item.removeAttribute('aria-current');\r\n            //    item.classList.remove('aria-current-path');\r\n            //    item.title = '';\r\n            //});\r\n\r\n            //this.menuitems.forEach((item) => {\r\n            //    if (item.href === linkURL) {\r\n            //        item.setAttribute('aria-current', 'page');\r\n            //        pathNode = this.getParentMenuitem(item);\r\n            //        while (pathNode) {\r\n            //            pathNode.classList.add('aria-current-path');\r\n            //            pathNode.title = 'Contains current page link';\r\n            //            pathNode = this.getParentMenuitem(pathNode);\r\n            //        }\r\n            //    }\r\n            //});\r\n        }\r\n\r\n        getMenuitems(domNode, depth) {\r\n            var nodes = [];\r\n\r\n            var initMenu = this.initMenu.bind(this);\r\n            var popups = this.popups;\r\n\r\n            function findMenuitems(node) {\r\n                var role, flag;\r\n\r\n                while (node) {\r\n                    flag = true;\r\n                    role = node.getAttribute('role');\r\n\r\n                    if (role) {\r\n                        role = role.trim().toLowerCase();\r\n                    }\r\n\r\n                    switch (role) {\r\n                        case 'menu':\r\n                            node.tabIndex = -1;\r\n                            initMenu(node, depth + 1);\r\n                            flag = false;\r\n                            break;\r\n\r\n                        case 'menuitem':\r\n                            if (node.getAttribute('aria-haspopup') === 'true') {\r\n                                popups.push(node);\r\n                            }\r\n                            nodes.push(node);\r\n                            break;\r\n\r\n                        default:\r\n                            break;\r\n                    }\r\n\r\n                    if (\r\n                        flag &&\r\n                        node.firstElementChild &&\r\n                        node.firstElementChild.tagName !== 'svg'\r\n                    ) {\r\n                        findMenuitems(node.firstElementChild);\r\n                    }\r\n                    node = node.nextElementSibling;\r\n                }\r\n            }\r\n            findMenuitems(domNode.firstElementChild);\r\n            return nodes;\r\n        }\r\n\r\n        initMenu(menu, depth) {\r\n            var menuitems, menuitem, role;\r\n\r\n            var menuId = this.getMenuId(menu);\r\n\r\n            menuitems = this.getMenuitems(menu, depth);\r\n            this.menuOrientation[menuId] = this.getMenuOrientation(menu);\r\n\r\n            this.isPopup[menuId] = menu.getAttribute('role') === 'menu' && depth === 1;\r\n            this.isPopout[menuId] = menu.getAttribute('role') === 'menu' && depth > 1;\r\n\r\n            this.menuitemGroups[menuId] = [];\r\n            this.firstChars[menuId] = [];\r\n            this.firstMenuitem[menuId] = null;\r\n            this.lastMenuitem[menuId] = null;\r\n\r\n            for (var i = 0; i < menuitems.length; i++) {\r\n                menuitem = menuitems[i];\r\n                role = menuitem.getAttribute('role');\r\n\r\n                if (role.indexOf('menuitem') < 0) {\r\n                    continue;\r\n                }\r\n\r\n                menuitem.tabIndex = -1;\r\n                this.menuitems.push(menuitem);\r\n                this.menuitemGroups[menuId].push(menuitem);\r\n                this.firstChars[menuId].push(\r\n                    menuitem.textContent.trim().toLowerCase()[0]\r\n                );\r\n\r\n                menuitem.addEventListener('keydown', this.onKeydown.bind(this));\r\n                menuitem.addEventListener('click', this.onMenuitemClick.bind(this), {\r\n                    capture: true,\r\n                });\r\n\r\n                menuitem.addEventListener(\r\n                    'pointerover',\r\n                    this.onMenuitemPointerover.bind(this)\r\n                );\r\n\r\n                if (!this.firstMenuitem[menuId]) {\r\n                    if (this.hasPopup(menuitem)) {\r\n                        menuitem.tabIndex = 0;\r\n                    }\r\n                    this.firstMenuitem[menuId] = menuitem;\r\n                }\r\n                this.lastMenuitem[menuId] = menuitem;\r\n            }\r\n        }\r\n\r\n        setFocusToMenuitem(menuId, newMenuitem) {\r\n            this.closePopupAll(newMenuitem);\r\n\r\n            if (this.menuitemGroups[menuId]) {\r\n                this.menuitemGroups[menuId].forEach(function (item) {\r\n                    if (item === newMenuitem) {\r\n                        item.tabIndex = 0;\r\n                        newMenuitem.focus();\r\n                    } else {\r\n                        item.tabIndex = -1;\r\n                    }\r\n                });\r\n            }\r\n        }\r\n\r\n        setFocusToFirstMenuitem(menuId) {\r\n            this.setFocusToMenuitem(menuId, this.firstMenuitem[menuId]);\r\n        }\r\n\r\n        setFocusToLastMenuitem(menuId) {\r\n            this.setFocusToMenuitem(menuId, this.lastMenuitem[menuId]);\r\n        }\r\n\r\n        setFocusToPreviousMenuitem(menuId, currentMenuitem) {\r\n            var newMenuitem, index;\r\n\r\n            if (currentMenuitem === this.firstMenuitem[menuId]) {\r\n                newMenuitem = this.lastMenuitem[menuId];\r\n            } else {\r\n                index = this.menuitemGroups[menuId].indexOf(currentMenuitem);\r\n                newMenuitem = this.menuitemGroups[menuId][index - 1];\r\n            }\r\n\r\n            this.setFocusToMenuitem(menuId, newMenuitem);\r\n\r\n            return newMenuitem;\r\n        }\r\n\r\n        setFocusToNextMenuitem(menuId, currentMenuitem) {\r\n            var newMenuitem, index;\r\n\r\n            if (currentMenuitem === this.lastMenuitem[menuId]) {\r\n                newMenuitem = this.firstMenuitem[menuId];\r\n            } else {\r\n                index = this.menuitemGroups[menuId].indexOf(currentMenuitem);\r\n                newMenuitem = this.menuitemGroups[menuId][index + 1];\r\n            }\r\n            this.setFocusToMenuitem(menuId, newMenuitem);\r\n\r\n            return newMenuitem;\r\n        }\r\n\r\n        setFocusByFirstCharacter(menuId, currentMenuitem, char) {\r\n            var start, index;\r\n\r\n            char = char.toLowerCase();\r\n\r\n            // Get start index for search based on position of currentItem\r\n            start = this.menuitemGroups[menuId].indexOf(currentMenuitem) + 1;\r\n            if (start >= this.menuitemGroups[menuId].length) {\r\n                start = 0;\r\n            }\r\n\r\n            // Check remaining slots in the menu\r\n            index = this.getIndexFirstChars(menuId, start, char);\r\n\r\n            // If not found in remaining slots, check from beginning\r\n            if (index === -1) {\r\n                index = this.getIndexFirstChars(menuId, 0, char);\r\n            }\r\n\r\n            // If match was found...\r\n            if (index > -1) {\r\n                this.setFocusToMenuitem(menuId, this.menuitemGroups[menuId][index]);\r\n            }\r\n        }\r\n\r\n        // Utilities\r\n\r\n        getIndexFirstChars(menuId, startIndex, char) {\r\n            for (var i = startIndex; i < this.firstChars[menuId].length; i++) {\r\n                if (char === this.firstChars[menuId][i]) {\r\n                    return i;\r\n                }\r\n            }\r\n            return -1;\r\n        }\r\n\r\n        isPrintableCharacter(str) {\r\n            return str.length === 1 && str.match(/\\S/);\r\n        }\r\n\r\n        getIdFromAriaLabel(node) {\r\n            var id = node.getAttribute('aria-label');\r\n            if (id) {\r\n                id = id.trim().toLowerCase().replace(' ', '-').replace('/', '-');\r\n            }\r\n            return id;\r\n        }\r\n\r\n        getMenuOrientation(node) {\r\n            var orientation = node.getAttribute('aria-orientation');\r\n\r\n            if (!orientation) {\r\n                var role = node.getAttribute('role');\r\n\r\n                switch (role) {\r\n                    case 'menubar':\r\n                        orientation = 'horizontal';\r\n                        break;\r\n\r\n                    case 'menu':\r\n                        orientation = 'vertical';\r\n                        break;\r\n\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n\r\n            return orientation;\r\n        }\r\n\r\n        getMenuId(node) {\r\n            var id = false;\r\n            var role = node.getAttribute('role');\r\n\r\n            while (node && role !== 'menu' && role !== 'menubar') {\r\n                node = node.parentNode;\r\n                if (node) {\r\n                    role = node.getAttribute('role');\r\n                }\r\n            }\r\n\r\n            if (node) {\r\n                id = role + '-' + this.getIdFromAriaLabel(node);\r\n            }\r\n\r\n            return id;\r\n        }\r\n\r\n        getMenu(menuitem) {\r\n            var menu = menuitem;\r\n            var role = menuitem.getAttribute('role');\r\n\r\n            while (menu && role !== 'menu' && role !== 'menubar') {\r\n                menu = menu.parentNode;\r\n                if (menu) {\r\n                    role = menu.getAttribute('role');\r\n                }\r\n            }\r\n\r\n            return menu;\r\n        }\r\n\r\n        // Popup menu methods\r\n\r\n        isAnyPopupOpen() {\r\n            for (var i = 0; i < this.popups.length; i++) {\r\n                if (this.popups[i].getAttribute('aria-expanded') === 'true') {\r\n                    return true;\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n\r\n        setMenubarDataExpanded(value) {\r\n            this.domNode.setAttribute('data-menubar-item-expanded', value);\r\n        }\r\n\r\n        isMenubarDataExpandedTrue() {\r\n            return this.domNode.getAttribute('data-menubar-item-expanded') === 'true';\r\n        }\r\n\r\n        openPopup(menuId, menuitem) {\r\n            // set aria-expanded attribute\r\n            var popupMenu = menuitem.nextElementSibling;\r\n\r\n            if (popupMenu) {\r\n                var rect = menuitem.getBoundingClientRect();\r\n\r\n                // Set CSS properties\r\n                if (this.isPopup[menuId]) {\r\n                    popupMenu.parentNode.style.position = 'relative';\r\n                    popupMenu.style.display = 'block';\r\n                    popupMenu.style.position = 'absolute';\r\n                    popupMenu.style.left = rect.width + 10 + 'px';\r\n                    popupMenu.style.top = '0px';\r\n                    popupMenu.style.zIndex = 100;\r\n                } else {\r\n                    popupMenu.style.display = 'block';\r\n                    popupMenu.style.position = 'absolute';\r\n                    popupMenu.style.left = '0px';\r\n                    popupMenu.style.top = rect.height + 8 + 'px';\r\n                    popupMenu.style.zIndex = 100;\r\n                }\r\n\r\n                menuitem.setAttribute('aria-expanded', 'true');\r\n                this.setMenubarDataExpanded('true');\r\n                return this.getMenuId(popupMenu);\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        closePopout(menuitem) {\r\n            var menu,\r\n                menuId = this.getMenuId(menuitem),\r\n                cmi = menuitem;\r\n\r\n            while (this.isPopup[menuId] || this.isPopout[menuId]) {\r\n                menu = this.getMenu(cmi);\r\n                cmi = menu.previousElementSibling;\r\n                menuId = this.getMenuId(cmi);\r\n                menu.style.display = 'none';\r\n            }\r\n            cmi.focus();\r\n\r\n            this.menuLastClick = null;\r\n\r\n            return cmi;\r\n        }\r\n\r\n        closePopup(menuitem) {\r\n            var menu,\r\n                menuId = this.getMenuId(menuitem),\r\n                cmi = menuitem;\r\n\r\n            if (this.isMenubar(menuId)) {\r\n                if (this.isOpen(menuitem)) {\r\n                    menuitem.setAttribute('aria-expanded', 'false');\r\n                    menuitem.nextElementSibling.style.display = 'none';\r\n                }\r\n            } else {\r\n                menu = this.getMenu(menuitem);\r\n                cmi = menu.previousElementSibling;\r\n                cmi.setAttribute('aria-expanded', 'false');\r\n                cmi.focus();\r\n                menu.style.display = 'none';\r\n            }\r\n\r\n            this.menuLastClick = null;\r\n\r\n            return cmi;\r\n        }\r\n\r\n        doesNotContain(popup, menuitem) {\r\n            if (menuitem) {\r\n                var containsMenuitem = false;\r\n\r\n                try {\r\n                    containsMenuitem = !popup.nextElementSibling.contains(menuitem);\r\n                } catch (err) {\r\n                    // no\r\n                }\r\n                return containsMenuitem;\r\n            }\r\n            return true;\r\n        }\r\n\r\n        closePopupAll(menuitem) {\r\n            if (typeof menuitem !== 'object') {\r\n                menuitem = false;\r\n            }\r\n            for (var i = 0; i < this.popups.length; i++) {\r\n                var popup = this.popups[i];\r\n                if (this.doesNotContain(popup, menuitem) && this.isOpen(popup)) {\r\n                    var cmi = popup.nextElementSibling;\r\n                    if (cmi) {\r\n                        popup.setAttribute('aria-expanded', 'false');\r\n                        cmi.style.display = 'none';\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        hasPopup(menuitem) {\r\n            return menuitem.getAttribute('aria-haspopup') === 'true';\r\n        }\r\n\r\n        isOpen(menuitem) {\r\n            return menuitem.getAttribute('aria-expanded') === 'true';\r\n        }\r\n\r\n        isMenubar(menuId) {\r\n            return !this.isPopup[menuId] && !this.isPopout[menuId];\r\n        }\r\n\r\n        isMenuHorizontal(menuitem) {\r\n            return this.menuOrientation[menuitem] === 'horizontal';\r\n        }\r\n\r\n        hasFocus() {\r\n            return this.domNode.classList.contains('focus');\r\n        }\r\n\r\n        // Menu event handlers\r\n\r\n        onMenubarFocusin() {\r\n            // if the menubar or any of its menus has focus, add styling hook for hover\r\n            this.domNode.classList.add('focus');\r\n        }\r\n\r\n        onMenubarFocusout() {\r\n            // remove styling hook for hover on menubar item\r\n            this.domNode.classList.remove('focus');\r\n        }\r\n\r\n        onKeydown(event) {\r\n            var tgt = event.currentTarget,\r\n                key = event.key,\r\n                flag = false,\r\n                menuId = this.getMenuId(tgt),\r\n                id,\r\n                popupMenuId,\r\n                mi;\r\n\r\n            switch (key) {\r\n                case ' ':\r\n                case 'Enter':\r\n                    if (tgt.href.substr(-1) !== '#') {\r\n                        this.closePopupAll();\r\n                        this.updateContent(tgt.href, tgt.textContent.trim());\r\n                        this.setMenubarDataExpanded('false');\r\n                    } else {\r\n                        if (this.hasPopup(tgt)) {\r\n                            this.openPopups = true;\r\n                            popupMenuId = this.openPopup(menuId, tgt);\r\n                            this.setFocusToFirstMenuitem(popupMenuId);\r\n                        }\r\n                    }\r\n                    flag = true;\r\n                    break;\r\n\r\n                case 'Esc':\r\n                case 'Escape':\r\n                    this.openPopups = false;\r\n                    mi = this.closePopup(tgt);\r\n                    id = this.getMenuId(mi);\r\n                    this.setMenubarDataExpanded('false');\r\n                    flag = true;\r\n                    this.menuLastClick = null;\r\n                    break;\r\n\r\n                case 'Up':\r\n                case 'ArrowUp':\r\n                    if (this.isMenuHorizontal(menuId)) {\r\n                        if (this.hasPopup(tgt)) {\r\n                            this.openPopups = true;\r\n                            popupMenuId = this.openPopup(menuId, tgt);\r\n                            this.setFocusToLastMenuitem(popupMenuId);\r\n                        }\r\n                    } else {\r\n                        this.setFocusToPreviousMenuitem(menuId, tgt);\r\n                    }\r\n                    flag = true;\r\n                    break;\r\n\r\n                case 'ArrowDown':\r\n                case 'Down':\r\n                    if (this.isMenuHorizontal(menuId)) {\r\n                        if (this.hasPopup(tgt)) {\r\n                            this.openPopups = true;\r\n                            popupMenuId = this.openPopup(menuId, tgt);\r\n                            this.setFocusToFirstMenuitem(popupMenuId);\r\n                        }\r\n                    } else {\r\n                        this.setFocusToNextMenuitem(menuId, tgt);\r\n                    }\r\n                    flag = true;\r\n                    break;\r\n\r\n                case 'Left':\r\n                case 'ArrowLeft':\r\n                    if (this.isMenuHorizontal(menuId)) {\r\n                        mi = this.setFocusToPreviousMenuitem(menuId, tgt);\r\n                        if (this.isAnyPopupOpen() || this.isMenubarDataExpandedTrue()) {\r\n                            this.openPopup(menuId, mi);\r\n                        }\r\n                    } else {\r\n                        if (this.isPopout[menuId]) {\r\n                            mi = this.closePopup(tgt);\r\n                            id = this.getMenuId(mi);\r\n                            mi = this.setFocusToMenuitem(id, mi);\r\n                        } else {\r\n                            mi = this.closePopup(tgt);\r\n                            id = this.getMenuId(mi);\r\n                            mi = this.setFocusToPreviousMenuitem(id, mi);\r\n                            this.openPopup(id, mi);\r\n                        }\r\n                    }\r\n                    flag = true;\r\n                    break;\r\n\r\n                case 'Right':\r\n                case 'ArrowRight':\r\n                    if (this.isMenuHorizontal(menuId)) {\r\n                        mi = this.setFocusToNextMenuitem(menuId, tgt);\r\n                        if (this.isAnyPopupOpen() || this.isMenubarDataExpandedTrue()) {\r\n                            this.openPopup(menuId, mi);\r\n                        }\r\n                    } else {\r\n                        if (this.hasPopup(tgt)) {\r\n                            popupMenuId = this.openPopup(menuId, tgt);\r\n                            this.setFocusToFirstMenuitem(popupMenuId);\r\n                        } else {\r\n                            mi = this.closePopout(tgt);\r\n                            id = this.getMenuId(mi);\r\n                            mi = this.setFocusToNextMenuitem(id, mi);\r\n                            this.openPopup(id, mi);\r\n                        }\r\n                    }\r\n                    flag = true;\r\n                    break;\r\n\r\n                case 'Home':\r\n                case 'PageUp':\r\n                    this.setFocusToFirstMenuitem(menuId, tgt);\r\n                    flag = true;\r\n                    break;\r\n\r\n                case 'End':\r\n                case 'PageDown':\r\n                    this.setFocusToLastMenuitem(menuId, tgt);\r\n                    flag = true;\r\n                    break;\r\n\r\n                case 'Tab':\r\n                    this.openPopups = false;\r\n                    this.setMenubarDataExpanded('false');\r\n                    this.closePopup(tgt);\r\n                    break;\r\n\r\n                default:\r\n                    if (this.isPrintableCharacter(key)) {\r\n                        this.setFocusByFirstCharacter(menuId, tgt, key);\r\n                        flag = true;\r\n                    }\r\n                    break;\r\n            }\r\n\r\n            if (flag) {\r\n                event.stopPropagation();\r\n                event.preventDefault();\r\n            }\r\n        }\r\n\r\n        onMenuitemClick(event) {\r\n            var tgt = event.currentTarget;\r\n            var menuId = this.getMenuId(tgt);\r\n\r\n            if (tgt.href.substr(-1) !== '#') {\r\n                if (this.hasPopup(tgt)) {\r\n                    // open if closed, close if open\r\n                    if (this.isOpen(tgt)) {\r\n                        this.closePopup(tgt);\r\n                        this.setMenubarDataExpanded('false');\r\n                    } else {\r\n                        this.closePopupAll(tgt);\r\n                        this.openPopups = true;\r\n                        this.setFocusToFirstMenuitem(this.openPopup(menuId, tgt));\r\n                    }\r\n                } else {\r\n                    this.updateContent(tgt.href, tgt.textContent.trim());\r\n                }\r\n            } else {\r\n                if (this.hasPopup(tgt)) {\r\n                    this.openPopups = true;\r\n                    this.setFocusToFirstMenuitem(this.openPopup(menuId, tgt));\r\n                }\r\n            }\r\n\r\n            //if (this.hasPopup(tgt)) {\r\n            //    if (this.isOpen(tgt)) {\r\n            //        this.closePopup(tgt);\r\n            //    } else {\r\n            //        this.closePopupAll(tgt);\r\n            //        this.openPopup(menuId, tgt);\r\n            //    }\r\n            //} else {\r\n            //    this.updateContent(tgt.href, tgt.textContent.trim());\r\n            //    this.closePopupAll();\r\n            //}\r\n            event.stopPropagation();\r\n            event.preventDefault();\r\n        }\r\n\r\n        onMenuitemPointerover(event) {\r\n            //var tgt = event.currentTarget;\r\n            //var menuId = this.getMenuId(tgt);\r\n\r\n            //if (this.hasFocus()) {\r\n            //    this.setFocusToMenuitem(menuId, tgt);\r\n            //}\r\n\r\n            //if (this.isAnyPopupOpen() || this.hasFocus()) {\r\n            //    this.closePopupAll(tgt);\r\n            //    if (this.hasPopup(tgt)) {\r\n            //        this.openPopup(menuId, tgt);\r\n            //    }\r\n            //}\r\n        }\r\n\r\n        onBackgroundPointerdown(event) {\r\n            if (!this.domNode.contains(event.target)) {\r\n                this.closePopupAll();\r\n                this.menuLastClick = null;\r\n            }\r\n        }\r\n    }\r\n\r\n    // Initialize\r\n    var menubarNavs = document.querySelectorAll('.header-nav');\r\n\r\n    for (var i = 0; i < menubarNavs.length; i++) {\r\n        var $level2Links = menubarNavs[i].querySelectorAll('.js-nav-level-2-link');\r\n        for (var j = 0; j < $level2Links.length; j++) {\r\n            var $link = $level2Links[j];\r\n            $link.setAttribute(\"role\", \"menuitem\")\r\n            if ($link.nextElementSibling !== null) {\r\n                $link.setAttribute(\"aria-haspopup\", \"true\");\r\n                $link.setAttribute(\"aria-expanded\", \"false\");\r\n            } else {\r\n                $link.setAttribute(\"aria-haspopup\", \"false\");\r\n            }\r\n        }\r\n        new MenubarNavigation(menubarNavs[i]);\r\n    }\r\n\r\n}"],"names":["options","configs","extend","orignl","dfault","type","k","touchDirection","surface","direction","prevPosition","evnt","currentPosition","variable","uniqueId","__id","cloneId","id","originalId","translations","show","add","text","language","get","de$1","fa$1","nl$1","pt_br$1","ru$1","sk$1","uk$1","translate$1","de","fa","nl","pt_br","ru","sk","uk","create","selector","args","elem","find","element","filter","children","child","childText","node","parents","parent","prevAll","previous","current","filterLI","listitems","listitem","filterLIA","anchors","anchor","reClass","oldClass","newClass","listeners","query","yes","no","watch","mqlist","fire","fn","m","__classPrivateFieldSet","this","receiver","privateMap","value","__classPrivateFieldGet","_panelObserver","_listviewObserver","_listitemObserver","translate","Mmenu","menu","OPTIONS","CONFIGS","media.watch","panel","animation","setfocus","DOM.children","remove","pnl","DOM.find","lastPanel","firstPanel","li","hook","func","h","l","mutationsList","mutation","listview","subpanel","that","addon","panels","DOM.create","event","_a","_b","href","DOM.reClass","wrapper","classname","attr","parentListitem","parentPanel","navbar","prev","opener","title","titleText","DOM.childText","button","i18n.get","i18n.add","i18n.show","possiblePositions","offcanvas","blocker","hash","page","pages","touch","scrollBugFix","support.touch","touchDir","DOM.parents","possibleThemes","theme","oldTheme","backButton","_menu","states","setStates","counters","count","counter","DOM.filterLI","listitemObserver","iconbar","position","n","ctnt","part","c","enable","disable","media.add","selectTab","iconPanels","keepFirst","classnames","p","extendShorthandOptions","breadcrumbs","crumbs","first","close","original","clone","searchfield$1","tabs","_c","Navbars","searchfield","navs","navbars","pageScroll","section","scrollTo","anchorInPage","scts","DOM.filterLIA","_selected","scrollTop","s","initPanel","resultspanel","createResultsPanel","form","createSearchfield","input","initSearch","_addAttributes","isResultspanel","splash","message","addCancel","field","submit","reset","cancel","searchIn","search","DOM.text","_searchResultsPanel","_searchPerPanel","_resetResultsPanel","_resetPerPanel","results","divider","result","DOM.prevAll","item","item2","attributes","a","sectionIndexer","buttons","letter","indexer","mouseOverEvent","newTop","oldTop","active","setSelected","findCurrent","url","arr","sidebar","expandedEnabled","initialState","state","DiagramToggle","$toggle","callback","targetVal","$targetElement","$triggerElements","isActive","DiagramSiteNavigation","Diagram","e","api","$current_back_btn","$link","MenubarNavigation","domNode","menuitem","linkURL","linkName","moveFocus","depth","nodes","initMenu","popups","findMenuitems","role","flag","menuitems","menuId","i","newMenuitem","currentMenuitem","index","char","start","startIndex","str","orientation","popupMenu","rect","cmi","popup","containsMenuitem","tgt","key","popupMenuId","mi","menubarNavs","$level2Links","j"],"mappings":"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"}