{"version":3,"file":"seniorsistemas-angular-components-grid-menu.mjs","sources":["../../projects/angular-components/grid-menu/src/lib/grid-menu/components/grid-menu-item/grid-menu-item.component.ts","../../projects/angular-components/grid-menu/src/lib/grid-menu/components/grid-menu-item/grid-menu-item.component.html","../../projects/angular-components/grid-menu/src/lib/grid-menu/grid-menu.component.ts","../../projects/angular-components/grid-menu/src/lib/grid-menu/grid-menu.component.html","../../projects/angular-components/grid-menu/src/lib/grid-menu/grid-menu.module.ts","../../projects/angular-components/grid-menu/src/seniorsistemas-angular-components-grid-menu.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nimport { GridMenuItem } from '../../types/grid-menu-item';\n\n@Component({\n    selector: 's-grid-menu-item',\n    templateUrl: './grid-menu-item.component.html',\n    styleUrls: ['./grid-menu-item.component.scss'],\n})\nexport class GridMenuItemComponent {\n    @Input({ required: true })\n    public item!: GridMenuItem;\n\n    @Input()\n    public iconIsFromFontAwesome = false;\n\n    @Output() clickedGridMenuItem = new EventEmitter<GridMenuItem>();\n\n    public fontAwesomePrefix: 'fal' | 'fas' = 'fal';\n\n    public onClick(): void {\n        if (this.disabled) {\n            return;\n        }\n        this.item.action?.();\n        this.clickedGridMenuItem.emit(this.item);\n    }\n\n    public onMouseEnter() {\n        if (this.disabled) {\n            return;\n        }\n        this.fontAwesomePrefix = 'fas';\n    }\n\n    public onMouseLeave() {\n        if (this.disabled) {\n            return;\n        }\n        this.fontAwesomePrefix = 'fal';\n    }\n\n    public get iconFontAwesomeClassName() {\n        const prefix = this.item.active ? 'fas' : this.fontAwesomePrefix;\n        return `${prefix} ${this.item.icon}`;\n    }\n\n    public get initialLetter(): string {\n        let initialLetter = '';\n        if (this.item.label) {\n            const words = this.item.label.split(' ', 2);\n            initialLetter = words[0].charAt(0).toUpperCase();\n            if (words.length > 1) {\n                initialLetter += words[1].charAt(0).toUpperCase();\n            }\n        }\n        return initialLetter;\n    }\n\n    public get disabled(): boolean {\n        return typeof this.item?.disabled === 'function' ? !!this.item.disabled() : !!this.item?.disabled;\n    }\n}\n","@if (item) {\n    <button\n        class=\"icon-button\"\n        [class.icon-button-active]=\"item.active\"\n        [class.icon-button--disabled]=\"disabled\"\n        (sInteractiveContent)=\"onClick()\"\n        [disabled]=\"disabled\"\n        [tabindex]=\"disabled ? -1 : 0\"\n        [class.icon-font-awesome]=\"iconIsFromFontAwesome\"\n        (mouseenter)=\"onMouseEnter()\"\n        (mouseleave)=\"onMouseLeave()\"\n    >\n        <div\n            class=\"icon-wrapper\"\n            [class.icon-image]=\"!iconIsFromFontAwesome\"\n        >\n            @if (item.icon) {\n                @if (iconIsFromFontAwesome) {\n                    <i [class]=\"iconFontAwesomeClassName\"> </i>\n                } @else {\n                    <span\n                        class=\"icon\"\n                        style=\"background-image: url('{{ item.icon }}');\"\n                    >\n                    </span>\n                }\n            } @else if (!item.icon) {\n                <span class=\"initials\">{{ initialLetter }}</span>\n            }\n        </div>\n        <span class=\"title\">{{ item.label }}</span>\n    </button>\n}\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nimport { GridMenuItem } from './types/grid-menu-item';\nimport { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\n\n/**\n * @description Componente de menu em grade que exibe uma coleção de itens como cards clicáveis.\n * Suporta seleção de item ativo e pode utilizar ícones do Font Awesome ou ícones padrão.\n *\n * @example\n * ```html\n * <s-grid-menu\n *   [items]=\"menuItems\"\n *   [selectable]=\"true\"\n *   [(selected)]=\"selectedItem\"\n * />\n * ```\n *\n * @category Navegação\n */\n@Component({\n    selector: 's-grid-menu',\n    templateUrl: './grid-menu.component.html',\n    styleUrls: ['./grid-menu.component.scss'],\n})\nexport class GridMenuComponent implements OnChanges {\n    private previousGridMenuItemClicked: GridMenuItem | undefined;\n\n    /**\n     * @description Lista de itens exibidos no grid. Aceita um único item ou um array de `GridMenuItem`.\n     * Valores nulos ou indefinidos resultam em uma lista vazia.\n     */\n    @Input()\n    public set items(items: GridMenuItem[] | GridMenuItem) {\n        if (isNullOrUndefined(items)) {\n            this.itemsArray = [];\n        } else {\n            this.itemsArray = Array.isArray(items) ? (items as GridMenuItem[]) : [items];\n        }\n    }\n\n    /**\n     * @description Quando `true`, utiliza classes de ícones do Font Awesome nos itens do grid.\n     * Quando `false`, utiliza o sistema de ícones padrão do projeto.\n     *\n     * @default false\n     */\n    @Input() useFontAwesomeIcons = false;\n\n    public itemsArray: GridMenuItem[] = [];\n\n    /**\n     * @description Habilita o modo de seleção do grid. Quando `true`, permite que o usuário\n     * clique em um item para selecioná-lo, marcando-o como ativo.\n     *\n     * @default false\n     */\n    @Input() selectable = false;\n\n    /**\n     * @description Item atualmente selecionado no grid. Usado em conjunto com `selectable = true`\n     * e suporta two-way binding via `[(selected)]`.\n     */\n    @Input() selected!: GridMenuItem;\n\n    /**\n     * @description Emitido quando o usuário seleciona um novo item no grid.\n     * Retorna o `GridMenuItem` selecionado. Usado para two-way binding com `[(selected)]`.\n     */\n    @Output() selectedChange = new EventEmitter<GridMenuItem>();\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes['selected'] && changes['selected'].isFirstChange()) {\n            if (this.selectable) {\n                this.previousGridMenuItemClicked = this.selected;\n                this.selected.active = true;\n            }\n        }\n    }\n\n    onClickGridMenuItem(gridMenuItem: GridMenuItem) {\n        if (!this.selectable) {\n            return;\n        }\n        if (this.previousGridMenuItemClicked) {\n            this.previousGridMenuItemClicked.active = false;\n        }\n        gridMenuItem.active = !gridMenuItem.active;\n        this.previousGridMenuItemClicked = gridMenuItem;\n        this.selectedChange.next(gridMenuItem);\n    }\n}\n\n","<section class=\"grid-menu\">\n    @for (item of itemsArray; track $index) {\n        <s-grid-menu-item\n            [item]=\"item\"\n            [iconIsFromFontAwesome]=\"useFontAwesomeIcons\"\n            (clickedGridMenuItem)=\"onClickGridMenuItem($event)\"\n        ></s-grid-menu-item>\n    }\n</section>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { GridMenuItemComponent } from './components/grid-menu-item/grid-menu-item.component';\nimport { GridMenuComponent } from './grid-menu.component';\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\n\n@NgModule({\n    imports: [CommonModule, InteractiveContentDirective],\n    declarations: [GridMenuItemComponent, GridMenuComponent],\n    exports: [GridMenuItemComponent, GridMenuComponent],\n})\nexport class GridMenuModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.GridMenuItemComponent"],"mappings":"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"}