{"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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"}