{"version":3,"file":"ng-vagabond-lab-ng-dsv-ds-menu.mjs","sources":["../../../projects/ng-dsv/ds/menu/component/button/menu.button.component.ts","../../../projects/ng-dsv/ds/menu/component/button/menu.button.component.html","../../../projects/ng-dsv/ds/menu/dto/menu.contextual.ts","../../../projects/ng-dsv/ds/menu/component/contextual/menu.contextual.component.ts","../../../projects/ng-dsv/ds/menu/component/contextual/menu.contextual.component.html","../../../projects/ng-dsv/ds/menu/component/menu.component.ts","../../../projects/ng-dsv/ds/menu/component/menu.component.html","../../../projects/ng-dsv/ds/menu/service/menu.service.ts","../../../projects/ng-dsv/ds/menu/ng-vagabond-lab-ng-dsv-ds-menu.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { MenuService } from '../../public-api';\n\n@Component({\n    selector: 'dsv-menu-button',\n    imports: [CommonModule, DsvButtonComponent],\n    templateUrl: './menu.button.component.html',\n    styleUrls: ['./menu.button.component.scss'],\n})\nexport class DsvMenuButtonComponent {\n    private readonly menuService = inject(MenuService);\n\n    doToogleMenu() {\n        this.menuService.toogleMenu();\n    }\n}\n","<dsv-button\n    class=\"dsv-menu-button\"\n    icon=\"ri-menu-line\"\n    color=\"inherit\"\n    (callback)=\"doToogleMenu()\"\n    [noHover]=\"true\"\n></dsv-button>\n","export const CLICK_LEFT = 'left';\nexport const CLICK_RIGHT = 'right';\nexport const CLICK_BOTH = 'both';\n\nexport type MenuContextualClickType = typeof CLICK_LEFT | typeof CLICK_RIGHT | typeof CLICK_BOTH;\n\nexport interface MenuContextualDto {\n    id: string;\n    icon?: string;\n    text: string;\n    divider?: boolean;\n    color?: string;\n}\n","import { Component, ElementRef, HostListener, inject, input, output, signal } from '@angular/core';\nimport {\n    CLICK_BOTH,\n    CLICK_LEFT,\n    CLICK_RIGHT,\n    MenuContextualClickType,\n    MenuContextualDto,\n} from '../../dto/menu.contextual';\n\n@Component({\n    selector: 'dsv-menu-contextual',\n    templateUrl: './menu.contextual.component.html',\n    styleUrls: ['./menu.contextual.component.scss'],\n})\nexport class DsvMenuContextualComponent {\n    readonly elementRef = inject(ElementRef);\n\n    buttonClick = input<MenuContextualClickType>(CLICK_BOTH);\n    options = input<MenuContextualDto[]>([]);\n\n    callback = output<string>();\n    callbackClose = output<void>();\n\n    visible = signal<boolean>(false);\n    selectedOption = signal<string>('');\n\n    onOptionClick(event: MouseEvent, option: string) {\n        event.stopPropagation();\n        this.callback.emit(option);\n        this.closeMenu();\n    }\n\n    @HostListener('document:click', ['$event'])\n    onClick(event: MouseEvent) {\n        if (!this.elementRef.nativeElement.contains(event.target)) {\n            this.closeMenu();\n        } else if (this.buttonClick() === CLICK_LEFT || this.buttonClick() === CLICK_BOTH) {\n            this.toogleMenu();\n        }\n    }\n\n    @HostListener('document:contextmenu', ['$event'])\n    onContextMenu(event: MouseEvent) {\n        event.preventDefault();\n        if (!this.elementRef.nativeElement.contains(event.target)) {\n            this.closeMenu();\n        } else if (this.buttonClick() === CLICK_RIGHT || this.buttonClick() === CLICK_BOTH) {\n            this.toogleMenu();\n        }\n    }\n\n    closeMenu() {\n        this.visible.set(false);\n        this.callbackClose.emit();\n    }\n\n    toogleMenu() {\n        this.visible.set(!this.visible());\n    }\n}\n","<ng-content></ng-content>\n<div\n    class=\"context-menu\"\n    [class.visible]=\"visible()\"\n>\n    @if (options().length > 0) {\n        <ul>\n            @for (option of options(); track option.id) {\n                @if (option.divider) {\n                    <hr />\n                }\n                <li\n                    [class]=\"'text ' + option.color\"\n                    (click)=\"onOptionClick($event, option.id)\"\n                >\n                    @if (option.icon) {\n                        <i [class]=\"option.icon\"></i>\n                    }\n                    {{ option.text }}\n                </li>\n            }\n        </ul>\n    } @else {\n        <ng-content select=\".contextual\" />\n    }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, ElementRef, HostListener, inject, input } from '@angular/core';\nimport { DsvContainerComponent } from '@ng-vagabond-lab/ng-dsv/ds/container';\nimport { DsvThemeSwitchComponent } from '@ng-vagabond-lab/ng-dsv/ds/theme';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { MenuService } from '../public-api';\n\n@Component({\n    selector: 'dsv-menu',\n    imports: [CommonModule, DsvThemeSwitchComponent, DsvContainerComponent],\n    templateUrl: './menu.component.html',\n    styleUrls: ['./menu.component.scss'],\n})\nexport class DsvMenuComponent {\n    readonly platformService = inject(PlatformService);\n    readonly menuService = inject(MenuService);\n    readonly elementRef = inject(ElementRef);\n\n    showFooter = input<boolean>(true);\n\n    constructor() {\n        effect(() => {\n            if (this.platformService.isPlatformBrowser()) {\n                const menu = document.getElementsByTagName('dsv-menu')[0];\n                const collapse = document.getElementById('collapse');\n                if (this.menuService.isMenuOpen()) {\n                    menu?.classList?.add('open');\n                    collapse?.classList.add('show');\n                } else {\n                    menu?.classList?.remove('open');\n                    collapse?.classList.remove('show');\n                }\n            }\n\n            this.menuService.isMenuOpen() &&\n                document.getElementsByTagName('dsv-container')[0].classList.add('show');\n        });\n    }\n\n    @HostListener('document:click', ['$event'])\n    onClickOutside(event: Event) {\n        if (\n            this.platformService.isPlatformBrowser() &&\n            this.menuService.isMenuOpen() &&\n            !this.elementRef.nativeElement.contains(event.target)\n        ) {\n            this.menuService.toogleMenu();\n        }\n    }\n}\n","<dsv-container>\n    <ng-content></ng-content>\n</dsv-container>\n@if (showFooter()) {\n    <div class=\"footer\">\n        <dsv-theme-switch></dsv-theme-switch>\n    </div>\n}\n","import { Injectable, signal } from '@angular/core';\nimport { BaseService } from '@ng-vagabond-lab/ng-dsv/base';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class MenuService extends BaseService {\n    isMenuOpen = signal<boolean>(false);\n\n    toogleMenu() {\n        this.isMenuOpen.update((toogle) => !toogle);\n    }\n\n    closeMenu() {\n        this.isMenuOpen.set(false);\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}