{"version":3,"file":"ngx-redi-core-RediTable.mjs","sources":["../../../projects/ngx-redi-core/RediTable/src/components/filter-data/filter-data.component.ts","../../../projects/ngx-redi-core/RediTable/src/components/filter-data/filter-data.component.html","../../../projects/ngx-redi-core/RediTable/src/components/redi-table/redi-table.component.ts","../../../projects/ngx-redi-core/RediTable/src/components/redi-table/redi-table.component.html","../../../projects/ngx-redi-core/RediTable/src/components/redi-table-col/redi-table-col.component.ts","../../../projects/ngx-redi-core/RediTable/src/components/redi-table-col/redi-table-col.component.html","../../../projects/ngx-redi-core/RediTable/public-api.ts","../../../projects/ngx-redi-core/RediTable/ngx-redi-core-RediTable.ts"],"sourcesContent":["import { AfterViewInit, Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule, MatListOption } from '@angular/material/list';\r\nimport { FilterItem } from '../../models/interfaces/filter-item';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { filter } from 'rxjs';\r\n\r\n@Component({\n    selector: 'filter-data',\n    imports: [\n        MatFormFieldModule,\n        FormsModule,\n        MatInputModule,\n        MatListModule\n    ],\n    templateUrl: './filter-data.component.html',\n    styleUrl: './filter-data.component.css'\n})\r\nexport class FilterDataComponent implements AfterViewInit {\r\n\r\n  @Input()\r\n  public set filtrosColumnas(value: Array<FilterItem>) {\r\n    if (value) {\r\n      this._refFiltro = value;\r\n      this.filtros = [...value.map(f => { return { ...f } })];\r\n    }\r\n  }\r\n\r\n  public _refFiltro: Array<FilterItem>;\r\n  public filtros: Array<FilterItem>;\r\n\r\n  @ViewChild('mainControl')\r\n  public allItemControl!: MatListOption\r\n\r\n  @Output()\r\n  public filterEnd: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n  @ViewChild('textFilter')\r\n  control!: ElementRef;\r\n\r\n  constructor() {\r\n    this._refFiltro = [];\r\n    this.filtros = [];\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    if (this.allItemControl) {\r\n      setTimeout(() => {\r\n        this.allItemControl.selected = this.isAllChecked(this.filtros);\r\n      });\r\n    }\r\n  }\r\n\r\n  public selectedChange() {\r\n    if (this.allItemControl) {\r\n      this.allItemControl.selected = this.isAllChecked(this.filtros);\r\n    }\r\n  }\r\n\r\n  public setAllCheck(value: boolean) {\r\n    this.filtros.map(f => f.isSelected = value)\r\n  }\r\n\r\n\r\n  public isAllChecked(filters: Array<FilterItem>) {\r\n    return filters.every(f => f.isSelected);\r\n  }\r\n\r\n  public changeFilter() {\r\n    if (this.control) {\r\n      let value = this.control.nativeElement.value ?? '';\r\n      this.filtros.map(f => f.isVisible = value === '' ||\r\n        f.name.trim().toLowerCase().indexOf(value.trim().toLowerCase()) !== -1);\r\n    }\r\n  }\r\n\r\n  public aplicarFiltros() {\r\n    this._refFiltro.map((d, i) => { this._refFiltro[i].isSelected = this.filtros[i].isSelected });\r\n    this.filterEnd.emit(true);\r\n  }\r\n\r\n  public cancelarFiltro() {\r\n    this.filterEnd.emit();\r\n  }\r\n\r\n  public loadData() {\r\n    this.control.nativeElement.value = '';\r\n    this._refFiltro.map((d, i) => {\r\n      this.filtros[i].isSelected = this._refFiltro[i].isSelected;\r\n      d.isVisible = true;\r\n      this.filtros[i].isVisible = true;\r\n    });\r\n  }\r\n}\r\n","<mat-label>Filtro</mat-label>\r\n<div>\r\n    <input #textFilter class=\"inputFilter\" (keyup)=\"changeFilter()\" type=\"text\" placeholder=\"Buscar\" aria-label=\"Filtro\"\r\n        matInput>\r\n</div>\r\n<mat-selection-list #elementos>\r\n    <mat-list-option #mainControl (click)=\"setAllCheck(mainControl.selected)\"\r\n        [disabled]=\"textFilter.value !== ''\">(Seleccionar todo)</mat-list-option>\r\n    @for (filtro of filtros; track filtro) {\r\n    @if(filtro.isVisible){\r\n    <mat-list-option [(selected)]=\"filtro.isSelected\"\r\n        (selectedChange)=\"selectedChange()\">{{filtro.name}}</mat-list-option>\r\n    }\r\n    }\r\n</mat-selection-list>\r\n<button mat-flat-button color=\"primary\" (click)=\"aplicarFiltros()\">Aceptar</button>\r\n<button mat-flat-button color=\"accent\" (click)=\"cancelarFiltro()\">Cancelar</button>","/** Librerías angular */\r\nimport { Component, ElementRef, EventEmitter, Input, OnChanges, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSort, MatSortModule, SortDirection } from '@angular/material/sort';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n/** Modelo */\r\nimport { DataTable } from '../../models/interfaces/data-table';\r\nimport { ColumnDefinition } from '../../models/interfaces/column-definition';\r\nimport { RowAction } from '../../models/interfaces/row-action';\r\nimport { FilterItem } from '../../models/interfaces/filter-item';\r\nimport { FilterDataComponent } from '../filter-data/filter-data.component';\r\nimport { CsvService } from 'ngx-redi-core/Helper';\r\n\r\n/**\r\n * Componente que muestra los datos en una tabla\r\n * @decorators ´@Component´\r\n */\r\n@Component({\n    selector: 'redi-table',\n    imports: [\n        CommonModule,\n        MatIconModule,\n        MatTableModule,\n        MatCheckboxModule,\n        MatPaginatorModule,\n        MatSortModule,\n        MatMenuModule,\n        MatDividerModule,\n        MatTooltipModule,\n        MatCheckboxModule,\n        MatButtonModule,\n        FilterDataComponent\n    ],\n    templateUrl: './redi-table.component.html',\n    styleUrl: './redi-table.component.css'\n})\r\nexport class RediTableComponent<T extends object> implements OnChanges {\r\n  /**\r\n   * Propiedad que indica si se pueden seleccionar las filas\r\n   */\r\n  @Input()\r\n  public seleccionarFilas = true;\r\n\r\n  /**\r\n   * Propiedad que indica si se habilitan los filtros para la tabla\r\n   */\r\n  @Input()\r\n  public filtrarDatos = true;\r\n\r\n  @Input()\r\n  public descargaCsv = true;\r\n\r\n  /**\r\n   * Propiedad que indica si se paginan los datos\r\n   */\r\n  @Input()\r\n  public paginar = true;\r\n\r\n  /**\r\n   * Propiedad que indica si se habilita el ordenamiento de datos\r\n   */\r\n  @Input()\r\n  public ordenarDatos = true;\r\n\r\n  /**\r\n   * Datos y configuración de la tabla\r\n   */\r\n  @Input()\r\n  public set dataTable(data: DataTable<T>) {\r\n    if (this.internalTable !== data) {\r\n      this.internalTable = data ?? {};\r\n      setTimeout(() => {\r\n        this.actualizarTabla();\r\n      });\r\n    }\r\n  };\r\n\r\n  public get dataTable() {\r\n    return this.internalTable;\r\n  }\r\n\r\n  @Input()\r\n  public templateAction!: TemplateRef<unknown>;\r\n\r\n  @Input()\r\n  public templateRow!: TemplateRef<unknown>;\r\n\r\n  /**\r\n   * Origen interno de datos para la tabla\r\n   */\r\n  private internalTable: DataTable<T>;\r\n\r\n  public dataSource: MatTableDataSource<T>;\r\n\r\n  /**\r\n   * Objeto de la vista para el ordenamiento\r\n   */\r\n  @ViewChild(MatSort) sort!: MatSort;\r\n\r\n  /**\r\n   * Objeto de la vista para la paginación\r\n   */\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n\r\n  /**\r\n  * Contiene las columnas que se mostraran en la tabla\r\n  */\r\n  public columnas: Array<string> = [];\r\n\r\n  /**\r\n   * Contiene los datos de las columnas\r\n   */\r\n  public datosColumna: Array<ColumnDefinition> = [];\r\n\r\n  @ViewChild('filtro')\r\n  public componenteFiltro!: FilterDataComponent;\r\n\r\n  @ViewChild('filtroInput')\r\n  public inputFiltro!: ElementRef;\r\n\r\n  /**\r\n   * Crea un nuevo componente Tabla\r\n   */\r\n  constructor(private csv: CsvService) {\r\n    this.internalTable = {\r\n      dataSource: [] as Array<T>,\r\n      acciones: [] as Array<RowAction<T>>,\r\n      seleccion: new SelectionModel<T>(true, [])\r\n    } as DataTable<T>;\r\n    this.dataSource = new MatTableDataSource();\r\n    this.dataSource.data = [];\r\n  }\r\n\r\n  public closeMenu(header: HTMLTableCellElement) {\r\n    if (this.componenteFiltro) {\r\n      this.componenteFiltro.loadData();\r\n    }\r\n    if (header) {\r\n      header.classList.remove('headerHover');\r\n    }\r\n  }\r\n\r\n  public openMenu(header: HTMLTableCellElement) {\r\n    if (header) {\r\n      header.classList.add('headerHover');\r\n      this.componenteFiltro?.changeFilter();\r\n    }\r\n  }\r\n\r\n  /**\r\n  * Eventos que se ejecutan al iniciar\r\n  */\r\n  private actualizarTabla(): void {\r\n    this.limpiarColumnas();\r\n    if (this.dataTable) {\r\n      this.dataSource = new MatTableDataSource(this.dataTable.dataSource);\r\n      this.construirDatosColumna();\r\n      this.mostrarColumnas();\r\n      this.dataSource.filterPredicate = (f: T, u: string) => { return this.customParameter(f, u) };\r\n    }\r\n    this.inicializarPaginador();\r\n    this.reasignarPaginacion();\r\n    this.changeSelection(this.seleccionarFilas);\r\n\r\n    this.dataTable.acciones = this.dataTable.acciones ?? [];\r\n    this.dataTable.seleccion = this.dataTable?.seleccion ?? new SelectionModel<T>(true, []);\r\n  }\r\n\r\n  /**\r\n   * Construye los datos de las columnas para la tabla\r\n   */\r\n  private construirDatosColumna() {\r\n    if (this.dataTable.columnas &&\r\n      this.dataTable.columnas.length > 0) {\r\n      this.datosColumna.push(...this.dataTable.columnas);\r\n      this.generateFilterData(this.datosColumna);\r\n    }\r\n    else {\r\n      if (this.dataTable?.dataSource && this.dataTable.dataSource.length) {\r\n        this.datosColumna.push(...Object.keys(this.dataTable.dataSource[0])\r\n          .map(x => {\r\n            return {\r\n              identificador: x,\r\n              etiqueta: x,\r\n              filters: [],\r\n              isSort: false,\r\n              haveFilters: false,\r\n              sortDirection: '',\r\n              customTemplate: false\r\n            } as ColumnDefinition;\r\n          }));\r\n        this.generateFilterData(this.datosColumna);\r\n      }\r\n    }\r\n  }\r\n\r\n  private generateFilterData(columnas: Array<ColumnDefinition>) {\r\n    let result = {};\r\n    let keys = Object.keys(this.dataSource.data[0] ?? {});\r\n    this.dataSource.filteredData.map((d: T) => {\r\n      keys.map((k) => {\r\n        let prop: Array<any> = Object.getOwnPropertyDescriptor(result, k)?.value ?? [];\r\n        let value = Object.getOwnPropertyDescriptor(d, k)?.value;\r\n        if (value && !prop.find(i => i.name == value)) {\r\n          prop.push({ name: value, isSelected: true, isVisible: true } as FilterItem);\r\n        }\r\n        Object.defineProperty(result, k, { value: prop })\r\n      });\r\n    });\r\n\r\n    columnas.map(c => {\r\n      c.filters = Object.getOwnPropertyDescriptor(result, c.identificador)?.value;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Activa las columnas que se van a mostrar\r\n   */\r\n  private mostrarColumnas() {\r\n    this.columnas.push(...this.datosColumna\r\n      .map(item => { return item.identificador; }));\r\n    if (this.verAcciones()) {\r\n      this.columnas.push('actions');\r\n    }\r\n    this.dataSource.sort = this.sort;\r\n  }\r\n\r\n  /**\r\n   * Método que ejecuta los cambios en la selección de filas\r\n   * @param currentValue - Valor actual\r\n   */\r\n  private changeSelection(currentValue: boolean): void {\r\n    if (currentValue) {\r\n      this.columnas.unshift('select');\r\n    } else {\r\n      const index = this.columnas.indexOf('select');\r\n      if (index > -1) {\r\n        this.columnas.splice(index, 1);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Método que valida los cambios en los datos de entrada\r\n   * @param changer - Cambios realizados en la vista\r\n   */\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    this.actualizarSeleccion(changes);\r\n    this.actualizarFiltro(changes);\r\n    this.actualizarPaginacion(changes);\r\n  }\r\n\r\n  private actualizarSeleccion(cambios: SimpleChanges) {\r\n    const changeSelectedRow = cambios['seleccionarFilas'];\r\n    if (changeSelectedRow && this.dataTable) {\r\n      this.changeSelection(changeSelectedRow.currentValue);\r\n    }\r\n  }\r\n\r\n  private actualizarFiltro(cambios: SimpleChanges) {\r\n    const changeFilter = cambios['filtrarDatos'];\r\n    if (changeFilter && !changeFilter.currentValue) {\r\n      this.dataSource.filter = '';\r\n      this.reasignarPaginacion();\r\n    }\r\n  }\r\n\r\n  private reasignarPaginacion() {\r\n    if (this.paginar) {\r\n      this.dataSource.paginator = this.paginator;\r\n    }\r\n    else {\r\n      this.dataSource.paginator = null;\r\n    }\r\n  }\r\n\r\n  private actualizarPaginacion(cambios: SimpleChanges) {\r\n    const changePagination = cambios['paginar'];\r\n    if (changePagination) {\r\n      if (changePagination.currentValue) {\r\n        this.dataSource.paginator = this.paginator;\r\n      }\r\n      else {\r\n        this.dataSource.paginator = null;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Método que aplica el filtro a los datos de la tabla\r\n   * @param filtro - Evento de filtrado\r\n   */\r\n  public applyFilter(filtro: string) {\r\n    this.dataSource.filter = filtro === '' ? `$omit_${Date.now().toString()}` : filtro.trim().toLowerCase();\r\n    if (this.dataSource.paginator) {\r\n      this.dataSource.paginator.firstPage();\r\n    }\r\n  }\r\n\r\n  private limpiarColumnas() {\r\n    this.datosColumna.splice(0);\r\n    this.columnas.splice(0);\r\n  }\r\n\r\n  /**\r\n   * Método que indica si se debe mostrar la columna de acciones\r\n   * @returns True si se debe mostrar las acciones\r\n   */\r\n  public verAcciones(): boolean {\r\n    return this.templateAction !== undefined || this.dataTable?.acciones?.length > 0;\r\n  }\r\n\r\n  /**\r\n   * Método que inicializa el Paginador\r\n   */\r\n  private inicializarPaginador() {\r\n    if (this.paginator) {\r\n      this.paginator._intl.itemsPerPageLabel = 'Elementos por pagina';\r\n      this.paginator._intl.firstPageLabel = 'Primera pagina';\r\n      this.paginator._intl.itemsPerPageLabel = 'Elementos por pagina';\r\n      this.paginator._intl.lastPageLabel = 'Ultima pagina';\r\n      this.paginator._intl.nextPageLabel = 'Siguiente pagina';\r\n      this.paginator._intl.previousPageLabel = 'Pagina anterior';\r\n      this.paginator._intl.getRangeLabel = (page: number, pageSize: number, length: number) => {\r\n        return `Pagina:${page + 1} de ${pageSize <= length ? Math.ceil(length / pageSize) : 1}`;\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Indica si el ordenamiento esta activo\r\n   */\r\n  public ordenamientoActivo(): boolean {\r\n    if (!this.ordenarDatos && this.sort) {\r\n      this.sort.direction = '';\r\n    }\r\n    return this.ordenarDatos;\r\n  }\r\n\r\n  public asignarOrden(column: ColumnDefinition, orden: SortDirection): void {\r\n    if (this.sort) {\r\n      this.datosColumna.map(d => d.isSort = false);\r\n      column.isSort = true;\r\n      column.sortDirection = orden;\r\n      this.sort.active = column.identificador;\r\n      this.sort.direction = orden;\r\n      this.dataSource.sort = this.sort;\r\n    }\r\n  }\r\n\r\n  /** Alterna la selección de registros de la tabla */\r\n  public alternarSeleccion() {\r\n    if (this.todoSeleccionado()) {\r\n      this.dataTable.seleccion?.clear();\r\n      return;\r\n    }\r\n    this.dataTable.seleccion?.select(...this.dataSource.data);\r\n  }\r\n\r\n  /**\r\n   * Indica si todo el contenido esta seleccionado\r\n   * @returns True si todo el contenido esta seleccionado\r\n   */\r\n  public todoSeleccionado(): boolean {\r\n    const numSelected = this.dataTable.seleccion?.selected.length;\r\n    const numRows = this.dataSource.data.length;\r\n    return numSelected === numRows;\r\n  }\r\n\r\n  /**\r\n   * Obtiene el estado de la etiqueta de seleccionado\r\n   * @param fila - Fila que se validara\r\n   * @returns Estado de selección en modo texto\r\n   */\r\n  public validarEtiqueta(fila?: any): string {\r\n    if (!fila) {\r\n      return `${this.todoSeleccionado() ? 'deselect' : 'select'} all`;\r\n    }\r\n    return `${this.dataTable.seleccion?.isSelected(fila) ? 'deselect' : 'select'} row ${Number(fila.position) + 1}`;\r\n  }\r\n\r\n\r\n  public generaCsv(archivo: string, soloSeleccionados?: boolean) {\r\n    if (this.dataTable?.dataSource?.length) {\r\n      if (!soloSeleccionados) {\r\n        this.csv.descargarCsv(archivo, this.dataTable.dataSource);\r\n      }\r\n      else {\r\n        this.csv.descargarCsv(archivo, this.dataTable.seleccion?.selected ?? []);\r\n      }\r\n    }\r\n  }\r\n\r\n  public onRowSelect(event: T) {\r\n    this.onRowClick.emit(event);\r\n  }\r\n\r\n  @Output()\r\n  public onRowClick = new EventEmitter<T>();\r\n\r\n  public stopPropagation(clickEvent: MouseEvent) {\r\n    clickEvent.stopPropagation();\r\n    clickEvent.preventDefault();\r\n  }\r\n\r\n  public cambioFiltro(menu: MatMenuTrigger, isChange: boolean, columna: ColumnDefinition) {\r\n    menu.closeMenu();\r\n    if (isChange) {\r\n      this.dataSource.filter = `$omit_${Date.now().toString()}`;\r\n      columna.haveFilters = columna.filters.some(f => !f.isSelected);\r\n      if (this.inputFiltro) {\r\n        this.inputFiltro.nativeElement.value = '';\r\n      }\r\n    }\r\n  }\r\n\r\n  public customParameter(data: T, filter: string) {\r\n    return this.datosColumna.every(dc => {\r\n      let value: string = (Object.getOwnPropertyDescriptor(data, dc.identificador)?.value?.toString() ?? '').trim().toLowerCase();\r\n      let isAllSelected = dc.filters.every(f => f.isSelected);\r\n      if (!isAllSelected) {\r\n        return dc.filters.filter(f => f.isSelected).some(f => value.indexOf(f.name.toLowerCase()) !== -1)\r\n      }\r\n      return true;\r\n    }) && this.datosColumna.some(dc => {\r\n      let value: string = (Object.getOwnPropertyDescriptor(data, dc.identificador)?.value?.toString() ?? '').trim().toLowerCase();\r\n      return value.indexOf(filter) != -1 || filter.startsWith('$omit_');\r\n    });\r\n  }\r\n\r\n  public accionDesactivada(action: RowAction<T>, element: T): boolean {\r\n    return action?.deshabilitar && action.deshabilitar(element);\r\n  }\r\n\r\n  public getElementContext(data: unknown): T {\r\n    return data as T;\r\n  }\r\n\r\n  public buildTemplateData(key: string, value: unknown) {\r\n    return JSON.parse(`{${key}:${JSON.stringify(value)}}`)\r\n  }\r\n}\r\n","<!-- Contenedor principal del componente -->\r\n<div class=\"container\">\r\n    <!-- Filtro de datos para la tabla -->\r\n    <div *ngIf=\"filtrarDatos\">\r\n        @if(descargaCsv){\r\n        <img matTooltip=\"Descargar&#13;CSV\" matTooltipPosition=\"above\" (click)=\"generaCsv(this.dataTable.csvName|| 'data.csv' )\" class=\"csvButton\" mat-ripple>\r\n        }\r\n        @if (filtrarDatos) {\r\n        <mat-icon class=\"icon\"> filter_list </mat-icon>\r\n        <input #filtroInput placeholder=\"Filtro\" (keyup)=\"applyFilter(filtroInput.value)\" />\r\n        }\r\n    </div>\r\n    <!-- Tabla de datos -->\r\n    <div class=\"section\">\r\n        <table mat-table [dataSource]=\"dataSource\" matSort>\r\n            <caption> RediTableComponent </caption>\r\n            <!-- Contenedor de selección -->\r\n            <ng-container *ngIf=\"seleccionarFilas\" matColumnDef=\"select\">\r\n                <!-- Encabezado de tabla con selección de registros -->\r\n                <th scope=\"col\" mat-header-cell *matHeaderCellDef>\r\n                    <!-- controles de selección -->\r\n                    <mat-checkbox (change)=\"$event ? alternarSeleccion() : null\"\r\n                        [checked]=\"dataTable.seleccion.hasValue() && todoSeleccionado()\"\r\n                        [indeterminate]=\"dataTable.seleccion.hasValue() && !todoSeleccionado()\">\r\n                    </mat-checkbox>\r\n                </th>\r\n                <!-- Selector de fila -->\r\n                <td mat-cell class=\"checkCol\" *matCellDef=\"let row\">\r\n                    <mat-checkbox (change)=\"$event ? dataTable.seleccion.toggle(row) : null\"\r\n                        [checked]=\"dataTable.seleccion.isSelected(row)\" [aria-label]=\"validarEtiqueta(row)\">\r\n                    </mat-checkbox>\r\n                </td>\r\n            </ng-container>\r\n            <!-- Ordenamiento de encabezados -->\r\n            <ng-container [matColumnDef]=\"column.identificador\" *ngFor=\"let column of datosColumna\">\r\n                <!-- Definición de encabezado por columna -->\r\n                <th #header scope=\"col\" mat-header-cell *matHeaderCellDef>\r\n                    <div>\r\n                        <div *ngIf=\"column.isSort\">\r\n                            <mat-icon *ngIf=\"column.sortDirection ==='asc'\">text_rotate_up</mat-icon>\r\n                            <mat-icon *ngIf=\"column.sortDirection ==='desc'\">text_rotation_down</mat-icon>\r\n                        </div>\r\n                        <div>\r\n                            {{column.etiqueta ||\r\n                            column.identificador}}\r\n                        </div>\r\n                        <mat-icon *ngIf=\"column.haveFilters\">filter_list</mat-icon>\r\n\r\n                        <div>\r\n                            @if (this.ordenamientoActivo() || this.filtrarDatos) {\r\n                            <button #btnMenu #menuTrigger=\"matMenuTrigger\" (onMenuClose)=\"closeMenu(header)\"\r\n                                (onMenuOpen)=\"openMenu(header)\" mat-icon-button [matMenuTriggerFor]=\"menu\"\r\n                                aria-label=\"Opciones\">\r\n                                <mat-icon>more_vert</mat-icon>\r\n                            </button>\r\n                            <mat-menu #menu=\"matMenu\">\r\n                                @if (this.ordenamientoActivo()) {\r\n                                <button mat-menu-item (click)=\"asignarOrden(column,'')\">\r\n                                    <mat-icon>sort</mat-icon>\r\n                                    <span>Quitar ordenamiento</span>\r\n                                </button>\r\n                                <button mat-menu-item (click)=\"asignarOrden(column,'asc')\">\r\n                                    <mat-icon>text_rotate_up</mat-icon>\r\n                                    <span>Orden ascendente</span>\r\n                                </button>\r\n                                <button mat-menu-item (click)=\"asignarOrden(column,'desc')\">\r\n                                    <mat-icon>text_rotation_down</mat-icon>\r\n                                    <span>Orden descendente</span>\r\n                                </button>\r\n                                <mat-divider></mat-divider>\r\n                                }\r\n                                @if(this.filtrarDatos){\r\n                                <filter-data #filtro [filtrosColumnas]=\"column.filters\"\r\n                                    (click)=\"stopPropagation($event)\"\r\n                                    (filterEnd)=\"cambioFiltro(menuTrigger,$event, column)\"></filter-data>\r\n                                }\r\n                            </mat-menu>\r\n                            }\r\n                        </div>\r\n                    </div>\r\n                </th>\r\n                <!-- Creación de identificadores de tabla -->\r\n                <td mat-cell *matCellDef=\"let element\">\r\n                    <ng-container\r\n                        *ngTemplateOutlet=\"templateRow;context: {$implicit:  {column:column,element:element,value:element[column.identificador]}}\">\r\n                    </ng-container>\r\n                    @if(!column.customTemplate){\r\n                    {{element[column.identificador]}}\r\n                    }\r\n                </td>\r\n            </ng-container>\r\n            <!-- Definición de acciones  -->\r\n            <ng-container *ngIf=\"verAcciones()\" matColumnDef=\"actions\" stickyEnd>\r\n                <th scope=\"col\" mat-header-cell *matHeaderCellDef aria-label=\"row actions\">&nbsp;</th>\r\n                <!-- Definición de acciones por fila -->\r\n                <td mat-cell *matCellDef=\"let element\">\r\n                    <ng-container\r\n                        *ngTemplateOutlet=\"templateAction; context: {element: getElementContext(element)}\"></ng-container>\r\n                    <!-- Configuración de botones de acción -->\r\n                    <button mat-icon-button color=\"primary\" *ngFor=\"let action of dataTable.acciones\"\r\n                        (click)=\"action?.accion(element)\"\r\n                         [matTooltip]=\"action.tooltip\" matTooltipPosition=\"above\">\r\n                        <!-- Icono dinámico de la acción -->\r\n                        <mat-icon [ngClass]=\"accionDesactivada(action,element) ? 'disabled-button' : ''\">\r\n                            {{action.icono || 'apps'}}\r\n                        </mat-icon>\r\n                    </button>\r\n                </td>\r\n            </ng-container>\r\n            <!-- Definición de columnas -->\r\n            <tr mat-header-row *matHeaderRowDef=\"columnas; sticky:true\"></tr>\r\n            <!-- Estilizados alternado de filas -->\r\n            <tr mat-row *matRowDef=\"let row; columns: columnas;let rowNum = index\" [class.odd]=\"rowNum%2\"\r\n                [class.even]=\"!(rowNum%2)\" (click)=\"onRowSelect(row)\"></tr>\r\n                <tr *matNoDataRow>\r\n                    <td colspan=\"100%\">\r\n                        <div class=\"empty-table\">\r\n                            [{{ dataTable.emptyMessage || 'Sin registros'}}\r\n                            <span class=\"material-symbols-outlined\">\r\n                                tabs\r\n                            </span>]\r\n                        </div>\r\n                    </td>\r\n                </tr>\r\n        </table>\r\n    </div>\r\n    <!-- Paginador de datos -->\r\n    <div [ngClass]=\"paginar ? 'visible' : 'hidden'\">\r\n        <!-- Configuración de Paginador -->\r\n        <mat-paginator [pageSizeOptions]=\"[5,10,20,50,100]\" showFirstLastButtons aria-label=\"Seleccione una pagina\">\r\n        </mat-paginator>\r\n    </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { ColumnDefinition } from '../../models/interfaces/column-definition';\r\n\r\n@Component({\n    selector: 'redi-table-col',\n    imports: [\n        CommonModule\n    ],\n    templateUrl: './redi-table-col.component.html',\n    styleUrl: './redi-table-col.component.css'\n})\r\nexport class RediTableColComponent<T extends {}> {\r\n  @Input()\r\n  public data: { column: ColumnDefinition, value: T }\r\n\r\n  @Input()\r\n  public colName: string;\r\n\r\n  public showContent: boolean;\r\n\r\n  constructor() {\r\n    this.data = { column: { identificador: '' } as ColumnDefinition, value: {} as T };\r\n    this.colName = '';\r\n    this.showContent = false;\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    setTimeout(()=>{\r\n      this.showContent = this.isShow();\r\n    })\r\n  }\r\n\r\n  private isShow() {\r\n    let canShow = this.data.column.identificador === this.colName;\r\n    if (canShow) {\r\n      this.data.column.customTemplate = true;\r\n    }\r\n    return canShow;\r\n  }\r\n}\r\n","<ng-content *ngIf=\"showContent\"></ng-content>","/** Componentes */\r\nexport * from './src/components/redi-table/redi-table.component';\r\nexport * from './src/components/redi-table-col/redi-table-col.component';\r\n\r\n/** Modelos */\r\nexport * from './src/models/interfaces/column-definition';\r\nexport * from './src/models/interfaces/data-table';\r\nexport * from './src/models/interfaces/row-action';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i9"],"mappings":"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"}