{"version":3,"file":"jcbautistam-custom-table.mjs","sources":["../../../projects/custom-table/src/lib/Models/ParametrosGenerales.ts","../../../projects/custom-table/src/lib/Services/DateTime.service.ts","../../../projects/custom-table/src/lib/Services/ExportTableExcel.service.ts","../../../projects/custom-table/src/lib/Services/loading.service.ts","../../../projects/custom-table/src/lib/Services/exportNotification.service.ts","../../../projects/custom-table/src/lib/Components/ColumnVisibility/column-visibility-modal2.component.ts","../../../projects/custom-table/src/lib/Components/ColumnVisibility/column-visibility-modal.component.html","../../../projects/custom-table/src/lib/Directives/ToUpperCase.directive.ts","../../../projects/custom-table/src/lib/Services/formatNumber.Service.ts","../../../projects/custom-table/src/lib/Directives/OnlyDigit.directive.ts","../../../projects/custom-table/src/lib/pipes/onlyDigit.pipe.ts","../../../projects/custom-table/src/lib/pipes/string-truncate.pipe.ts","../../../projects/custom-table/src/lib/pipes/image.pipe.ts","../../../projects/custom-table/src/lib/Components/CustomTable/custom-table.component.ts","../../../projects/custom-table/src/lib/Components/CustomTable/custom-table.component.html","../../../projects/custom-table/src/lib/pipes/booleanToText.pipe.ts","../../../projects/custom-table/src/lib/pipes/espaciado.pipe.ts","../../../projects/custom-table/src/lib/Directives/ValidateSpecialChars.Directive.ts","../../../projects/custom-table/src/lib/Directives/TimeInput.directive.ts","../../../projects/custom-table/src/lib/Directives/AutoSelectOption.directive.ts","../../../projects/custom-table/src/lib/Directives/FomartDateTime.directive.ts","../../../projects/custom-table/src/lib/Directives/ReadOnlySelector.directive.ts","../../../projects/custom-table/src/lib/Directives/PhoneNumber.directive.ts","../../../projects/custom-table/src/lib/Directives/MaxLength.directive.ts","../../../projects/custom-table/src/lib/Directives/OnlyDigitBase.directive.ts","../../../projects/custom-table/src/lib/Loaders/material-icons-loader.ts","../../../projects/custom-table/src/lib/custom-table.module.ts","../../../projects/custom-table/src/public-api.ts","../../../projects/custom-table/src/jcbautistam-custom-table.ts"],"sourcesContent":["import { HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\n\r\nexport interface IParametrosGenerales {\r\n  ordenarPor?: string;\r\n  descending?: boolean;\r\n  noPagina?: number;\r\n  tamanoPagina?: number;\r\n  activos?: boolean;\r\n  filtrosIniciales?: Record<string, string>;\r\n  filtrosPorColumna?: Record<string, string>;\r\n  multiIds?: string;\r\n  actionMulti?: string;\r\n  idCompania?: number;\r\n}\r\n\r\nexport class ParametrosGenerales implements IParametrosGenerales {\r\n  ordenarPor: string = 'FechaCreacion';\r\n  descending: boolean = false;\r\n  noPagina: number = 1;\r\n  tamanoPagina: number = 10;\r\n  activos: boolean = true;\r\n  filtrosIniciales: Record<string, string> = {};\r\n  filtrosPorColumna: Record<string, string> = {};\r\n\r\n  rangoFechas: string = '';\r\n\r\n  multiIds: string = '';\r\n  actionMulti: string = '';\r\n  idCompania: number = 0;\r\n\r\n  constructor(init?: Partial<IParametrosGenerales>) {\r\n    if (init) {\r\n      Object.assign(this, init);\r\n    }\r\n  }\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ConfiguracionParametros {\r\n  configurar(\r\n    parametros: ParametrosGenerales,\r\n    extraParams?: Record<string, any>\r\n  ): HttpParams {\r\n    let params = new HttpParams();\r\n    parametros.idCompania = Number(localStorage.getItem('CompaniaSelect')) || 0;\r\n\r\n    // Agregar valores básicos del objeto de parámetros\r\n    Object.entries(parametros).forEach(([key, value]) => {\r\n      if (value !== undefined && value !== null) {\r\n        params = params.set(key, value.toString());\r\n      }\r\n    });\r\n\r\n    // Agregar filtros iniciales\r\n    params = this.agregarFiltros(\r\n      params,\r\n      'filtrosIniciales',\r\n      parametros.filtrosIniciales\r\n    );\r\n\r\n    // Agregar filtros por columna\r\n    params = this.agregarFiltros(\r\n      params,\r\n      'filtrosPorColumna',\r\n      parametros.filtrosPorColumna\r\n    );\r\n\r\n    // Agregar parámetros adicionales\r\n    if (extraParams) {\r\n      Object.entries(extraParams).forEach(([key, value]) => {\r\n        if (value !== undefined && value !== null) {\r\n          params = params.set(key, value.toString());\r\n        }\r\n      });\r\n    }\r\n\r\n    return params;\r\n  }\r\n\r\n  private agregarFiltros(\r\n    params: HttpParams,\r\n    prefix: string,\r\n    filtros?: Record<string, string>\r\n  ): HttpParams {\r\n    // Añadir filtros si existen\r\n    if (filtros) {\r\n      Object.keys(filtros).forEach((key) => {\r\n        const filtro = filtros![key];\r\n        if (filtro) {\r\n          params = params.set(`${prefix}[${key}]`, filtro);\r\n        }\r\n      });\r\n    }\r\n\r\n    return params;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { formatInTimeZone, toDate } from 'date-fns-tz';\r\nimport { formatDate } from '@angular/common';\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DateTimeService {\r\n  // Obtener la zona horaria del dispositivo del usuario\r\n  userTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n\r\n  constructor() {}\r\n\r\n  toTimeZone(date: Date = new Date()): string {\r\n    // Formatear la fecha en la zona horaria del usuario y en formato ISO 8601\r\n    const isoString = formatInTimeZone(\r\n      date,\r\n      this.userTimeZone,\r\n      \"yyyy-MM-dd'T'HH:mm:ssXXX\"\r\n    );\r\n    return isoString;\r\n  }\r\n\r\n  toUTCDate(dateInput: Date = new Date()) {\r\n    const date = new Date(dateInput);\r\n    // Obtener los componentes de la fecha\r\n    const dayName = date.toLocaleString('en-US', { weekday: 'short' });\r\n    const monthName = date.toLocaleString('en-US', { month: 'short' });\r\n    const day = date.getDate();\r\n    const year = date.getFullYear();\r\n    const hours = date.getHours().toString().padStart(2, '0');\r\n    const minutes = date.getMinutes().toString().padStart(2, '0');\r\n    const seconds = date.getSeconds().toString().padStart(2, '0');\r\n\r\n    // Obtener el offset de la zona horaria en horas y minutos\r\n    const timezoneOffset = -date.getTimezoneOffset();\r\n    const timezoneHours = Math.floor(timezoneOffset / 60)\r\n      .toString()\r\n      .padStart(2, '0');\r\n    const timezoneMinutes = (timezoneOffset % 60).toString().padStart(2, '0');\r\n    const timezoneSign = timezoneOffset >= 0 ? '+' : '-';\r\n\r\n    return new Date(\r\n      `${dayName} ${monthName} ${day} ${year} ${hours}:${minutes}:${seconds} GMT${timezoneSign}${timezoneHours}${timezoneMinutes}`\r\n    );\r\n  }\r\n  toTime(date: Date | null = new Date()): string {\r\n    if (!date) {\r\n      date = new Date();\r\n    }\r\n    // Formatear la fecha en la zona horaria del usuario y en formato ISO 8601\r\n    const isoString = formatInTimeZone(date, this.userTimeZone, 'HH:mm:ssXXX');\r\n    return isoString;\r\n  }\r\n\r\n  stringToDate(fechaString: string): Date {\r\n    const convertToDate = toDate(fechaString, { timeZone: this.userTimeZone });\r\n    return convertToDate;\r\n  }\r\n\r\n  getDateTimeNow() {\r\n    let date = new Date();\r\n    const year = date.getFullYear();\r\n    const month = String(date.getMonth() + 1).padStart(2, '0'); // Los meses son de 0 a 11\r\n    const day = String(date.getDate()).padStart(2, '0');\r\n    const hours = String(date.getHours()).padStart(2, '0');\r\n    const minutes = String(date.getMinutes()).padStart(2, '0');\r\n    const seconds = String(date.getSeconds()).padStart(2, '0');\r\n\r\n    return new Date(`${year}-${month}-${day}T${hours}:${minutes}:${seconds}`);\r\n  }\r\n\r\n  getformatDate(date: Date = new Date(), format:string = 'dd/MM/yyyy'): string{\r\n\r\n    return formatDate(date , format,'en-US')\r\n  }\r\n\r\n  getTextDateLiq(fecha: Date): string {\r\n    const opciones: Intl.DateTimeFormatOptions = {\r\n      day: 'numeric', // Día del mes\r\n      month: 'long', // Nombre completo del mes\r\n      year: 'numeric', // Año\r\n    };\r\n\r\n    const formateador = new Intl.DateTimeFormat('es-ES', opciones);\r\n    return formateador.format(new Date(fecha)).replace(',', '').toUpperCase();\r\n  }\r\n\r\n  combinarFechaYHora(fecha: string, hora: string): string {\r\n    // Crea un objeto de fecha a partir de la fecha ingresada\r\n    const fechaObj = new Date(fecha);\r\n    const [horas, minutos] = hora.split(':').map(Number);\r\n\r\n    // Ajusta la hora y los minutos\r\n    fechaObj.setHours(horas, minutos, 0);\r\n\r\n    // Construye la cadena en formato 'YYYY-MM-DDTHH:mm:ss'\r\n    const año = fechaObj.getFullYear();\r\n    const mes = String(fechaObj.getMonth() + 1).padStart(2, '0'); // Los meses van de 0 a 11\r\n    const día = String(fechaObj.getDate()).padStart(2, '0');\r\n    const horasLocal = String(fechaObj.getHours()).padStart(2, '0');\r\n    const minutosLocal = String(fechaObj.getMinutes()).padStart(2, '0');\r\n    const segundosLocal = String(fechaObj.getSeconds()).padStart(2, '0');\r\n\r\n    // Devuelve la fecha combinada\r\n    return `${año}-${mes}-${día}T${horasLocal}:${minutosLocal}:${segundosLocal}`;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport * as XLSX from 'xlsx';\r\nimport { DateTimeService } from './DateTime.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ExportTableExcelService {\r\n  constructor(private dateTimeService: DateTimeService) {}\r\n\r\n  exportToExcel(tableId: string, name?: string, dataList?: any[], columnsDate?: string[]) {\r\n    try {\r\n      let timeSpan = this.dateTimeService.getformatDate(new Date(), 'yyyyMMdd');\r\n      let fileName = `${name || 'Export'}_${timeSpan}.xlsx`;\r\n\r\n      if (dataList && dataList.length > 0) {\r\n        // Convertir valores booleanos de la columna \"activo\" a \"activo\" o \"inactivo\"\r\n        const modifiedDataList = dataList.map(item => {\r\n          if (item.hasOwnProperty('Activo')) {\r\n            console.log('column', item);\r\n            return { ...item, Activo: item.Activo ? 'activo' : 'inactivo' };\r\n          }\r\n          return item;\r\n        });\r\n\r\n        const workSheet = XLSX.utils.json_to_sheet(modifiedDataList);\r\n\r\n        // Ajustar el ancho de las columnas\r\n        const columnWidths = modifiedDataList[0] ? Object.keys(modifiedDataList[0]).map(() => ({ wpx: 100 })) : [];\r\n        workSheet['!cols'] = columnWidths;\r\n\r\n        const workBook: XLSX.WorkBook = XLSX.utils.book_new();\r\n        XLSX.utils.book_append_sheet(\r\n          workBook,\r\n          workSheet,\r\n          name?.substring(0, 31) || 'Sheet1'\r\n        );\r\n        XLSX.writeFile(workBook, fileName);\r\n        console.log(`Archivo ${fileName} generado exitosamente.`);\r\n      } else {\r\n        throw new Error('No hay datos para exportar.');\r\n      }\r\n    } catch (error) {\r\n      console.error('Error al generar el archivo Excel:', error);\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { NgxSpinnerService } from 'ngx-spinner';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class LoadingService {\r\n\r\n  constructor(private spinner: NgxSpinnerService) {}\r\n\r\n  // Método para abrir el spinner\r\n  open(): void {\r\n    this.spinner.show();    \r\n  }\r\n\r\n  // Método para cerrar el spinner\r\n  close(): void {\r\n    this.spinner.hide();\r\n  }\r\n\r\n  // Método para abrir y cerrar el spinner después de un tiempo\r\n  delay(seconds: number): void {\r\n    this.open();\r\n    setTimeout(() => {\r\n      this.close();\r\n    }, seconds * 1000);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, interval, Subscription } from 'rxjs';\r\nimport { take, map } from 'rxjs/operators';\r\n\r\nexport interface ExportJob {\r\n  id: string;\r\n  fileName: string;\r\n  progress: number;\r\n  isCompleted: boolean;\r\n  error: string | null;\r\n  timestamp: number;\r\n  progressAnimation?: Subscription | null;\r\n}\r\n\r\nexport interface ExportStatus {\r\n  isExporting: boolean;\r\n  activeJobs: ExportJob[];\r\n  showNotification: boolean;\r\n}\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ExportNotificationService {\r\n  private defaultStatus: ExportStatus = {\r\n    isExporting: false,\r\n    activeJobs: [],\r\n    showNotification: false\r\n  };\r\n\r\n  private exportStatusSubject = new BehaviorSubject<ExportStatus>(this.defaultStatus);\r\n  public exportStatus$: Observable<ExportStatus> = this.exportStatusSubject.asObservable();\r\n\r\n  constructor() { }\r\n\r\n  /**\r\n   * Inicia una nueva exportación y retorna su ID\r\n   */\r\n  startExport(fileName: string): string {\r\n    const jobId = this.generateJobId();\r\n    const currentStatus = this.exportStatusSubject.value;\r\n    \r\n    const newJob: ExportJob = {\r\n      id: jobId,\r\n      fileName,\r\n      progress: 0,\r\n      isCompleted: false,\r\n      error: null,\r\n      timestamp: Date.now(),\r\n      progressAnimation: null\r\n    };\r\n    \r\n    // Añadir el nuevo trabajo a la lista de trabajos activos\r\n    const updatedJobs = [...currentStatus.activeJobs, newJob];\r\n    \r\n    this.exportStatusSubject.next({\r\n      isExporting: true,\r\n      activeJobs: updatedJobs,\r\n      showNotification: true\r\n    });\r\n    \r\n    // Iniciar la animación de progreso hasta el 10%\r\n    this.animateProgressTo(jobId, 0, 10, 800);\r\n    \r\n    return jobId;\r\n  }\r\n\r\n  /**\r\n   * Actualiza el progreso de una exportación específica\r\n   */\r\n  updateProgress(jobId: string, targetProgress: number): void {\r\n    const currentStatus = this.exportStatusSubject.value;\r\n    const job = currentStatus.activeJobs.find(j => j.id === jobId);\r\n    \r\n    if (job) {\r\n      // Detener cualquier animación previa\r\n      this.stopAnimation(job);\r\n      \r\n      // Animar desde el progreso actual hasta el objetivo\r\n      const currentProgress = job.progress;\r\n      this.animateProgressTo(jobId, currentProgress, targetProgress, 1000);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Detiene de forma segura una animación\r\n   */\r\n  private stopAnimation(job: ExportJob): void {\r\n    if (job && job.progressAnimation) {\r\n      try {\r\n        job.progressAnimation.unsubscribe();\r\n        job.progressAnimation = null;\r\n      } catch (error) {\r\n        console.error('Error al detener animación:', error);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Anima el progreso de una forma más realista\r\n   */\r\n  private animateProgressTo(jobId: string, fromProgress: number, toProgress: number, duration: number): void {\r\n    // Obtener estado actual\r\n    const currentStatus = this.exportStatusSubject.value;\r\n    const jobIndex = currentStatus.activeJobs.findIndex(j => j.id === jobId);\r\n    \r\n    if (jobIndex === -1) return;\r\n    \r\n    const job = currentStatus.activeJobs[jobIndex];\r\n    \r\n    // Detener animación previa si existe\r\n    this.stopAnimation(job);\r\n    \r\n    // Calcular cuántos pasos necesitamos\r\n    const steps = Math.max(Math.ceil(duration / 50), 5); // Al menos 5 pasos\r\n    const stepValue = (toProgress - fromProgress) / steps;\r\n    \r\n    // Crear una animación con interval\r\n    const animation = interval(duration / steps).pipe(\r\n      take(steps),\r\n      map(step => fromProgress + stepValue * (step + 1))\r\n    ).subscribe({\r\n      next: (progress) => {\r\n        // Obtener el estado actual\r\n        const updatedStatus = this.exportStatusSubject.value;\r\n        const currentJobIndex = updatedStatus.activeJobs.findIndex(j => j.id === jobId);\r\n        \r\n        if (currentJobIndex !== -1) {\r\n          // Crear una copia de los trabajos\r\n          const updatedJobs = [...updatedStatus.activeJobs];\r\n          \r\n          // Actualizar el progreso del trabajo específico\r\n          updatedJobs[currentJobIndex] = {\r\n            ...updatedJobs[currentJobIndex],\r\n            progress: progress\r\n          };\r\n          \r\n          // Actualizar el estado\r\n          this.exportStatusSubject.next({\r\n            ...updatedStatus,\r\n            activeJobs: updatedJobs\r\n          });\r\n          \r\n          // Limpiar la suscripción cuando llegamos al último paso\r\n          if (progress >= toProgress - stepValue/2) {\r\n            this.stopAnimation(updatedJobs[currentJobIndex]);\r\n          }\r\n        }\r\n      },\r\n      error: (err) => {\r\n        console.error('Error en animación:', err);\r\n      },\r\n      complete: () => {\r\n        // Completar la animación\r\n      }\r\n    });\r\n    \r\n    // Guardar la animación en el job\r\n    const updatedJobs = [...currentStatus.activeJobs];\r\n    updatedJobs[jobIndex] = {\r\n      ...updatedJobs[jobIndex],\r\n      progressAnimation: animation\r\n    };\r\n    \r\n    this.exportStatusSubject.next({\r\n      ...currentStatus,\r\n      activeJobs: updatedJobs\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Marca una exportación como completada\r\n   */\r\n  completeExport(jobId: string): void {\r\n    const currentStatus = this.exportStatusSubject.value;\r\n    const jobIndex = currentStatus.activeJobs.findIndex(j => j.id === jobId);\r\n    \r\n    if (jobIndex !== -1) {\r\n      const job = currentStatus.activeJobs[jobIndex];\r\n      \r\n      // Detener cualquier animación en curso\r\n      this.stopAnimation(job);\r\n      \r\n      // Animar al 100% para completar\r\n      this.animateProgressTo(jobId, job.progress, 100, 500);\r\n      \r\n      // Actualizar el estado a completado\r\n      const updatedJobs = currentStatus.activeJobs.map(job => {\r\n        if (job.id === jobId) {\r\n          return {\r\n            ...job,\r\n            isCompleted: true\r\n          };\r\n        }\r\n        return job;\r\n      });\r\n      \r\n      this.exportStatusSubject.next({\r\n        ...currentStatus,\r\n        activeJobs: updatedJobs,\r\n        isExporting: updatedJobs.some(job => !job.isCompleted && !job.error)\r\n      });\r\n      \r\n      // Programar la eliminación del trabajo completado después de cierto tiempo\r\n      setTimeout(() => {\r\n        this.removeJob(jobId);\r\n      }, 5000);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Marca una exportación como fallida\r\n   */\r\n  errorExport(jobId: string, error: any): void {\r\n    console.error('Error en la exportación:', error);\r\n    \r\n    const currentStatus = this.exportStatusSubject.value;\r\n    const jobIndex = currentStatus.activeJobs.findIndex(j => j.id === jobId);\r\n    \r\n    if (jobIndex !== -1) {\r\n      const job = currentStatus.activeJobs[jobIndex];\r\n      \r\n      // Detener cualquier animación en curso\r\n      this.stopAnimation(job);\r\n      \r\n      const updatedJobs = currentStatus.activeJobs.map(job => {\r\n        if (job.id === jobId) {\r\n          return {\r\n            ...job,\r\n            error: error.message || 'Error al exportar',\r\n            isCompleted: true\r\n          };\r\n        }\r\n        return job;\r\n      });\r\n      \r\n      this.exportStatusSubject.next({\r\n        ...currentStatus,\r\n        activeJobs: updatedJobs,\r\n        isExporting: updatedJobs.some(job => !job.isCompleted && !job.error)\r\n      });\r\n      \r\n      // Programar la eliminación del trabajo fallido después de cierto tiempo\r\n      setTimeout(() => {\r\n        this.removeJob(jobId);\r\n      }, 5000);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Elimina un trabajo de la lista de trabajos activos\r\n   */\r\n  private removeJob(jobId: string): void {\r\n    const currentStatus = this.exportStatusSubject.value;\r\n    const jobIndex = currentStatus.activeJobs.findIndex(j => j.id === jobId);\r\n    \r\n    if (jobIndex !== -1) {\r\n      const job = currentStatus.activeJobs[jobIndex];\r\n      \r\n      // Detener cualquier animación en curso\r\n      this.stopAnimation(job);\r\n      \r\n      const updatedJobs = currentStatus.activeJobs.filter(job => job.id !== jobId);\r\n      \r\n      if (updatedJobs.length === 0) {\r\n        // Si no hay más trabajos, ocultar la notificación\r\n        this.exportStatusSubject.next({\r\n          isExporting: false,\r\n          activeJobs: [],\r\n          showNotification: false\r\n        });\r\n      } else {\r\n        // Si aún hay trabajos, actualizar la lista\r\n        this.exportStatusSubject.next({\r\n          ...currentStatus,\r\n          activeJobs: updatedJobs,\r\n          isExporting: updatedJobs.some(job => !job.isCompleted && !job.error)\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Oculta la notificación manualmente\r\n   */\r\n  hideNotification(): void {\r\n    const currentStatus = this.exportStatusSubject.value;\r\n    \r\n    // Detener todas las animaciones en curso\r\n    currentStatus.activeJobs.forEach(job => {\r\n      this.stopAnimation(job);\r\n    });\r\n    \r\n    this.exportStatusSubject.next({\r\n      ...currentStatus,\r\n      showNotification: false\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Muestra la notificación si estaba oculta\r\n   */\r\n  showNotification(): void {\r\n    const currentStatus = this.exportStatusSubject.value;\r\n    if (currentStatus.activeJobs.length > 0) {\r\n      this.exportStatusSubject.next({\r\n        ...currentStatus,\r\n        showNotification: true\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Genera un ID único para cada trabajo\r\n   */\r\n  private generateJobId(): string {\r\n    return 'export-' + Date.now() + '-' + Math.floor(Math.random() * 1000);\r\n  }\r\n} ","//column-visibility-modal.component.ts\r\n\r\nimport { Component, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n  \r\n  selector: 'app-column-visibility-modal',\r\n  templateUrl: './column-visibility-modal.component.html',\r\n  styleUrls: ['./column-visibility-modal.component.css']\r\n})\r\nexport class ColumnVisibilityModal2Component {\r\n   columns: any[];\r\n   columnsReqMin: number;\r\n\r\n  constructor(\r\n    public dialogRef: MatDialogRef<ColumnVisibilityModal2Component>,\r\n    @Inject(MAT_DIALOG_DATA) public data: { columns: any[], columnsReqMin: number }\r\n  ) {\r\n    this.columns = JSON.parse(JSON.stringify(data.columns)); // Clonamos para evitar modificar la referencia original\r\n    this.columnsReqMin = data.columnsReqMin; // Recibimos el mínimo de columnas desde el componente padre\r\n  }\r\n\r\n  // Cuenta cuántas columnas están seleccionadas\r\n  getSelectedCount(): number {\r\n    return this.columns.filter(col => col.visible).length;\r\n  }\r\n\r\n  // Devuelve `true` si el checkbox debe estar deshabilitado\r\n  isCheckboxDisabled(column: any): boolean {\r\n    return this.getSelectedCount() <= this.columnsReqMin && column.visible;\r\n  }  \r\n}\r\n\r\n","<h2 mat-dialog-title>Configurar columnas</h2>\r\n<mat-dialog-content>\r\n  <div *ngFor=\"let column of columns\">\r\n    <mat-checkbox \r\n      [(ngModel)]=\"column.visible\"\r\n      [disabled]=\"isCheckboxDisabled(column)\"\r\n    >\r\n      {{ column.displayName }}\r\n    </mat-checkbox>\r\n  </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n  <button mat-button (click)=\"dialogRef.close()\">Cancelar</button>\r\n  <button mat-button [disabled]=\"getSelectedCount() < columnsReqMin\" (click)=\"dialogRef.close(columns)\">Aceptar</button>\r\n</mat-dialog-actions>\r\n","import { Directive, HostListener } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n  selector: '[toUpperCase]'\r\n})\r\nexport class ToUpperCaseDirective {\r\n\r\n  constructor(private ngControl: NgControl) { }\r\n\r\n  @HostListener('input', ['$event.target.value']) onInputChange(value: string) {\r\n    this.ngControl?.control?.setValue(value.toUpperCase(), { emitEvent: false });\r\n  }\r\n\r\n  // @HostListener('input', ['$event']) onInput(event: Event) {\r\n  //   const input = event.target as HTMLInputElement;\r\n  //   const valorMayusculas = input.value.toUpperCase();\r\n  //   input.value = valorMayusculas; // Convierte el valor del input a mayúsculas\r\n  // }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class FormatNumberService {\r\n  constructor() {}\r\n\r\n  formatNumber(value: any, char?: string) {\r\n\r\n    if (value == null || value == undefined ) \r\n      return;\r\n\r\n    // Convertir a string si es un número\r\n    if (typeof value === 'number') {\r\n      value = value.toString();\r\n    }\r\n\r\n    value = value.replace(/[^0-9.-]*/g, '');\r\n    const parts = value.split('.');\r\n\r\n    //Agrega una coma cada 3 cifras\r\n    parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\r\n    value = parts.join('.');\r\n\r\n    //Solo acepta un punto decimal\r\n    if (parts.length > 2) {\r\n      value = parts[0] + '.' + parts.slice(1).join('');\r\n    }\r\n\r\n       // Solo acepta dos decimales y completa con ceros si es necesario\r\n       if (parts.length > 1) {\r\n        let decimalPart = parts[1].slice(0, 4);\r\n        // if (decimalPart.length < 4) {\r\n        //   decimalPart = decimalPart.padEnd(4, '0');\r\n        // }\r\n        value = `${parts[0]}.${decimalPart}`;\r\n      } \r\n      // else {\r\n      //   value = `${parts[0]}.0000`;\r\n      // }\r\n\r\n      if(char != null)\r\n      value = char + value;\r\n\r\n    return value;\r\n  }\r\n\r\n  convertToNumber(value: any): number {\r\n    if (value == null || value === '0') return 0;\r\n\r\n    if (typeof value === 'number') {\r\n      return isNaN(value) ? 0 : value;\r\n    }\r\n\r\n    value = value.replace(/[^0-9.]*/g, '');\r\n    const numberValue = Number(value);\r\n\r\n    return isNaN(numberValue) ? 0 : numberValue;\r\n  }\r\n\r\n  // convertToNumber(value: any): number {\r\n  //   console.log('convertToNumber',value);\r\n  //   if (value == null || value == '0') return 0;\r\n\r\n  //   if (typeof value === 'number')\r\n  //     return value;\r\n   \r\n  //   value = value.replace(/[^0-9.-]*/g, '');\r\n\r\n  //   return Number(value);\r\n  // }\r\n\r\n  textNumber(num: number) {\r\n\r\n    console.log('textNumber', num);\r\n    let numWord: string = '';\r\n    let numUnidad: number = 0;\r\n    let numResult: number = num;\r\n    let and: string = ' ';\r\n\r\n    const integerPart = Math.floor(num);\r\n    const decimalPart = Math.round((num - integerPart) * 100);\r\n\r\n    const decimalPartInWords = decimalPart.toString().padStart(2, '0');\r\n\r\n    numUnidad = Math.floor(numResult / 1000);\r\n    if (numUnidad > 0) {\r\n      if (numUnidad > 1)\r\n        numWord = numWord + this.numberToWords(numUnidad) + ' MIL';\r\n      else numWord = 'MIL ';\r\n      numResult = numResult - numUnidad * 1000;\r\n    }\r\n\r\n    numUnidad = Math.floor(numResult / 100) * 100;\r\n    if (numUnidad > 0) {\r\n      numWord = numWord + ' ' + this.numberToWords(numUnidad);\r\n      numResult = numResult - numUnidad;\r\n    }\r\n\r\n    numUnidad = Math.floor(numResult / 10) * 10;\r\n    if (numUnidad > 0) {\r\n      numWord = numWord + ' ' + this.numberToWords(numUnidad);\r\n      numResult = numResult - numUnidad;\r\n      and = ' Y ';\r\n    }\r\n\r\n    numUnidad = Math.floor(numResult);\r\n    if (numUnidad > 0) {\r\n      numWord = numWord + and + this.numberToWords(numUnidad);\r\n      numResult = numResult - numUnidad;\r\n    }\r\n    return `${numWord} ${decimalPartInWords}/100 M.N.`;\r\n  }\r\n\r\n  numberToWords(num: number): string {\r\n    const units = [\r\n      '',\r\n      'UNO',\r\n      'DOS',\r\n      'TRES',\r\n      'CUATRO',\r\n      'CINCO',\r\n      'SEIS',\r\n      'SIETE',\r\n      'OCHO',\r\n      'NUEVE',\r\n    ];\r\n    const tens = [\r\n      '',\r\n      'DIEZ',\r\n      'VEINTE',\r\n      'TREINTA',\r\n      'CUARENTA',\r\n      'CINCUENTA',\r\n      'SESENTA',\r\n      'SETENTA',\r\n      'OCHENTA',\r\n      'NOVENTA',\r\n    ];\r\n    const teens = [\r\n      'ONCE',\r\n      'DOCE',\r\n      'TRECE',\r\n      'CATORCE',\r\n      'QUINCE',\r\n      'DIECISEIS',\r\n      'DIECISIETE',\r\n      'DIECIOCHO',\r\n      'DIECINUEVE',\r\n    ];\r\n    const hundreds = [\r\n      '',\r\n      'CIENTO',\r\n      'DOSCIENTOS',\r\n      'TRESCIENTOS',\r\n      'CUATROCIENTOS',\r\n      'QUINIENTOS',\r\n      'SEISCIENTOS',\r\n      'SETECIENTOS',\r\n      'OCHOCIENTOS',\r\n      'NOVECIENTOS',\r\n    ];\r\n\r\n    if (num === 0) return 'CERO';\r\n\r\n    if (num === 100) return 'CIEN';\r\n\r\n    let word = '';\r\n\r\n    if (Math.floor(num / 100) > 0) {\r\n      word += hundreds[Math.floor(num / 100)] + ' ';\r\n    }\r\n\r\n    let remainder = num % 100;\r\n\r\n    if (remainder >= 11 && remainder <= 19) {\r\n      word += teens[remainder - 11];\r\n    } else {\r\n      if (Math.floor(remainder / 10) > 0) {\r\n        word += tens[Math.floor(remainder / 10)] + ' ';\r\n      }\r\n      remainder = remainder % 10;\r\n      if (remainder > 0) {\r\n        word += units[remainder];\r\n      }\r\n    }\r\n\r\n    return word.trim();\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  HostListener,\r\n  Input,\r\n  OnInit,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  forwardRef,\r\n  Renderer2\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\r\nimport { FormatNumberService } from '../Services/formatNumber.Service';\r\n\r\n@Directive({\r\n  selector: '[onlyDigit]',\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => OnlyDigitDirective),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class OnlyDigitDirective implements OnInit, OnChanges, ControlValueAccessor {\r\n  private _format: string = '';\r\n  private _showZero: boolean = true;\r\n\r\n  @Input('onlyDigit')\r\n  set format(value: string) {\r\n    this._format = value?.toLowerCase() || '';\r\n  }\r\n\r\n  get format(): string {\r\n    return this._format;\r\n  }\r\n\r\n  @Input()\r\n  set showZero(value: string) {\r\n    this._showZero =  (value == 'true') ? true : false;\r\n  }\r\n\r\n  get showZero(): boolean {\r\n    return this._showZero;\r\n  }\r\n\r\n  private onChange: (value: any) => void = () => {};\r\n  private onTouched: () => void = () => {};\r\n\r\n  constructor(private el: ElementRef, private renderer: Renderer2, private formatNumberService: FormatNumberService) {\r\n    this.renderer.addClass(this.el.nativeElement, 'text-end');\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.writeValue(this.el.nativeElement.value); // Establecer el valor inicial con el formato\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n\r\n    if (changes['format']) {\r\n      this.writeValue(this.el.nativeElement.value); // Actualizar el valor con el nuevo formato\r\n    }\r\n  }\r\n\r\n  writeValue(value: any): void {\r\n    if (value == null || isNaN(value) || value === \"\") return;\r\n\r\n    let formattedValue = value;\r\n   \r\n    if (this.format != 'id') {\r\n \r\n      formattedValue = this.formatNumberService.formatNumber(value, this.format);\r\n    } \r\n\r\n    this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue); // Asignar el valor formateado al campo\r\n  }\r\n\r\n  registerOnChange(fn: any): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  setDisabledState?(isDisabled: boolean): void {\r\n    this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled);\r\n  }\r\n\r\n  @HostListener('input', ['$event.target.value'])\r\n  onInput(value: string) {\r\n\r\n    if (value == null) return;\r\n\r\n    let formattedValue = value;\r\n\r\n    if (this.format != 'id') {\r\n      formattedValue = this.formatNumberService.formatNumber(formattedValue, this.format);\r\n    }else{\r\n      formattedValue = formattedValue.replace(/[^0-9-]*/g, '');\r\n    }\r\n\r\n    this.renderer.setProperty(this.el.nativeElement, 'value', formattedValue);\r\n\r\n    if (this.onChange) {\r\n      const numericValue = parseFloat(formattedValue.replace(/[^0-9.-]*/g, ''));\r\n      this.onChange(isNaN(numericValue) ? null : numericValue);\r\n    }\r\n  }\r\n\r\n  @HostListener('blur')\r\n  onBlur() {\r\n    if (this.onTouched) {\r\n      this.onTouched();\r\n    }\r\n  }\r\n\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { FormatNumberService } from '../Services/formatNumber.Service';\r\n\r\n@Pipe({\r\n  name: 'onlyDigit',\r\n})\r\nexport class OnlyDigitPipe implements PipeTransform {\r\n\r\n  constructor(private numServ: FormatNumberService) {}\r\n\r\n  transform(value: number, char?: string): string {\r\n    \r\n    char = char ?? '';\r\n    let stringValue = '';\r\n    if (value == null || value == undefined) value = 0;\r\n\r\n    // Convertir a string si es un número\r\n    if (typeof value === 'number') {\r\n      stringValue = value.toString();\r\n    }\r\n\r\n    if (char.toLowerCase() != 'id') {\r\n      if (!stringValue || stringValue === '') {\r\n        stringValue = '0';\r\n      } else if (char == '%') {\r\n        stringValue = stringValue + char;\r\n      } else {\r\n\r\n        stringValue = this.numServ.formatNumber(stringValue, char);\r\n        \r\n      }\r\n    }\r\n\r\n    return stringValue;\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'truncate'\r\n})\r\nexport class StringTruncatePipe implements PipeTransform {\r\n  transform(value: string, limit: number = 25, completeWords: boolean = false, ellipsis: string = '...'): string {\r\n    if (completeWords) {\r\n      limit = value.substr(0, limit).lastIndexOf(' ');\r\n    }\r\n\r\n    if (value == null) \r\n      return '';\r\n\r\n    return value.length > limit ? value.substr(0, limit) + ellipsis : value;\r\n  }\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'image'\r\n})\r\nexport class ImagePipe implements PipeTransform {\r\n\r\n  transform(imageHex: string): unknown {\r\n    if (imageHex && imageHex.trim() !== '') {\r\n      try {\r\n        const cleanHex = imageHex.startsWith('0x') ? imageHex.slice(2) : imageHex;\r\n        const hexPairs = cleanHex.match(/[\\dA-F]{2}/gi) || [];\r\n        const bytes = hexPairs.map(pair => parseInt(pair, 16));\r\n        const byteArray = new Uint8Array(bytes);\r\n        const blob = new Blob([byteArray], { type: 'image/jpeg' });\r\n        return URL.createObjectURL(blob);\r\n      } catch (error) {\r\n        console.error('Error al convertir hex a imagen:', error);\r\n        return '';\r\n      }\r\n    }\r\n    return '';\r\n  }\r\n\r\n}\r\n","import {\r\n  Component, Input, Output, OnInit, OnChanges, SimpleChanges, EventEmitter, ViewChild,\r\n  AfterViewInit, ElementRef, QueryList, ViewChildren, OnDestroy,\r\n  ViewEncapsulation\r\n} from '@angular/core';\r\nimport { BsDatepickerConfig, BsDaterangepickerConfig } from 'ngx-bootstrap/datepicker';\r\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Observable } from 'rxjs';\r\nimport { HttpParams } from '@angular/common/http';\r\nimport { fromEvent } from 'rxjs';\r\nimport { debounceTime, takeUntil } from 'rxjs/operators';\r\nimport { Subscription } from 'rxjs';\r\nimport { TableAction } from '../../Interfaces/TableAction';\r\nimport { ConfiguracionParametros, ParametrosGenerales } from '../../Models/ParametrosGenerales';\r\nimport { ExportTableExcelService } from '../../Services/ExportTableExcel.service';\r\nimport { LoadingService } from '../../Services/loading.service';\r\nimport { ExportNotificationService } from '../../Services/exportNotification.service';\r\nimport { ColumnConfig } from '../../Interfaces/ColumnConfig';\r\nimport { ColumnVisibilityModal2Component } from '../ColumnVisibility/column-visibility-modal2.component';\r\n\r\n\r\n@Component({\r\n  selector: 'custom-table',\r\n  templateUrl: './custom-table.component.html',\r\n  styleUrls: ['./custom-table.component.css'],\r\n  encapsulation: ViewEncapsulation.None \r\n})\r\n\r\nexport class CustomTableComponent\r\n  implements OnInit, AfterViewInit, OnDestroy, OnChanges {\r\n  [x: string]: any;\r\n\r\n  // Objeto para manejar la cancelación de suscripciones de Observable\r\n  private destroy$ = new EventEmitter<void>();\r\n\r\n  // Variables para el control de la exportación\r\n  private exportSubscription: Subscription | null = null;\r\n  isExportInProgress: boolean = false;\r\n  bsConfigGeneral: Partial<BsDatepickerConfig> | undefined;\r\n  maxDate: Date = new Date(); // Fecha máxima hoy\r\n  minDate: Date = new Date(); // Fecha mínima 30 días atrás\r\n  rowSeleccionada: any;\r\n  totalRecords: number = 0;\r\n  formularioModificado: boolean = false;\r\n  isSelectAll: boolean = false;  \r\n  originalData: any[] = []; // Una copia de los datos originales para restablecer después del filtrado\r\n  dataActives: any[] = [];\r\n\r\n  // Esto almacenará el filtro actual para cada columna.\r\n  filters: { [key: string]: string | boolean | null } = {};\r\n\r\n  dataSource: MatTableDataSource<any> = new MatTableDataSource<any>();\r\n  displayedColumns: string[] = [];\r\n  public styleRow: { [clave: string]: string } = {};\r\n  public isToggleChecked: boolean = true;\r\n\r\n  @ViewChildren('filterInput') filterInputs!: QueryList<ElementRef>;\r\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n  @ViewChild('matTableWrapper') matTableWrapper!: ElementRef;\r\n\r\n  get columnKeys() {\r\n    return Object.keys(this.columnConfigs);\r\n  }\r\n\r\n  //Se reciben los datos que mostrará la tabla\r\n  @Input() data: any[] = [];\r\n  //Se reciben los datos que mostrará en campo editable select\r\n  // @Input() dataSelect: any[] = [];\r\n  @Input() dataSelect: any[][] = [];\r\n  //Se reciben las columnas que debe renderizar la tabla\r\n  /* @Input() columns: string[] = [];  */\r\n  //Se reciben las configuraciones de las columnas que se mostrarán\r\n  @Input() columnConfigs: any;\r\n  @Input() withHeader: boolean = true;\r\n  //Se reciben configuraciones generales de la tabla como datos de paginacion y fontsize\r\n  @Input() tableConfigs: any = {};\r\n  //Se recibe el nombre del menu para aplicar el correcto permiso por usuario\r\n  @Input() nombreMenu: string = '';\r\n  //Se recibe el titulo de la tabla\r\n  @Input() nombreTabla: string = '';\r\n  //Se recibe la ruta a la que navegara cuando se use el boton [crear] propio de la tabla\r\n  @Input() crearRoute: string = '';\r\n  //Se recibe la indicacion sobre si se debe mostrar el boton [crear] normal\r\n  @Input() showCreateButton = false;\r\n  //Se recibe la indicacion sobre si se debe mostrar el boton [crear] normal\r\n  @Input() showCreateButtonModal = false;\r\n  //Se recibe la indicacion sobre si se debe mostrar el boton [exportar a excel] que descarga un archivo excel\r\n  @Input() showExportarButton: boolean = true;\r\n  //Se recibe el nombre con el que se debe guardar el archivo excel al exportar la tabla desde el boton [exportar a excel]\r\n  @Input() excelFileName: string = '';\r\n  //Indica si esta \"cargando\" datos, y asi manejar la visualizacion del indicador loader\r\n  isLoading: boolean = false;\r\n  //Se recibe la indicacion sobre si se debe mostrar el boton [crear] cuando es un catalogoGeneral\r\n  @Input() showCreateButtonDetGral = false;\r\n  //Se recibe la indicacion sobre si se debe mostrar el boton [refrescar datos] que refresca los datos de la tabla\r\n  @Input() showRefreshButton: boolean = true;\r\n  @Input() showAddButton: boolean = false;\r\n  //Se recibe la indicacion sobre si se debe mostrar el boton [configuracion de columnas] que abre el modal para elegir que columnas visualizar\r\n  @Input() showConfColumnsButton: boolean = true;\r\n  //Se recibe la indicacion sobre si se debe mostrar el boton [incluir inactivos] que incluye los registros que estan en estatus de inactivo\r\n  @Input() showFilterInactivos = true;\r\n  //Se recibe un arreglo de configuracion de boton de accion, permite saber que botons de acciones debe renderizar\r\n  @Input() actions: TableAction[] = [];\r\n  @Input() resaltarSeleccion: boolean = false;\r\n  @Input() mostrarFiltroGeneralFechas: boolean = false;\r\n  @Input() showSelectAll: boolean = false;\r\n  // Aquí defines el mínimo de columnas requeridas\r\n  @Input() columnsReqMin: number = 3;\r\n  @Input() isReport = false; \r\n  @Input() fetchDataFunction!: ( params: HttpParams, extraParam?: any ) => Observable<any>; // extraParam es opcional\r\n  @Input() parametros: ParametrosGenerales = new ParametrosGenerales();\r\n  @Input() extraParams: { [key: string]: any } = {}; // Objeto con parámetros dinámicos\r\n  //Nueva propiedad para centrar la tabla automáticamente\r\n  @Input() centerTable: boolean = true;\r\n  //Nueva propiedad para controlar la altura de la tabla\r\n  @Input() tableHeight: string = 'auto'; // Opción para forzar una altura específica si se necesita\r\n  //Propiedad para controlar la visibilidad del gran total\r\n  @Input() showGranTotal: boolean = false;\r\n  @Input() widthColumn: string = '20%';\r\n\r\n  //Outputs para emitir eventos al padre\r\n  @Output() onSelectAll: EventEmitter<void> = new EventEmitter();\r\n  @Output() cambiarEstatusEvent = new EventEmitter<any>();\r\n  @Output() createEvent = new EventEmitter<void>();\r\n  @Output() refreshEvent = new EventEmitter<void>();\r\n  @Output() AddEvent = new EventEmitter<void>();\r\n  @Output() onCreate: EventEmitter<void> = new EventEmitter();\r\n  @Output() enviarItemEvent = new EventEmitter<void>();\r\n  @Output() filtroFechaGeneralEvent = new EventEmitter<(Date | undefined)[]>();\r\n  @Output() changeData = new EventEmitter<any>();\r\n  @Output() filtroFechaReportEvent = new EventEmitter<Date | undefined>();\r\n\r\n  constructor(\r\n    private excelService: ExportTableExcelService,\r\n    public dialog: MatDialog,\r\n    private configParams: ConfiguracionParametros,\r\n    public loadingService: LoadingService,\r\n    private exportNotificationService: ExportNotificationService\r\n  ) {\r\n    this.minDate.setDate(this.minDate.getDate() - 30);\r\n\r\n    this.bsConfigGeneral = {\r\n      minDate: this.minDate,\r\n      maxDate: this.maxDate,\r\n      containerClass: 'theme-orange',\r\n      dateInputFormat: 'DD/MM/YYYY',\r\n      isAnimated: true,\r\n    };\r\n  }\r\n\r\n  // En tu componente o servicio\r\n  getColumnConfigWithDefault(columnKey: string): ColumnConfig {\r\n    const defaultConfig: ColumnConfig = {\r\n      displayName: '', // Definir el nombre adecuado si es necesario\r\n      type: 'default', // Puedes ajustar el tipo predeterminado según tus necesidades\r\n      showFilter: true, // Opciones predeterminadas para otros atributos si es necesario\r\n      visible: true,\r\n    };\r\n\r\n    const columnConfig = this.columnConfigs[columnKey];\r\n    if (columnConfig) {\r\n      // Combinar la configuración de columna existente con la configuración predeterminada\r\n      return { ...defaultConfig, ...columnConfig };\r\n    } else {\r\n      // Si la configuración de columna no está definida, devolver la configuración predeterminada\r\n      return defaultConfig;\r\n    }\r\n  }\r\n\r\n  // Función para determinar si se debe bloquear el renglón\r\n  shouldBlockRow(element: any): boolean {\r\n    for (const columnKey of Object.keys(this.columnConfigs)) {\r\n      const columnConfig = this.getColumnConfigWithDefault(columnKey);\r\n      if (\r\n        columnConfig.bloquearSeleccion &&\r\n        columnConfig.bloquearSeleccion(element)\r\n      ) {\r\n        return true; // Se bloquea el renglón si se cumple la condición en alguna columna\r\n      }\r\n    }\r\n    return false; // No se bloquea el renglón si no se encuentra ninguna condición de bloqueo\r\n  }\r\n\r\n  // Definir los rangos de fechas\r\n  predefinedRanges: BsCustomDates[] = [\r\n    { label: 'Hoy', value: [new Date(), new Date()] },\r\n    {\r\n      label: 'Últimos 7 Días',\r\n      value: [\r\n        new Date(new Date().setDate(new Date().getDate() - 6)),\r\n        new Date(),\r\n      ],\r\n    },\r\n  ];\r\n\r\n  //Definir configuracion inicial para DateRangePicker\r\n  bsConfig: Partial<BsDaterangepickerConfig> = {\r\n    containerClass: 'theme-orange',\r\n    dateInputFormat: 'DD/MM/YYYY',\r\n    isAnimated: true,\r\n  };\r\n\r\n  //Abre modal para configurar que columnas configure para renderizar\r\n  openColumnVisibilityDialog(): void {\r\n    const columnsArray = Object.keys(this.columnConfigs)\r\n      .filter((key) => key !== 'activo')\r\n      .map((key) => ({\r\n        key: key,\r\n        ...this.columnConfigs[key],\r\n      }));\r\n\r\n    const dialogRef = this.dialog.open(ColumnVisibilityModal2Component, {\r\n      width: '250px',\r\n      data: { columns: columnsArray, columnsReqMin: this.columnsReqMin }, // Pasamos el mínimo de columnas\r\n    });\r\n\r\n    dialogRef.afterClosed().subscribe((result) => {\r\n      if (result) {\r\n        // Actualizar columnConfigs con los resultados\r\n        result.forEach((column: { key: string | number; visible: any }) => {\r\n          this.columnConfigs[column.key].visible = column.visible;\r\n        });\r\n        this.updateDisplayedColumns();\r\n      }\r\n    });\r\n  }\r\n\r\n  //Actualiza el arreglo de columnas a renderizar\r\n  updateDisplayedColumns() {\r\n    /*  if (this.columnConfigs.activo !== undefined)\r\n      this.columnConfigs.activo.visible = false; */\r\n\r\n    const visibleColumns = Object.keys(this.columnConfigs).filter(\r\n      (key) => this.columnConfigs[key].visible\r\n    );\r\n\r\n    if (this.actions.length === 0) {\r\n      this.displayedColumns = [...visibleColumns];\r\n    } else {\r\n      this.displayedColumns = [...visibleColumns, 'acciones'];\r\n    }\r\n  }\r\n\r\n  onValueChangeDateGeneral(value?: (Date | undefined)[]): void {\r\n    if (\r\n      value &&\r\n      value.length === 2 &&\r\n      value[0] instanceof Date &&\r\n      value[1] instanceof Date\r\n    ) {\r\n      this.filtroFechaGeneralEvent.emit(value);\r\n    }\r\n\r\n    if (value && value[0] instanceof Date && value[1] instanceof Date) {\r\n      this.parametros.rangoFechas =\r\n        this.fechaToString(value[0]) + '-' + this.fechaToString(value[1]);\r\n    }\r\n\r\n    this.parametros['noPagina'] = 1;\r\n    this.parametros['tamanoPagina'] = 10;\r\n\r\n    this.loadData();\r\n\r\n    // Asegurar que el paginador se sincroniza\r\n    this.paginator.pageIndex = 0;\r\n    this.paginator.length = this.totalRecords;\r\n  }\r\n\r\n  //Ejecuta al cambiar el valor del DataRangePicker\r\n  onValueChangeDate(\r\n    value?: (Date | undefined)[],\r\n    column: string = 'fechaCreacion'\r\n  ): void {\r\n    if (value == undefined) {\r\n      this.resetDateFilter(column);\r\n    }\r\n\r\n    console.log('fecha ingresasa: ', value, column);\r\n\r\n    if (\r\n      value &&\r\n      value.length === 2 &&\r\n      value[0] instanceof Date &&\r\n      value[1] instanceof Date\r\n    ) {\r\n      this.applyDateFilter(value[0], value[1], column);\r\n    } else {\r\n      this.resetDateFilter(column);\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    this.formularioModificado = true;\r\n\r\n    // Cargar datos iniciales\r\n    this.loadData();\r\n\r\n    // Ajustar el tamaño de la tabla al espacio disponible\r\n    this.adjustTableHeight();\r\n\r\n    // Observar cambios en el tamaño de la ventana\r\n    fromEvent(window, 'resize')\r\n      .pipe(debounceTime(200), takeUntil(this.destroy$))\r\n      .subscribe(() => {\r\n        this.checkForHorizontalOverflow();\r\n        this.adjustTableHeight();\r\n      });\r\n\r\n    // Verificar si hay overflow horizontal\r\n    this.checkForHorizontalOverflow();\r\n\r\n    // Detectar cuando hay espacio vacío después del último registro\r\n    this.checkEmptySpace();\r\n\r\n    // Observar cambios en los datos para actualizar el estado de espacio vacío\r\n    this.dataSource.connect().subscribe(() => {\r\n      this.checkEmptySpace();\r\n    });\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.updateDisplayedColumns();\r\n\r\n    // Inicialización de filtros\r\n    this.filters = {};\r\n    for (const column of Object.keys(this.columnConfigs)) {\r\n      this.filters[column] = '';\r\n    }\r\n\r\n    // Suscribirse al estado de exportación\r\n    this.exportSubscription = this.exportNotificationService.exportStatus$\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe(status => {\r\n        this.isExportInProgress = status.isExporting;\r\n      });\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (\r\n      (changes['extraParams'] && this.extraParams) ||\r\n      (changes['parametros'] && this.parametros)\r\n    ) {\r\n      // Cuando itemDefault cambia, asignamos sus valores al form\r\n      this.loadData();\r\n    }\r\n  }\r\n\r\n\r\n\r\n  applyFilter = (event: any, column: string) => {\r\n    this.parametros.filtrosPorColumna = {\r\n      ...this.parametros.filtrosPorColumna,\r\n      [column]: event.target.value,\r\n    };\r\n\r\n    this.parametros['noPagina'] = 1;\r\n    this.parametros['tamanoPagina'] = 10;\r\n\r\n    this.loadData();\r\n\r\n    // Asegurar que el paginador se sincroniza\r\n    this.paginator.pageIndex = 0;\r\n    this.paginator.length = this.totalRecords;\r\n  };\r\n\r\n  columnMatches(row: any): boolean {\r\n    for (const column of Object.keys(this.columnConfigs)) {\r\n      const columnName = column;\r\n      let filter = this.filters[columnName];\r\n      if (filter === null) {\r\n        continue;\r\n      }\r\n      if (filter !== null && filter !== undefined) {\r\n        if (typeof filter === 'boolean') {\r\n          if (row[columnName] !== filter) {\r\n            return false;\r\n          }\r\n        } else {\r\n          let value = String(row[columnName]).toLowerCase();\r\n          if (!value.includes(String(filter).toLowerCase())) {\r\n            return false;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n\r\n  applyDateFilter(startDate: Date, endDate: Date, column: string) {\r\n    this.parametros.filtrosPorColumna = {\r\n      ...this.parametros.filtrosPorColumna,\r\n      [column]:\r\n        this.fechaToString(startDate) + '-' + this.fechaToString(endDate),\r\n    };\r\n\r\n    this.parametros['noPagina'] = 1;\r\n    this.parametros['tamanoPagina'] = 10;\r\n\r\n    this.loadData();\r\n\r\n    // Asegurar que el paginador se sincroniza\r\n    this.paginator.pageIndex = 0;\r\n    this.paginator.length = this.totalRecords;\r\n  }\r\n\r\n  resetDateFilter(column: string) {\r\n    this.parametros.filtrosPorColumna = {\r\n      ...this.parametros.filtrosPorColumna,\r\n      [column]: '',\r\n    };\r\n\r\n    this.parametros['noPagina'] = 1;\r\n    this.parametros['tamanoPagina'] = 10;\r\n\r\n    this.loadData();\r\n\r\n    // Asegurar que el paginador se sincroniza\r\n    this.paginator.pageIndex = 0;\r\n    this.paginator.length = this.totalRecords;\r\n  }\r\n\r\n  fechaToString(fecha: Date) {\r\n    const day = String(fecha.getDate()).padStart(2, '0');\r\n    const month = String(fecha.getMonth() + 1).padStart(2, '0'); // Los meses en JS son base 0\r\n    const year = fecha.getFullYear();\r\n\r\n    // Formatear la fecha en dd/mm/yyyy\r\n    const formattedDate = `${day}/${month}/${year}`;\r\n\r\n    return formattedDate;\r\n  }\r\n\r\n  applyBooleanFilter(value: boolean | null, column: string): void {\r\n    value\r\n      ? (this.parametros.filtrosPorColumna = {\r\n        ...this.parametros.filtrosPorColumna,\r\n        [column]: 'true',\r\n      })\r\n      : delete this.parametros.filtrosPorColumna[column];\r\n\r\n    this.parametros['noPagina'] = 1;\r\n    this.parametros['tamanoPagina'] = 10;\r\n\r\n    this.loadData();\r\n\r\n    // Asegurar que el paginador se sincroniza\r\n    this.paginator.pageIndex = 0;\r\n    this.paginator.length = this.totalRecords;\r\n  }\r\n\r\n  applyFilterActives = (value: boolean) => {\r\n    this.parametros.activos = !value;\r\n    this.parametros['noPagina'] = 1;\r\n    this.parametros['tamanoPagina'] = 10;\r\n\r\n    this.loadData();\r\n\r\n    // Asegurar que el paginador se sincroniza\r\n    this.paginator.pageIndex = 0;\r\n    this.paginator.length = this.totalRecords;\r\n  };\r\n\r\n  updateData = () => {\r\n    this.isLoading = true;\r\n\r\n    this.loadData();\r\n  };\r\n\r\n  enviarItem(item: any) {\r\n    this.rowSeleccionada = item;\r\n    this.enviarItemEvent.emit(item);\r\n  }\r\n\r\n  refreshTable = () => {\r\n    this.filterInputs.forEach((input) => {\r\n      input.nativeElement.value = '';\r\n    });\r\n\r\n    this.parametros.filtrosPorColumna = {};\r\n    this.parametros['noPagina'] = 1;\r\n    this.parametros['tamanoPagina'] = 10;\r\n\r\n    this.loadData();\r\n\r\n    // Asegurar que el paginador se sincroniza\r\n    this.paginator.pageIndex = 0;\r\n    this.paginator.length = this.totalRecords;\r\n\r\n    // Verificar overflow después de que los datos se actualizan\r\n    setTimeout(() => this.checkForHorizontalOverflow(), 300);\r\n  };\r\n\r\n  agregarRegistro() {\r\n    this.AddEvent.emit();\r\n  }\r\n\r\n  cambiarEstatus(item: any) {\r\n    this.cambiarEstatusEvent.emit(item);\r\n  }\r\n\r\n  exportTable() {\r\n    // Iniciar la notificación de exportación y obtener el ID del trabajo\r\n    const jobId = this.exportNotificationService.startExport(this.excelFileName);\r\n\r\n    // Preparar parámetros para la consulta completa\r\n    const exportParams = { ...this.parametros };\r\n\r\n    // En lugar de usar 0, usamos el número total de registros\r\n    exportParams['noPagina'] = 1;\r\n    exportParams['tamanoPagina'] = this.totalRecords > 0 ? this.totalRecords : 10000;\r\n\r\n    // Configurar los parámetros de la consulta\r\n    const params = this.configParams.configurar(exportParams);\r\n\r\n    this.exportNotificationService.updateProgress(jobId, 25);\r\n\r\n    // Obtener las columnas a exportar (excluyendo 'acciones')\r\n    let displayColumns = this.actions.length > 0\r\n      ? this.displayedColumns.filter(d => d != 'acciones')\r\n      : this.displayedColumns;\r\n\r\n    // Realizar la consulta al endpoint\r\n    this.fetchDataFunction(params, this.extraParams).subscribe({\r\n      next: (data) => {\r\n        this.exportNotificationService.updateProgress(jobId, 50);\r\n\r\n        // Transformar datos para usar nombres de visualización como cabeceras\r\n        const transformedData = data.items.map((item: any) => {\r\n          const transformedItem: Record<string, any> = {};\r\n          displayColumns.forEach((title: string) => {\r\n            if (this.columnConfigs[title].type != 'image') {\r\n              transformedItem[this.columnConfigs[title].displayName] = item[title];\r\n            }\r\n          });\r\n          return transformedItem;\r\n        });\r\n        this.exportNotificationService.updateProgress(jobId, 75);\r\n\r\n        // Exportar los datos completos\r\n        this.excelService.exportToExcel(\r\n          'catalogoPrincipal',\r\n          this.excelFileName,\r\n          transformedData\r\n        );\r\n\r\n        // Completar la exportación\r\n        this.exportNotificationService.completeExport(jobId);\r\n      },\r\n      error: (error) => {\r\n        console.error('Error al exportar datos:', error);\r\n        this.exportNotificationService.errorExport(jobId, error);\r\n      }\r\n    });\r\n  }\r\n\r\n  onValueChangeDateReport(value?: Date | undefined): void {\r\n    this.filtroFechaReportEvent.emit(value);\r\n  }\r\n\r\n  create() {\r\n    this.onCreate.emit();\r\n    this.createEvent.emit();\r\n  }\r\n\r\n  get isDataEmpty(): boolean {\r\n    return (\r\n      this.dataSource && this.dataSource.data.length === 0 && !this.isLoading\r\n    );\r\n  }\r\n\r\n  //Funcion para agregar estilos a los registros eliminados\r\n  shouldHideText(row: any): boolean {\r\n    // Lógica para decidir si ocultar el texto\r\n    return row.activo === false; // Por ejemplo, oculta el texto para los registros no activos\r\n  }\r\n\r\n  loadData = () => {\r\n    if (this.formularioModificado) {\r\n      this.originalData = [];\r\n      this.dataSource.data = [];\r\n      this.isLoading = true;\r\n\r\n      const params = this.configParams.configurar(this.parametros);\r\n\r\n      this.fetchDataFunction(params, this.extraParams).subscribe((data) => {\r\n        const items = data.items;\r\n\r\n        this.data = items;\r\n\r\n        this.totalRecords = data.totalRecords;\r\n\r\n        this.dataSource.data = this.data;\r\n\r\n        this.isLoading = false;\r\n\r\n        // Estilos predeterminados o configuraciones\r\n        this.styleRow = {\r\n          height: this.tableConfigs.heightRow,\r\n        };\r\n\r\n        // Inicializa originalData de forma segura\r\n        if (Array.isArray(this.data)) {\r\n          this.originalData = [...this.data];\r\n        } else {\r\n          this.originalData = []; // O maneja como veas conveniente\r\n        }\r\n\r\n        if (this.isReport) {\r\n          this.bsConfigGeneral = {\r\n            containerClass: 'theme-orange',\r\n            dateInputFormat: 'DD/MM/YYYY',\r\n            isAnimated: true,\r\n            maxDate: this.maxDate,\r\n          };\r\n        }\r\n\r\n        // Recalcular dimensiones después de cargar datos\r\n        setTimeout(() => {\r\n          this.checkForHorizontalOverflow();\r\n          this.adjustTableHeight();\r\n        }, 100);\r\n      });\r\n    }\r\n  };\r\n\r\n  onPageChange(event: PageEvent): void {\r\n    this.parametros['noPagina'] = event.pageIndex + 1;\r\n    this.parametros['tamanoPagina'] = event.pageSize;\r\n    this.loadData();\r\n\r\n    // Scroll al inicio de la tabla al cambiar de página\r\n    if (this.matTableWrapper && this.matTableWrapper.nativeElement) {\r\n      const tableContent =\r\n        this.matTableWrapper.nativeElement.querySelector('.table-v2-content');\r\n      if (tableContent) {\r\n        tableContent.scrollTop = 0;\r\n      }\r\n    }\r\n  }\r\n\r\n  onCheckSelectAll(event: any) {\r\n    this.isSelectAll = event.checked;\r\n    this.onSelectAll.emit(event);\r\n  }\r\n\r\n  /** Opciones de tamaño de página transformadas */\r\n  transformedPageSizeOptions(options: number[]): number[] {\r\n    return options.map((size) => (size === 5 ? 10 : size));\r\n  }\r\n\r\n  /**\r\n   * Verifica si hay overflow horizontal en la tabla y aplica clase correspondiente\r\n   */\r\n  private checkForHorizontalOverflow(): void {\r\n    if (!this.matTableWrapper) return;\r\n\r\n    setTimeout(() => {\r\n      const tableContent =\r\n        this.matTableWrapper.nativeElement.querySelector('.table-v2-content');\r\n      if (!tableContent) return;\r\n\r\n      const hasOverflow = tableContent.scrollWidth > tableContent.clientWidth;\r\n\r\n      if (hasOverflow) {\r\n        tableContent.classList.add('has-overflow');\r\n      } else {\r\n        tableContent.classList.remove('has-overflow');\r\n      }\r\n    }, 300);\r\n  }\r\n\r\n  // Método para ajustar la altura de la tabla dinámicamente\r\n  private adjustTableHeight(): void {\r\n    if (!this.matTableWrapper) return;\r\n\r\n    setTimeout(() => {\r\n      try {\r\n        // Reiniciar overflow en el body\r\n        document.body.style.overflowX = 'hidden';\r\n        document.documentElement.style.overflowX = 'hidden';\r\n\r\n        // Referencias a los elementos relevantes\r\n        const tableContainer = this.matTableWrapper.nativeElement.closest(\r\n          '.table-v2-container'\r\n        );\r\n        if (!tableContainer) return;\r\n\r\n        // Obtener el elemento del footer global de la aplicación\r\n        const appFooter =\r\n          document.querySelector('footer') ||\r\n          document.querySelector('.app-footer') ||\r\n          document.querySelector('.main-footer');\r\n\r\n        // Dimensiones del viewport\r\n        const viewportHeight = window.innerHeight;\r\n        const viewportWidth = window.innerWidth;\r\n\r\n        // Posición del contenedor de la tabla\r\n        const tableRect = tableContainer.getBoundingClientRect();\r\n        const tableTop = tableRect.top;\r\n\r\n        // Calcular altura disponible según la posición del footer o el viewport\r\n        let availableHeight;\r\n\r\n        if (appFooter) {\r\n          // Si existe un footer, calcular basado en su posición\r\n          const footerRect = appFooter.getBoundingClientRect();\r\n          const footerTop = footerRect.top;\r\n\r\n          // Calcular la distancia entre la parte superior de la tabla y el footer\r\n          // y restar un margen de seguridad\r\n          availableHeight = footerTop - tableTop - 40;\r\n        } else {\r\n          // Si no hay footer, usar el viewport menos un margen para la parte inferior\r\n          availableHeight = viewportHeight - tableTop - 40;\r\n        }\r\n\r\n        // Garantizar una altura mínima para la tabla\r\n        const minHeight = 400;\r\n        const finalHeight = Math.max(availableHeight, minHeight);\r\n\r\n        // Aplicar la altura calculada al contenedor de la tabla\r\n        tableContainer.style.height = `${finalHeight}px`;\r\n\r\n        // Ajustar el contenido de la tabla según headers y footers\r\n        const tableHeader = tableContainer.querySelector('.toolbar');\r\n        const tableFooter = tableContainer.querySelector('.sticky-footer');\r\n\r\n        // Calcular las alturas de los elementos\r\n        const headerHeight = tableHeader ? tableHeader.offsetHeight : 0;\r\n        const footerHeight = tableFooter ? tableFooter.offsetHeight : 0;\r\n\r\n        // Obtener referencia al contenido de la tabla\r\n        const tableContent = tableContainer.querySelector('.table-v2-content');\r\n        if (tableContent) {\r\n          // Calcular el espacio disponible para el contenido\r\n          const contentHeight = finalHeight - headerHeight - footerHeight;\r\n          tableContent.style.height = `${contentHeight}px`;\r\n\r\n          // Ajustar la tabla interior para manejar scroll horizontal\r\n          setTimeout(() => {\r\n            const table = tableContent.querySelector('table.mat-table');\r\n            if (table) {\r\n              // Verificar si se necesita scroll horizontal\r\n              const tableWidth = table.scrollWidth;\r\n              const contentWidth = tableContent.clientWidth;\r\n\r\n              if (tableWidth > contentWidth) {\r\n                // La tabla es más ancha que el contenedor, activar indicador visual de scroll\r\n                tableContent.classList.add('has-overflow');\r\n                tableContent.style.overflowX = 'scroll';\r\n\r\n                // Asegurar que la tabla sea lo suficientemente ancha\r\n                table.style.width = 'max-content';\r\n                table.style.minWidth = '100%';\r\n              } else {\r\n                // No se necesita scroll horizontal\r\n                tableContent.classList.remove('has-overflow');\r\n\r\n                // La tabla cabe en el contenedor, ajustar al 100%\r\n                table.style.width = '100%';\r\n              }\r\n            }\r\n          }, 100);\r\n        }\r\n\r\n        // Asegurar que el footer sea visible\r\n        if (tableFooter) {\r\n          tableFooter.style.position = 'sticky';\r\n          tableFooter.style.bottom = '0';\r\n          tableFooter.style.zIndex = '100';\r\n        }\r\n      } catch (error) {\r\n        console.error('Error al ajustar dimensiones de tabla:', error);\r\n      }\r\n    }, 200);\r\n  }\r\n\r\n  /**\r\n   * Verifica si hay espacio vacío después del último registro y aplica la clase correspondiente\r\n   */\r\n  private checkEmptySpace() {\r\n    setTimeout(() => {\r\n      if (!this.matTableWrapper) return;\r\n\r\n      const tableElement = this.matTableWrapper.nativeElement;\r\n      const tableHeight = tableElement.offsetHeight;\r\n      const tableContentHeight = this.calculateContentHeight();\r\n      const tableContainer = tableElement.closest('.table-v2-content');\r\n\r\n      if (tableContainer && tableHeight < tableContainer.offsetHeight * 0.8) {\r\n        // Si el contenido de la tabla ocupa menos del 80% del contenedor, hay espacio vacío\r\n        tableElement.classList.add('has-empty-space');\r\n      } else {\r\n        tableElement.classList.remove('has-empty-space');\r\n      }\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Calcula la altura del contenido de la tabla (filas)\r\n   */\r\n  private calculateContentHeight(): number {\r\n    if (!this.matTableWrapper) return 0;\r\n\r\n    const rows =\r\n      this.matTableWrapper.nativeElement.querySelectorAll('tr.mat-row');\r\n    let totalHeight = 0;\r\n\r\n    rows.forEach((row: HTMLElement) => {\r\n      totalHeight += row.offsetHeight;\r\n    });\r\n\r\n    return totalHeight;\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    // Emitir evento para cancelar todas las suscripciones\r\n    this.destroy$.emit();\r\n    this.destroy$.complete();\r\n  }\r\n}\r\n\r\ninterface BsCustomDates {\r\n  label: string;\r\n  value: Date[];\r\n}\r\n","<div class=\"table-v2-container\" [ngClass]=\"{ 'table-v2-centered': centerTable }\">\r\n    <div *ngIf=\"withHeader\" class=\"toolbar\">\r\n        <div class=\"left-buttons\">\r\n            <button *ngIf=\"showCreateButton\" mat-raised-button [routerLink]=\"crearRoute\" class=\"btn-tabla-centrado\"\r\n                 matTooltip=\"Nuevo\" matTooltipPosition=\"above\"\r\n                matTooltipShowDelay=\"150\">\r\n                Crear\r\n            </button>\r\n            <button *ngIf=\"showCreateButtonDetGral\" mat-raised-button (click)=\"create()\" class=\"btn-tabla-centrado\"\r\n                matTooltip=\"Nuevo\" matTooltipPosition=\"above\"\r\n                matTooltipShowDelay=\"150\">\r\n                Crear\r\n            </button>\r\n\r\n            <button *ngIf=\"showCreateButtonModal\" mat-raised-button (click)=\"tableConfigs.createCallback()\"\r\n                class=\"btn-tabla-centrado\" matTooltip=\"Nuevo\"\r\n                matTooltipPosition=\"above\" matTooltipShowDelay=\"150\">\r\n                Crear\r\n            </button>\r\n\r\n            <input *ngIf=\"mostrarFiltroGeneralFechas\" #filterInput class=\"form-control-date\" bsDaterangepicker\r\n                placeholder=\"Filtrar por fecha\" type=\"text\" [bsConfig]=\"bsConfigGeneral\"\r\n                (bsValueChange)=\"onValueChangeDateGeneral($event)\" />\r\n\r\n            <input *ngIf=\"isReport\" #filterInput class=\"form-control-date\" bsDatepicker placeholder=\"Filtrar por fecha\"\r\n                type=\"text\" [bsConfig]=\"bsConfigGeneral\" (bsValueChange)=\"onValueChangeDateReport($event)\" />\r\n\r\n            <div *ngIf=\"showSelectAll\" class=\"checkbox-container\">\r\n                <mat-checkbox [disabled]=\"false\" (change)=\"onCheckSelectAll($event)\">Todos</mat-checkbox>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"table-title\">\r\n            <span>{{ nombreTabla }}</span>\r\n        </div>\r\n\r\n        <div class=\"right-buttons\">\r\n            <style>\r\n                .toggle-color-amarillo.mat-mdc-slide-toggle.mat-mdc-slide-toggle-checked .mdc-switch__thumb {\r\n                    background-color: var(--color-select-toggle) !important;\r\n                }\r\n\r\n                .toggle-color-amarillo.mat-mdc-slide-toggle.mat-mdc-slide-toggle-checked .mdc-switch__track {\r\n                    background-color: var(--color-select-toggle-transparente) !important;\r\n                }\r\n\r\n                .toggle-color-amarillo.mat-slide-toggle.mat-checked .mat-slide-toggle-thumb {\r\n                    background-color: var(--color-select-toggle) !important;\r\n                }\r\n\r\n                .toggle-color-amarillo.mat-slide-toggle.mat-checked .mat-slide-toggle-bar {\r\n                    background-color: var(--color-select-toggle-transparente) !important;\r\n                }\r\n            </style>\r\n            <mat-slide-toggle *ngIf=\"showFilterInactivos\" (change)=\"applyFilterActives($event.checked)\"\r\n                matTooltip=\"Incluir eliminados\" matTooltipPosition=\"above\" matTooltipShowDelay=\"150\"\r\n                class=\"toggle-color-amarillo\">\r\n            </mat-slide-toggle>\r\n            <button *ngIf=\"showExportarButton\" mat-raised-button class=\"btn btn-secondary btn-tabla-centrado\"\r\n                (click)=\"exportTable()\" [disabled]=\"isExportInProgress\"\r\n                matTooltip=\"{{isExportInProgress ? 'Exportación en progreso...' : 'Exportar a excel'}}\"\r\n                matTooltipPosition=\"above\" matTooltipShowDelay=\"150\">\r\n                <mat-icon>{{isExportInProgress ? 'hourglass_empty' : 'file_download'}}</mat-icon>\r\n            </button>\r\n\r\n            <button *ngIf=\"showRefreshButton\" mat-raised-button class=\"refresh-button btn-tabla-centrado\"\r\n                (click)=\"refreshTable()\" matTooltip=\"Refrescar tabla\" matTooltipPosition=\"above\"\r\n                matTooltipShowDelay=\"150\">\r\n                <mat-icon>refresh</mat-icon>\r\n            </button>\r\n\r\n            <button *ngIf=\"showAddButton\" mat-raised-button class=\"refresh-button btn-tabla-centrado\"\r\n                (click)=\"agregarRegistro()\" matTooltip=\"Agregar registro\" matTooltipPosition=\"above\"\r\n                matTooltipShowDelay=\"150\">\r\n                <mat-icon>add</mat-icon>\r\n            </button>\r\n\r\n            <button *ngIf=\"showConfColumnsButton\" (click)=\"openColumnVisibilityDialog()\" mat-raised-button\r\n                class=\"btn btn-secondary settings-button btn-tabla-centrado\" matTooltip=\"Configurar columnas\"\r\n                matTooltipPosition=\"above\" matTooltipShowDelay=\"150\">\r\n                <mat-icon>settings</mat-icon>\r\n            </button>\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"table-v2-wrapper\" #matTableWrapper>\r\n        <div class=\"table-v2-content\">\r\n            <mat-table id=\"catalogoPrincipal\" mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z0\">\r\n                <!-- Columnas Dinámicas -->\r\n                <ng-container *ngFor=\"let column of columnKeys\" [matColumnDef]=\"column\">\r\n                    <th mat-header-cell *matHeaderCellDef sticky\r\n                        [ngClass]=\"{'columna-id': column === 'id' || column === 'Id'}\"\r\n                        [ngStyle]=\"{ width: widthColumn }\">\r\n                        <div style=\"display: flex; flex-direction: column;\">\r\n                            <div>{{ columnConfigs[column]?.displayName || column }}</div>\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.showFilter\">\r\n                                <ng-container *ngIf=\"\r\n                    columnConfigs[column]?.type == 'default' ||\r\n                    columnConfigs[column]?.type == 'default-truncate'\r\n                  \">\r\n                                    <input #filterInput class=\"form-control form-control-sm\"\r\n                                        [ngClass]=\"{'filtro-width': column === 'id' || column === 'Id'}\" type=\"text\"\r\n                                        (change)=\"applyFilter($event, column)\" placeholder=\"Filtrar\" />\r\n                                </ng-container>\r\n                                <ng-container *ngIf=\"columnConfigs[column]?.type == 'number'\">\r\n                                    <input #filterInput class=\"form-control form-control-sm\"\r\n                                        [ngClass]=\"{'filtro-width': column === 'id' || column === 'Id'}\" type=\"text\"\r\n                                        (change)=\"applyFilter($event, column)\" placeholder=\"Filtrar\" />\r\n                                </ng-container>\r\n                                <ng-container *ngIf=\"columnConfigs[column]?.type == 'date'\">\r\n                                    <input #filterInput style=\"width: 100%\" bsDaterangepicker placeholder=\"Filtrar\"\r\n                                        class=\"form-control form-control-sm\" type=\"text\" [bsConfig]=\"bsConfig\"\r\n                                        (bsValueChange)=\"onValueChangeDate($event, column)\" />\r\n                                </ng-container>\r\n                                <ng-container *ngIf=\"columnConfigs[column]?.type === 'boolean'\">\r\n                                    <mat-slide-toggle [checked]=\"columnConfigs[column]?.iniFilterBool\"\r\n                                        (change)=\"applyBooleanFilter($event.checked ? true : null, column)\">\r\n                                    </mat-slide-toggle>\r\n                                </ng-container>\r\n                            </ng-container>\r\n                        </div>\r\n                    </th>\r\n\r\n                    <td mat-cell *matCellDef=\"let element\" [ngClass]=\"{\r\n              'disabled-record': shouldBlockRow(element),\r\n              registroEliminado: shouldHideText(element)\r\n            }\" (click)=\"!shouldBlockRow(element) ? enviarItem(element) : null\">\r\n                        <div *ngIf=\"!isLoading && !isDataEmpty\">\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.type === 'boolean'\">\r\n                                <ng-container *ngIf=\"columnConfigs[column]?.editable; else elseBlock\">\r\n                                    <ng-container *ngIf=\"columnConfigs[column]?.event; else elseEvent\">\r\n                                        <mat-checkbox [(ngModel)]=\"element[column]\"\r\n                                            (change)=\"columnConfigs[column]?.functionEvent(element)\">\r\n                                        </mat-checkbox>\r\n                                    </ng-container>\r\n\r\n                                    <ng-template #elseEvent>\r\n                                        <mat-checkbox [(ngModel)]=\"element[column]\"> </mat-checkbox>\r\n                                    </ng-template>\r\n                                </ng-container>\r\n                                <ng-template #elseBlock>\r\n                                    {{\r\n                                    element[column]\r\n                                    ? columnConfigs[column].trueValue\r\n                                    : columnConfigs[column].falseValue\r\n                                    }}\r\n                                </ng-template>\r\n                            </ng-container>\r\n\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.type === 'date'\">\r\n                                <span class=\"text-uppercase\">{{ element[column] | date : \"dd/MMM/yyyy\" }}</span>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.type === 'date-time'\">\r\n                                <span class=\"text-uppercase\">{{ element[column] | date : \"dd/MMM/yyyy HH:MM\" }}</span>\r\n                            </ng-container>\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.type === 'default'\">\r\n                                <ng-container *ngIf=\"\r\n                    columnConfigs[column]?.customRender;\r\n                    else elseBlockDefault\r\n                  \">\r\n                                    <span\r\n                                        [ngClass]=\"{'text-uppercase': column === 'fechaCita' || columnConfigs[column]?.type === 'date'}\">{{\r\n                                        columnConfigs[column]?.customRender(element)\r\n                                        }}</span>\r\n                                </ng-container>\r\n                                <ng-template #elseBlockDefault>\r\n                                    <ng-container\r\n                                        *ngIf=\"columnConfigs[column]?.editable; else elseBlockDefaultEditable\">\r\n                                        <ng-container *ngIf=\"columnConfigs[column]?.event; else elseEventDefault\">\r\n                                            <input type=\"text\" [(ngModel)]=\"element[column]\" style=\"width: 100%\"\r\n                                                toUpperCase (blur)=\"columnConfigs[column]?.functionEvent(element)\" />\r\n                                        </ng-container>\r\n                                        <ng-template #elseEventDefault>\r\n                                            <input type=\"text\" [(ngModel)]=\"element[column]\" style=\"width: 100%\"\r\n                                                toUpperCase />\r\n                                        </ng-template>\r\n                                    </ng-container>\r\n                                    <ng-template #elseBlockDefaultEditable>\r\n                                        {{ element[column] }}\r\n                                    </ng-template>\r\n                                </ng-template>\r\n                            </ng-container>\r\n\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.type === 'number'\">\r\n                                <ng-container *ngIf=\"columnConfigs[column]?.editable; else elseBlock\">\r\n                                    <ng-container *ngIf=\"columnConfigs[column]?.event; else elseEvent\">\r\n                                        <input type=\"text\" [(ngModel)]=\"element[column]\"\r\n                                            style=\"width: 100%; text-align: right\" (keydown.enter)=\"\r\n                        columnConfigs[column]?.functionEvent(element)\r\n                      \" onlyDigit=\"{{ columnConfigs[column]?.char }}\" />\r\n                                    </ng-container>\r\n                                    <ng-template #elseEvent>\r\n                                        <input type=\"text\" [(ngModel)]=\"element[column]\"\r\n                                            style=\"width: 100%; text-align: right\"\r\n                                            onlyDigit=\"{{ columnConfigs[column]?.char }}\" />\r\n                                    </ng-template>\r\n                                </ng-container>\r\n\r\n                                <ng-template #elseBlock>\r\n                                    <p class=\"text-align-right\" *ngIf=\"!element.isEditing\">\r\n                                        {{\r\n                                        element[column] | onlyDigit : columnConfigs[column]?.char\r\n                                        }}\r\n                                    </p>\r\n                                </ng-template>\r\n                            </ng-container>\r\n\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.type === 'default-truncate'\">\r\n                                <ng-container *ngIf=\"columnConfigs[column]?.customRender; else elseBlock\">\r\n                                    <span matTooltip=\"{{ element[column] }}\">{{\r\n                                        columnConfigs[column]?.customRender(element) | truncate : 10\r\n                                        }}</span>\r\n                                </ng-container>\r\n                                <ng-template #elseBlock>\r\n                                    <span matTooltip=\"{{ element[column] }}\">{{\r\n                                        element[column] | truncate : 10\r\n                                        }}</span>\r\n                                </ng-template>\r\n                            </ng-container>\r\n\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.type === 'percent'\">\r\n                                <ng-container *ngIf=\"columnConfigs[column]?.customRender; else elseBlock\">\r\n                                    <span matTooltip=\"{{ element[column] | percent }}\">{{\r\n                                        columnConfigs[column]?.customRender(element) | percent\r\n                                        }}</span>\r\n                                </ng-container>\r\n                                <ng-template #elseBlock>\r\n                                    <span matTooltip=\"{{ element[column] | percent }}\">{{\r\n                                        element[column] | percent\r\n                                        }}</span>\r\n                                </ng-template>\r\n                            </ng-container>\r\n\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.type === 'image'\">\r\n                                <img [src]=\"element[column] | image\" alt=\"Foto gafete\" style=\"width:100px !important\">\r\n                            </ng-container>\r\n\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.type === 'select'\">\r\n                                <select [(ngModel)]=\"element[column]\" style=\"width: 100%; height: 25px\"\r\n                                    disabled=\"{{ !columnConfigs[column]?.editable }}\">\r\n                                    <option *ngFor=\"\r\n                      let item of dataSelect[\r\n                        columnConfigs[column]?.positionDataSelect\r\n                      ]\r\n                    \" [value]=\"item.id\">\r\n                                        {{ item.nombre }}\r\n                                    </option>\r\n                                </select>\r\n                            </ng-container>\r\n\r\n                            <ng-container *ngIf=\"!columnConfigs[column]\">\r\n                                {{ element[column] }}\r\n                            </ng-container>\r\n\r\n                            <ng-container *ngIf=\"columnConfigs[column]?.type === 'dinamic'\">\r\n                                <ng-container *ngIf=\"columnConfigs[column]?.editable; else elseBlock\">\r\n                                    <ng-container *ngIf=\"columnConfigs[column]?.event; else elseEvent\">\r\n                                        <input type=\"text\" [(ngModel)]=\"element[column]\"\r\n                                            style=\"width: 100%; text-align: right\" (keydown.enter)=\"\r\n                        columnConfigs[column]?.functionEvent(element)\r\n                      \" onlyDigit=\"{{ columnConfigs[column]?.char }}\" />\r\n                                    </ng-container>\r\n                                    <ng-template #elseEvent>\r\n                                        <input type=\"text\" [(ngModel)]=\"element[column]\"\r\n                                            style=\"width: 100%; text-align: right\"\r\n                                            onlyDigit=\"{{ columnConfigs[column]?.char }}\" />\r\n                                    </ng-template>\r\n                                </ng-container>\r\n\r\n                                <ng-template #elseBlock>\r\n                                    <p class=\"text-align-right\" *ngIf=\"!element.isEditing\">\r\n                                        {{ element[column] | onlyDigit : \"\" }}\r\n                                        {{ columnConfigs[column]?.char }}\r\n                                    </p>\r\n                                </ng-template>\r\n                            </ng-container>\r\n                        </div>\r\n                    </td>\r\n                </ng-container>\r\n\r\n                <!-- Botones de acción -->\r\n                <ng-container matColumnDef=\"acciones\">\r\n                    <th mat-header-cell *matHeaderCellDef class=\"acciones-header\">\r\n                        Acciones\r\n                    </th>\r\n                    <td mat-cell *matCellDef=\"let element\" class=\"mat-cell-with-actions\"\r\n                        [ngClass]=\"{ registroEliminado: shouldHideText(element) }\">\r\n                        <div class=\"flex-container\">\r\n                            <ng-container *ngFor=\"let action of actions\">\r\n                                <div *ngIf=\"!action.isVisible || action.isVisible(element)\"\r\n                                    class=\"action-button-container\">\r\n                                    <button type=\"button\" class=\"btn btn-warning btn-sm btn-action\"\r\n                                        (click)=\"$event.stopPropagation(); action.callback(element)\"\r\n                                        matTooltip=\"{{ action.tooltip }}\" matTooltipPosition=\"above\"\r\n                                        matTooltipShowDelay=\"150\" [disabled]=\"\r\n                      action.showCondition\r\n                        ? !action.showCondition(element)\r\n                        : false\r\n                    \"  [ngClass]=\"{\r\n                      registroEliminado: action.showCondition\r\n                        ? !action.showCondition(element)\r\n                        : false\r\n                    }\">\r\n                                        <mat-icon *ngIf=\"action.icon\" class=\"action-icon\">{{\r\n                                            action.icon\r\n                                            }}</mat-icon>\r\n                                    </button>\r\n                                </div>\r\n                            </ng-container>\r\n                        </div>\r\n                    </td>\r\n                </ng-container>\r\n                <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n                <tr [ngStyle]=\"styleRow\" mat-row *matRowDef=\"let row; columns: displayedColumns\" [ngClass]=\"{\r\n            'resaltar-renglon': resaltarSeleccion && row === rowSeleccionada\r\n          }\" [matTooltip]=\"shouldHideText(row) ? 'Registro eliminado' : ''\" matTooltipPosition=\"right\"></tr>\r\n            </mat-table>\r\n\r\n            <!-- Estado Vacío -->\r\n            <div *ngIf=\"!isLoading && isDataEmpty\" class=\"empty-state\">\r\n                <mat-icon aria-hidden=\"false\" aria-label=\"Icono de datos vacíos\">folder_open</mat-icon>\r\n                <p>No pudimos encontrar datos para mostrar aquí.</p>\r\n            </div>\r\n            <div *ngIf=\"isLoading\" class=\"empty-state\">\r\n                <div *ngIf=\"isLoading\" class=\"loading-overlay\" style=\"padding: 25px\">\r\n                    <mat-spinner diameter=\"50\"></mat-spinner>\r\n                </div>\r\n                <p>Cargando datos, porfavor espere un momento...</p>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <div class=\"sticky-gran-total\" *ngIf=\"showGranTotal\">\r\n        Configurar para mostrar un gran total.\r\n    </div>\r\n    <div class=\"sticky-footer\">\r\n        <mat-paginator class=\"custom-paginator\" [length]=\"totalRecords\" [pageSize]=\"parametros.tamanoPagina\"\r\n            [pageSizeOptions]=\"tableConfigs.pageSizeOptions\" (page)=\"onPageChange($event)\" showFirstLastButtons\r\n            aria-label=\"Seleccionar página de elementos\">\r\n        </mat-paginator>\r\n    </div>\r\n</div>","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'booleanToText'\r\n})\r\nexport class BooleanToTextPipe implements PipeTransform {\r\n  transform(value: boolean): string {\r\n    return value ? 'Sí' : 'No';\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'espaciado'\r\n})\r\nexport class EspaciadoPipe implements PipeTransform {\r\n  transform(value: string, ...args: any[]): string {\r\n    // Dividimos la ruta en segmentos separados por '/'\r\n    const segments = value.split('/');\r\n    \r\n    // Iteramos a través de los segmentos y formateamos cada uno\r\n    const formattedSegments = segments.map(segment => {\r\n      // Si el segmento es \":id\" o un UUID, lo ignoramos\r\n      if (segment === ':id' || /^[A-Fa-f0-9-]{36}$/.test(segment)) {\r\n        return '';\r\n      }\r\n      \r\n      // Aplicamos el formateo para agregar espacios antes de las mayúsculas\r\n      return segment.replace(/([A-Z])/g, ' $1');\r\n    });\r\n\r\n    // Filtramos los segmentos vacíos (donde estaba \":id\" o el UUID)\r\n    const filteredSegments = formattedSegments.filter(segment => segment !== '');\r\n    \r\n    // Unimos los segmentos formateados nuevamente con '/'\r\n    const formattedValue = filteredSegments.join('/').trim().toLowerCase();\r\n    \r\n    return formattedValue;\r\n  }\r\n}\r\n","import { Directive, HostListener, Input } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n  selector: '[validateSpecialChars]'\r\n})\r\nexport class ValidateSpecialCharsDirective {\r\n\r\n  private _validate: boolean = true;\r\n  private _validChars: string = '';\r\n  private _validCharsDefault: string = \"!#@\\\"'?¿*)(+-=/%&\";\r\n\r\n  @Input('validateSpecialChars')\r\n  set validate(value: any) {\r\n    this._validate = (value == 'false') ? false : true;\r\n  }\r\n\r\n  @Input()\r\n  set validChars(value: string) {\r\n    this._validChars = value || \"\";\r\n  }\r\n  \r\n  constructor(private ngControl: NgControl) { }\r\n\r\n  @HostListener('input', ['$event.target.value']) onInputChange(value: string) {\r\n    let valorInput = value;\r\n    let validChars = this._validChars;\r\n\r\n    if ( this._validate) {\r\n      valorInput = valorInput.replace(/[^a-zA-Z0-9\\s]/g, ''); // Eliminar caracteres especiales\r\n    } else  {\r\n        \r\n    if(validChars === '') \r\n        validChars =  this._validCharsDefault;\r\n      \r\n      const validCharsRegex = new RegExp(`[^a-zA-Z0-9${validChars}\\\\s]`, 'g');\r\n      valorInput = valorInput.replace(validCharsRegex, ''); // Eliminar caracteres no permitidos\r\n    }\r\n\r\n    this.ngControl?.control?.setValue(valorInput, { emitEvent: false });\r\n  }\r\n}","import { Directive, ElementRef, HostListener } from '@angular/core';\r\nimport { NgControl, ControlValueAccessor } from '@angular/forms';\r\n\r\n@Directive({\r\n  selector: '[timeInput]',\r\n})\r\nexport class TimeInputDirective {\r\n  constructor(private el: ElementRef, private control: NgControl) {}\r\n\r\n  ngOnInit() {\r\n    let value = this.control.value.replace(/[^0-9]/g, ''); // Elimina todos los caracteres no numéricos\r\n\r\n    if (value.length > 4) {\r\n      value = value.slice(0, 4); // Limita la longitud de la entrada a 4 dígitos\r\n    }\r\n\r\n    let hours = value.slice(0, 2);\r\n    let minutes = value.slice(2, 4);\r\n\r\n    let formattedValue = hours;\r\n    if (minutes.length > 0) {\r\n      formattedValue += ':' + minutes;\r\n    }\r\n\r\n    this.control.control?.setValue(formattedValue);\r\n  }\r\n\r\n  @HostListener('input', ['$event']) onInputChange(event: Event) {\r\n    const input = event.target as HTMLInputElement;\r\n    let value = input.value.replace(/[^0-9]/g, ''); // Elimina todos los caracteres no numéricos\r\n\r\n    if (value.length > 4) {\r\n      value = value.slice(0, 4); // Limita la longitud de la entrada a 4 dígitos\r\n    }\r\n\r\n    let hours = value.slice(0, 2);\r\n    let minutes = value.slice(2, 4);\r\n\r\n    if (hours.length === 2 && parseInt(hours) > 23) {\r\n      hours = '23'; // Limita las horas a un máximo de 23\r\n    }\r\n\r\n    if (minutes.length === 2 && parseInt(minutes) > 59) {\r\n      minutes = '59'; // Limita los minutos a un máximo de 59\r\n    }\r\n\r\n    let formattedValue = hours;\r\n    if (minutes.length > 0) {\r\n      formattedValue += ':' + minutes;\r\n    }\r\n\r\n    input.value = formattedValue;\r\n    this.control.control?.setValue(formattedValue);\r\n  }\r\n\r\n  @HostListener('keydown', ['$event']) onKeyDown(event: KeyboardEvent) {\r\n    const input = event.target as HTMLInputElement;\r\n    const value = input.value;\r\n\r\n    // Permite borrar \":\" con la tecla Backspace\r\n    if (\r\n      event.key === 'Backspace' &&\r\n      input.selectionStart === input.selectionEnd\r\n    ) {\r\n      const position = input.selectionStart || 0;\r\n\r\n      if (position === 3) {\r\n        input.value = value.slice(0, 2);\r\n        input.setSelectionRange(2, 2);\r\n        event.preventDefault();\r\n      }\r\n    }\r\n\r\n    // Permite saltar \":\" con las teclas de flecha\r\n    if (\r\n      (event.key === 'ArrowLeft' || event.key === 'ArrowRight') &&\r\n      input.selectionStart === input.selectionEnd\r\n    ) {\r\n      const position = input.selectionStart || 0;\r\n\r\n      if (position === 2 && event.key === 'ArrowRight') {\r\n        input.setSelectionRange(3, 3);\r\n        event.preventDefault();\r\n      }\r\n\r\n      if (position === 3 && event.key === 'ArrowLeft') {\r\n        input.setSelectionRange(2, 2);\r\n        event.preventDefault();\r\n      }\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  AfterViewInit,\r\n  ElementRef,\r\n  ChangeDetectorRef,\r\n} from '@angular/core';\r\nimport { MatSelect } from '@angular/material/select';\r\n\r\n@Directive({\r\n  selector: '[autoSelect]',\r\n})\r\nexport class AutoSelectOptionDirective implements AfterViewInit {\r\n  // constructor(private matSelect: MatSelect) { }\r\n\r\n  // ngAfterViewInit() {\r\n\r\n  //   // Nos suscribimos a los cambios en las opciones\r\n  //   this.matSelect.options.changes.subscribe(() => {\r\n\r\n  //     if (this.matSelect.options.length === 1) {\r\n  //       // Si solo hay una opción, la seleccionamos\r\n  //       this.matSelect.writeValue(this.matSelect.options.first.value);\r\n  //       this.matSelect._onChange(this.matSelect.options.first.value);\r\n  //     }\r\n  //   });\r\n  // }\r\n\r\n  constructor(\r\n    private matSelect: MatSelect,\r\n    private cdRef: ChangeDetectorRef,\r\n    private el: ElementRef\r\n  ) {}\r\n\r\n  ngAfterViewInit() {\r\n    // Suscribirse a los cambios en las opciones del select\r\n    this.matSelect.options.changes.subscribe(() => {\r\n      this.autoSelectIfSingleOption();\r\n    });\r\n\r\n    // Evaluar inmediatamente después de cargar las opciones\r\n    this.autoSelectIfSingleOption();\r\n  }\r\n\r\n  private autoSelectIfSingleOption() {\r\n    if (this.matSelect.options.length === 1) {\r\n      setTimeout(() => {\r\n        const value = this.matSelect.options.first.value;\r\n        this.el.nativeElement.value = value;\r\n        this.matSelect.writeValue(value);\r\n\r\n        // Emitir el valorChange para actualizar el estado\r\n        this.matSelect.valueChange.emit(value);\r\n        // Forzar la detección de cambios\r\n        this.cdRef.detectChanges();\r\n\r\n        // Disparar manualmente el evento change en el select\r\n        const event = new Event('selectionChange', { bubbles: true });\r\n        this.el.nativeElement.dispatchEvent(event);\r\n      });\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  HostListener,\r\n  Renderer2,\r\n  Input,\r\n  OnInit,\r\n} from '@angular/core';\r\nimport { NgControl, ControlValueAccessor } from '@angular/forms';\r\nimport { formatDate } from '@angular/common';\r\n\r\n@Directive({\r\n  selector: '[dateFormat]',\r\n})\r\nexport class DateTimeFormatDirective implements OnInit {\r\n  @Input('dateFormat') format?: string = '';\r\n\r\n  constructor(\r\n    private el: ElementRef,\r\n    private control: NgControl,\r\n    private renderer: Renderer2\r\n  ) {}\r\n\r\n  @HostListener('dateChange', ['$event']) onDateChange() {\r\n    let string = this.formatDate();\r\n    this.renderer.setProperty(this.el.nativeElement, 'value', string);\r\n  }\r\n\r\n  ngOnInit() {\r\n    let string = this.formatDate() == '31/12/1969 18:00' ? '' : this.formatDate();\r\n    this.renderer.setProperty(this.el.nativeElement, 'value', string);\r\n  }\r\n\r\n  // ngOnChanges() {\r\n  //   let string = this.formatDate();\r\n\r\n  //   this.renderer.setProperty(this.el.nativeElement, 'value', string);\r\n  // }\r\n\r\n  @HostListener('input', ['$event.target.value'])\r\n  onInput(value: string) {\r\n    let string = this.formatDate();\r\n    this.renderer.setProperty(this.el.nativeElement, 'value', string);\r\n  }\r\n\r\n  formatDate() {\r\n    if (this.format == 'date')\r\n      return formatDate(this.control.value, 'dd/MM/yyyy', 'en-US');\r\n    else return formatDate(this.control.value, 'dd/MM/yyyy HH:mm', 'en-US');\r\n  }\r\n}\r\n","import { Directive, ElementRef, HostListener, OnInit, Renderer2 } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[selectorReadOnly]'\r\n})\r\nexport class ReadOnlySelectorDirective implements OnInit {\r\n\r\n  constructor(private el: ElementRef) {}\r\n\r\n  ngOnInit() {\r\n    // Desactivar el mat-select\r\n    this.el.nativeElement.disabled = true;\r\n  }\r\n}","/* \r\n\r\nimport { Directive, ElementRef, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[PhoneNumber]'\r\n})\r\nexport class PhoneNumberDirective {\r\n\r\n  constructor(private el: ElementRef) { }\r\n\r\n  @HostListener('input', ['$event']) onInput(event: Event) {\r\n    const input = event.target as HTMLInputElement;\r\n    const trimmedValue = input.value.replace(/\\D/g, '').slice(0, 10); // Solo se permiten números y hasta 10 caracteres\r\n    const formattedValue = this.formatPhoneNumber(trimmedValue);\r\n    input.value = formattedValue;\r\n  }\r\n\r\n  private formatPhoneNumber(value: string): string {\r\n    const formattedValue = value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3');\r\n    return formattedValue;\r\n  }\r\n}\r\n */\r\n\r\nimport { Directive, ElementRef, HostListener, OnInit } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[PhoneNumber]'\r\n})\r\nexport class PhoneNumberDirective implements OnInit {\r\n\r\n  constructor(private el: ElementRef) { }\r\n\r\n  ngOnInit() {\r\n    this.formatInputValue();\r\n  }\r\n\r\n  @HostListener('input', ['$event']) onInput(event: Event) {\r\n    this.formatInputValue();\r\n  }\r\n\r\n  private formatInputValue() {\r\n    const input = this.el.nativeElement as HTMLInputElement;\r\n    let value = input.value.replace(/\\D/g, '').slice(0, 10); // Solo se permiten números y hasta 10 caracteres\r\n    const formattedValue = this.formatPhoneNumber(value);\r\n    input.value = formattedValue;\r\n  }\r\n\r\n  private formatPhoneNumber(value: string): string {\r\n    const formattedValue = value.replace(/(\\d{3})(\\d{3})(\\d{4})/, '($1) $2-$3');\r\n    return formattedValue;\r\n  }\r\n}\r\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[appMaxLength]'\r\n})\r\nexport class MaxLengthDirective {\r\n\r\n  @Input('appMaxLength') maxLength!: number; \r\n\r\n  constructor(private el: ElementRef) { }\r\n\r\n  @HostListener('input', ['$event']) onInput(event: Event) {\r\n    const input = event.target as HTMLInputElement;\r\n    const trimmedValue = input.value.slice(0, this.maxLength);\r\n    if (trimmedValue !== input.value) {\r\n      input.value = trimmedValue;\r\n      input.dispatchEvent(new Event('input'));\r\n    }\r\n  }\r\n}\r\n","import { Directive, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[OnlyDigitBase]',\r\n})\r\nexport class OnlyDigitBaseDirective {\r\n  constructor() {}\r\n\r\n  @HostListener('keydown', ['$event'])\r\n  onKeyDown(event: KeyboardEvent) {\r\n    const allowedKeys = [\r\n      'Backspace',\r\n      'Delete',\r\n      'ArrowLeft',\r\n      'ArrowRight',\r\n      'Tab',\r\n    ];\r\n    if (allowedKeys.includes(event.key)) {\r\n      return;\r\n    }\r\n\r\n    if (event.key < '0' || event.key > '9') {\r\n      event.preventDefault();\r\n    }\r\n  }\r\n}\r\n","// material-icons-loader.ts\r\nexport function loadMaterialIconsFont(): void {\r\n    const id = 'material-icons-font';\r\n    if (!document.getElementById(id)) {\r\n      const link = document.createElement('link');\r\n      link.id = id;\r\n      link.rel = 'stylesheet';\r\n      link.href = 'https://fonts.googleapis.com/icon?family=Material+Icons';\r\n      document.head.appendChild(link);\r\n    }\r\n  }\r\n  ","//custom-table.module.ts\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\n// Angular Material\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n// Bootstrap Datepicker\r\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\r\n\r\n// Componentes\r\nimport { CustomTableComponent } from './Components/CustomTable/custom-table.component';\r\nimport { ColumnVisibilityModal2Component } from './Components/ColumnVisibility/column-visibility-modal2.component';\r\n\r\n// Servicios\r\nimport { ExportNotificationService } from './Services/exportNotification.service';\r\nimport { ExportTableExcelService } from './Services/ExportTableExcel.service';\r\nimport { LoadingService } from './Services/loading.service';\r\nimport { DateTimeService } from './Services/DateTime.service';\r\n\r\n// Pipes\r\nimport { ImagePipe } from './pipes/image.pipe';\r\nimport { BooleanToTextPipe } from './pipes/booleanToText.pipe';\r\nimport { StringTruncatePipe } from './pipes/string-truncate.pipe';\r\nimport { OnlyDigitPipe } from './pipes/onlyDigit.pipe';\r\nimport { EspaciadoPipe } from './pipes/espaciado.pipe';\r\n\r\n// Directives\r\nimport { ValidateSpecialCharsDirective } from './Directives/ValidateSpecialChars.Directive';\r\nimport { TimeInputDirective } from './Directives/TimeInput.directive';\r\nimport { AutoSelectOptionDirective } from './Directives/AutoSelectOption.directive';\r\nimport { DateTimeFormatDirective } from './Directives/FomartDateTime.directive';\r\nimport { ReadOnlySelectorDirective } from './Directives/ReadOnlySelector.directive';\r\nimport { PhoneNumberDirective } from './Directives/PhoneNumber.directive';\r\nimport { MaxLengthDirective } from './Directives/MaxLength.directive';\r\nimport { OnlyDigitDirective } from './Directives/OnlyDigit.directive';\r\nimport { OnlyDigitBaseDirective } from './Directives/OnlyDigitBase.directive';\r\nimport { ToUpperCaseDirective } from './Directives/ToUpperCase.directive';\r\nimport { FormatNumberService } from './Services/formatNumber.Service';\r\nimport { loadMaterialIconsFont } from './Loaders/material-icons-loader';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    CustomTableComponent,\r\n    ColumnVisibilityModal2Component,\r\n    EspaciadoPipe,\r\n    OnlyDigitPipe,\r\n    BooleanToTextPipe,\r\n    StringTruncatePipe,\r\n    ImagePipe,\r\n    ToUpperCaseDirective,\r\n    OnlyDigitDirective,\r\n    OnlyDigitBaseDirective,\r\n    MaxLengthDirective,\r\n    PhoneNumberDirective,\r\n    ReadOnlySelectorDirective,\r\n    DateTimeFormatDirective,\r\n    AutoSelectOptionDirective,\r\n    TimeInputDirective,\r\n    ValidateSpecialCharsDirective\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    RouterModule,\r\n    MatDialogModule,\r\n    MatPaginatorModule,\r\n    MatTableModule,\r\n    MatButtonModule,\r\n    MatIconModule,\r\n    BsDatepickerModule.forRoot(),\r\n    MatCheckboxModule,\r\n    MatSlideToggleModule,\r\n    MatTooltipModule,\r\n    MatProgressSpinnerModule,\r\n    MatDialogModule,\r\n    MatPaginatorModule,\r\n    MatTableModule,\r\n    MatButtonModule,\r\n    BsDatepickerModule.forRoot(),\r\n    BrowserAnimationsModule    \r\n  ],\r\n  exports: [\r\n    CustomTableComponent,\r\n    ColumnVisibilityModal2Component,\r\n    MatIconModule,\r\n    FormsModule,\r\n    BrowserAnimationsModule    \r\n  ],\r\n  providers: [\r\n    ExportNotificationService,\r\n    ExportTableExcelService,\r\n    LoadingService,\r\n    DateTimeService,\r\n    FormatNumberService\r\n  ]\r\n})\r\nexport class CustomTableModule { \r\n    constructor() {\r\n        loadMaterialIconsFont(); // Se inyecta automáticamente al importar el módulo\r\n      }\r\n}\r\n","//public-api.ts\r\n\r\n// Módulo principal\r\nexport * from './lib/custom-table.module';\r\n\r\n// Componentes\r\nexport * from './lib/Components/CustomTable/custom-table.component';\r\nexport * from './lib/Components/ColumnVisibility/column-visibility-modal2.component';\r\n\r\n// Servicios\r\nexport * from './lib/Services/exportNotification.service';\r\nexport * from './lib/Services/ExportTableExcel.service';\r\nexport * from './lib/Services/loading.service';\r\nexport * from './lib/Services/DateTime.service';\r\n\r\n// Interfaces y modelos (si se necesitan externamente)\r\nexport * from './lib/Interfaces/ColumnConfig';\r\nexport * from './lib/Interfaces/TableAction';\r\nexport * from './lib/Interfaces/TableConfig';\r\nexport * from './lib/Models/ParametrosGenerales';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.DateTimeService","i2","i3","i1","i1.FormatNumberService","i1.ExportTableExcelService","i3.ConfiguracionParametros","i4.LoadingService","i5.ExportNotificationService","i7","i11","i14","i18.ToUpperCaseDirective","i19.OnlyDigitDirective","i20.OnlyDigitPipe","i21.StringTruncatePipe","i22.ImagePipe"],"mappings":"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"}