component Navbar { outputs { toggle(payload: { open: boolean }) open(payload: { sourceEvent?: Event; [key: string]: string | number | boolean | null | object }) close(payload: { sourceEvent?: Event; [key: string]: string | number | boolean | null | object }) select(payload: { item: string | number | boolean | null | object; value: string | number | boolean; level: string }) action(payload: { item: string | number | boolean | null | object; value: string | number | boolean }) } props { size: string = "default" color: string = "primary" label: string = "Primary navigation" topbarLabel: string = "Utility navigation" brand: Record = {} items: unknown[] = [] actions: unknown[] = [] active: string = "" sticky: boolean = false openOnHover: boolean = false maxWidth: string = "full" mobileLabel: string = "Toggle navigation" class: string = "" } state mobileOpen: boolean = false functions { client function toggleNavigation() { mobileOpen = !mobileOpen output.toggle({ open: mobileOpen }) output[mobileOpen ? "open" : "close"]({ source: "mobile" }) } client function selectItem(item, level) { mobileOpen = false output.select({ item: item, value: item.value || "", level: level }) } client function selectAction(item) { mobileOpen = false output.action({ item: item, value: item.value || "" }) } shared 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) }) } client function toggleDropdown(event, item) { output[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}
} }