{"version":3,"file":"seniorsistemas-angular-components-tiered-menu.mjs","sources":["../../projects/angular-components/tiered-menu/src/lib/tiered-menu/services/tiered-menu.service.ts","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/services/tiered-menu.global.service.ts","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/services/tiered-menu.event.service.ts","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.ts","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.html","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.ts","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.html","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.ts","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.html","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/components/tiered-menu/tiered-menu.component.ts","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/components/tiered-menu/tiered-menu.component.html","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/tiered-menu.directive.ts","../../projects/angular-components/tiered-menu/src/lib/tiered-menu/tiered-menu.module.ts","../../projects/angular-components/tiered-menu/src/seniorsistemas-angular-components-tiered-menu.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { TieredMenuItemData } from '../models/tiered-menu-item-data';\nimport { TieredMenuItemInternalData } from '../models/tiered-menu-item-internal-data';\n\n@Injectable()\nexport class TieredMenuService {\n    public currentItem?: TieredMenuItemInternalData | null = null;\n    public currentItems: TieredMenuItemInternalData[] = [];\n    public items: TieredMenuItemInternalData[] = [];\n\n    public normalizeData(\n        items: TieredMenuItemData[],\n        parent?: TieredMenuItemInternalData,\n    ): TieredMenuItemInternalData[] {\n        return items.map((i: TieredMenuItemInternalData) => {\n            const item = {\n                visible: true,\n                ...i,\n            };\n            if (item.submenu) {\n                item.submenu = this.normalizeData(item.submenu, item);\n            }\n            item.id = this._generateId();\n            item.parent = parent;\n            item.isOpen = false;\n            return item;\n        });\n    }\n\n    public markAllItemsAsClosed(items: TieredMenuItemInternalData[]): TieredMenuItemInternalData[] {\n        return items.map((i: TieredMenuItemInternalData) => {\n            const item = { ...i };\n            if (item.submenu) {\n                item.submenu = this.markAllItemsAsClosed(item.submenu);\n            }\n            item.isOpen = false;\n            return item;\n        });\n    }\n\n    public searchTheHierarchy(itemA: TieredMenuItemInternalData, itemB: TieredMenuItemInternalData) {\n        let item: TieredMenuItemInternalData | null = itemB;\n        while (item) {\n            if (item === itemA) {\n                return true;\n            }\n            item = item.parent ?? null;\n        }\n        return false;\n    }\n\n    public cloneItems(items: TieredMenuItemInternalData[]): TieredMenuItemInternalData[] {\n        return JSON.parse(JSON.stringify(items));\n    }\n\n    private _generateId(): string {\n        return `id-${Math.random().toString(36).substring(2, 9)}-${Math.random().toString(36).substring(2, 9)}-${Math.random().toString(36).substring(2, 9)}`;\n    }\n}\n\n","import { Injectable } from '@angular/core';\nimport { TieredMenuDirective } from '../tiered-menu.directive';\n\n@Injectable()\nexport class TieredMenuGlobalService {\n    public lastInstance?: TieredMenuDirective | null;\n}\n","import { Injectable, EventEmitter } from '@angular/core';\n\nimport { TieredMenuItemInternalData } from '../models/tiered-menu-item-internal-data';\n\n@Injectable()\nexport class TieredMenuEventService {\n    public incrementCurrentItemEvent = new EventEmitter();\n    public decrementCurrentItemEvent = new EventEmitter();\n    public closeAllMenusEvent = new EventEmitter();\n    public selectItemEvent =\n        new EventEmitter<TieredMenuItemInternalData | null>();\n    public openItemMenuEvent =\n        new EventEmitter<TieredMenuItemInternalData | null>();\n    public closeItemMenuEvent =\n        new EventEmitter<TieredMenuItemInternalData | null>();\n    public createMenuEvent =\n        new EventEmitter<TieredMenuItemInternalData | null>();\n}\n","import { Component, HostListener, Input, inject } from '@angular/core';\n\nimport { TieredMenuEventService } from '../../services/tiered-menu.event.service';\nimport { TieredMenuItemInternalData } from '../../models';\n\n@Component({\n    selector: 's-tiered-menu-item',\n    templateUrl: './tiered-menu-item.component.html',\n    styleUrls: ['./tiered-menu-item.component.scss'],\n})\nexport class TieredMenuItemComponent {\n    private readonly _tieredMenuEventService = inject(TieredMenuEventService);\n\n    @Input({ required: true })\n    public item!: TieredMenuItemInternalData;\n\n    @Input()\n    public focused = false;\n\n    @Input()\n    public highlight? = false;\n\n    @Input()\n    public triggerEvent: 'click' | 'hover' = 'click';\n\n    @Input()\n    public closeOnClick = false;\n\n    private _showTimeout?: number;\n\n    @HostListener('click')\n    @HostListener('touchend')\n    public onClick(): void {\n        if (this.item.disabled) return;\n\n        if (this.item.submenu) {\n            if (!this.item.isOpen) {\n                this._tieredMenuEventService.openItemMenuEvent.emit(this.item);\n            } else if (this.closeOnClick) {\n                this._tieredMenuEventService.closeItemMenuEvent.emit(this.item);\n            }\n        } else {\n            this._tieredMenuEventService.selectItemEvent.emit(this.item);\n        }\n    }\n\n    @HostListener('mouseenter')\n    public onMouseEnter(): void {\n        if (this.item.disabled) return;\n\n        if (this.triggerEvent === 'hover' && !this.item.isOpen) {\n            this._showTimeout = window.setTimeout(() => {\n                this._tieredMenuEventService.openItemMenuEvent.emit(this.item);\n            }, 300);\n        }\n    }\n\n    @HostListener('mouseleave')\n    public onMouseLeave(): void {\n        window.clearTimeout(this._showTimeout);\n    }\n}\n\n","<div\n    [id]=\"item.id\"\n    class=\"tiered-menu-item\"\n    role=\"menuitem\"\n    [tabindex]=\"focused && !item.disabled ? 0 : -1\"\n    [attr.aria-disabled]=\"item.disabled || null\"\n    [attr.aria-haspopup]=\"item.submenu ? 'menu' : null\"\n    [attr.aria-expanded]=\"item.submenu ? item.isOpen : null\"\n    [attr.data-key]=\"item.dataKey\"\n    [ngClass]=\"{\n        'tiered-menu-item--open': item.isOpen,\n        'tiered-menu-item--focused': focused,\n        'tiered-menu-item--disabled': item.disabled,\n    }\"\n>\n    <div class=\"tiered-menu-item-content\">\n        <span\n            class=\"icon\"\n            [ngClass]=\"item.iconClass\"\n        ></span>\n        <span class=\"label\">{{ item.label }}</span>\n    </div>\n    @if (item.submenu) {\n        <span\n            class=\"submenu-icon fas\"\n            [class.fa-chevron-left]=\"item.isOpen\"\n            [class.fa-chevron-right]=\"!item.isOpen\"\n        >\n        </span>\n    }\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n    selector: 's-tiered-menu-divider',\n    templateUrl: './tiered-menu-divider.component.html',\n    styleUrls: ['./tiered-menu-divider.component.scss'],\n})\nexport class TieredMenuDividerComponent {}\n","<div class=\"divider\"></div>\n","import { Component, HostListener, OnDestroy, OnInit, inject } from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nimport { TieredMenuItemInternalData } from '../../models/tiered-menu-item-internal-data';\nimport { TieredMenuEventService } from '../../services/tiered-menu.event.service';\nimport { TieredMenuService } from '../../services/tiered-menu.service';\nimport { takeUntil } from 'rxjs/operators';\nimport { disableScroll, enableScroll } from '@seniorsistemas/angular-components/utils';\n\n@Component({\n    templateUrl: './tiered-menu-nested.component.html',\n    styleUrls: ['./tiered-menu-nested.component.scss'],\n})\nexport class TieredMenuNestedComponent implements OnInit, OnDestroy {\n    readonly tieredMenuService = inject(TieredMenuService);\n    private readonly _tieredMenuEventService = inject(TieredMenuEventService);\n\n    public items!: TieredMenuItemInternalData[];\n    public top = 0;\n    public left = 0;\n    // public maxHeight = 0;\n\n    // Saves the last opened item to close it when a new one is opened\n    private _lastOpenItem?: TieredMenuItemInternalData;\n    private _unsubscribe$ = new Subject<void>();\n\n    @HostListener('window:resize')\n    public onResize(): void {\n        this._tieredMenuEventService.closeAllMenusEvent.emit();\n    }\n\n    @HostListener('document:click', ['$event'])\n    public onDocumentClick(event: MouseEvent): void {\n        // Closing menu when clicked outside.\n        const target = event.target as Element;\n        const clickedInside = target.closest('s-tiered-menu-item') || target.closest('s-tiered-menu-divider');\n        if (!clickedInside) {\n            this._tieredMenuEventService.closeAllMenusEvent.emit();\n        }\n    }\n\n    @HostListener('document:keydown', ['$event'])\n    public onKeydownHandler(event: KeyboardEvent) {\n        switch (event.key) {\n            case 'Escape':\n                this._tieredMenuEventService.closeAllMenusEvent.emit();\n                break;\n            case ' ':\n            case 'Enter':\n                this._tieredMenuEventService.selectItemEvent.emit(this.tieredMenuService.currentItem);\n                break;\n            case 'ArrowLeft':\n                // When nested I need a reference to the current item's parent item, otherwise just the current item.\n                this._tieredMenuEventService.closeItemMenuEvent.emit(this.tieredMenuService.currentItem?.parent);\n                break;\n            case 'ArrowRight':\n                this._tieredMenuEventService.openItemMenuEvent.emit(this.tieredMenuService.currentItem);\n                break;\n            case 'ArrowUp':\n                this._tieredMenuEventService.decrementCurrentItemEvent.emit();\n                break;\n            case 'ArrowDown':\n                this._tieredMenuEventService.incrementCurrentItemEvent.emit();\n                break;\n        }\n    }\n\n    public ngOnInit(): void {\n        this.tieredMenuService.currentItems = this.items;\n        this._subscribeEvents();\n        disableScroll();\n    }\n\n    public ngOnDestroy(): void {\n        this._unsubscribe$.next();\n        this._unsubscribe$.complete();\n        enableScroll();\n    }\n\n    private _incrementCurItem(): void {\n        if (!this.tieredMenuService.currentItem) {\n            this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[0];\n            return;\n        }\n\n        const curIndex = this.tieredMenuService.currentItems.indexOf(this.tieredMenuService.currentItem) + 1;\n\n        if (curIndex < this.tieredMenuService.currentItems.length) {\n            this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[curIndex];\n        } else {\n            this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[0];\n        }\n\n        if (this.tieredMenuService.currentItem.divider) {\n            this._incrementCurItem();\n        }\n    }\n\n    private _decrementCurItem(): void {\n        if (!this.tieredMenuService.currentItem) {\n            this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[0];\n            return;\n        }\n\n        const curIndex = this.tieredMenuService.currentItems.indexOf(this.tieredMenuService.currentItem) - 1;\n\n        if (curIndex >= 0) {\n            this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[curIndex];\n        } else {\n            this.tieredMenuService.currentItem =\n                this.tieredMenuService.currentItems[this.tieredMenuService.currentItems.length - 1];\n        }\n\n        if (this.tieredMenuService.currentItem.divider) {\n            this._decrementCurItem();\n        }\n    }\n\n    private _closeItem(item: TieredMenuItemInternalData): void {\n        let itemAux = this._lastOpenItem;\n\n        while (itemAux && itemAux != item) {\n            itemAux.isOpen = false;\n            itemAux = itemAux.parent;\n        }\n\n        item.isOpen = false;\n\n        this.tieredMenuService.currentItem = itemAux ?? this.tieredMenuService.items[0];\n        this.tieredMenuService.currentItems = itemAux?.parent?.submenu || this.tieredMenuService.items;\n    }\n\n    private _openItem(item: TieredMenuItemInternalData): void {\n        if (item?.submenu) {\n            item.isOpen = true;\n            this.tieredMenuService.currentItems = item.submenu;\n\n            // Only has focus if there has already been interaction.\n            if (this.tieredMenuService.currentItem) {\n                this.tieredMenuService.currentItem = item.submenu[0];\n            }\n\n            this._lastOpenItem = item;\n        }\n    }\n\n    private _subscribeEvents(): void {\n        this._tieredMenuEventService.incrementCurrentItemEvent.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {\n            this._incrementCurItem();\n        });\n\n        this._tieredMenuEventService.decrementCurrentItemEvent.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {\n            this._decrementCurItem();\n        });\n\n        this._tieredMenuEventService.selectItemEvent\n            .pipe(takeUntil(this._unsubscribe$))\n            .subscribe((item: TieredMenuItemInternalData | null) => {\n                if (item && item.command) {\n                    item.command();\n                    // Close all menus after the item was selected.\n                    this._tieredMenuEventService.closeAllMenusEvent.emit();\n                }\n            });\n\n        this._tieredMenuEventService.openItemMenuEvent\n            .pipe(takeUntil(this._unsubscribe$))\n            .subscribe((item: TieredMenuItemInternalData | null) => {\n                if (item) {\n                    if (!this.tieredMenuService.currentItems.includes(item)) {\n                        let itemAux = this._lastOpenItem;\n\n                        while (itemAux?.parent?.parent) {\n                            itemAux = itemAux.parent;\n                        }\n\n                        this._tieredMenuEventService.closeItemMenuEvent.emit(itemAux?.parent ?? itemAux);\n                    }\n\n                    this._lastOpenItem = item;\n                    this._openItem(item);\n                }\n            });\n\n        this._tieredMenuEventService.closeItemMenuEvent\n            .pipe(takeUntil(this._unsubscribe$))\n            .subscribe((item: TieredMenuItemInternalData | null) => {\n                if (item) {\n                    this._closeItem(item);\n                }\n            });\n    }\n}\n","<div\n    class=\"menu menu--nested\"\n    [ngStyle]=\"{\n        top: top + 'px',\n        left: left + 'px',\n    }\"\n>\n    <ng-container\n        *ngTemplateOutlet=\"itemsTemplate; context: { $implicit: items }\"\n    ></ng-container>\n</div>\n\n<ng-template\n    #itemsTemplate\n    let-items\n>\n    @for (item of items; track item.id) {\n        <div>\n            @if (item.visible && !item.divider) {\n                <s-tiered-menu-item\n                    [item]=\"item\"\n                    [focused]=\"item === tieredMenuService.currentItem\"\n                    [closeOnClick]=\"true\"\n                >\n                </s-tiered-menu-item>\n            }\n            @if (item.divider) {\n                <s-tiered-menu-divider></s-tiered-menu-divider>\n            }\n            @if (item.submenu && item.isOpen) {\n                <div>\n                    <div class=\"submenu\">\n                        <ng-container\n                            *ngTemplateOutlet=\"\n                                itemsTemplate;\n                                context: { $implicit: item.submenu }\n                            \"\n                        ></ng-container>\n                    </div>\n                </div>\n            }\n        </div>\n    }\n</ng-template>\n","import { ApplicationRef, ChangeDetectorRef, Component, ComponentFactoryResolver, ComponentRef, EmbeddedViewRef, EventEmitter, HostListener, Input, Injector, OnDestroy, OnInit, Output, inject } from '@angular/core';\n\nimport { Subject } from 'rxjs';\n\nimport { takeUntil } from 'rxjs/operators';\nimport { TieredMenuItemInternalData } from '../../models/tiered-menu-item-internal-data';\nimport { TieredMenuEventService } from '../../services/tiered-menu.event.service';\nimport { TieredMenuService } from '../../services/tiered-menu.service';\nimport { disableScroll, enableScroll } from '@seniorsistemas/angular-components/utils';\n\n@Component({\n    selector: 's-tiered-menu',\n    templateUrl: './tiered-menu.component.html',\n    styleUrls: ['./tiered-menu.component.scss'],\n})\nexport class TieredMenuComponent implements OnInit, OnDestroy {\n    private readonly _appRef = inject(ApplicationRef);\n    private readonly _componentFactoryResolver = inject(ComponentFactoryResolver);\n    private readonly _injector = inject(Injector);\n    private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n    readonly tieredMenuService = inject(TieredMenuService);\n    private readonly _tieredMenuEventService = inject(TieredMenuEventService);\n\n    @Input() public ariaLabel?: string;\n    public items: TieredMenuItemInternalData[] = [];\n    public top = 0;\n    public left = 0;\n    public menuTriggerEvent: 'click' | 'hover' = 'hover';\n    public isSubmenu = false;\n\n    private _componentRef: ComponentRef<TieredMenuComponent> | null = null;\n    private _menuDivElement?: HTMLElement | null = null;\n    private _unsubscribe$ = new Subject<void>();\n\n    @Output()\n    public destroyRequest = new EventEmitter<boolean>();\n\n    @HostListener('window:resize')\n    public onResize(): void {\n        this._tieredMenuEventService.closeAllMenusEvent.emit();\n    }\n\n    @HostListener('document:click', ['$event'])\n    public onDocumentClick(event: MouseEvent): void {\n        // Closing menu when clicked outside.\n        const target = event.target as Element;\n        const clickedInside = target.closest('s-tiered-menu-item') || target.closest('s-tiered-menu-divider');\n        if (!clickedInside) {\n            this._tieredMenuEventService.closeAllMenusEvent.emit();\n        }\n    }\n\n    @HostListener('document:keydown', ['$event'])\n    public onKeydownHandler(event: KeyboardEvent) {\n        switch (event.key) {\n            case 'Escape':\n                this._tieredMenuEventService.closeAllMenusEvent.emit();\n                event.preventDefault();\n                break;\n            case 'Tab':\n                this._tieredMenuEventService.closeAllMenusEvent.emit();\n                break;\n            case ' ':\n            case 'Enter':\n                if (\n                    this.tieredMenuService.currentItem &&\n                    !this.tieredMenuService.currentItem.disabled &&\n                    this.items.includes(this.tieredMenuService.currentItem)\n                ) {\n                    this._tieredMenuEventService.selectItemEvent.emit(this.tieredMenuService.currentItem);\n                    event.preventDefault();\n                }\n                break;\n            case 'ArrowUp':\n                this._tieredMenuEventService.decrementCurrentItemEvent.emit();\n                event.preventDefault();\n                event.stopImmediatePropagation();\n                break;\n            case 'ArrowDown':\n                this._tieredMenuEventService.incrementCurrentItemEvent.emit();\n                event.preventDefault();\n                event.stopImmediatePropagation();\n                break;\n            case 'ArrowLeft':\n                if (this.tieredMenuService.currentItem && this.items.includes(this.tieredMenuService.currentItem)) {\n                    this._tieredMenuEventService.closeItemMenuEvent.emit(this.tieredMenuService.currentItem);\n                    this._changeDetectorRef.detectChanges();\n                    event.preventDefault();\n                }\n                break;\n            case 'ArrowRight':\n                if (\n                    this.tieredMenuService.currentItem &&\n                    !this.tieredMenuService.currentItem.disabled &&\n                    this.items.includes(this.tieredMenuService.currentItem)\n                ) {\n                    this._tieredMenuEventService.openItemMenuEvent.emit(this.tieredMenuService.currentItem);\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                }\n                break;\n        }\n    }\n\n    public ngOnInit(): void {\n        this._subscribeEvents();\n\n        // Submenus have their focus managed by the openItemMenuEvent handler.\n        if (!this.isSubmenu) {\n            this.tieredMenuService.currentItems = this.items;\n            this.tieredMenuService.currentItem = this.items[0] ?? null;\n            disableScroll();\n\n            requestAnimationFrame(() => {\n                this._focusCurrentItem();\n            });\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this._unsubscribe$.next();\n        this._unsubscribe$.complete();\n    }\n\n    private _focusCurrentItem(): void {\n        const id = this.tieredMenuService.currentItem?.id;\n\n        if (!id) {\n            return;\n        }\n\n        document.getElementById(id)?.focus();\n    }\n\n    private _incrementCurItem(): void {\n        if (!this.tieredMenuService.currentItem) {\n            this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[0];\n            return;\n        } else if (!this.items.includes(this.tieredMenuService.currentItem)) {\n            // Checking if it is the current menu.\n            return;\n        }\n\n        const currentIndex = this.tieredMenuService.currentItems.indexOf(this.tieredMenuService.currentItem) + 1;\n\n        if (currentIndex < this.tieredMenuService.currentItems.length) {\n            this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[currentIndex];\n        } else {\n            this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[0];\n        }\n\n        if (this.tieredMenuService.currentItem.divider) {\n            this._incrementCurItem();\n        }\n    }\n\n    private _decrementCurItem(): void {\n        if (!this.tieredMenuService.currentItem) {\n            this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[0];\n            return;\n            // Checking if it is the current menu.\n        } else if (!this.items.includes(this.tieredMenuService.currentItem)) {\n            return;\n        }\n\n        const curIndex = this.tieredMenuService.currentItems.indexOf(this.tieredMenuService.currentItem) - 1;\n\n        if (curIndex >= 0) {\n            this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[curIndex];\n        } else {\n            this.tieredMenuService.currentItem =\n                this.tieredMenuService.currentItems[this.tieredMenuService.currentItems.length - 1];\n        }\n\n        if (this.tieredMenuService.currentItem.divider) {\n            this._decrementCurItem();\n        }\n    }\n\n    private _createMenu(items: TieredMenuItemInternalData[], position: any): void {\n        if (!this._componentRef && items) {\n            const componentFactory = this._componentFactoryResolver.resolveComponentFactory(TieredMenuComponent);\n            this._componentRef = componentFactory.create(this._injector);\n            this._appRef.attachView(this._componentRef.hostView);\n            const domElem = (this._componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n            document.body.appendChild(domElem);\n\n            // Setting the menu items.\n            this._componentRef.instance.items = items;\n            this._componentRef.instance.isSubmenu = true;\n\n            // Subscribe menu events.\n            this._componentRef.instance.destroyRequest.subscribe((propagate: boolean) => {\n                this._destroy(propagate);\n            });\n\n            this._menuDivElement = domElem.querySelector('.menu');\n            this._setMenuPosition(position);\n        }\n    }\n\n    private _destroy(propagate = true): void {\n        if (this._componentRef !== null) {\n            this._appRef.detachView(this._componentRef.hostView);\n            this._componentRef.destroy();\n            this._componentRef = null;\n            this._menuDivElement = null;\n        }\n\n        if (propagate) {\n            this.destroyRequest.emit();\n        }\n    }\n\n    private _setMenuPosition(position: any): void {\n        const ITEM_HEIGHT = 37;\n        const DIVIDER_HEIGHT = 5;\n        const PADDING = 8;\n\n        if (this._componentRef !== null) {\n            const { top, right, bottom, left } = position;\n\n            const itemsCount = this._componentRef.instance.items?.reduce(\n                (count: number, item: TieredMenuItemInternalData) => {\n                    return !item.divider ? count + 1 : count;\n                },\n                0,\n            );\n\n            const dividersCount = this._componentRef.instance.items?.reduce(\n                (count: number, item: TieredMenuItemInternalData) => {\n                    return item.divider ? count + 1 : count;\n                },\n                0,\n            );\n\n            // I need to calculate the height of the component because the internal elements have not been created yet.\n            const menuHeight = itemsCount * ITEM_HEIGHT + dividersCount * DIVIDER_HEIGHT + PADDING + 8;\n            const menuWidth = this._menuDivElement?.getBoundingClientRect().width ?? 0;\n\n            const rightFreeSpace = window.innerWidth - right;\n            const bottomFreeSpace = window.innerHeight - bottom;\n\n            if (rightFreeSpace > menuWidth) {\n                this._componentRef.instance.left = right;\n            } else {\n                this._componentRef.instance.left = left - menuWidth;\n            }\n\n            if (bottomFreeSpace <= menuHeight) {\n                this._componentRef.instance.top = Math.max(window.innerHeight - menuHeight, window.scrollY);\n            } else {\n                this._componentRef.instance.top = window.scrollY + top;\n            }\n        }\n    }\n\n    private _subscribeEvents(): void {\n        // Increment current item event.\n        this._tieredMenuEventService.incrementCurrentItemEvent.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {\n            this._incrementCurItem();\n            this._focusCurrentItem();\n        });\n        // Decrement current item event.\n        this._tieredMenuEventService.decrementCurrentItemEvent.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {\n            this._decrementCurItem();\n            this._focusCurrentItem();\n        });\n        // Select item event.\n        this._tieredMenuEventService.selectItemEvent\n            .pipe(takeUntil(this._unsubscribe$))\n            .subscribe((item: TieredMenuItemInternalData | null) => {\n                if (item) {\n                    if (item.submenu) {\n                        this._tieredMenuEventService.openItemMenuEvent.emit(item);\n                    } else if (item.command) {\n                        this._tieredMenuEventService.closeAllMenusEvent.emit();\n                        item.command();\n                    }\n                }\n            });\n        // Close all menus event.\n        this._tieredMenuEventService.closeAllMenusEvent.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {\n            this._destroy();\n            this.tieredMenuService.currentItem = null;\n            this.tieredMenuService.currentItems = this.tieredMenuService.items;\n            this.tieredMenuService.markAllItemsAsClosed(this.tieredMenuService.items);\n            enableScroll();\n        });\n\n        // Open item menu event.\n        this._tieredMenuEventService.openItemMenuEvent\n            .pipe(takeUntil(this._unsubscribe$))\n            .subscribe((item: TieredMenuItemInternalData | null) => {\n                if (this.tieredMenuService.currentItem) {\n                    if (this.tieredMenuService.currentItem.parent === item) {\n                        return;\n                    }\n\n                    if (this.tieredMenuService.currentItem?.parent) {\n                        if (!item) return;\n\n                        if (\n                            !this.tieredMenuService.searchTheHierarchy(this.tieredMenuService.currentItem.parent, item)\n                        ) {\n                            let current: TieredMenuItemInternalData | undefined = this.tieredMenuService.currentItem;\n\n                            current.isOpen = false;\n\n                            while (current?.parent !== item.parent) {\n                                this._tieredMenuEventService.closeItemMenuEvent.emit(current);\n                                this._changeDetectorRef.detectChanges();\n\n                                current = current?.parent;\n                            }\n\n                            if (current) {\n                                current.isOpen = false;\n                            }\n                        }\n                    }\n                }\n\n                if (item?.submenu && !item?.isOpen && this.items.includes(item)) {\n                    const itemEl = document.querySelector(`#${item.id}`);\n\n                    if (!itemEl) return;\n\n                    const { top, right, left, bottom } = itemEl.getBoundingClientRect();\n                    const position = { top, right, left, bottom };\n\n                    this._createMenu(item.submenu, position);\n                    this.tieredMenuService.currentItems = item.submenu;\n                    this.tieredMenuService.currentItem = item.submenu[0];\n                    item.isOpen = true;\n\n                    requestAnimationFrame(() => {\n                        this._focusCurrentItem();\n                    });\n                }\n            });\n\n        // Close item menu event.\n        this._tieredMenuEventService.closeItemMenuEvent\n            .pipe(takeUntil(this._unsubscribe$))\n            .subscribe((item: TieredMenuItemInternalData | null) => {\n                if (item === null) return;\n                if (this.items.some((i) => i.id === item.id)) {\n                    if (item.parent) {\n                        item.parent.isOpen = false;\n                    } else {\n                        enableScroll();\n                    }\n                    this.tieredMenuService.currentItems = item?.parent?.parent?.submenu || this.tieredMenuService.items;\n                    this.tieredMenuService.currentItem = item.parent;\n                    this.destroyRequest.emit(false);\n\n                    requestAnimationFrame(() => {\n                        this._focusCurrentItem();\n                    });\n                }\n            });\n    }\n}\n\n","<div\n    class=\"menu\"\n    role=\"application\"\n    [attr.aria-label]=\"ariaLabel\"\n    [ngStyle]=\"{\n        left: left + 'px',\n        top: top + 'px',\n    }\"\n>\n    <!-- <div *ngFor=\"let item of items\">\n        <s-tiered-menu-item\n            *ngIf=\"item.visible && !item.divider\"\n            [item]=\"item\"\n            [focused]=\"item === tieredMenuService.currentItem\"\n            [highlight]=\"item.isOpen\"\n            fieldUtils.triggerEvent=\"hover\"\n            [closeOnClick]=\"false\"\n        >\n        </s-tiered-menu-item>\n        <s-tiered-menu-divider *ngIf=\"item.divider\"></s-tiered-menu-divider>\n    </div> -->\n    @for (item of items; track $index) {\n        @if (item.visible && !item.divider) {\n            <s-tiered-menu-item\n                [item]=\"item\"\n                [focused]=\"item === tieredMenuService.currentItem\"\n                [highlight]=\"item.isOpen\"\n                fieldUtils.triggerEvent=\"hover\"\n                [closeOnClick]=\"false\"\n            />\n        }\n        @if (item.divider) {\n            <s-tiered-menu-divider />\n        }\n    }\n</div>\n","import { ApplicationRef, ChangeDetectorRef, ComponentFactoryResolver, ComponentRef, Directive, ElementRef, EmbeddedViewRef, EventEmitter, HostListener, Injector, Input, OnChanges, OnDestroy, OnInit, Output, Type, inject } from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { TieredMenuNestedComponent } from './components/tiered-menu-nested/tiered-menu-nested.component';\nimport { TieredMenuComponent } from './components/tiered-menu/tiered-menu.component';\nimport { TieredMenuItemData } from './models/tiered-menu-item-data';\nimport { TieredMenuEventService } from './services/tiered-menu.event.service';\nimport { TieredMenuGlobalService } from './services/tiered-menu.global.service';\nimport { TieredMenuService } from './services/tiered-menu.service';\nimport { TieredMenuItemInternalData } from './models';\nimport { enableScroll } from '@seniorsistemas/angular-components/utils';\n\n/**\n * @description Diretiva que anexa um menu multinível (tiered menu) a qualquer elemento do DOM.\n * Ao disparar o evento configurado no elemento hospedeiro, exibe um painel flutuante\n * com itens de menu hierárquicos, suportando submenus aninhados e divisores.\n * Em telas estreitas (< 600px), o menu é exibido em modo aninhado fullscreen.\n *\n * @example\n * ```html\n * <s-button [sTieredMenu]=\"menuItems\" triggerEvent=\"click\">Abrir menu</s-button>\n * ```\n *\n * @category Navegação\n */\n@Directive({\n    selector: '[sTieredMenu]',\n    providers: [TieredMenuEventService, TieredMenuService],\n})\nexport class TieredMenuDirective implements OnInit, OnChanges, OnDestroy {\n    private readonly _elementRef = inject(ElementRef);\n    private readonly _appRef = inject(ApplicationRef);\n    private readonly _componentFactoryResolver = inject(ComponentFactoryResolver);\n    private readonly _injector = inject(Injector);\n    private readonly _tieredMenuEventService = inject(TieredMenuEventService);\n    private readonly _tieredMenuService = inject(TieredMenuService);\n    private readonly _tieredMenuGlobalService = inject(TieredMenuGlobalService);\n    private readonly _changeDetectorRef = inject(ChangeDetectorRef);\n\n    /**\n     * @description Lista de itens exibidos no menu. Cada item pode conter um array de `children`\n     * para criar submenus aninhados, além de propriedades como `label`, `icon`,\n     * `disabled`, `command` e `divider`.\n     */\n    @Input()\n    public items: TieredMenuItemData[] = [];\n\n    /**\n     * @description Item que receberá o foco inicial ao abrir o menu.\n     * Útil para destacar uma opção pré-selecionada ou contextual.\n     */\n    @Input()\n    public focusedItem: TieredMenuItemData | undefined = undefined;\n\n    /**\n     * @description Define o evento do elemento hospedeiro que dispara a abertura do menu.\n     * - `'click'`: abre o menu ao clicar no elemento (padrão).\n     * - `'hover'`: abre o menu ao passar o mouse sobre o elemento.\n     *\n     * @default 'click'\n     */\n    @Input()\n    public triggerEvent: 'click' | 'hover' = 'click';\n\n    @Input()\n    public ariaLabel?: string;\n\n    @Output()\n    public tieredMenuOpened: EventEmitter<void> = new EventEmitter<void>();\n\n    @Output()\n    public tieredMenuClosed: EventEmitter<void> = new EventEmitter<void>();\n\n    private _componentRef: ComponentRef<any> | null = null;\n    private _showTimeout?: number;\n    private _isNested = false;\n    private _isOpen = false;\n    private _unsubscribe$ = new Subject<void>();\n    private _lastActiveElement?: Element;\n    private _previousItems: TieredMenuItemData[] = [];\n    private _itemsAreValid?: boolean;\n    private _resizeObserver = new ResizeObserver(() => {\n        this._setMenuPosition();\n        this._componentRef?.hostView.detectChanges();\n    });\n\n    public ngOnInit(): void {\n        this._itemsAreValid = !!this.items?.length;\n\n        if (!this._itemsAreValid) return;\n\n        this._subscribeEvents();\n    }\n\n    public ngOnChanges(): void {\n        if (!this._itemsAreValid) return;\n\n        if (!this._previousItems) {\n            this._previousItems = this._tieredMenuService.cloneItems(this.items);\n        }\n\n        let hasChanges = false;\n\n        if (this.items.length !== this._previousItems.length) {\n            hasChanges = true;\n        } else {\n            for (let i = 0; i < this.items.length; i++) {\n                if (!this._compareItems(this.items[i], this._previousItems[i])) {\n                    hasChanges = true;\n                    break;\n                }\n            }\n        }\n\n        if (hasChanges) {\n            this._updateServiceItems();\n            this._changeDetectorRef.detectChanges();\n            this._rebuildMenu();\n        }\n\n        this._previousItems = this._tieredMenuService.cloneItems(this.items);\n    }\n\n    public ngOnDestroy(): void {\n        if (!this._itemsAreValid) return;\n\n        this._unsubscribe$.next();\n        this._unsubscribe$.complete();\n\n        this._destroy();\n    }\n\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent): void {\n        if (!this._itemsAreValid) return;\n\n        if (this.triggerEvent === 'click' && !this._isOpen) {\n            this._lastActiveElement = document.activeElement as Element;\n            this._createMenu();\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    }\n\n    private _createMenu(): void {\n        this._updateServiceItems();\n\n        if (!this._componentRef && this._tieredMenuService.items?.length > 0) {\n            this._tieredMenuGlobalService.lastInstance?._destroy();\n            this._tieredMenuGlobalService.lastInstance = this;\n\n            (this._lastActiveElement as HTMLElement)?.blur();\n            this._isOpen = true;\n            this.tieredMenuOpened.emit();\n            this._isNested = document.body.clientWidth < 600;\n\n            this._isNested ? this._createNestedMenu() : this._createTieredMenu();\n        }\n    }\n\n    private _createTieredMenu(): void {\n        if (!this._componentRef && this._tieredMenuService.items?.length > 0) {\n            this._componentRef = this._createComponent(TieredMenuComponent);\n            this._appRef.attachView(this._componentRef.hostView);\n            const domElem = this._componentRef.location.nativeElement as HTMLElement;\n            document.body.appendChild(domElem);\n            this._setMenuComponentProperties();\n            this._componentRef.instance.destroyRequest.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {\n                this._destroy();\n            });\n\n            this._setMenuPosition();\n        }\n    }\n\n    private _createNestedMenu(): void {\n        if (!this._componentRef && this._tieredMenuService.items?.length > 0) {\n            const componentFactory = this._componentFactoryResolver.resolveComponentFactory(TieredMenuNestedComponent);\n            this._componentRef = componentFactory.create(this._injector);\n            this._appRef.attachView(this._componentRef.hostView);\n            const domElem = (this._componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n            document.body.appendChild(domElem);\n            this._setMenuComponentProperties();\n            this._setMenuPosition();\n        }\n    }\n\n    private _createComponent<T>(componentClass: Type<T>) {\n        const componentFactory = this._componentFactoryResolver.resolveComponentFactory(componentClass);\n        const _componentRef = componentFactory.create(this._injector);\n        this._resizeObserver.observe(_componentRef.location.nativeElement.querySelector('.menu'));\n        _componentRef.onDestroy(() => {\n            this._resizeObserver.disconnect();\n        });\n        return _componentRef;\n    }\n\n    private _destroy(): void {\n        if (this._componentRef) {\n            this._isOpen = false;\n            this.tieredMenuClosed.emit();\n            window.clearTimeout(this._showTimeout);\n            this._appRef.detachView(this._componentRef.hostView);\n            this._componentRef.destroy();\n            this._componentRef = null;\n\n            this._tieredMenuService.currentItems = this._tieredMenuService.items;\n            this._tieredMenuService.currentItem = this._tieredMenuService.items[0];\n            this._tieredMenuEventService.closeAllMenusEvent.emit();\n        }\n    }\n\n    private _setMenuPosition(): void {\n        if (!this._componentRef) {\n            return;\n        }\n        this._changeDetectorRef.detectChanges();\n        const ITEM_HEIGHT = 37;\n        const ITEM_WIDTH =\n            (this._componentRef.location.nativeElement as HTMLElement)?.querySelector('.menu')?.clientWidth || 176;\n        const DIVIDER_HEIGHT = 5;\n        const PADDING = 8;\n        const MARGIN = 4;\n        this._componentRef.instance.top = 8;\n        let { bottom, left, right } = this._elementRef.nativeElement.getBoundingClientRect();\n\n        const itemsCount = this._componentRef.instance.items?.reduce(\n            (count: number, item: TieredMenuItemInternalData) => {\n                return !item.divider ? count + 1 : count;\n            },\n            0,\n        );\n\n        const dividersCount = this._componentRef.instance.items?.reduce(\n            (count: number, item: TieredMenuItemInternalData) => {\n                return item.divider ? count + 1 : count;\n            },\n            0,\n        );\n\n        const menuHeight = itemsCount * ITEM_HEIGHT + dividersCount * DIVIDER_HEIGHT + PADDING + MARGIN;\n        const rightFreeSpace = window.innerWidth - right;\n        const bottomFreeSpace = window.innerHeight - bottom;\n\n        this._componentRef.instance.top = bottom;\n        this._componentRef.instance.left = left;\n\n        if (bottomFreeSpace <= menuHeight) {\n            this._componentRef.instance.top = Math.max(scrollY + bottom - menuHeight, 0);\n        } else {\n            this._componentRef.instance.top = window.scrollY + bottom + MARGIN;\n        }\n\n        if (rightFreeSpace > 176) {\n            this._componentRef.instance.left = window.scrollX + left;\n        } else {\n            this._componentRef.instance.left = window.scrollX + right - ITEM_WIDTH;\n        }\n\n        if (this._isNested) {\n            this._componentRef.instance.left = MARGIN;\n        }\n    }\n\n    private _setMenuComponentProperties(): void {\n        if (this._componentRef != null) {\n            this._componentRef.instance.items = this._tieredMenuService.items;\n            this._componentRef.instance.ariaLabel = this.ariaLabel;\n        }\n    }\n\n    private _subscribeEvents(): void {\n        this._tieredMenuEventService.closeAllMenusEvent.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {\n            this._tieredMenuService.items = this._tieredMenuService.markAllItemsAsClosed(this._tieredMenuService.items);\n            this._destroy();\n            enableScroll();\n        });\n    }\n\n    private _compareItems(item1: TieredMenuItemData, item2: TieredMenuItemData): boolean {\n        return JSON.stringify(item1) === JSON.stringify(item2);\n    }\n\n    private _rebuildMenu(): void {\n        this._destroy();\n    }\n\n    private _updateServiceItems(): void {\n        this._tieredMenuService.items = this._tieredMenuService.normalizeData(this.items);\n        this._tieredMenuService.currentItems = this._tieredMenuService.items;\n\n        this._tieredMenuService.currentItem =\n            this._tieredMenuService.items.find((i) => i.label === this.focusedItem?.label) ??\n            this._tieredMenuService.items[0];\n    }\n}\n\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { TieredMenuDividerComponent } from './components/tiered-menu-divider/tiered-menu-divider.component';\nimport { TieredMenuItemComponent } from './components/tiered-menu-item/tiered-menu-item.component';\nimport { TieredMenuNestedComponent } from './components/tiered-menu-nested/tiered-menu-nested.component';\nimport { TieredMenuComponent } from './components/tiered-menu/tiered-menu.component';\nimport { TieredMenuGlobalService } from './services/tiered-menu.global.service';\nimport { TieredMenuDirective } from './tiered-menu.directive';\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [\n        TieredMenuDirective,\n        TieredMenuComponent,\n        TieredMenuNestedComponent,\n        TieredMenuItemComponent,\n        TieredMenuDividerComponent,\n    ],\n    exports: [TieredMenuDirective],\n    providers: [TieredMenuGlobalService],\n})\nexport class TieredMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TieredMenuItemComponent","i3.TieredMenuDividerComponent"],"mappings":"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"}