diff --git a/build/media_source/mod_menu/css/mod-menu.css b/build/media_source/mod_menu/css/mod-menu.css new file mode 100644 index 0000000000000..d748b8fcd7ebf --- /dev/null +++ b/build/media_source/mod_menu/css/mod-menu.css @@ -0,0 +1,22 @@ +:where(.mod-menu__toggle-sub) { + display: inline-flex; + align-items: center; + padding: 0; + color: currentColor; + background-color: transparent; + border: none; + &[aria-expanded="true"] .icon-chevron-down { + transform: rotate(180deg); + } +} +:where(.mod-menu [class*="icon-"]) { + margin-inline-start: .5rem; + transition: all .2s, background-color .2s; +} + +:where(.mod-menu__sub[aria-hidden="true"]) { + display: none; +} +:where(.mod-menu__sub[aria-hidden="false"]) { + display: block; +} diff --git a/build/media_source/mod_menu/joomla.asset.json b/build/media_source/mod_menu/joomla.asset.json new file mode 100644 index 0000000000000..2314d4d0ad3d8 --- /dev/null +++ b/build/media_source/mod_menu/joomla.asset.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://developer.joomla.org/schemas/json-schema/web_assets.json", + "name": "mod_menu", + "version": "6.0.0", + "description": "Joomla CMS", + "license": "GPL-2.0-or-later", + "assets": [ + { + "name": "mod_menu.admin-menu", + "type": "script", + "uri": "mod_menu/admin-menu.min.js", + "dependencies": [ + "core" + ], + "attributes": { + "type": "module" + } + }, + { + "name": "mod_menu.menu", + "type": "script", + "uri": "mod_menu/menu.min.js", + "dependencies": [ + "core" + ], + "attributes": { + "type": "module" + } + }, + { + "name": "mod_menu.menu", + "type": "style", + "uri": "mod_menu/mod-menu.min.css" + }, + { + "name": "mod_menu.menu", + "type": "preset", + "dependencies": [ + "mod_menu.menu#style", + "mod_menu.menu#script" + ] + } + ] +} diff --git a/build/media_source/mod_menu/js/menu.es6.js b/build/media_source/mod_menu/js/menu.es6.js index eca867aed5711..17ed88bdddf84 100644 --- a/build/media_source/mod_menu/js/menu.es6.js +++ b/build/media_source/mod_menu/js/menu.es6.js @@ -6,140 +6,239 @@ (() => { 'use strict'; - function topLevelMouseOver(el, settings) { - const ulChild = el.querySelector('ul'); - if (ulChild) { - ulChild.setAttribute('aria-hidden', 'false'); - ulChild.classList.add(settings.menuHoverClass); - } - } + /** + * Navigation menu + * + * Example usage: + * // Default behavior (uses menuHoverClass = 'show-menu', dir = 'ltr') + * new Nav(document.querySelector('.nav')); + * + * // Override defaults (e.g. custom open-class and RTL support) + * new Nav(document.querySelector('.nav'), { + * menuHoverClass: 'my-open-class', + * dir: 'rtl' + * }); + * + * @param {HTMLElement} nav The root