{"version":3,"file":"eui-components-eui-menu.mjs","sources":["../../eui-menu/eui-menu-item.component.ts","../../eui-menu/eui-menu-item.component.html","../../eui-menu/eui-menu.component.ts","../../eui-menu/eui-menu.component.html","../../eui-menu/index.ts","../../eui-menu/eui-components-eui-menu.ts"],"sourcesContent":["import {\n    Component,\n    HostBinding,\n    ViewEncapsulation,\n    Input,\n    Output,\n    EventEmitter,\n    HostListener,\n    OnInit,\n    OnChanges,\n    SimpleChanges,\n    booleanAttribute,\n    ElementRef,\n    inject,\n} from '@angular/core';\nimport { FocusableOption } from '@angular/cdk/a11y';\n\nimport { consumeEvent } from '@eui/core';\nimport { EuiMenuItem } from './models/eui-menu-item.model';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { EUI_ICON } from '@eui/components/eui-icon';\nimport { EUI_BADGE } from '@eui/components/eui-badge';\nimport { EUI_ICON_BUTTON } from '@eui/components/eui-icon-button';\nimport { EUI_BUTTON } from '@eui/components/eui-button';\nimport { EuiTooltipDirective } from '@eui/components/directives';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\nimport { TranslateModule, TranslateService } from '@ngx-translate/core';\n\n/**\n * Represents a single item within an eUI menu structure. Supports hierarchical navigation with expandable/collapsible children,\n * multiple interaction modes (URL navigation, router links, commands, labels), and visual states (collapsed, disabled, selected).\n * Implements keyboard navigation and accessibility features for menu interactions.\n *\n * @usageNotes\n * ### Basic Usage\n * ```typescript\n * // Typically used within EuiMenuComponent via items array\n * item: EuiMenuItem = {\n *   id: 'home',\n *   label: 'Home',\n *   icon: 'eui-home',\n *   url: '/home'\n * };\n * ```\n *\n * ### With Children\n * ```typescript\n * item: EuiMenuItem = {\n *   id: 'settings',\n *   label: 'Settings',\n *   expanded: true,\n *   children: [\n *     { id: 'profile', label: 'Profile', url: '/settings/profile' }\n *   ]\n * };\n * ```\n *\n * ### Accessibility\n * - Implements FocusableOption for keyboard navigation\n * - ARIA attributes for menu item role and state\n * - Keyboard support for Enter, Space, and Arrow keys\n * - Focus management for nested menu structures\n *\n * ### Notes\n * - Automatically managed by parent EuiMenuComponent\n * - Supports tooltips in collapsed menu mode\n * - Can display badges, action icons, and external link indicators\n */\n@Component({\n    selector: 'eui-menu-item',\n    templateUrl: './eui-menu-item.component.html',\n    styleUrls: ['./styles/_index.scss'],\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        RouterLink,\n        RouterLinkActive,\n        NgTemplateOutlet,\n        TranslateModule,\n        ...EUI_ICON,\n        ...EUI_BADGE,\n        ...EUI_ICON_BUTTON,\n        ...EUI_BUTTON,\n        EuiTooltipDirective,\n    ],\n})\nexport class EuiMenuItemComponent implements OnInit, OnChanges, FocusableOption {\n    @HostBinding('attr.role') role = 'menuitem';\n    @HostBinding('attr.aria-label') ariaLabel = '';\n\n    @HostBinding('class')\n    public get cssClasses(): string {\n        return this.getCssClasses();\n    }\n    @HostBinding('attr.tabindex') tabindex = '-1';\n    @HostBinding('attr.aria-haspopup')\n    get ariaHasPopup(): boolean {\n        return this.item?.children?.length > 0 ? true : undefined;\n    }\n    @HostBinding('attr.aria-expanded')\n    get ariaExpanded(): boolean {\n        return this.item.children ? coerceBooleanProperty(this.item.expanded) : undefined;\n    }\n    @HostBinding('attr.aria-disabled')\n    get ariaDisabled(): boolean {\n        return this.item.disabled\n    }\n\n    /**\n     * The menu item data model containing label, icon, navigation properties, children, and state flags.\n     * Required. Defines all visual and behavioral aspects of the menu item.\n     */\n    @Input() item: EuiMenuItem;\n\n    /**\n     * Reference to the parent menu item when this item is nested within a hierarchical menu structure.\n     * Optional. Used to determine styling and behavior based on menu depth.\n     */\n    @Input() parent: EuiMenuItem;\n\n    /**\n     * Controls visibility of the expand/collapse icon for menu items with children.\n     * @default true. Set to false to hide the expansion indicator.\n     */\n    @Input() hasExpandIcon = true;\n\n    /**\n     * Emitted when the user toggles the expanded/collapsed state of a menu item with children.\n     * Payload: The EuiMenuItem that was toggled. Triggered by clicking the expand icon or pressing Enter/Space on it.\n     */\n    @Output() expandToggle = new EventEmitter<EuiMenuItem>();\n\n    /**\n     * Emitted when the user clicks or activates the menu item.\n     * Payload: The EuiMenuItem that was clicked. Triggered by mouse click or keyboard activation (Enter/Space).\n     */\n    @Output() itemClick = new EventEmitter<EuiMenuItem>();\n\n    expandMenuLabel = 'Expand';\n    collapseMenuLabel = 'Collapse';\n\n    isUrlItem = false;\n    isLinkItem = false;\n    isLabelItem = false;\n    isActionIconFocused = false;\n\n    /**\n     * Indicates whether the menu item displays an icon.\n     * @default false. Affects layout and spacing calculations.\n     */\n    @Input({ transform: booleanAttribute }) hasIcon: boolean;\n\n    /**\n     * Indicates whether the menu item displays an icon with a label in collapsed mode.\n     * @default false. Applies special styling for icon-label combinations when menu is collapsed.\n     */\n    @Input({ transform: booleanAttribute }) hasIconLabel: boolean;\n\n    /**\n     * Enables tooltip display when the menu is in collapsed state.\n     * @default false. Tooltip content is derived from item.tooltip or item.label.\n     */\n    @Input({ transform: booleanAttribute }) hasTooltip: boolean;\n\n    /**\n     * Enables tooltip display when the menu is in expanded state.\n     * @default false. Useful for showing additional context even when labels are visible.\n     */\n    @Input({ transform: booleanAttribute }) hasTooltipOnExpanded: boolean;\n\n    /**\n     * Indicates whether the parent menu is in collapsed state.\n     * @default false. Controls visibility of labels and affects tooltip behavior.\n     */\n    @Input({ transform: booleanAttribute }) isCollapsed: boolean;\n\n    /**\n     * Enables display of initials or abbreviated text when the menu is collapsed.\n     * @default false. Used for compact representation in collapsed menus.\n     */\n    @Input({ transform: booleanAttribute }) hasCollapsedInitials: boolean;\n\n    /**\n     * Applies bold font weight to root-level menu items (items without a parent).\n     * @default false. Provides visual hierarchy distinction for top-level navigation.\n     */\n    @Input({ transform: booleanAttribute }) hasBoldRootLevel: boolean;\n    private elementRef = inject(ElementRef);\n\n    ngOnInit(): void {\n        this.isUrlItem = (this.item.url || this.item.urlExternal || this.item.children || this.item.command) && !this.item.link;\n        this.isLabelItem = !this.item.url && !this.item.urlExternal && !this.item.command && !this.item.children && !this.item.link;\n\n        this.isLinkItem = !this.isUrlItem && !this.isLabelItem;\n        this.ariaLabel = this.getAriaLabel();\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.item && changes.item.isFirstChange()) {\n            this.item = changes.item.currentValue;\n\n            if(!this.item.urlExternalTarget) {\n                this.item.urlExternalTarget = '_blank';\n            }\n\n            this.item.filtered = typeof this.item.filtered == 'boolean' ? this.item.filtered : true;\n            this.item.visible = typeof this.item.visible == 'boolean' ? this.item.visible : true;\n        }\n    }\n\n    @HostListener('click', ['$event'])\n    public stopPropagation(event: MouseEvent): void {\n        this.itemClick.emit(this.item);\n        consumeEvent(event);\n    }\n\n    get menuItemTooltip(): string {\n        if ((this.hasTooltip && this.isCollapsed) || (this.hasTooltipOnExpanded && !this.isCollapsed)) {\n            return this.item.tooltip || this.getTooltipFromItem(this.item);\n        }\n        return null;\n    }\n\n    public onClick(event: MouseEvent | KeyboardEvent): void {\n        this.itemClick.emit(this.item);\n        this.focus();\n        consumeEvent(event);\n    }\n\n    public onExpandToggle(event: Event): void {\n        this.expandToggle.emit(this.item);\n        consumeEvent(event);\n    }\n\n    public onActionIconClick(event: MouseEvent): void {\n        this.item.actionIcon?.action(event);\n        consumeEvent(event);\n    }\n\n    public onActionIconKeyDown(event: KeyboardEvent): void {\n        if (event.key === 'Enter') {\n            this.item.actionIcon?.action(event);\n            consumeEvent(event);\n        }\n    }\n\n    public focusActionIcon(): void {\n        this.elementRef.nativeElement.querySelector('.eui-menu-item__link-action-icon').focus();\n        this.isActionIconFocused = true;\n    }\n\n    onActionIconFocusOut(): void {\n        this.isActionIconFocused = false;\n    }\n\n    public focus(): void {\n        this.elementRef.nativeElement.focus();\n    }\n\n    /**\n     * Check if an element is visible in the viewport\n     * @param partiallyVisible\n     */\n    elementIsVisibleInViewport(partiallyVisible = false): boolean {\n        const { top, left, bottom, right } = this.elementRef.nativeElement.getBoundingClientRect();\n        const { innerHeight, innerWidth } = window as Window;\n        return partiallyVisible\n            ? ((top > 0 && top < innerHeight) ||\n                (bottom > 0 && bottom < innerHeight)) &&\n            ((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth))\n            : top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth;\n    }\n\n    /**\n     * Scroll the element into view\n     * @param properties\n     */\n    scrollIntoView(properties: unknown): void {\n        this.elementRef.nativeElement.scrollIntoView(properties);\n    }\n\n    private getTooltipFromItem(item: EuiMenuItem): string {\n        return item.label && item.tagLabel ? `${item.label} (${item.tagLabel})` : item.label ||\n            item.tagLabel ||\n            null;\n    }\n\n    private getAriaLabel(): string {\n        return this.item.label ||\n            this.item.tagLabel ||\n            (this.item.actionIcon && this.item.actionIcon.label) ||\n            this.item.iconLabel ||\n            'Eui menu item';\n    }\n\n    /**\n     * Returns the default eui-menu-item class on the HostBinding function\n     * @private\n     */\n    private getCssClasses(): string {\n        return [\n            'eui-menu-item',\n            this.isCollapsed && this.hasIconLabel ? 'eui-menu-item--icon-label': '',\n            !this.parent && this.hasBoldRootLevel ? 'eui-menu-item--bold' : '',\n        ].join(' ').trim();\n    }\n}\n","@if (item.visible && item.filtered) {\n    @if (isLabelItem) {\n        <li\n            role=\"none\"\n            id=\"{{item.id}}\"\n            class=\"eui-menu-item__content\"\n            [attr.data-e2e]=\"item.e2eAttr\"\n            [class.eui-menu-item--disabled]=\"item.disabled\"\n            [attr.aria-disabled]=\"item.disabled\"\n            [euiTooltip]=\"(menuItemTooltip | translate)\"\n            tabindex=\"-1\"\n            position=\"after\"\n            [attr.aria-label]=\"isCollapsed ? (item.label | translate) : null\">\n\n            <a\n                (click)=\"onClick($event)\"\n                tabindex=\"-1\"\n                class=\"eui-menu-item__link eui-menu-item__link-category\"\n                [class.eui-menu-item__link--disabled]=\"item.disabled\"\n                [class.eui-menu-item__link--active]=\"item.active\"\n                [class.eui-menu-item__link--has-sub]=\"item.children?.length > 0\"\n                href=\"javascript:void(0)\"\n                [euiTooltip]=\"(menuItemTooltip | translate)\"\n                position=\"after\">\n\n                <div class=\"eui-menu-item__link-start-block\">\n                    <ng-template *ngTemplateOutlet=\"itemIconContent\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-template>\n                </div>\n\n                <div class=\"eui-menu-item__link-content-block\">\n                    <div class=\"eui-menu-item__link-label-container\">\n                        <span class=\"eui-menu-item__link-label-category\">{{ item.label | translate }}</span>\n                    </div>\n                </div>\n\n                <div class=\"eui-menu-item__link-end-block\">\n                    <ng-template *ngTemplateOutlet=\"itemEndContent\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-template>\n                </div>\n            </a>\n        </li>\n    }\n\n    @if (isUrlItem) {\n        <li\n            role=\"none\"\n            id=\"{{item.id}}\"\n            [attr.data-e2e]=\"item.e2eAttr\"\n            class=\"eui-menu-item__content\"\n            [class.eui-menu-item--disabled]=\"item.disabled\"\n            [class.eui-menu-item--expanded]=\"item.expanded || item.filtered\"\n            [attr.aria-disabled]=\"item.disabled\">\n            <a\n                (click)=\"onClick($event)\"\n                class=\"eui-menu-item__link\"\n                [class.eui-menu-item__link--disabled]=\"item.disabled\"\n                [class.eui-menu-item__link--active]=\"item.active\"\n                [class.eui-menu-item__link--has-sub]=\"item.children?.length > 0\"\n                [routerLink]=\"item.url ? item.url : null\"\n                [queryParams]=\"item.queryParams\"\n                [routerLinkActive]=\"item.url ? 'eui-menu-item__link--active' : ''\"\n                [euiTooltip]=\"(menuItemTooltip | translate)\"\n                position=\"after\"\n                [attr.aria-label]=\"isCollapsed ? (item.label | translate) : null\"\n                tabindex=\"-1\">\n                <ng-template *ngTemplateOutlet=\"linkContent\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-template>\n            </a>\n\n            <ng-template *ngTemplateOutlet=\"content\"></ng-template>\n        </li>\n    }\n\n    @if (isLinkItem) {\n        <li\n            role=\"none\"\n            id=\"{{item.id}}\"\n            [attr.data-e2e]=\"item.e2eAttr\"\n            class=\"eui-menu-item__content\"\n            [class.eui-menu-item--disabled]=\"item.disabled\"\n            [class.eui-menu-item--expanded]=\"item.expanded || item.filtered\"\n            [attr.aria-disabled]=\"item.disabled\">\n            <a\n                (click)=\"onClick($event)\"\n                tabindex=\"-1\"\n                class=\"eui-menu-item__link\"\n                [class.eui-menu-item__link--disabled]=\"item.disabled\"\n                [class.eui-menu-item__link--active]=\"item.active\"\n                [class.eui-menu-item__link--has-sub]=\"item.children?.length > 0\"\n                href=\"javascript:void(0)\"\n                [euiTooltip]=\"(menuItemTooltip | translate)\"\n                [attr.aria-label]=\"isCollapsed ? (item.label | translate) : null\"\n                position=\"after\">\n                <ng-template *ngTemplateOutlet=\"linkContent\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-template>\n            </a>\n\n            <ng-template *ngTemplateOutlet=\"content\"></ng-template>\n        </li>\n    }\n}\n\n<ng-template #linkContent>\n    @if (hasIconLabel) {\n        @if (isCollapsed) {\n            <div class=\"eui-menu-item__link-content-icon-block\">\n                <eui-icon-svg\n                    class=\"eui-menu-item__link-icon\"\n                    icon=\"{{ item.iconSvgName }}\"\n                    fillColor=\"{{ item.iconTypeClass }}\" />                \n                <div class=\"eui-menu-item__link-label-container\">\n                    <span class=\"eui-menu-item__link-label\">{{ item.label | translate }}</span>\n                </div>\n            </div>            \n        } @else {\n            <ng-template *ngTemplateOutlet=\"defaultContent\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-template>\n        }\n    } @else {\n        <ng-template *ngTemplateOutlet=\"defaultContent\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-template>\n    } \n\n    <div class=\"eui-menu-item__link-end-block\">\n        <ng-template *ngTemplateOutlet=\"itemEndContent\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-template>\n    </div>\n</ng-template>\n\n<ng-template #defaultContent>\n    <div class=\"eui-menu-item__link-start-block\">\n        <ng-template *ngTemplateOutlet=\"itemIconContent\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-template>\n    </div>\n\n    <div class=\"eui-menu-item__link-content-block\">\n        <div class=\"eui-menu-item__link-label-container\">\n            <span class=\"eui-menu-item__link-label\">{{ item.label | translate }}</span>\n            @if (item.urlExternal && item.urlExternalTarget === '_blank') {\n            <eui-icon-svg\n                class=\"eui-menu-item__label-external\"\n                icon=\"eui-external-link\"\n                size=\"2xs\"\n                aria-label=\"external link icon\"\n                euiEnd>\n            </eui-icon-svg>\n            }\n        </div>\n    </div>\n</ng-template>\n\n\n<!-- PROJECTED CONTENT BLOCK -->\n<ng-template #content>\n    <ng-content />\n</ng-template>\n\n<!-- PROJECTED START BLOCK -->\n<ng-template #itemIconContent>\n    @if (!isCollapsed) {\n        @if (hasIcon) {\n            @if (item.iconSvgName) {\n                <!-- SVG -->\n                <eui-icon-svg\n                    class=\"eui-menu-item__link-icon\"\n                    icon=\"{{ item.iconSvgName }}\"\n                    fillColor=\"{{ item.iconTypeClass }}\" />\n            } @else if (item.iconSvgUrl) {\n                <eui-icon-svg\n                    class=\"eui-menu-item__link-icon\"\n                    iconUrl=\"{{ item.iconSvgUrl }}\"\n                    fillColor=\"{{ item.iconTypeClass }}\" />\n            } @else if (item.hasMarker) {\n                <!-- MARKER -->\n                <eui-icon-svg\n                    class=\"eui-menu-item__link-marker\"\n                    fillColor=\"{{ item?.markerTypeClass }}-light\"\n                    icon=\"eui-circle-fill\"\n                    size=\"2xs\"\n                    [aria-label]=\"item.markerTypeClass + ' ' + 'marker'\" />\n            }\n            @else if (!isLabelItem) {\n                <!-- DEFAULT for non category items -->\n                <eui-icon-svg\n                    class=\"eui-menu-item__link-icon\"\n                    icon=\"eui-circle-fill\"\n                    fillColor=\"secondary\"\n                    size=\"2xs\" />\n            }\n        } @else if (item.hasMarker) {\n            <eui-icon-svg\n                class=\"eui-menu-item__link-marker\"\n                fillColor=\"{{ item?.markerTypeClass }}-light\"\n                icon=\"eui-circle-fill\"\n                size=\"2xs\"\n                [aria-label]=\"item.markerTypeClass + ' ' + 'marker'\" />\n        }\n\n    } @else {\n        @if (hasCollapsedInitials) {\n            <span class=\"eui-menu-item__link-initials eui-u-c-bg-{{item.iconTypeClass}}\">\n                {{ item.initials }}\n            </span>\n        } @else {\n            @if (hasIcon) {\n                @if (item.iconSvgName) {\n                    <!-- SVG -->\n                    <eui-icon-svg\n                        class=\"eui-menu-item__link-icon\"\n                        icon=\"{{ item.iconSvgName }}\"\n                        fillColor=\"{{ item.iconTypeClass }}\" />\n\n                } @else if (item.iconSvgUrl) {\n                    <eui-icon-svg\n                        class=\"eui-menu-item__link-icon\"\n                        iconUrl=\"{{ item.iconSvgUrl }}\"\n                        fillColor=\"{{ item.iconTypeClass }}\" />\n\n                } @else if (item.hasMarker) {\n                    <!-- MARKER -->\n                    <eui-icon-svg\n                        class=\"eui-menu-item__link-marker\"\n                        fillColor=\"{{ item?.markerTypeClass }}\"\n                        icon=\"eui-circle-fill\"\n                        size=\"2xs\"\n                        [aria-label]=\"item.markerTypeClass + ' ' + 'marker'\" />\n                } @else {\n                    <!-- DEFAULT -->\n                    <eui-icon-svg\n                        class=\"eui-menu-item__link-icon\"\n                        icon=\"eui-circle-fill\"\n                        fillColor=\"secondary\"\n                        size=\"2xs\"\n                        [aria-label]=\"item.iconLabel\" />\n                }\n            } @else {\n                <eui-icon-svg\n                    class=\"eui-menu-item__link-icon eui-u-ml-2xs\"\n                    icon=\"eui-square-fill\"\n                    fillColor=\"secondary\"\n                    size=\"2xs\" />\n            }\n        }\n    }\n</ng-template>\n\n<!-- PROJECTED END BLOCK -->\n<ng-template #itemEndContent>\n    @if (item.tagLabel) {\n        @if (isCollapsed) {\n            <eui-badge [euiVariant]=\"item.tagTypeClass\" class=\"eui-menu-item__link-dotted-badge\" />\n        } @else {\n            <eui-badge [euiVariant]=\"item.tagTypeClass\">\n                {{ item.tagLabel }}\n            </eui-badge>\n        }\n    }\n\n    @if (item.actionIcon) {\n    <button\n        euiButton\n        euiRounded\n        euiIconButton\n        euiSizeS\n        euiBasicButton\n        type=\"button\"\n        tabindex=\"-1\"\n        (keydown)=\"onActionIconKeyDown($event)\"\n        (focusout)=\"onActionIconFocusOut()\"\n        (focus)=\"focusActionIcon()\"\n        class=\"eui-menu-item__link-action-icon\"\n        [euiDisabled]=\"item.disabled\"\n        [attr.aria-label]=\"item.actionIcon?.label\"\n        (click)=\"onActionIconClick($event)\">\n        <eui-icon-svg [icon]=\"item.actionIcon?.icon\" [fillColor]=\"item.actionIcon?.color\"></eui-icon-svg>\n    </button>\n    }\n\n    @if (hasExpandIcon) {\n        @if (item.children?.length > 0) {\n        <eui-icon-button\n                         class=\"eui-menu-item__link-toggle\"\n                         [icon]=\"item.expanded ? 'eui-chevron-up': 'eui-chevron-down'\"\n                         (buttonClick)=\"onExpandToggle($event)\"\n                         [ariaLabel]=\"item.expanded ? collapseMenuLabel : expandMenuLabel\"\n                         euiRounded\n                         size=\"s\"\n                         [tabindex]=\"-1\"\n                         [euiDisabled]=\"item.disabled\"/>\n        }\n    }\n</ng-template>\n","import {\n    Component,\n    HostBinding,\n    ViewEncapsulation,\n    Input,\n    OnInit,\n    Output,\n    EventEmitter,\n    OnChanges,\n    SimpleChanges,\n    HostListener,\n    booleanAttribute,\n    OnDestroy,\n    AfterViewInit,\n    ViewChildren,\n    QueryList,\n    ChangeDetectorRef,\n    ViewChild,\n    ElementRef,\n    inject,\n} from '@angular/core';\nimport { Router, ActivatedRoute, NavigationEnd } from '@angular/router';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { Subscription } from 'rxjs';\n\nimport { consumeEvent } from '@eui/core';\nimport { EuiMenuItemComponent } from './eui-menu-item.component';\nimport { EuiMenuItem } from './models/eui-menu-item.model';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { EUI_ICON } from '@eui/components/eui-icon';\nimport { EUI_ICON_INPUT } from '@eui/components/eui-icon-input';\nimport { EUI_INPUT_TEXT } from '@eui/components/eui-input-text';\n\n/**\n * Navigation menu component supporting hierarchical item structures with expand/collapse functionality,\n * keyboard navigation, filtering, and router integration. Provides both collapsed and expanded states\n * with optional icons, tooltips, and scroll-to-active-item behavior. Commonly used for application\n * sidebars, navigation panels, and hierarchical content navigation.\n *\n * @usageNotes\n * ### Basic Usage\n * ```typescript\n * menuItems: EuiMenuItem[] = [\n *   { id: '1', label: 'Dashboard', url: '/dashboard', icon: 'eui-home' },\n *   { id: '2', label: 'Settings', children: [\n *     { id: '2-1', label: 'Profile', url: '/settings/profile' },\n *     { id: '2-2', label: 'Security', url: '/settings/security' }\n *   ]}\n * ];\n * ```\n *\n * ```html\n * <eui-menu [items]=\"menuItems\" [hasIcons]=\"true\"></eui-menu>\n * ```\n *\n * ### With Filter\n * ```html\n * <eui-menu [items]=\"menuItems\" [hasFilter]=\"true\" searchFilterLabel=\"Search menu\"></eui-menu>\n * ```\n *\n * ### Collapsed Mode\n * ```html\n * <eui-menu [items]=\"menuItems\" [isCollapsed]=\"true\" [hasTooltip]=\"true\"></eui-menu>\n * ```\n *\n * ### Accessibility\n * - Full keyboard navigation with Arrow keys, Enter, and Space\n * - ARIA roles and properties for menu structure\n * - Focus management for nested items\n * - Screen reader announcements for expand/collapse states\n *\n * ### Notes\n * - Supports URL navigation, router links, and command callbacks\n * - Automatically expands to active route when `hasScrollToItem` is enabled\n * - Filter functionality searches through all menu levels\n * - Collapsed mode shows icons or initials with tooltips\n */\n@Component({\n    selector: 'eui-menu',\n    templateUrl: './eui-menu.component.html',\n    styleUrls: ['./styles/_index.scss'],\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        NgTemplateOutlet,\n        EuiMenuItemComponent,\n        ...EUI_ICON,\n        ...EUI_ICON_INPUT,\n        ...EUI_INPUT_TEXT,\n    ],\n})\nexport class EuiMenuComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n    @ViewChildren(EuiMenuItemComponent) protected menuItemsComponents: QueryList<EuiMenuItemComponent>;\n    @ViewChild('filterInput', { read: ElementRef }) protected filterInput: ElementRef<HTMLInputElement>;\n    @ViewChild('menubar', { read: ElementRef }) menubar: ElementRef<HTMLUListElement>;\n\n    @HostBinding('class')\n    public get cssClasses(): string {\n        return [\n            'eui-menu',\n            this.isCollapsed ? 'eui-menu--collapsed' : '',\n            !this.hasIcons ? 'eui-menu--no-icons' : '',\n            this.isFlat ? 'eui-menu--flat': '',\n        ].join(' ').trim();\n    }\n\n    /**\n     * Hierarchical array of menu items to display. Each item can contain children for nested menus.\n     * Required.\n     */\n    @Input() items: EuiMenuItem[];\n    /**\n     * Accessible label for the search filter input field. Defaults to 'Search filter' if not provided.\n     */\n    @Input() searchFilterLabel: string;\n    /**\n     * Accessible label for external link indicators.\n     */\n    @Input() externalLinkLabel: string;\n    /**\n     * URL fragment identifier to append when navigating to internal routes.\n     */\n    @Input() fragmentId: string;\n    /**\n     * Current filter value for programmatic filtering of menu items. Defaults to empty string.\n     */\n    @Input() filterValue = '';\n\n    /**\n     * Collapses the menu to a compact state showing only icons or initials. Defaults to false.\n     */\n    @Input({ transform: booleanAttribute }) isCollapsed = false;\n    /**\n     * Displays item initials when menu is collapsed instead of icons. Defaults to false.\n     */\n    @Input({ transform: booleanAttribute }) hasCollapsedInitials = false;\n    /**\n     * Enables the search filter input for filtering menu items by label. Defaults to false.\n     */\n    @Input({ transform: booleanAttribute }) hasFilter = false;\n    /**\n     * Displays icons for menu items when provided in item configuration. Defaults to false.\n     */\n    @Input({ transform: booleanAttribute }) hasIcons = false;\n    /**\n     * Shows labels alongside icons in the menu. Defaults to false.\n     */\n    @Input({ transform: booleanAttribute }) hasIconsLabels = false;\n    /**\n     * Enables tooltips on menu items when collapsed. Defaults to true.\n     */\n    @Input({ transform: booleanAttribute }) hasTooltip = true;\n    /**\n     * Shows tooltips even when menu is expanded. Defaults to false.\n     */\n    @Input({ transform: booleanAttribute }) hasTooltipOnExpanded = false;\n    /**\n     * Expands all menu items that do not have an explicit expanded property set. Items with\n     * expanded: true or expanded: false are not affected. Defaults to false.\n     */\n    @Input({ transform: booleanAttribute }) expandAllItems = false;\n    /**\n     * Applies flat styling without hierarchical indentation. Defaults to false.\n     */\n    @Input({ transform: booleanAttribute }) isFlat = false;\n    /**\n     * Automatically scrolls to the active menu item matching the current route on navigation.\n     * Defaults to false.\n     */\n    @Input({ transform: booleanAttribute }) hasScrollToItem = false;\n    /**\n     * Applies bold font weight to root-level menu items. Defaults to false.\n     */\n    @Input({ transform: booleanAttribute }) hasBoldRootLevel = false;\n\n    /**\n     * Emits true when any menu item is clicked, regardless of item type or state.\n     */\n    @Output() isClick: EventEmitter<boolean> = new EventEmitter();\n    /**\n     * Emits the clicked menu item. Triggered on all item clicks including disabled items.\n     */\n    @Output() itemClick: EventEmitter<EuiMenuItem> = new EventEmitter<EuiMenuItem>();\n    /**\n     * Emits the menu item when its expanded state is toggled. Only triggered for items with children.\n     */\n    @Output() expandToggle = new EventEmitter<EuiMenuItem>();\n\n    protected hasExpandIcon = true;\n    private subscription: Subscription;\n    private focusKeyManager: FocusKeyManager<EuiMenuItemComponent>;\n    private router = inject(Router);\n    private route = inject(ActivatedRoute);\n    private cd = inject(ChangeDetectorRef);\n\n    @HostListener('click', ['$event'])\n    stopPropagation(event: MouseEvent): void {\n        event.stopPropagation();\n    }\n\n    onKeydown(event: KeyboardEvent): void {\n        // finds first child when ArrowDown\n        const firstChild = this.focusKeyManager.activeItem?.item.children? this.findFirstFilteredItem(this.focusKeyManager.activeItem?.item.children) : undefined;\n        const firstFocusableItem = this.findFocusableItem(firstChild);\n        // finds the parent element\n        const parent = this.focusKeyManager.activeItem?.item.parent;\n        const parentFocusableItem = this.findFocusableItem(parent);\n        switch (event.key) {\n            case 'Enter': {\n                if (\n                    (this.focusKeyManager.activeItem.isLinkItem || this.focusKeyManager.activeItem.isUrlItem) &&\n                    !this.focusKeyManager.activeItem.disabled\n                ) {\n                    this.focusKeyManager.activeItem.onClick(event);\n                    event.preventDefault();\n                }\n                break;\n            }\n            case 'ArrowRight': {\n                if(this.isFilterEnabled()) {\n                    break;\n                }\n                if(this.focusKeyManager.activeItem?.item.actionIcon){\n                    this.checkActionIconFocusState();\n                    break;\n                } else {\n                    if (!this.focusKeyManager.activeItem?.item.expanded) {\n                        this.focusKeyManager.activeItem?.onExpandToggle(event);\n                        this.cd.detectChanges();\n                    }\n                    break;\n                }\n            }\n            case 'ArrowLeft': {\n                if(this.isFilterEnabled()) {\n                    break;\n                }\n                if(this.focusKeyManager.activeItem?.item.actionIcon){\n                    this.checkActionIconFocusState();\n                    break;\n                } else {\n                    if (this.focusKeyManager.activeItem?.item.expanded) {\n                        this.focusKeyManager.activeItem.onExpandToggle(event);\n                        this.cd.detectChanges();\n                        event.preventDefault();\n                    }\n                    break;\n                }\n            }\n            case 'ArrowDown': {\n                event.preventDefault();\n                if (this.shouldRenderChild(this.focusKeyManager.activeItem?.item)) {\n                    //focuses first child\n                    firstFocusableItem?.focus();\n                    this.focusKeyManager.updateActiveItem(firstFocusableItem);\n                } else if (parent) {\n                    // finds last filtered child when ArrowDown and navigating within submenu\n                    const filteredChildren = this.findFilteredItems(parent.children);\n                    const lastChildIndex = (filteredChildren?.length) - 1;\n                    const lastChild = filteredChildren[lastChildIndex];\n                    const lastFocusableItem = this.findFocusableItem(lastChild);\n                    // if the active item is the last child, puts the focus on the next parent\n                    if(this.focusKeyManager.activeItem === lastFocusableItem){\n                       this.focusKeyManager.updateActiveItem(parentFocusableItem);\n                       this.focusKeyManager.setNextItemActive();\n                    } else {\n                        this.focusKeyManager.setActiveItem(this.focusKeyManager.activeItemIndex +1);\n                    }\n                } else {\n                    // skips remaining children in the query list when there is expanded node\n                    this.focusKeyManager.skipPredicate(menuItem => menuItem.parent != undefined || menuItem.item.visible === false);\n                    this.focusKeyManager.onKeydown(event);\n                }\n                break;\n            }\n            case 'ArrowUp': {\n                event.preventDefault();\n                if (parent) {\n                    // finds first filtered child when ArrowUp\n                    const filteredChildren = this.findFilteredItems(parent.children);\n                    const firstChildUp = filteredChildren['0']\n                    const firstFocusableItemUp = this.findFocusableItem(firstChildUp);\n                    // when navigating up on a submenu focuses the parent if the active item is the first child\n                    if(this.focusKeyManager.activeItem === firstFocusableItemUp){\n                        this.focusKeyManager.setActiveItem(parentFocusableItem);\n                     } else {\n                        this.focusKeyManager.setActiveItem(this.focusKeyManager.activeItemIndex -1);\n                     }\n                } else {\n                    this.focusKeyManager.onKeydown(event);\n                    // when navigating up from a parent element to an expanded submenu, finds the last child and focuses it\n                    if(this.shouldRenderChild(this.focusKeyManager.activeItem?.item)){\n                        const filteredChildren = this.findFilteredItems(this.focusKeyManager.activeItem?.item.children);\n                        const lastChildIndexUp = (filteredChildren.length) - 1;\n                        const lastFocusableItemUp =this.findFocusableItem(filteredChildren[lastChildIndexUp]);\n                        this.focusKeyManager.setActiveItem(lastFocusableItemUp);\n                    }\n                }\n                break;\n            }\n            default: {\n                this.focusKeyManager.onKeydown(event);\n                break;\n            }\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.items) {\n            this.items = this.configureItems(this.items);\n            // get current url\n            const currentUrl = this.router.url;\n            // find an item that matches the current url or the most relevant one\n            const item = this.findMostRelevantItem(currentUrl, this.items);\n            // expand to that item\n            if (item) {\n                this.expandToGivenItem(item);\n            }\n        }\n\n        // Expand / Collapse All items\n        if (changes.expandAllItems) {\n            this.items = this.setExpandedToAllItems(coerceBooleanProperty(changes.expandAllItems.currentValue), this.items);\n        }\n\n        if (changes.filterValue && this.hasFilter) {\n            this.onFilter(changes.filterValue.currentValue ?? '');\n        }\n\n        // Refresh when interactive collapsed to initials\n        if (changes.hasCollapsedInitials) {\n            this.hasCollapsedInitials = changes.hasCollapsedInitials.currentValue;\n            this.items = this.configureItems(this.items);\n        }\n\n        if(changes.hasScrollToItem){\n            this.hasScrollToItem = changes.hasScrollToItem.currentValue;\n            if(this.hasScrollToItem){\n                this.scrollToItem(this.router.url);\n            }\n        }\n\n        if(changes.hasFilter){\n            this.hasFilter = changes.hasFilter.currentValue;\n            if(!this.hasFilter) {\n                // iterate through all items and reset the filtered property\n                this.items = this.filterMenuItems(this.items, '')\n            }\n        }\n    }\n\n    ngOnInit(): void {\n        // Labels default values - TODO : translations\n        if (!this.searchFilterLabel) {\n            this.searchFilterLabel = 'Search filter';\n        }\n\n        // subscription to routes url changes for activating the scrollIntoView\n        this.router.events.subscribe((event) => {\n            // Handle route change event\n            if (event instanceof NavigationEnd) {\n                if (this.hasScrollToItem) {\n                    this.scrollToItem(event.url);\n                }\n            }\n        });\n    }\n\n    ngAfterViewInit(): void {\n        // instantiates FocusKeyManager with the query list of items enabling wrapping\n        this.focusKeyManager = new FocusKeyManager(this.menuItemsComponents).withWrap();\n\n        // scrolls to the item that matches the current url\n        if(this.hasScrollToItem){\n            this.scrollToItem(this.router.url);\n        }\n    }\n\n    ngOnDestroy():void {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    }\n\n    protected onClick(item: EuiMenuItem): void {\n        if (!item.disabled) {\n            if (item.urlExternal) {\n                window.open(item.urlExternal, item.urlExternalTarget || '_blank');\n            } else if (item.url) {\n                this.router.navigate([item.url], { relativeTo: this.route, fragment: this.fragmentId, queryParams: item.queryParams });\n            } else {\n                if (typeof item.command === 'function') {\n                    item.command();\n                } else {\n                    this.onExpandToggle(item);\n                }\n            }\n\n            if (item.link) {\n                this.items = this.items?.map((it) => {\n                    it.active = false;\n                    if (it.id === item.id) {\n                        it.active = true;\n                    }\n                    return it;\n                });\n            }\n        }\n\n        this.isClick.emit(true);\n        this.itemClick.emit(item);\n\n        const focusedItem = this.findFocusableItem(item);\n        this.focusKeyManager.updateActiveItem(focusedItem);\n    }\n\n    protected onExpandToggle(item: EuiMenuItem): void {\n        if (item.children) {\n            this.expandToggle.emit(item);\n            this.onExpandToggled(item, this.items);\n            // TODO: investigate why the above is needed. Can it be simply \"item.expanded = !item.expanded;\" ?\n        }\n    }\n\n    protected onMenuFilterClick(event: MouseEvent): void {\n        consumeEvent(event);\n    }\n\n    /**\n     * Filter the menu items based on the input value\n     * @param event\n     * @protected\n     */\n    protected onFilter(event: Event): void;\n    protected onFilter(value: string): void;\n    protected onFilter(eventOrValue: Event | string): void {\n        const value = eventOrValue instanceof Event\n            ? (eventOrValue.target as HTMLInputElement).value\n            : eventOrValue;\n        this.items = this.filterMenuItems(this.items, value);\n        this.hasExpandIcon = !(this.isFilterEnabled());\n    }\n\n    /**\n     * Check if the children of an item should be rendered. The children should be rendered if the item is expanded\n     * or if the item is filtered and the filter input has a value. There are two cases when the filter input has a value:\n     * 1. The user has typed something in the filter input\n     * 2. The user has typed something in the filter input and the item is filtered\n     * In general there are two states to be taken into account, the expanded state and the filtered state.\n     *\n     * @param item\n     * @protected\n     */\n    protected shouldRenderChild(item: EuiMenuItem): boolean {\n        return item?.children &&\n            (\n                item?.expanded || (\n                    this.hasFilter &&\n                    item?.filtered &&\n                    this.isFilterEnabled()\n                )\n            )\n    }\n\n    /**\n     * finds the EuiMenuItemComponent in the queried focusableItems[] that  matches the passed EuiMenuItem object\n     *\n     * @param menuItem an EuiMenuItem\n     * @private\n     */\n    private findFocusableItem(menuItem: EuiMenuItem ): EuiMenuItemComponent {\n        return this.menuItemsComponents.find(\n            (focusableItem) => focusableItem.item.label === menuItem?.label && focusableItem.item.id === menuItem.id,\n        );\n    }\n\n    /**\n     * finds the first item that is filtered\n     *\n     * @param menuItems an array of EuiMenuItem\n     * @private\n     */\n    private findFirstFilteredItem(menuItems: EuiMenuItem []): EuiMenuItem {\n        return menuItems.find((item) => item.filtered);\n    }\n\n    /**\n     * finds all filtered menu items\n     *\n     * @param menuItems an array of EuiMenuItem\n     * @private\n     */\n    private findFilteredItems(menuItems: EuiMenuItem []): EuiMenuItem [] {\n        return menuItems.filter((items) => items.filtered);\n    }\n\n    /**\n     * checks the focus state of the action icon\n     *\n     * @private\n     */\n    private checkActionIconFocusState(): void {\n        // check if the action icon is focused and if not focus it, otherwise focus the active item\n        // eslint-disable-next-line\n        !this.focusKeyManager.activeItem.isActionIconFocused ? this.focusKeyManager.activeItem.focusActionIcon() : this.focusKeyManager.activeItem.focus();\n    }\n\n    /**\n     * filter all menu items given a value\n     *\n     * @param menuItems an array of menu items\n     * @param filterValue the value to filter menu items\n     * @private\n     */\n    private filterMenuItems(menuItems: EuiMenuItem[], filterValue: string): EuiMenuItem[] {\n        return menuItems?.map((item: EuiMenuItem) => {\n            const found = item.label?.toLowerCase().indexOf(filterValue.toLowerCase()) !== -1;\n            if (item.children) {\n                item.children = this.filterMenuItems(item.children, filterValue);\n                item.filtered = item.children.filter((l) => l['filtered'] === true).length > 0;\n            } else if (found) {\n                item.filtered = found;\n            } else {\n                item.filtered = false;\n            }\n            return item;\n        }) || [];\n    }\n\n    /**\n     * expand / collapse all items\n     *\n     * @param isExpanded\n     * @param items\n     * @private\n     */\n    private setExpandedToAllItems(isExpanded: boolean, items: EuiMenuItem[]): EuiMenuItem[] {\n        return items?.map((item) => {\n            if (item.children) {\n                item.expanded = item.expanded ?? isExpanded;\n                item.children = this.setExpandedToAllItems(isExpanded, item.children);\n            }\n            return Object.assign(item, { visible: item.visible === undefined ? true : item.visible });\n        });\n    }\n\n    /**\n     * expand / collapse a menu item\n     *\n     * @param item The item where the \"expand\" had been toggled\n     * @param items The items list (used for recursion)\n     * @private\n     */\n    private onExpandToggled(item: EuiMenuItem, items: EuiMenuItem[]): void {\n        const itemIdx = items?.indexOf(item);\n        if (itemIdx > -1) {\n            items[itemIdx].expanded = !items[itemIdx].expanded;\n        } else {\n            items.forEach((i) => {\n                if (i.children) {\n                    this.onExpandToggled(item, i.children);\n                }\n            });\n        }\n    }\n\n    /**\n     * configure an array of items with visible, filtered and expand (in case of expandAllItems flag enabled) properties\n     *\n     * @param items An array of EuiMenuItem\n     * @param parent the parent item of items if exists\n     * @private\n     */\n    private configureItems(items: EuiMenuItem[], parent?: EuiMenuItem): EuiMenuItem[] {\n        return items?.map((item) => {\n            // recursion in case there are children\n            if (item.children) {\n                item.children = this.configureItems(item.children, item);\n                // expand all parents with children\n                if (this.expandAllItems) {\n                    item.expanded = true;\n                }\n            }\n            // point to the parent\n            if (parent) {\n                item.parent = parent;\n            }\n\n            // make sure the items are configured with a unique id\n            this.items = this.items?.map((item) => this.setRandomId(item));\n\n            if (item.label && this.hasCollapsedInitials) {\n                const words = item.label.split(' ');\n                if (words.length === 1) {\n                    item.initials = `${item.label.substring(0, 1)}${item.label.substring(1, 1)}`;\n\n                } else {\n                    item.initials = `${words[0].substring(0, 1)}${words[1].substring(0, 1)}`;\n                }\n            }\n\n            return Object.assign(item, { visible: item.visible === undefined ? true : item.visible, filtered: true });\n        });\n    }\n\n    /**\n     * Given a URL and a list of items, it will expand the item that matches the URL. If not item matches exactly the url, then it will\n     * match the item that is most relevant to that url.\n     *\n     * @param url\n     * @param items\n     * @param relevantItem\n     * @private\n     */\n    private findMostRelevantItem(url: string, items: EuiMenuItem[], relevantItem?: EuiMenuItem): EuiMenuItem {\n        if (!items) {\n            return null;\n        }\n\n        items.forEach((item) => {\n            if (item.url && url.indexOf(item.url.substring(1)) > -1) {\n                relevantItem = this.getMostRelevantItem(url, relevantItem, item);\n            }\n\n            if (item.children) {\n                relevantItem = this.findMostRelevantItem(url, item.children, relevantItem);\n            }\n        });\n\n        return relevantItem;\n    }\n\n    /**\n     * Given two items with url return the one with the most relevant url that matches given url\n     *\n     * @param url A URL to be matched with the one of given items\n     * @param item1\n     * @param item2\n     * @private\n     */\n    private getMostRelevantItem(url: string, item1: EuiMenuItem, item2: EuiMenuItem): EuiMenuItem {\n        const remainder1 = url.replace(item1?.url || '', '');\n        const remainder2 = url.replace(item2?.url || '', '');\n\n        return remainder1.length < remainder2.length ? item1 : item2;\n    }\n\n    /**\n     * Given an item, if there's a parent expand it until you reach the root item\n     *\n     * @param item Given menu item\n     * @private\n     */\n    private expandToGivenItem(item: EuiMenuItem): void {\n        if (item.parent) {\n            setTimeout(() => (item.parent.expanded = true));\n            this.expandToGivenItem(item.parent);\n        }\n    }\n\n    /**\n     * Set a random id to an item and its child if they don't have one\n     * @param item\n     * @private\n     */\n    private setRandomId(item: EuiMenuItem): EuiMenuItem {\n        item.id = item.id || crypto.randomUUID();\n        if(item.children){\n            item.children = item.children.map((child) => {\n                return this.setRandomId(child);\n            });\n        }\n        return item;\n    }\n\n    /**\n     * Scroll to an item if it's not visible in the viewport\n     * @param url\n     * @private\n     */\n    private scrollToItem(url: string): void {\n        const item = this.findMostRelevantItem(url, this.items);\n        if (item) {\n            // change the state of that item to expanded if it's not\n            this.expandToGivenItem(item);\n            setTimeout(_ => {\n                const menuItem = this.menuItemsComponents?.find((menuItem) => menuItem.item.id === item.id);\n                if(menuItem && !menuItem.elementIsVisibleInViewport()){\n                    menuItem.scrollIntoView({ behavior: 'smooth' });\n                }\n            }, 300);\n        }\n    }\n\n    /**\n     * Check if the filter input has a value\n     * @private\n     */\n    private isFilterEnabled(): boolean {\n        return this.filterInput?.nativeElement?.value.length > 0\n    }\n}\n","@if (hasFilter) {\n    <div class=\"eui-menu-filter\" [class.eui-menu-filter--collapsed]=\"isCollapsed\" (click)=\"onMenuFilterClick($event)\">\n        <eui-icon-input>\n            <eui-icon-svg icon=\"eui-search\" fillColor=\"secondary\"></eui-icon-svg>\n            <input\n                #filterInput\n                euiInputText\n                [euiClearable]=\"true\"\n                (input)=\"onFilter($event)\"\n                [placeholder]=\"searchFilterLabel\"\n                [attr.aria-label]=\"searchFilterLabel\"\n                [value]=\"filterValue\" />\n        </eui-icon-input>\n    </div>\n}\n\n<ul #menubar euiList class=\"eui-menu\" role=\"menubar\" aria-orientation=\"vertical\" tabindex=\"0\" (keydown)=\"onKeydown($event)\">\n    @if (items) {\n        @for (item of items; track item.id; let index = $index) {\n            <ng-template [ngTemplateOutlet]=\"menuItemTemplateRef\" [ngTemplateOutletContext]=\"{ menuItem: item, index: index }\"></ng-template>\n        }\n    } @else {\n        <span class=\"eui-menu--no-items\">No menu items defined</span>\n    }\n</ul>\n\n<!-- describe the recursive template of the menu item -->\n<ng-template #menuItemTemplateRef let-item=\"menuItem\" let-parent=\"parent\" let-i=\"index\">\n    <!-- render the menu item-->\n    @if (item.filtered) {\n    <eui-menu-item\n        [item]=\"item\"\n        [parent]=\"parent\"\n        [hasIcon]=\"hasIcons\"\n        [hasIconLabel]=\"hasIconsLabels\"\n        [hasTooltip]=\"hasTooltip\"\n        [hasTooltipOnExpanded]=\"hasTooltipOnExpanded\"\n        [isCollapsed]=\"isCollapsed\"\n        [hasBoldRootLevel]=\"hasBoldRootLevel\"\n        [hasCollapsedInitials]=\"hasCollapsedInitials\"\n        (expandToggle)=\"onExpandToggle($event)\"\n        (itemClick)=\"onClick($event)\"\n        [hasExpandIcon]=\"hasExpandIcon\">\n        <!-- if the menu item has children, render the children -->\n        @if (shouldRenderChild(item)) {\n            <ul euiList class=\"eui-menu eui-menu-sub\" role=\"menu\" [attr.aria-label]=\"item.label\" tabindex=\"-1\">\n                @for (child of item.children; track child.id; let childIndex = $index) {\n                    <ng-template [ngTemplateOutlet]=\"menuItemTemplateRef\" [ngTemplateOutletContext]=\"{ menuItem: child, index: childIndex, parent: item }\">\n                    </ng-template>\n                }\n            </ul>\n        }\n    </eui-menu-item>\n    }\n</ng-template>\n","import { EuiMenuItemComponent } from './eui-menu-item.component';\nimport { EuiMenuComponent } from './eui-menu.component';\n\nexport * from './eui-menu.component';\nexport * from './eui-menu-item.component';\nexport * from './models/eui-menu-item.model';\n\nexport const EUI_MENU = [\n    EuiMenuComponent,\n    EuiMenuItemComponent,\n] as const;","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3"],"mappings":"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"}