component Navbar { props { @event toggle = function @event open = function @event close = function @event select = function @event action = function size = "default" color = "primary" label = "Primary navigation" topbarLabel = "Utility navigation" brand = {} items = [] actions = [] active = "" sticky = false openOnHover = false maxWidth = "full" mobileLabel = "Toggle navigation" class = "" } state mobileOpen = false functions { function toggleNavigation() { mobileOpen = !mobileOpen $emit("toggle", { open: mobileOpen }) $emit(mobileOpen ? "open" : "close", { source: "mobile" }) } function selectItem(item, level) { mobileOpen = false $emit("select", { item: item, value: item.value || "", level: level }) } function selectAction(item) { mobileOpen = false $emit("action", { item: item, value: item.value || "" }) } function isItemActive(item) { if (!item) return false if (item.value && item.value === active) return true if (!item.children || !item.children.length) return false return item.children.some(function (child) { return isItemActive(child) }) } function toggleDropdown(event, item) { $emit(event.currentTarget.open ? "open" : "close", { source: "menu", item: item }) } } view {
{#if brand.logo} {/if} {#if brand.icon} {/if} {#if brand.label || brand.description} {#if brand.label}{brand.label}{/if} {#if brand.description}{brand.description}{/if} {/if}
{#each actions as item} {#if item.icon}{/if} {item.label} {/each}
} }