A horizontal navigation menu component that displays top-level items in a row and reveals child items in dropdowns on hover.
QdsBaseMenu
base class for consistent data handlingInclude the component in your project:
<script src="https://cdn.q360.ai/assets/components/horizontal-menu/qds-horizontal-menu.js" type="module"></script>
Or import it in your JavaScript:
import "https://cdn.q360.ai/assets/components/horizontal-menu/qds-horizontal-menu.js";
You can also load all components at once:
<script src="https://cdn.q360.ai/assets/components/index.js" type="module"></script>
<qds-horizontal-menu
data='[{"name":"Dashboard","linkUrl":"#dashboard"},{"name":"Reports","linkUrl":"#reports"}]'
hierarchy='["businessFunction"]'
icon-root="https://cdn.q360.ai/">
</qds-horizontal-menu>
Attribute | Type | Description | Default |
---|---|---|---|
data |
String | JSON string containing menu items array | [] |
hierarchy |
String | JSON string containing attributes to group items by | [“businessFunction”] |
icon-root |
String | Base URL for relative icon paths | “https://cdn.q360.ai/“ |
use-icons |
Boolean | Whether to display icons next to menu items | false |
Property | Type | Description |
---|---|---|
useIcons |
Boolean | Get/set whether icons are displayed in menu items |
Event Name | Detail | Description |
---|---|---|
itemSelected |
{ url: String, text: String } |
Fired when a menu item is selected |
Part | Description |
---|---|
nav-container |
The main container for navigation |
top-level-item |
The top level menu items |
dropdown |
The dropdown container for submenu items |
<qds-horizontal-menu id="mainNavigation"></qds-horizontal-menu>
<script>
const menuItems = [
{ name: "Dashboard", linkUrl: "/dashboard", icon: "dashboard.svg" },
{ name: "Finance", businessFunction: "Finance", linkUrl: "#" },
{ name: "HR", businessFunction: "Human Resources", linkUrl: "#" },
{ name: "Help", linkUrl: "/help", icon: "help.svg" }
];
const mainNav = document.getElementById('mainNavigation');
mainNav.setAttribute('data', JSON.stringify(menuItems));
mainNav.setAttribute('hierarchy', JSON.stringify(["businessFunction"]));
mainNav.useIcons = true; // Enable icons
</script>
<qds-horizontal-menu id="navigation"></qds-horizontal-menu>
<script>
const navigation = document.getElementById('navigation');
// Set menu data
navigation.setAttribute('data', JSON.stringify(menuItems));
// Listen for item selection
navigation.addEventListener('itemSelected', (event) => {
const { url, text } = event.detail;
console.log(`Selected "${text}" with URL: ${url}`);
});
</script>
You can customize the appearance using CSS:
qds-horizontal-menu {
--menu-bg-color: #f8f9fa;
--menu-text-color: #333;
--menu-hover-bg-color: #e9ecef;
--menu-dropdown-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
font-family: Arial, sans-serif;
}
/* Style specific parts */
qds-horizontal-menu::part(top-level-item) {
text-transform: uppercase;
font-weight: bold;
}
qds-horizontal-menu::part(dropdown) {
border-radius: 8px;
}
This component works in all modern browsers that support Custom Elements v1 and ES6 modules.