{"version":3,"file":"kif-lib-data-grid.mjs","sources":["../../../projects/kif-lib/data-grid/enum/sort-direction.enum.ts","../../../projects/kif-lib/data-grid/enum/paginator.enum.ts","../../../projects/kif-lib/data-grid/enum/text-position.enum.ts","../../../projects/kif-lib/data-grid/components/tooltip/tooltip-content.component.ts","../../../projects/kif-lib/data-grid/components/tooltip/tooltip-content.component.html","../../../projects/kif-lib/data-grid/components/tooltip/directive/tooltip.directive.ts","../../../projects/kif-lib/data-grid/pipes/safeDom.pipe.ts","../../../projects/kif-lib/data-grid/grid.component.ts","../../../projects/kif-lib/data-grid/grid.component.html","../../../projects/kif-lib/data-grid/components/tooltip/tooltip.module.ts","../../../projects/kif-lib/data-grid/grid.module.ts","../../../projects/kif-lib/data-grid/public-api.ts","../../../projects/kif-lib/data-grid/kif-lib-data-grid.ts"],"sourcesContent":["export enum SORT_DIRECTION{\n    ASC= 'asc',\n    DESC= 'desc'\n}","export enum PAGINATOR{\n    PAGINATOR_1 = 'paginator1',\n    PAGINATOR_2 = 'paginator2'\n}","export enum TEXT_POSITION{\n    START = 'start',\n    END = 'end'\n}","import { ChangeDetectionStrategy, Component, ElementRef, Input, signal, TemplateRef } from '@angular/core';\n\n@Component({\n    selector: 'kit-tooltip-content',\n    templateUrl: './tooltip-content.component.html',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n\n})\nexport class TooltipContentComponent {\n    @Input() title?: string;\n    @Input() description?: string;\n    @Input() templateRef?: TemplateRef<any>;\n    @Input() positionType = 'top';\n    @Input() offset = 8;\n    \n    private visibleState = signal(false);\n    private positionCoords = signal({ top: 0, left: 0 });\n    \n    // Expose signal readers for the template\n    visible = this.visibleState.asReadonly();\n    positionState = this.positionCoords.asReadonly();\n    \n    show(x: number, y: number, position?: string): void {\n        if (position) {\n            this.positionType = position;\n        }\n        \n        this.calculatePosition(x, y);\n        this.visibleState.set(true);\n    }\n    \n    hide(): void {\n        this.visibleState.set(false);\n    }\n    \n    private calculatePosition(x: number, y: number): void {\n        let top = 0;\n        let left = 0;\n        \n        // Get tooltip dimensions\n        const tooltipElement = this.elementRef.nativeElement.querySelector('.tooltip-container');\n        const tooltipHeight = tooltipElement.offsetHeight;\n        const tooltipWidth = tooltipElement.offsetWidth;\n        \n        switch (this.positionType) {\n            case 'top':\n                top = y - tooltipHeight - this.offset;\n                left = x - (tooltipWidth / 2);\n                break;\n            case 'bottom':\n                top = y + this.offset;\n                left = x - (tooltipWidth / 2);\n                break;\n            case 'left':\n                top = y - (tooltipHeight / 2);\n                left = x - tooltipWidth - this.offset;\n                break;\n            case 'right':\n                top = y - (tooltipHeight / 2);\n                left = x + this.offset;\n                break;\n        }\n        \n        // Ensure tooltip doesn't go outside viewport\n        const viewportWidth = window.innerWidth;\n        const viewportHeight = window.innerHeight;\n        \n        if (left < 0) left = 0;\n        if (left + tooltipWidth > viewportWidth) left = viewportWidth - tooltipWidth;\n        if (top < 0) top = 0;\n        if (top + tooltipHeight > viewportHeight) top = viewportHeight - tooltipHeight;\n        \n        this.positionCoords.set({ top, left });\n    }\n    \n    constructor(private elementRef: ElementRef) {}\n}\n\n","<div \nclass=\"tooltip-container d-flex flex-column gap-2\" \n[class.visible]=\"visible()\" \n\n[style.top.px]=\"positionState().top\" \n[style.left.px]=\"positionState().left\">\n@if (title) {\n  <div class=\"tooltip-title\">{{ title }}</div>\n}\n@if (description) {\n  <div class=\"tooltip-description\">{{ description }}</div>\n}\n@if (templateRef) {\n  <ng-container [ngTemplateOutlet]=\"templateRef\"></ng-container>\n}","import { ComponentRef, Directive, ElementRef, HostListener, inject, Input, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { TooltipContentComponent } from '../tooltip-content.component';\n\n@Directive({\n    selector: '[kitTooltip]',\n    exportAs: 'kitTooltip'\n})\nexport class TooltipDirective implements OnDestroy {\n    @Input() kitTooltip = '';\n    @Input() tooltipDescription = '';\n    @Input() tooltipTemplate?: TemplateRef<any>;\n    @Input() tooltipPosition: 'top' | 'bottom' | 'left' | 'right' = 'top';\n    @Input() tooltipOffset = 8;\n    @Input() tooltipDelay = 100;\n  \n    private tooltipRef?: ComponentRef<TooltipContentComponent>;\n    private showTimeoutId?: number;\n    private hideTimeoutId?: number;\n    private viewContainerRef = inject(ViewContainerRef);\n    private document = inject(DOCUMENT);\n  \n    constructor(private elementRef: ElementRef) {}\n  \n    @HostListener('mouseenter')\n    onMouseEnter(): void {\n        this.clearTimeouts();\n        \n        this.showTimeoutId = window.setTimeout(() => {\n            this.show();\n        }, this.tooltipDelay);\n    }\n      \n    @HostListener('mouseleave')\n    onMouseLeave(): void {\n        this.clearTimeouts();\n        \n        if (this.tooltipRef) {\n            this.hideTimeoutId = window.setTimeout(() => {\n                this.hide();\n            }, 100);\n        }\n    }\n    \n    private show(): void {\n        if (this.tooltipRef) {\n            return;\n        }\n      \n        // Create tooltip component\n        this.tooltipRef = this.viewContainerRef.createComponent(TooltipContentComponent);\n        \n        // Set inputs\n        this.tooltipRef.instance.title = this.kitTooltip;\n        this.tooltipRef.instance.description = this.tooltipDescription;\n        this.tooltipRef.instance.templateRef = this.tooltipTemplate;\n        this.tooltipRef.instance.positionType = this.tooltipPosition;\n        this.tooltipRef.instance.offset = this.tooltipOffset;\n        \n        // Append to body to avoid clipping issues\n        this.document.body.appendChild(this.tooltipRef.location.nativeElement);\n        \n        // Calculate position and show\n        const rect = this.elementRef.nativeElement.getBoundingClientRect();\n        let x = rect.left + rect.width / 2;\n        let y = 0;\n        \n        switch (this.tooltipPosition) {\n            case 'top':\n                y = rect.top;\n                break;\n            case 'bottom':\n                y = rect.bottom;\n                break;\n            case 'left':\n            case 'right':\n                y = rect.top + rect.height / 2;\n                break;\n        }\n        \n        if (this.tooltipPosition === 'left') {\n            x = rect.left;\n        } else if (this.tooltipPosition === 'right') {\n            x = rect.right;\n        }\n        \n        // Give the browser a chance to render before calculating position\n        setTimeout(() => {\n            this.tooltipRef?.instance.show(x, y, this.tooltipPosition);\n        });\n    }\n    \n    private hide(): void {\n        if (this.tooltipRef) {\n            this.tooltipRef.instance.hide();\n          \n            setTimeout(() => {\n                this.tooltipRef?.destroy();\n                this.tooltipRef = undefined;\n            }, 150);\n        }\n    }\n    \n    private clearTimeouts(): void {\n        if (this.showTimeoutId) {\n            clearTimeout(this.showTimeoutId);\n            this.showTimeoutId = undefined;\n        }\n        \n        if (this.hideTimeoutId) {\n            clearTimeout(this.hideTimeoutId);\n            this.hideTimeoutId = undefined;\n        }\n    }\n    \n    ngOnDestroy(): void {\n        this.clearTimeouts();\n        \n        if (this.tooltipRef) {\n            this.tooltipRef.destroy();\n        }\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeResourceUrl, SafeStyle, SafeUrl } from '@angular/platform-browser';\n\n@Pipe({\n    name: 'safeDom',\n    standalone: true\n})\nexport class SafeDomPipe implements PipeTransform {\n\n    constructor(protected sanitizer: DomSanitizer) { }\n    transform(value: any, type: string): SafeHtml | SafeStyle | SafeUrl | SafeResourceUrl {\n        switch (type) {\n            case 'html': return this.sanitizer.bypassSecurityTrustHtml(value);\n            case 'style': return this.sanitizer.bypassSecurityTrustStyle(value);\n            case 'url': return this.sanitizer.bypassSecurityTrustUrl(value);\n            case 'resourceUrl': return this.sanitizer.bypassSecurityTrustResourceUrl(value);\n            default: throw new Error(`Invalid safe type specified: ${type}`);\n        }\n    }\n\n}\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges,\n    ViewChild, AfterViewInit, ChangeDetectorRef, ElementRef} from '@angular/core';\nimport { MatPaginator, MatPaginatorIntl, PageEvent } from '@angular/material/paginator';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { PagerTranslationOptions } from './models/pagerTranslationOptions';\n\nimport { HandleMenuAction } from './interface/handle-menu-action.interface';\nimport { MatSort, Sort } from '@angular/material/sort';\nimport { SortConfig } from './interface/sortConfig.interface';\nimport { PaginConfig } from './interface/paginConfig.interface';\nimport { Trash2  as iconTrash, CircleSlash2 as circleSlash2, User, Info, Trash2Icon as trash2 } from 'lucide-angular';\nimport { Lucide } from './interface/lucide.interface';\nimport { HandleAction } from './interface/handle-action.interface';\nimport { ISearchConfig, MenuOptions } from './interface/menu-options.interface';\nimport { ActionByItemEvent, EmptyDataInfo, TableColumns, TableColumnsActions } from './interface';\nimport { SORT_DIRECTION } from './enum/sort-direction.enum';\nimport { PAGINATOR } from './enum/paginator.enum';\nimport { TEXT_POSITION } from './enum';\nimport { CellUpdate, GridUpdate } from './interface/cell-update.interface';\nimport { FormControl } from '@angular/forms';\n\nexport interface Task {\n    completed: boolean;\n    id?: number;\n    subtasks?: Task[];\n}\n\n@Component({\n    selector: 'kit-data-grid',\n    templateUrl: './grid.component.html',\n})\n\nexport class GridComponent implements OnInit, OnChanges, AfterViewInit {\n    @ViewChild(MatSort) sort: MatSort = new MatSort; \n    @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator | undefined;\n    @ViewChild(MatPaginator, { static: true }) paginator2: MatPaginator | undefined;\n    @ViewChild('paginatorContainer', { static: false }) paginatorContainer!: ElementRef;\n    @Input() data: any[] = [];\n    @Input() dataLength: number = 0;\n    @Input() uniqueList: any[] = [];\n    @Input() columns: TableColumns[] = [];\n    @Input() displayedColumns: string[] = [];\n    @Input() pagerTranslationOptions: PagerTranslationOptions| null = null;\n    @Input() isHtmlDataSource = false;\n    @Input() isLoading = false;\n    @Input() hasMore = false;\n    @Input() isTotalPaginator: boolean = false;\n    @Input() sortConfig: SortConfig = {\n        sortableColumns: [],\n        defaultSortColumn: '',\n        defaultSortDirection: SORT_DIRECTION.ASC\n    };\n    @Input() enableRowSelection: boolean = false; \n    // Input y Ouput de Paginador personalizado //\n    @Input() paginConfig?: PaginConfig = {\n        totalElements: 0,\n        elementsPerPage: 10,\n        currentPage: 0\n    };\n    @Input() emptyDataInfo!:EmptyDataInfo;\n    @Input() cellUpdates?: GridUpdate;\n    @Input() hideHeaderCheckbox: boolean = false;\n    @Input() hideHeaderDeleteButton: boolean = false;\n    @Input() filterOptions: MenuOptions[] = [];\n    @Output() pageChanged = new EventEmitter<PageEvent>();\n    @Output() filterChanged = new EventEmitter<string>();\n    selectedPaginator: PAGINATOR = PAGINATOR.PAGINATOR_1;\n    totalElements: number = 0;\n    // \n    currentPageIndex: number = 0;\n    totalPages: number = 0;\n    ///// \n    @Output() clickEvent: EventEmitter<HandleAction> = new EventEmitter();\n    @Output() clickEventItem: EventEmitter<HandleAction> = new EventEmitter();\n    @Output() clickEventMenuAction: EventEmitter<HandleMenuAction> = new EventEmitter();\n    @Output() deleteEvent: EventEmitter<Array<string>> = new EventEmitter();\n    @Output() deleteRowEvent: EventEmitter<any> = new EventEmitter();\n    @Output() searchAgain: EventEmitter<void> = new EventEmitter();\n    @Output() rowSelected = new EventEmitter<any>();\n    @Output() radioSelected = new EventEmitter<any>();\n    @Output() actionByItemClick = new EventEmitter<ActionByItemEvent>();\n    readonly userIcon: Lucide = {\n        iconSvg: User,\n        size: '16',\n        color: '#5D6F85',   \n    }\n    @Input() seachAutocompleteconfig: ISearchConfig= {\n        placeholder: '',   \n        label: '',\n        errorMessage: '', \n        icon: this.userIcon\n    };\n\n    public menuFilterControl = new FormControl(''); // o sin validadores\n\n    private lastUpdateTimestamp: number = 0;\n    public iconTrash:Lucide = {\n        iconSvg: iconTrash,\n        color: \"#5D6F85\",\n        size:'16',\n        class:'lucide-angular-icon'\n    }\n\n    public circleSlash2 :Lucide = {\n        iconSvg: circleSlash2,\n        color: \"#5D6F85\",\n        size:'16',\n        class:'lucide-angular-icon'\n    }\n\n    public trash2 :Lucide = {\n        iconSvg: trash2,\n        color: \"#5D6F85\",\n        size:'16',\n        class:'lucide-angular-icon'\n    }\n\n    public informationIcon :  Lucide = {\n        iconSvg: Info,\n        color: \"#5D6F85\",\n        size:'16',\n        class:'lucide-angular-icon-info'\n    }\n    public TEXT_POSITION = TEXT_POSITION;\n    selection = new SelectionModel<any>(true, []);\n    dataSource = new MatTableDataSource<any>([]);\n    resultsLength = 0;\n    length = 0;\n    elementsPerPage: number = 10;\n    hidePageSize = true;\n    disabled = false;\n    isSelect = false;\n    public selectedRadioElement: any = null;\n    isScrolled = false;\n    constructor(private paginatorIntl: MatPaginatorIntl,private paginatorConfig: MatPaginatorIntl,private cdr:ChangeDetectorRef) {\n    }\n\n    ngOnInit(): void {\n        \n        if (this.paginator) {\n            this.dataSource.paginator = this.paginator;\n        }\n        const existeSelect = this.columns.find(item => item.columnDef === 'select');\n        if (existeSelect) {\n            this.isSelect = true;\n        }\n        if(this.pagerTranslationOptions) {\n            this.setPagerTranslationOptions()\n        }\n    }\n    ngAfterViewInit() {\n        this.paginatorPaginLabel()\n        this.initializeSort();\n        this.customizePaginator();\n    }\n\n    customizePaginator() {\n        this.paginatorIntl.getRangeLabel = (page: number, pageSize: number, length: number) => {\n            if (length === 0) {\n                return `0 de 0`;\n            }\n    \n            const startIndex = page * pageSize; // Índice basado en 0\n            const endIndex = Math.min(startIndex + pageSize, length); // Asegurar que no sobrepase el total\n    \n            return `${startIndex + 1} - ${endIndex}`;\n        };\n    \n        this.paginatorIntl.changes.next(); // Notifica a la UI que debe actualizarse\n        this.cdr.detectChanges(); // Fuerza la detección de cambios en el componente\n    }\n    \n\n\n\n    ngOnChanges(changes: SimpleChanges): void {\n        // Tu lógica existente\n        if (changes['data']) {\n            this.dataSource.data = this.data;\n            if(this.length === 0){\n                this.selection.clear()\n                this.selectedRadioElement = null;\n            }\n        }\n        \n        if(changes['pagerTranslationOptions']) {\n            if(this.pagerTranslationOptions) {\n                this.setPagerTranslationOptions()\n            }\n        }\n        \n        if (changes['paginConfig']) {\n            this.initializePaginatorConfig();\n            this.calculateTotalPages();\n            if (this.paginator2) {\n                this.paginator2.pageIndex = this.currentPageIndex;\n            }\n        }\n\n        // NUEVA LÓGICA: Procesar actualizaciones de celdas\n        if (changes['cellUpdates'] && this.cellUpdates) {\n            this.processCellUpdates();\n        }\n\n        // NUEVA LÓGICA: \n        if (changes['filterOptions']) {\n            this.filterOptions = this.filterOptions.map(option => {\n                return {\n                    ...option,\n                    textOption: option.textOption || '' // Asegurar que textOption esté definido\n                };\n            });\n            this.validatorError();\n        }\n    }\n\n\n    private processCellUpdates(): void {\n        if (!this.cellUpdates || !this.cellUpdates.updates.length) {\n            return;\n        }\n\n        // Evitar procesar la misma actualización múltiples veces\n        const updateTimestamp = this.cellUpdates.timestamp || Date.now();\n        if (updateTimestamp <= this.lastUpdateTimestamp) {\n            return;\n        }\n\n        // Crear una copia de los datos actuales\n        const updatedData = [...this.dataSource.data];\n        let hasChanges = false;\n\n        // Aplicar cada actualización\n        this.cellUpdates.updates.forEach(update => {\n            const rowIndex = this.findRowIndex(updatedData, update);\n            \n            if (rowIndex !== -1) {\n                // Crear una copia del objeto fila para mantener inmutabilidad\n                const updatedRow = { ...updatedData[rowIndex] };\n                \n                // Actualizar el valor de la columna específica\n                if (Object.prototype.hasOwnProperty.call(updatedRow, update.columnDef)) {\n                    updatedRow[update.columnDef] = update.newValue;\n                    updatedData[rowIndex] = updatedRow;\n                    hasChanges = true;\n                } \n            } \n        });\n\n\n        if (hasChanges) {\n            this.dataSource.data = updatedData;\n            this.lastUpdateTimestamp = updateTimestamp;\n            \n            this.cdr.detectChanges();\n        }\n    }\n\n    public shouldShowProgressBar(element: any): boolean {\n        return element.progress !== null && \n                element.progress !== undefined && \n                element.progress !== '' && \n                element.progress >= 0;\n    }\n\n    private findRowIndex(data: any[], update: CellUpdate): number {\n        const identifier = update.rowIdentifier || 'id';\n        \n        return data.findIndex(row => {\n            // Buscar por el ID específico proporcionado\n            if (row[identifier] === update.rowId) {\n                return true;\n            }\n            \n            // Fallback: buscar por 'id' si no se encuentra con el identificador especificado\n            if (identifier !== 'id' && row.id === update.rowId) {\n                return true;\n            }\n            \n            // Fallback adicional: buscar por 'rowId' si existe\n            if (row.rowId === update.rowId) {\n                return true;\n            }\n            \n            return false;\n        });\n    }\n\n    initializePaginatorConfig(): void {\n        if (this.paginConfig) {\n            this.totalElements = this.paginConfig.totalElements || 0;\n            this.elementsPerPage = this.paginConfig.elementsPerPage || 10;\n            this.currentPageIndex = this.paginConfig.currentPage || 0;\n        }\n        this.length = 0\n    }\n\n    calculateTotalPages(): void {\n        this.totalPages = Math.ceil(this.totalElements / this.elementsPerPage);\n    }\n\n    onSearchAgain(){\n        this.searchAgain.emit()\n    }\n  \n    onPageChange(event: PageEvent) {\n        this.currentPageIndex = event.pageIndex;\n        this.pageChanged.emit(event);\n    }\n    \n    private initializeSort() {\n        if (this.sort) {\n            this.dataSource.sort = this.sort;\n            if (this.sortConfig.defaultSortColumn && this.isSortable(this.sortConfig.defaultSortColumn)) {\n                this.sort.active = this.sortConfig.defaultSortColumn;\n                this.sort.direction = this.sortConfig.defaultSortDirection;\n            }\n            this.sort.sortChange.subscribe((sortState: Sort) => {\n                this.handleSortChange(sortState);})\n        }\n    }\n\n    private paginatorPaginLabel(){\n        let rangeSepratorLabel = 'de';\n        if(this.pagerTranslationOptions && this.pagerTranslationOptions.rangeSepratorLabel){\n            rangeSepratorLabel = this.pagerTranslationOptions.rangeSepratorLabel\n        }\n\n        if(this.paginator){\n            this.paginator._intl.getRangeLabel = (page: number, pageSize: number, length: number) => {\n                if (length === 0 || pageSize === 0) {\n                    return `0 ${rangeSepratorLabel} ${length}`;\n                }\n                const startIndex = page * pageSize;\n                const endIndex = Math.min(startIndex + pageSize, length);\n                return `${startIndex + 1} ${rangeSepratorLabel} ${endIndex}`;\n            };\n            this.paginator._intl.changes.next();\n        }\n\n        if(this.paginator2){\n            this.paginator2._intl.getRangeLabel = (page: number, pageSize: number, length: number) => {\n                if (length === 0 || pageSize === 0) {\n                    return `0 ${rangeSepratorLabel} ${length}`;\n                }\n                const startIndex = page * pageSize;\n                const endIndex = Math.min(startIndex + pageSize, length);\n                return `${startIndex + 1} ${rangeSepratorLabel} ${endIndex}`;\n            };\n            this.paginator2._intl.changes.next();\n        }\n    }\n \n    handleSortChange(sortState: Sort) {\n        if (sortState.direction === '') {\n            sortState.direction = 'asc';\n        }\n        this.dataSource.sort = this.sort;\n        this.sort.direction = sortState.direction;\n        this.dataSource._updateChangeSubscription();\n    }\n\n    isSortable(columnDef: string): boolean {\n        return this.sortConfig.sortableColumns.includes(columnDef);\n    }\n\n    detectUnique(value: string): boolean {\n        return /Unique/i.test(value);\n    }\n\n    deleteSelectedRows() {\n        const arrayDeIDs = this.selection.selected.map(elemento => elemento.id);\n        return this.deleteEvent.emit(arrayDeIDs);\n    }\n\n    deleteSelectedRow(element: any) {\n        return this.deleteRowEvent.emit(element);\n    }\n\n    handleAction(action: TableColumnsActions, element: unknown, templateId?: string): void {\n        this.clearMenuFilters()\n        return this.clickEvent.emit({'action_clicked': action, 'element': element, 'idSubRow':templateId});\n    }\n    clearMenuFilters() {\n        this.menuFilterControl.reset();\n        this.cdr.detectChanges();\n    }\n\n    handleMenuAction(menuOption: MenuOptions, element: unknown, templateId?: string): void {\n        return this.clickEventMenuAction.emit({'action_clicked': menuOption, 'element': element, 'idSubRow':templateId});\n    }\n\n    onActionByItemClick(action: TableColumnsActions, element: any, column: TableColumns): void {\n        const rowIndex = this.dataSource.data.indexOf(element);\n        this.actionByItemClick.emit({\n            action,\n            row: element,\n            column,\n            columnDef: column.columnDef,\n            rowIndex\n        });\n    }\n\n    isAllSelected() {\n        const numSelected = this.selection.selected.length;\n        const numRows = this.dataSource.data.length;\n        return numSelected === numRows;\n    }\n    \n    toggleAllRows() {\n        if (this.isAllSelected()) {\n            this.selection.clear();\n        } else {\n            this.selection.select(...this.dataSource.data);\n        }\n\n        if (this.enableRowSelection) {\n            this.rowSelected.emit(this.selection.selected);\n        }\n    }\n\n\n    onRowSelected(event: any, element: any) {\n        // Primero ejecutamos la funcionalidad original\n        if (event) {\n            this.selection.toggle(element);\n        }\n    \n        if (this.enableRowSelection) {\n\n            this.rowSelected.emit(\n\n                this.selection.selected\n            );\n        }\n\n    }\n\n    onRadioSelected(element: any): void {\n        this.selectedRadioElement = element;\n        this.radioSelected.emit(element);\n    }\n    isRadioSelected(element: any): boolean {\n        return this.selectedRadioElement === element;\n    }\n    checkboxLabel(row?: any): string {\n        if (!row) {\n            return `${this.isAllSelected() ? 'deselect' : 'select'} all`;\n        }\n        return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${row.position + 1}`;\n    }\n\n    isActionDisabled(element: any, action: any): boolean {\n        // Verifica si el elemento tiene disabledActions y si el ID de la acción está incluido\n        return element.disabledActions?.includes(action.id) ?? false;\n    }\n\n    private setPagerTranslationOptions() {\n        if(this.pagerTranslationOptions) {\n\n            this.paginatorConfig.itemsPerPageLabel = this.pagerTranslationOptions.itemsPerPageLabel;\n            this.paginatorConfig.firstPageLabel = this.pagerTranslationOptions.firstPageLabel;\n            this.paginatorConfig.lastPageLabel = this.pagerTranslationOptions.lastPageLabel;\n            this.paginatorConfig.nextPageLabel = this.pagerTranslationOptions.nextPageLabel;\n            this.paginatorConfig.previousPageLabel = this.pagerTranslationOptions.previousPageLabel;\n            this.paginatorConfig.getRangeLabel = (page: number, pageSize: number, length: number) => {\n                if (length == 0 || pageSize == 0) {\n                    return `0 ${this.pagerTranslationOptions?.rangeSepratorLabel ? this.pagerTranslationOptions?.rangeSepratorLabel : 'of'} ${length}`;\n                }\n                length = Math.max(length, 0);\n                const startIndex = page * pageSize;\n                const endIndex = startIndex < length ? Math.min(startIndex + pageSize, length) : startIndex + pageSize;\n                return `${startIndex + 1} - ${endIndex} ${this.pagerTranslationOptions?.rangeSepratorLabel ? this.pagerTranslationOptions?.rangeSepratorLabel : 'of'} ${length}`;\n            };\n        }\n    }\n\n    public includedRowId(actions?: TableColumnsActions[]) {\n        return actions?.find((action) => action.rowId)\n    }\n\n    public filterActions(actions: TableColumnsActions[]|undefined, elementRowActionId:string|undefined) {\n        if(this.includedRowId(actions) && elementRowActionId) {\n            return actions?.filter((action) => action.rowId === elementRowActionId)\n        } else if(this.includedRowId(actions) && !elementRowActionId){\n            return actions?.filter((action) => !action.rowId)\n        } else {\n            return actions\n        }\n    }\n\n    public getInitials(name: string){\n        const initials = name\n            .split(' ')\n            .map(word => word.charAt(0))\n            .join('');\n        return initials;\n    }\n    public onMenuFilterChange(): void {\n        const filterValue = this.menuFilterControl.value?.toLowerCase();\n        this.filterChanged.emit(filterValue);\n        this.cdr.detectChanges();\n    }\n\n    validatorError(): void {\n        const value = this.menuFilterControl.value?.trim() || '';\n        if (value.length > 0 && this.filterOptions.length === 0) {\n            this.menuFilterControl.setErrors({ noResults: true });\n        } else {\n            this.menuFilterControl.setErrors(null);\n        }\n    }\n\n    onTableScroll(event: Event): void {\n        const target = event.target as HTMLElement;\n        this.isScrolled = target.scrollTop > 0;\n        const header = target.querySelector('.mat-mdc-header-row');\n        if (header) {\n          if (this.isScrolled) {\n            header.classList.add('scrolled');\n          } else {\n            header.classList.remove('scrolled');\n          }\n        }\n    }\n    \n}","<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<section [ngClass]=\"uniqueList.length === 0 ? 'data-grid-container':' data-grid-container data-grid-unique-container '\" (scroll)=\"onTableScroll($event)\">\n    \n    <table \n        mat-table \n        [dataSource]=\"dataSource.data\" matSort        \n        [matSortActive]=\"sortConfig.defaultSortColumn\"\n        [matSortDirection]=\"sortConfig.defaultSortDirection\"\n        (matSortChange)=\"handleSortChange($event)\"\n    >\n        <ng-container *ngFor=\"let item of columns; let i = index\" [matColumnDef]=\"item.columnDef\">\n            <th mat-header-cell *matHeaderCellDef mat-sort-header [disabled]=\"!isSortable(item.columnDef)\" [ngClass]=\"{'select-row-delete': item.columnDef === 'select' || item.columnDef === 'selectDelete' || item.columnDef === 'radio'}\" >\n                @if (item.columnDef === 'select' && uniqueList.length === 0) {\n                    <div>\n                        <div class=\"mat-mdc-header-checkbox-content gap-2\">\n                            @if(!hideHeaderCheckbox) {\n                                <mat-checkbox\n                                    (change)=\"$event ? toggleAllRows() : null\"\n                                    [checked]=\"selection.hasValue() && isAllSelected()\"\n                                    [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n                                    [aria-label]=\"checkboxLabel()\"\n                                ></mat-checkbox>\n                            }\n                            \n                            <div class=\"action-delete\">\n                                @if(selection.selected.length > 0 && !hideHeaderDeleteButton){                                    \n                                    <button mat-icon-button matTooltip=\"Desactivar\" class=\"action-icon\" (click)=\"deleteSelectedRows()\">\n                                        <lucide-angular \n                                            [img]=\"circleSlash2.iconSvg\" \n                                            [size]=\"circleSlash2.size\" \n                                            [color]=\"circleSlash2.color\" \n                                            [class]=\"circleSlash2.class\" >\n                                        </lucide-angular>\n                                    </button>\n                                }\n                            </div>\n                        </div>\n                    </div>\n                }\n                @if (item.columnDef === 'selectDelete' && uniqueList.length === 0) {\n                    <div>\n                        <div class=\"mat-mdc-header-checkbox-content gap-2\">\n                            @if(!hideHeaderCheckbox) {\n                                <mat-checkbox\n                                    (change)=\"$event ? toggleAllRows() : null\"\n                                    [checked]=\"selection.hasValue() && isAllSelected()\"\n                                    [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n                                    [aria-label]=\"checkboxLabel()\"\n                                ></mat-checkbox>\n                            }\n                            \n                            <div class=\"action-delete\">\n                                @if(selection.selected.length > 0 && !hideHeaderDeleteButton){                                    \n                                    <button mat-icon-button matTooltip=\"Eliminar\" class=\"action-icon\" (click)=\"deleteSelectedRows()\">\n                                        <lucide-angular \n                                            [img]=\"trash2.iconSvg\" \n                                            [size]=\"trash2.size\" \n                                            [color]=\"trash2.color\" \n                                            [class]=\"trash2.class\" >\n                                        </lucide-angular>\n                                    </button>\n                                }\n                            </div>\n                        </div>\n                    </div>\n                }\n                @if (item.columnDef === 'radio') {\n                    <div>\n                        <div class=\"mat-mdc-header-radio-content\">\n                            <span>{{ item.header || '' }}</span>\n                        </div>\n                    </div>\n                }\n                @if(item.header) {\n                    <div class=\"cell-flex\">\n                        {{ item.header }}\n                    </div>\n                } @else if(item.headerInnerHtml) {\n                    <div class=\"cell-flex\" [innerHTML]=\"item.headerInnerHtml | safeDom: 'html'\">\n                    </div>\n                }\n            </th>\n            <td mat-cell *matCellDef=\"let element\"\n            [ngClass]=\"{\n                'border-start-cell': element['paintBackgroundClass'] && i === 0,\n                'border-end-cell': element['paintBackgroundClass'] && i === columns.length - 1,\n                'border-trasparent': (uniqueList.length !== 0 && uniqueList.includes(element)) || element['paintBackgroundClass'],\n                'defoult-trasparent': uniqueList.length !== 0 && !uniqueList.includes(element),\n              }\"\n              [class]=\"element['paintBackgroundClass'] ? element['paintBackgroundClass'] : ''\"\n              [ngStyle]=\"{\n                width: item.columnDef === 'action' && item.actions\n                  ? item.actions.length * 32 + 'px'\n                  : item.columnDef === 'personAction'\n                  ? '1%'\n                  : ''\n              }\"\n              [style.white-space]=\"item.columnDef === 'personAction' ? 'nowrap' : null\">\n                @if (item.columnDef !== 'action' && item.columnDef !== 'progress' && item.columnDef !== 'valid' && item.columnDef !== 'select' && item.columnDef !== 'selectDelete' && item.columnDef !== 'personAction' && item.columnDef !== 'radio' && (uniqueList.length === 0 || !detectUnique(item.columnDef) ) ) {\n                    <ng-container>\n                        <div class=\"d-flex align-items-center gap-2\">\n                            <div [style.order]=\"item.actionByItems?.[0]?.textPosition === 'end' ? 0 : 1\">\n                                @if(!isHtmlDataSource){\n                                    <div class=\"cell-flex\">{{ element[item.columnDef] }}</div>\n                                } @else if(isHtmlDataSource && !item.columnDef.includes('infoIcon')) {\n                                    <div class=\"cell-flex\" [innerHTML]=\"element[item.columnDef] | safeDom: 'html'\" ></div>\n                                } @else if(isHtmlDataSource && item.columnDef.includes('infoIcon')) {\n                                    <div class=\"d-flex gap-8\">\n                                        <lucide-angular\n                                            [img]=\"informationIcon.iconSvg\"\n                                            [size]=\"informationIcon.size\"\n                                            [color]=\"informationIcon.color\"\n                                            [class]=\"informationIcon.class\"\n                                            [kitTooltip]=\"element['tooltipTitle']\"\n                                            [tooltipDescription]=\"element['tooltipDescription']\"\n                                            [tooltipPosition]=\"'top'\">\n                                        </lucide-angular>\n                                        <div class=\"cell-flex\" [innerHTML]=\"element[item.columnDef] | safeDom: 'html'\" ></div>\n                                    </div>\n                                }\n                            </div>\n                            @if (item.actionByItems?.length) {\n                                <div class=\"cell-flex cell-icons\"\n                                    [style.order]=\"item.actionByItems?.[0]?.textPosition === 'end' ? 1 : 0\">\n                                    @for(action of filterActions(item.actionByItems, element['rowId']); track action) {\n                                        @if(!action?.isMenu) {\n                                            @if(element['extraActions']){\n                                                @if (action?.isExtraAction) {\n                                                    <button\n                                                        mat-icon-button\n                                                        [matTooltip]=\"action.matTooltip ? action.matTooltip : ''\"\n                                                        class=\"action-icon\"\n                                                        matTooltipClass=\"custom-tooltip\"\n                                                        [disabled]=\"isActionDisabled(element, action)\"\n                                                        (click)=\"onActionByItemClick(action, element, item)\">\n                                                        <lucide-angular\n                                                            [img]=\"action.icon.iconSvg\"\n                                                            [size]=\"action.icon.size ? action.icon.size : '16'\"\n                                                            [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                                        </lucide-angular>\n                                                    </button>\n                                                }@else {\n                                                    <button\n                                                        mat-icon-button\n                                                        [matTooltip]=\"action.matTooltip ? action.matTooltip : ''\"\n                                                        class=\"action-icon\"\n                                                        matTooltipClass=\"custom-tooltip\"\n                                                        [disabled]=\"isActionDisabled(element, action)\"\n                                                        (click)=\"onActionByItemClick(action, element, item)\">\n                                                        <lucide-angular\n                                                            [img]=\"action.icon.iconSvg\"\n                                                            [size]=\"action.icon.size ? action.icon.size : '16'\"\n                                                            [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                                        </lucide-angular>\n                                                    </button>\n                                                }\n                                            }@else{\n                                                @if (!action?.isExtraAction) {\n                                                    <button\n                                                        mat-icon-button\n                                                        [matTooltip]=\"action.matTooltip ? action.matTooltip : ''\"\n                                                        class=\"action-icon\"\n                                                        matTooltipClass=\"custom-tooltip\"\n                                                        [disabled]=\"isActionDisabled(element, action)\"\n                                                        (click)=\"onActionByItemClick(action, element, item)\">\n                                                        <lucide-angular\n                                                            [img]=\"action.icon.iconSvg\"\n                                                            [size]=\"action.icon.size ? action.icon.size : '16'\"\n                                                            [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                                        </lucide-angular>\n                                                    </button>\n                                                }@else {\n                                                    <div style=\"width: 48px;\"></div>\n                                                }\n                                            }\n                                        }\n                                    }\n                                </div>\n                            }\n                        </div>\n                    </ng-container>\n                }\n\n                @if (detectUnique(item.columnDef) && uniqueList.includes(element)) {\n                    <ng-container>\n                        @if(!isHtmlDataSource){\n                            <div class=\"cell-flex\">{{ element[item.columnDef] }}</div>\n                        } @else if(isHtmlDataSource && !item.columnDef.includes('infoIcon')) {\n                            <div class=\"cell-flex\" [innerHTML]=\"element[item.columnDef] | safeDom: 'html'\" ></div>\n                        } @else if(isHtmlDataSource && item.columnDef.includes('infoIcon')) {\n                            <div class=\"d-flex gap-8\">\n                            <lucide-angular \n                            [img]=\"informationIcon.iconSvg\" \n                            [size]=\"informationIcon.size\" \n                            [color]=\"informationIcon.color\" \n                            [class]=\"informationIcon.class\" \n                            [kitTooltip]=\"element['tooltipTitle']\"\n                            [tooltipDescription]=\"element['tooltipDescription']\"\n                            [tooltipPosition]=\"'top'\">\n                            </lucide-angular>\n                            <div class=\"cell-flex\" [innerHTML]=\"element[item.columnDef] | safeDom: 'html'\" ></div>\n                            </div>\n                        }\n                    </ng-container>\n                    \n                }\n                @if (item.columnDef === 'radio') {\n                    <ng-container class=\"radio\">\n                        <div class=\"cell-flex\">\n                            <div class=\"mat-mdc-row-radio-content\">\n                                <mat-radio-button\n                                    name=\"gridRadioGroup\"\n                                    [value]=\"element.id || element.rowId || ''\"\n                                    [checked]=\"isRadioSelected(element)\"\n                                    (change)=\"onRadioSelected(element)\"\n                                    [aria-label]=\"'Select row ' + element.id\"\n                                >\n                                </mat-radio-button>\n                            </div>\n                        </div>\n                    </ng-container>\n                }\n                @if (item.columnDef === 'select' || item.columnDef === 'selectDelete') {\n                    <ng-container class=\"select\">\n                        <div class=\"cell-flex\">\n                           \n                                @if (uniqueList.length > 0 ) {\n                                    @if (uniqueList.includes(element)) {\n                                        <div class=\"d-flex align-items-center gap-2 content-action-delete\">\n                                            <mat-checkbox\n                                            class=\"example-margin\"\n                                            (click)=\"$event.stopPropagation()\"\n                                            (change)=\"$event ? selection.toggle(element) : null\"\n                                            [checked]=\"selection.isSelected(element)\"\n                                            [aria-label]=\"checkboxLabel(element)\">\n                                        </mat-checkbox>\n                                        <div class=\"action-delete\">\n                                            @if(selection.isSelected(element)) {                                    \n                                                <button mat-icon-button matTooltip=\"Eliminar\" class=\"action-icon\" (click)=\"deleteSelectedRow(element)\">\n                                                    <lucide-angular \n                                                        [img]=\"iconTrash.iconSvg\" \n                                                        [size]=\"iconTrash.size\" \n                                                        [color]=\"iconTrash.color\" \n                                                        [class]=\"iconTrash.class\">\n                                                    </lucide-angular>\n                                                </button>\n                                            }\n                                        </div>\n                                        </div>\n                                    }\n                                   \n                                    \n                                }@else {\n                                    <div class=\"mat-mdc-row-checkbox-content\">\n                                        <mat-checkbox\n                                            class=\"example-margin\"\n                                            (click)=\"$event.stopPropagation()\"\n                                            (change)=\"onRowSelected($event, element)\"\n                                            [checked]=\"selection.isSelected(element)\"\n                                            [aria-label]=\"checkboxLabel(element)\"\n                                        ></mat-checkbox>\n                                    </div>\n        \n                                }\n                        </div>\n                    </ng-container>\n                }\n\n                @if (item.columnDef === 'valid') {\n                    <ng-container>\n                        <div class=\"cell-flex \" [ngClass]=\"element[item.columnDef] ? 'active-item' : 'inactive-item'\">{{ element[item.columnDef] ? 'Activo' : 'Inactivo' }}</div>\n                    </ng-container>\n                }\n                @if (item.columnDef === 'progress') {\n                    <ng-container>\n                        <div class=\"cell-flex cell-progress-container\">\n                            @if (shouldShowProgressBar(element)) {\n                                <div class=\"d-flex align-items-center\">\n                                    <mat-progress-bar \n                                            mode=\"determinate\" \n                                            [value]=\"element[item.columnDef]\"\n                                            class=\"flex-fill me-2 multi-color-progress-gradient zebra-progress-bar\">\n                                    </mat-progress-bar>\n                                    <span class=\"text-nowrap small\">{{ element[item.columnDef] }}%</span>\n                                </div>\n                            } @else {\n                                <div class=\"no-progress\">\n                                    <span class=\"text-muted\"></span>\n                                </div>\n                            }\n                        </div>\n                    </ng-container>\n                }\n                @if (item.columnDef === 'action') {\n                    <ng-container>\n                        <div class=\"cell-flex cell-icons\">\n\n\n                               \n                                    @for(action of filterActions(item.actions , element['rowId']); track action) {\n                                        @if(!action?.isMenu) {\n                                            @if(element['extraActions']){\n                                                @if (action?.isExtraAction) {\n                                                    <button \n                                                        mat-icon-button \n                                                        [matTooltip]=\"action.matTooltip ? action.matTooltip : ''\" \n                                                        class=\"action-icon\"\n                                                        matTooltipClass=\"custom-tooltip\"\n                                                        [disabled]=\"isActionDisabled(element, action)\"\n                                                        (click)=\"handleAction(action, element)\">\n                                                        <lucide-angular \n                                                            [img]=\"action.icon.iconSvg\" \n                                                            [size]=\"action.icon.size ? action.icon.size : '16'\" \n                                                            [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                                        </lucide-angular>\n                                                </button>\n                                                }@else {\n                                                    <button \n                                                        mat-icon-button \n                                                        [matTooltip]=\"action.matTooltip ? action.matTooltip : ''\" \n                                                        class=\"action-icon\"\n                                                        matTooltipClass=\"custom-tooltip\"\n                                                        [disabled]=\"isActionDisabled(element, action)\"\n                                                        (click)=\"handleAction(action, element)\">\n                                                        <lucide-angular \n                                                            [img]=\"action.icon.iconSvg\" \n                                                            [size]=\"action.icon.size ? action.icon.size : '16'\" \n                                                            [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                                        </lucide-angular>\n                                                </button>\n                                                }\n                                               \n                                               \n                                            }@else{\n                                                @if (!action?.isExtraAction) {\n                                                    <button \n                                                        mat-icon-button \n                                                        [matTooltip]=\"action.matTooltip ? action.matTooltip : ''\" \n                                                        class=\"action-icon\"\n                                                        matTooltipClass=\"custom-tooltip\"\n                                                        [disabled]=\"isActionDisabled(element, action)\"\n                                                        (click)=\"handleAction(action, element)\">\n                                                        <lucide-angular \n                                                            [img]=\"action.icon.iconSvg\" \n                                                            [size]=\"action.icon.size ? action.icon.size : '16'\" \n                                                            [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                                        </lucide-angular>\n                                                </button>\n                                                }@else {\n                                                    <div style=\"width: 48px;\"></div>\n                                                }\n                                            }\n                                           \n                                        } @else if(action?.isMenu) {\n                                            <button \n                                                mat-icon-button \n                                                class=\"action-icon\"\n                                                matTooltipClass=\"custom-tooltip\"\n                                                [matMenuTriggerFor]=\"menu\" \n                                                [disabled]=\"isActionDisabled(element, action)\"\n                                                [matTooltip]=\"action.matTooltip ? action.matTooltip : ''\">\n                                                <lucide-angular \n                                                    [img]=\"action.icon.iconSvg\" \n                                                    [size]=\"action.icon.size ? action.icon.size : '16'\" \n                                                     \n                                                    [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                                </lucide-angular>\n                                            </button>\n                                            <mat-menu #menu=\"matMenu\">\n                                                @for(optionMenu of action?.menuOptions; track optionMenu) {\n                                                    <button \n                                                        mat-menu-item \n                                                        class=\"action-icon\"\n                                                        matTooltipClass=\"custom-tooltip\"\n                                                        [disabled]=\"isActionDisabled(element, action)\"\n                                                        (click)=\"handleMenuAction(optionMenu, element)\" \n                                                        [matTooltip]=\"optionMenu.matTooltip??''\">\n                                                        <lucide-angular \n                                                            [img]=\"optionMenu.icon?.iconSvg\" \n                                                            [size]=\"optionMenu.icon?.size ? optionMenu.icon?.size : '16'\" \n                                                            [color]=\"optionMenu.icon?.color ? optionMenu.icon?.color : ''\" \n                                                            [class]=\"optionMenu.icon?.class ? optionMenu.icon?.class : ''\" >\n                                                        </lucide-angular>\n                                                        <span>{{optionMenu.textOption}}</span>\n                                                    </button>\n                                                }\n                                            </mat-menu>\n                                        }\n                                    }\n                                    \n                                \n                              \n                            \n                        </div>\n                    </ng-container>\n                }\n                @if (item.columnDef === 'personAction') {\n                    <ng-container>\n                        <div class=\"cell-icons\" style=\"width: fit-content; display: inline-flex;\">\n                            @for(action of filterActions(item.actions , element['rowId']); let i = $index; track action) {\n                                @if(!action?.isMenu) {\n                                    @if (action?.textAction) {\n                                        <button [class]=\"action.buttonClass ? action.buttonClass+' d-flex align-items-center border-0 bg-transparent gap-1' : ' d-flex align-items-center border-0 bg-transparent gap-1'\" (click)=\"handleAction(action, element) \n                                        \"   [matTooltip]=\"action.matTooltip ? action.matTooltip : ''\"\n                                            matTooltipClass=\"custom-tooltip\">\n                                            @if (action?.textPosition === 'start') {\n                                                <span class=\"mb-0 ms-1 buton-action-text\">{{action?.textAction}}</span>\n                                                <lucide-angular\n                                                    [img]=\"action.icon.iconSvg\"\n                                                    [size]=\"action.icon.size ? action.icon.size : '16'\"\n                                                    [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                                </lucide-angular>\n                                            }@else if (action?.textPosition === 'end'){\n                                                <lucide-angular\n                                                    [img]=\"action.icon.iconSvg\"\n                                                    [size]=\"action.icon.size ? action.icon.size : '16'\"\n                                                    [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                                </lucide-angular>\n                                                <span class=\"mb-0 ms-1 buton-action-text\">{{action?.textAction}}</span>\n                                            }\n                                        </button>\n                                    } @else {\n                                        <button\n                                            mat-icon-button\n                                            class=\"action-icon\"\n                                            [matTooltip]=\"action.matTooltip ? action.matTooltip : ''\"\n                                            matTooltipClass=\"custom-tooltip\"\n\n                                            [disabled]=\"isActionDisabled(element, action)\"\n                                            (click)=\"handleAction(action, element)\">\n\n                                                <lucide-angular\n                                                    [img]=\"action.icon.iconSvg\"\n                                                    [size]=\"action.icon.size ? action.icon.size : '16'\"\n                                                    [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                                </lucide-angular>\n\n                                        </button>\n                                    }\n                                }\n                            @if(action?.isMenu) {\n                                <button\n                                mat-icon-button\n                                class=\"action-icon\"\n                                matTooltipClass=\"custom-tooltip\"\n                                [matMenuTriggerFor]=\"dynamicMenu\" \n                                [disabled]=\"isActionDisabled(element, action)\"\n                                (click)=\"handleAction(action, element)\"\n                                [matTooltip]=\"action.matTooltip ?? ''\" >\n                                @if(element[item.columnDef]){\n                                    <div class=\"avatar\">\n                                        <span class=\"avatar-initials text-center\"> {{(element[item.columnDef].initial) ? element[item.columnDef].initial : ''}}</span>\n                                    </div>\n                                        }@else {\n                                            <lucide-angular \n                                                [img]=\"action.icon.iconSvg\" \n                                                [size]=\"action.icon.size ? action.icon.size : '16'\" \n                                                [class]=\"action.icon.class ? action.icon.class : ''\" >\n                                            </lucide-angular>\n                                        }\n\n                                </button>\n\n                                <!-- Este mat-menu tiene un ID dinámico que guardamos en el mapa -->\n                                <mat-menu #dynamicMenu=\"matMenu\" [overlapTrigger]=\"false\" class=\"custom-menu\" [id]=\"'menu_' + element.rowId + '_' + i\">\n                                    <div class=\"w-100 d-flex flex-column gap-2\">\n                                        <span class=\"title-search\">{{seachAutocompleteconfig.label}}</span>\n                                     <mat-form-field appearance=\"outline\" class=\"autocomplete-custom w-100\">\n                                        <input\n                                            matInput\n                                            (click)=\"$event.stopPropagation()\"\n                                            [formControl]=\"menuFilterControl\"\n                                            (input)=\"onMenuFilterChange()\"\n                                            [placeholder]=\"seachAutocompleteconfig.placeholder||''\"\n                                        />\n                                       @if (menuFilterControl.hasError('noResults')) {\n                                            <mat-error>\n                                                {{ seachAutocompleteconfig.errorMessage }}\n                                            </mat-error>\n                                       }\n\n\n                                        <lucide-angular matPrefix \n                                        [size]=\"seachAutocompleteconfig.icon.size\"\n                                        [color]=\"seachAutocompleteconfig.icon.color\"\n                                        [img]=\"seachAutocompleteconfig.icon.iconSvg\"></lucide-angular>\n                                        </mat-form-field>\n\n                                    </div>\n                                    <div class=\"menu-options-container\">\n                                        @if(filterOptions.length > 0){\n                                            @for(optionMenu of filterOptions; track optionMenu) {\n                                                    <button\n                                                    mat-menu-item\n                                                    class=\"action-icon d-flex align-items-center\"\n                                                    [disabled]=\"isActionDisabled(element, action)\"\n                                                    (click)=\"handleMenuAction(optionMenu, element)\"\n                                                    [matTooltip]=\"optionMenu.matTooltip ?? ''\">\n                                                    \n                                                    @if(optionMenu.textOption){\n                                                        <div class=\"avatar\">\n                                                        @if (optionMenu.imageUrl) {\n                                                            <img [src]=\"optionMenu.imageUrl\" alt=\"Avatar\" class=\"avatar-image\" />\n                                                        } @else {\n                                                            <div class=\"initials d-flex justify-content-center align-items-center m-1\">\n                                                            <span class=\"avatar-initials text-center\">{{ getInitials(optionMenu.textOption) }}</span>\n                                                            </div>\n                                                        }\n                                                        </div>\n                                                        <span class=\"d-flex align-items-center\">{{ optionMenu.textOption }}</span>\n                                                    }\n                                                    </button>\n                                            }\n                                        } \n                                        @if(filterOptions.length === 0 ||  filterOptions.length > 0){\n                                            <span class=\"no-options\">\n                                                {{ 'No se encontraron resultados' }}\n                                            </span>\n                                        }\n                                    </div>\n                                </mat-menu>\n                            }\n                        }\n                        </div>\n                    </ng-container>\n                }\n\n            </td>\n        </ng-container>\n        <tr class=\"mat-row \" *matNoDataRow>\n            <td class=\"p-3\" colspan=\"12\">\n                <div class=\"d-flex flex-column justify-content-center align-items-center no-registers\">\n                    @if(emptyDataInfo){\n\n                        @if(emptyDataInfo.icon){\n                            <div class=\"container-icon-no-data d-flex align-items-center justify-content-center\">\n                                <lucide-angular \n                                [img]=\"emptyDataInfo.icon.iconSvg\" \n                                [size]=\"emptyDataInfo.icon.size\" \n                                [color]=\"emptyDataInfo.icon.color\" \n                                [class]=\"emptyDataInfo.icon.class\" >\n                            </lucide-angular>\n                            </div>\n                            \n                        }\n\n                        @if(emptyDataInfo.description){\n                            <div class=\"cell-flex\" [innerHTML]=\"emptyDataInfo.description | safeDom: 'html'\"></div>\n                        }\n\n                        @if(emptyDataInfo.button){\n                            <button \n                                type=\"button\" \n                                mat-raised-button\n                                [color]=\"emptyDataInfo.button.color ? emptyDataInfo.button.color:''\"  \n                                [disabled]=\"emptyDataInfo.button.disable\" \n                                (click)=\"onSearchAgain()\" \n                            >\n                                @if(emptyDataInfo.button.icon) {\n\n                                    @if(emptyDataInfo.button.textPosition === TEXT_POSITION.START){\n                                        {{emptyDataInfo.button.description}}\n                                    }\n                                    <lucide-angular \n                                        [img]=\"emptyDataInfo.button.icon.iconSvg\" \n                                        [size]=\"emptyDataInfo.button.icon.size\" \n                                        [color]=\"emptyDataInfo.button.icon.color\" \n                                        [class]=\"emptyDataInfo.button.icon.class\" >\n                                    </lucide-angular>\n                                    @if(emptyDataInfo.button.textPosition === TEXT_POSITION.END){\n                                        {{emptyDataInfo.button.description}}\n                                    }\n                                    \n                                }@else if(emptyDataInfo.button.description){\n                                    {{emptyDataInfo.button.description}}\n                                }\n                            </button>\n                        }\n                    }\n                </div>                \n            </td>\n        </tr>\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\n        <tr mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngClass]=\"row['rowClass'] || ''\" ></tr>\n    </table>\n    <div class=\"pagination-container\">\n        @if(isTotalPaginator){\n            <div #paginatorContainer>\n                <mat-paginator\n                    [pageSize]=\"elementsPerPage\"\n                    [length]=\"(hasMore ? (currentPageIndex + 2) * elementsPerPage : dataLength)\"\n                    [pageIndex]=\"currentPageIndex\"\n                    (page)=\"onPageChange($event)\"\n                    [attr.data-range]=\"currentPageIndex * elementsPerPage + 1 + ' - ' + ((currentPageIndex + 1) * elementsPerPage)\">\n                </mat-paginator>\n            </div>\n        } @else {\n        <mat-paginator\n            #paginator2\n            class=\"demo-paginator\"\n            (page)=\"onPageChange($event)\"\n            [length]=\"totalElements\"\n            [pageSize]=\"elementsPerPage\"\n            [disabled]=\"disabled\"\n            [hidePageSize]=\"hidePageSize\"\n            [pageIndex]=\"currentPageIndex\">\n        </mat-paginator>\n        }\n       \n    </div>\n</section>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TooltipContentComponent } from './tooltip-content.component';\nimport { TooltipDirective } from './directive/tooltip.directive';\n@NgModule({\n    imports: [\n        CommonModule,\n\n    ],\n    declarations: [\n        TooltipContentComponent,\n        TooltipDirective\n    ],\n    exports:[\n        TooltipDirective\n    ],\n    \n})\nexport class KifTooltipModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GridComponent } from './grid.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { SafeDomPipe } from './pipes/safeDom.pipe';\nimport {MatMenuModule} from '@angular/material/menu';\nimport { MatSortModule } from '@angular/material/sort';\nimport { LucideAngularModule } from 'lucide-angular';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { KifTooltipModule } from './components/tooltip/tooltip.module';\nimport { MatRadioButton } from '@angular/material/radio';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        MatFormFieldModule, \n        MatInputModule, \n        MatTableModule,\n        MatIconModule,\n        MatTooltipModule,\n        MatPaginatorModule,\n        MatDividerModule,\n        MatIconModule,\n        MatCheckboxModule,\n        FormsModule,\n        MatButtonModule,\n        SafeDomPipe,\n        MatMenuModule, \n        MatSortModule,\n        LucideAngularModule,\n        MatProgressBarModule,\n        ReactiveFormsModule,\n        KifTooltipModule,\n        MatRadioButton\n    ],\n    declarations: [GridComponent],\n    exports:[\n        GridComponent,\n        SafeDomPipe\n    ]\n})\nexport class KifGridModule { }\n","/*\n * Public API Surface of kif-lib-input\n */\n\nexport * from './grid.component';\nexport * from './grid.module';\nexport * from './pipes/safeDom.pipe';\nexport * from './enum';\nexport * from './interface';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","iconTrash","circleSlash2","trash2","i14.TooltipDirective","i16.SafeDomPipe"],"mappings":"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"}