{"version":3,"file":"ngx-redi-core-RediDragDrop.mjs","sources":["../../../projects/ngx-redi-core/RediDragDrop/src/models/classes/proceso-archivo-csv.ts","../../../projects/ngx-redi-core/RediDragDrop/src/models/directives/drag-drop.directive.ts","../../../projects/ngx-redi-core/RediDragDrop/src/modules/redi-drag-drop/redi-drag-drop.component.ts","../../../projects/ngx-redi-core/RediDragDrop/src/modules/redi-drag-drop/redi-drag-drop.component.html","../../../projects/ngx-redi-core/RediDragDrop/src/modules/redi-drag-drop.module.ts","../../../projects/ngx-redi-core/RediDragDrop/ngx-redi-core-RediDragDrop.ts"],"sourcesContent":["/**\r\n * Clase para procesar archivo csv según las necesidades.\r\n * Produce datos con la estructura necesaria para el grid de datos o un arreglo de objetos.\r\n */\r\nexport class ProcesoArchivoCsv {\r\n  /**\r\n   * \r\n   * @param archivo El archivo csv a procesar\r\n   * @param datosParaDataGrid Especifica si los datos a generar son para el grid de datos\r\n   * @returns Una promesa con los datos en el formato especificado por el parámetro `datosParaGrid`\r\n   * @example\r\n   * Si la propiedad ´datosParaDataGrid = true´  devuelve ´{cols:[],rows:[]}´\r\n   * Si la propiedad ´datosParaDataGrid = false´  devuelve ´[{propiedad1:'valor',propiedad2:'valor2'}]´\r\n   */\r\n  public procesar(archivo: FileList, datosParaDataGrid: boolean) {\r\n    return new Promise((resolve, reject) => {\r\n      const reader: FileReader = new FileReader();\r\n      const item = archivo.item(0);\r\n      if (item) {\r\n        reader.readAsText(item, 'UTF-8');\r\n      }\r\n      reader.onload = () => {\r\n        const resultado = reader.result;\r\n        if ((resultado ?? '').toString().length === 0) {\r\n          reject({\r\n            mensaje: 'El archivo se encuentra vacío.'\r\n          });\r\n        }\r\n        if (!reader.result?.toString().includes('�')) {\r\n          const [informacion, columnas] = (this.generarInformacionColumnas((resultado as string), datosParaDataGrid));\r\n          if (datosParaDataGrid) {\r\n            resolve({ cols: columnas, rows: informacion });\r\n          }\r\n          else {\r\n            resolve(informacion);\r\n          }\r\n        } else {\r\n          reject({\r\n            mensaje: 'El contenido del archivo no es válido.'\r\n          });\r\n        }\r\n      };\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Método que genera la información y columnas contenidas en el archivo ´csv´ seleccionado.\r\n   * @param datos El texto contenido en el archivo ´csv´.\r\n   * @param datosParaDataGrid Especifica si los datos a generar son para el grid de datos\r\n   * @returns Retorna una lista con la información y las columnas contenidas en el archivo ´csv´.\r\n   */\r\n  private generarInformacionColumnas(datos: string, datosParaDataGrid: boolean): unknown[][] {\r\n    let informacion: unknown[] = [];\r\n    let columnas: unknown[] = [];\r\n    const lineasTextTotales = datos.split(/\\n/);\r\n\r\n    columnas = lineasTextTotales[0].toString().split(',')\r\n      .map((str: string) => { return str.replace(/ /g, '-').trim(); }).filter((stringArchivos: string) => stringArchivos.length > 0);\r\n\r\n    const datosSeparados = lineasTextTotales.filter((valor: string, indice: number) => indice > 0 && valor.length > 0)\r\n      .map((dato: string) => {\r\n        if (dato.includes('\"')) {\r\n          return this.generaColumnas(dato.trim());\r\n        }\r\n        else {\r\n          return dato.split(',');\r\n        }\r\n      });\r\n\r\n    if (datosParaDataGrid) {\r\n      columnas = columnas.map(columna => {\r\n        return { value: columna };\r\n      });\r\n      informacion = datosSeparados.map(dato => {\r\n        return dato.map(o => {\r\n          return { value: o.replace(/\\r/, '') };\r\n        });\r\n      });\r\n    } else\r\n      if (lineasTextTotales.length === 1) {\r\n        const objeto: Record<string, string> = {};\r\n        columnas.forEach(columna => objeto[`${columna}`] = '');\r\n        informacion.push(objeto);\r\n      } else {\r\n        datosSeparados.forEach(dato => {\r\n          const objeto: Record<string, string> = {};\r\n          columnas.forEach((col: unknown, i: number) => {\r\n            objeto[(col as string)] = dato[i].replace(/\\r/, '');\r\n          });\r\n          informacion.push(objeto);\r\n        });\r\n      }\r\n    return [informacion, columnas];\r\n  }\r\n\r\n  /**\r\n   * Método para separa las filar del csv en columnas.\r\n   * @param fila La cadena a separar para generar las columnas\r\n   * @returns Arreglo con las columnas\r\n   */\r\n  generaColumnas(fila: string) {\r\n    const values = [];\r\n    const separadorTemporal = 'ꜛ';\r\n    let estaEnComillas = false;\r\n    let val = '';\r\n    fila = fila.replaceAll('\"\"', separadorTemporal);\r\n    [...fila].forEach((letra: string, indice: number) => {\r\n      switch (letra) {\r\n        case ',':\r\n          if (estaEnComillas) {\r\n            val += letra;\r\n          } else {\r\n            values.push(val);\r\n            val = '';\r\n          }\r\n          break;\r\n        case '\"':\r\n          if (estaEnComillas && indice + 1 < fila.length && fila[indice + 1] === '\"') {\r\n            val += '\"';\r\n          }\r\n          else {\r\n            estaEnComillas = !estaEnComillas;\r\n          }\r\n          break;\r\n        default:\r\n          val += fila[indice];\r\n          break;\r\n      }\r\n    });\r\n    values.push(val);\r\n    return values.map(columnas => columnas.replaceAll(separadorTemporal, '\"'));\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  EventEmitter,\r\n  Output,\r\n  HostListener,\r\n  HostBinding\r\n} from '@angular/core';\r\n@Directive({\r\n    selector: '[dragDrop]',\r\n    standalone: false\r\n})\r\nexport class DragDropDirective {\r\n  readonly formato = 'dashed 2px #838383';\r\n\r\n  /**\r\n   * Evento que se emite una vez que se ha soltado el o los archivos en el componente.\r\n   */\r\n  @Output() fileDropped = new EventEmitter<FileList>();\r\n\r\n  /**\r\n   * Evento que se emite una vez que se hace click al componente.\r\n   */\r\n  @Output() clicked = new EventEmitter<void>();\r\n\r\n  /**\r\n   * Obtiene o establece el estilo del borde del componente.\r\n   */\r\n  @HostBinding('style.border')  border = this.formato;\r\n  /**\r\n   * Obtiene o establece el estilo del fondo del componente.\r\n   */\r\n  @HostBinding('style.background')  background = '';\r\n\r\n  /**\r\n   * El evento que cambia el borde y fondo del componente al arrastrar el archivo sobre el. \r\n   * @param event Evento \r\n   */\r\n  @HostListener('dragover', ['$event']) dragOver(event: DragEvent) {\r\n    this.border = 'dashed 2px #be1704';\r\n    this.background = '#be170421';\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n  }\r\n\r\n  /**\r\n   * El evento que restablece el borde y fondo del componente una vez que el archivo sale del área.\r\n   * @param event Evento\r\n   */\r\n  @HostListener('dragleave', ['$event']) public dragLeave(event: DragEvent) {\r\n    this.border = this.formato;\r\n    this.background = '';\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n  }\r\n\r\n  /**\r\n   * Evento que se ejecuta una vez que el archivo se suelta en el componente.\r\n   * @param event Evento\r\n   */\r\n  @HostListener('drop', ['$event']) public drop(event: DragEvent) {\r\n    this.border = this.formato;\r\n    this.background = '';\r\n    const files = event.dataTransfer?.files;\r\n    this.fileDropped.emit(files);\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n  }\r\n\r\n  /**\r\n   * Se emite el evento click en una vez se suelta el click (izquierdo)    \r\n   * @param $event Evento\r\n   */\r\n  @HostListener('mouseup', ['$event']) onClick(event: MouseEvent) {\r\n    if (event.button === 0) {\r\n      this.clicked.emit();\r\n    }\r\n  }\r\n}\r\n","import { SelectionModel } from '@angular/cdk/collections';\r\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\r\nimport { MatListOption, MatSelectionList } from '@angular/material/list';\r\nimport { ProcesoArchivoCsv } from '../../models/classes/proceso-archivo-csv';\r\n@Component({\n    selector: 'redi-drag-drop',\n    templateUrl: './redi-drag-drop.component.html',\n    styleUrls: ['./redi-drag-drop.component.scss'],\n    providers: [ProcesoArchivoCsv],\n    standalone: false\n})\r\nexport class RediDragDropComponent {\r\n  /**\r\n   * Obtiene o establece el titulo que se mostrara en el componente.\r\n   * @default 'Sube tu archivo'\r\n   */\r\n  @Input() titulo: string | undefined;\r\n\r\n  /**\r\n  * Obtiene o establece si el titulo se muestra.\r\n  * @default 'true'\r\n  */\r\n  @Input() muestraTitulo = true;\r\n  \r\n  /**\r\n   * Obtiene o establece las extensiones aceptadas por el componente.\r\n   * @default Acepta todas las extensiones.\r\n   * @example '.pdf,xls,.zip'\r\n   */\r\n  @Input() extensionesAceptadas: string | undefined;\r\n\r\n  /**\r\n   * Obtiene o establece el tamaño máximo (MB) permitido para cada archivo que se puede cargar en el componente.\r\n   * @default Acepta cualquier tamaño si no es especificado.\r\n   */\r\n  @Input() tamanoMaximoArchivo: number | undefined;\r\n\r\n  /**\r\n   * Obtiene o establece si los datos procesados en la carga de un archivo `csv` son para el grid.\r\n   * @default true \r\n   */\r\n  @Input() datosParaDataGrid = true;\r\n\r\n  /**\r\n   * Obtiene o establece el mensaje de error.\r\n   */\r\n  protected mensajeError: string | undefined;\r\n\r\n  /**\r\n   * Obtiene o establece el input para la carga de los archivos.\r\n   */\r\n  @ViewChild('inputArchivo') inputArchivo: ElementRef | undefined;\r\n\r\n  /**\r\n  * Obtiene o establece la lista de los archivos cargados en el front.\r\n  */\r\n  @ViewChild('listArchivos') listArchivos: MatSelectionList | undefined;\r\n\r\n\r\n  /** \r\n   * Obtiene o establece el archivo cargado.\r\n   */\r\n  protected archivo: FileList | undefined | null;\r\n  /**\r\n   * Verifica si existe archivo cargado en el componente.\r\n   */\r\n  protected get existeArchivo() {\r\n    if (this.archivo) {\r\n      return this.archivo.length > 0;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Obtiene una lista con los archivos cargados.\r\n   */\r\n  public get archivos() {\r\n    if (this.archivo) {\r\n      return this.generarListaNombreArchivos(this.archivo);\r\n    } else {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Obtiene el nombre del primer archivo de la lista.\r\n   */\r\n  protected get nombreArchivo() { return this.archivo?.item(0)?.name; }\r\n\r\n  /**\r\n   * Obtiene o establece si la carga de archivos es múltiple.\r\n   */\r\n  private multiple = false;\r\n\r\n  /**\r\n   * Establece si la carga de archivos es múltiple.\r\n   */\r\n  @Input() set archivosMultiples(value: boolean) {\r\n    if (this.procesoCsv) {\r\n      this.multiple = false;\r\n    } else {\r\n      this.multiple = value;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Obtiene si la carga de los archivos es múltiple.\r\n   */\r\n  get archivosMultiples() { return this.multiple; }\r\n\r\n  /**\r\n   * Obtiene o establece si la selección de archivos,se realizará desde distintos directorios.\r\n   */\r\n  private seleccionDiferida = false;\r\n\r\n  /**\r\n   * Establece si la selección de archivos se realizará desde distintos directorios.\r\n   */\r\n  @Input() set cargaDiferida(value: boolean) {\r\n    this.multiple = true;\r\n    this.seleccionDiferida = value;\r\n  }\r\n  /**\r\n   * Obtiene si la selección de archivos se realizará desde distintos directorios.\r\n   */\r\n  get cargaDiferida() { return this.seleccionDiferida; }\r\n\r\n  /**\r\n   * Obtiene o establece aquellos archivos que ya se encuentran cargados en el componente.\r\n   */\r\n  protected repetidos: (string | undefined)[] = [];\r\n\r\n  /**\r\n   * Obtiene o establece que se realizará un proceso de lectura al archivo csv cargado en el componente.\r\n   */\r\n  private procesoCsv = false;\r\n  /**\r\n   * Especifica que el archivo a cargar en el componente es un `csv`. Y establece en `true` la propiedad `procesoCsv`.\r\n   */\r\n  @Input() set procesarCsvTabla(value: boolean) {\r\n    this.procesoCsv = value;\r\n    if (value) {\r\n      this.archivosMultiples = false;\r\n      this.extensionesAceptadas = '.csv';\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Evento que se emite una vez que el archivo `csv` es procesado.\r\n   * @example\r\n   * Si la propiedad ´datosParaDataGrid = true´  devuelve ´{cols:[],rows:[]}´\r\n   * Si la propiedad ´datosParaDataGrid = false´  devuelve ´[{propiedad1:'valor',propiedad2:'valor2'}]´\r\n   * \r\n   */\r\n  @Output() csvDatosProcesados = new EventEmitter<unknown>();\r\n\r\n  /**\r\n   * Obtiene o establece si existe un error.\r\n   */\r\n  protected error = false;\r\n\r\n  @Output() cambioArchivo = new EventEmitter<FileList | null>();\r\n\r\n  constructor(private readonly procesoArchivoCsv: ProcesoArchivoCsv) {\r\n  }\r\n\r\n  /**\r\n   * Método que establece el proceso a realizar con el o los archivos seleccionados.\r\n   * @param fileList Los archivos seleccionados\r\n   */\r\n  establecerProceso(fileList: FileList) {\r\n    if (this.cargaDiferida) {\r\n      this.procesarArchivosPorSeparado(fileList);\r\n    }\r\n    else {\r\n      this.procesarArchivo(fileList);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Método encargado para el proceso de archivo individual.\r\n   * @param archivo El archivo csv seleccionado.\r\n   */\r\n  protected async procesarArchivo(archivo: FileList) {\r\n    if (!this.validoTamanioArchivos(archivo)) {\r\n      return;\r\n    }\r\n    this.archivo = (archivo.length === 0) ? null : archivo;\r\n    if (this.manejoErrorExtensionesValidas(this.archivos.map(stringArchivos => stringArchivos?.split(/[.]/).pop() ?? ''))) {\r\n      if (this.procesoCsv) {\r\n        await this.procesoArchivoCsv.procesar(archivo, this.datosParaDataGrid)\r\n          .then(datos => {\r\n            this.csvDatosProcesados.emit(datos);\r\n          }).catch((error) => {\r\n            this.estableceMensajeError(error.mensaje);\r\n            this.archivo = null;\r\n            this.csvDatosProcesados.emit(null);\r\n          });\r\n\r\n      } else {\r\n        this.cambioArchivo.emit(this.archivo);\r\n      }\r\n    }\r\n  }\r\n  /**\r\n   * Método encargado para el proceso de múltiples archivos.\r\n   * @param archivo Los archivos seleccionados.\r\n   * @returns Void\r\n   */\r\n  protected procesarArchivosPorSeparado(archivo: FileList): void {\r\n    this.repetidos = [];\r\n    if (!this.validoTamanioArchivos(archivo)) {\r\n      return;\r\n    }\r\n    const archivosNuevos = this.generarListaNombreArchivos(archivo);\r\n    if (this.manejoErrorExtensionesValidas(archivosNuevos.map(stringArchivos => stringArchivos?.split(/[.]/).pop() ?? ''))) {\r\n      if (this.archivo) {\r\n        this.cargarArchivos(archivo, archivosNuevos);\r\n      }\r\n      else {\r\n        this.archivo = archivo;\r\n        (this.inputArchivo?.nativeElement || {}).files = this.archivo;\r\n        this.cambioArchivo.emit(this.archivo);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Método que carga los archivos nuevos a la lista de archivos seleccionados anteriormente.\r\n   * @param archivo Los archivos seleccionados \r\n   * @param archivosNuevos Arreglo con la lista de los archivos seleccionados.\r\n   */\r\n  private cargarArchivos(archivo: FileList, archivosNuevos: string[]): void {\r\n    const dataTransfer = new DataTransfer();\r\n    const repetidos = this.generarListaNombreArchivos(this.archivo ?? new FileList()).map(nombreArchivo => {\r\n      return archivosNuevos.find(elm => elm === nombreArchivo);\r\n    }).filter(o => !!o);\r\n\r\n    if (repetidos.length === 0) {\r\n      for (let index = 0; index < (this.archivo ?? new FileList()).length; index++) {\r\n        dataTransfer.items.add((this.archivo ?? new FileList())[index]);\r\n      }\r\n\r\n      for (let index = 0; index < archivo.length; index++) {\r\n        dataTransfer.items.add(archivo[index]);\r\n      }\r\n\r\n      this.archivo = dataTransfer.files;\r\n      (this.inputArchivo?.nativeElement || {}).files = this.archivo;\r\n      this.cambioArchivo.emit(this.archivo);\r\n    } else {\r\n      this.repetidos.push(...repetidos);\r\n      (this.inputArchivo?.nativeElement || {}).files = this.archivo;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Método que elimina los archivos seleccionados de lista.\r\n   * @param selectionModel La lista de opciones seleccionadas\r\n   */\r\n  eliminarArchivo(selectionModel: SelectionModel<MatListOption>): void {\r\n    const dataTransfer = new DataTransfer();\r\n    const archivosCargados = (this.archivo as FileList);\r\n    const archivosToEliminar: string[] = selectionModel.selected.map<string>((matListOption: MatListOption) => matListOption.value.toString());\r\n\r\n    for (let index = 0; index < archivosCargados.length; index++) {\r\n      if (!archivosToEliminar.some(stringArchivos => stringArchivos === archivosCargados.item(index)?.name)) {\r\n        dataTransfer.items.add(archivosCargados[index]);\r\n      }\r\n    }\r\n    if (dataTransfer.files.length > 0) {\r\n      this.archivo = dataTransfer.files;\r\n      (this.inputArchivo?.nativeElement || {}).files = dataTransfer.files;\r\n      this.cambioArchivo.emit(this.archivo);\r\n    } else {\r\n      this.eliminarTodosArchivos();\r\n    }\r\n  }\r\n\r\n  eliminarTodosArchivos() {\r\n    this.archivo = null;\r\n    (this.inputArchivo?.nativeElement || {}).files = null;\r\n    (this.inputArchivo?.nativeElement || {}).value = '';\r\n\r\n    this.cambioArchivo.emit(this.archivo);\r\n  }\r\n\r\n  /**\r\n   * Método que genera y retorna un arreglo con los nombres de los archivos cargados.\r\n   * @param fileList Objeto que contiene los archivos seleccionados\r\n   * @returns Retorna arreglo de cadenas.\r\n   * `['archivo.pdf','archivo2.avi']`\r\n   */\r\n  private generarListaNombreArchivos(fileList: FileList) {\r\n    const archivos = [];\r\n    for (let index = 0; index < fileList.length; index++) {\r\n      archivos.push(fileList.item(index)?.name ?? '');\r\n    }\r\n    return archivos.sort();\r\n  }\r\n\r\n  /**\r\n   * Método que genera y retorna un arreglo numérico con los tamaños de cada uno de los archivos seleccionados.\r\n   * @param fileList Objeto que contiene los archivos seleccionados\r\n   * @returns Retorna arreglo numérico con el tamaño de cada archivo en bytes.\r\n   * `[124661,123132]`\r\n   */\r\n  private generarListaTamanioArchivos(fileList: FileList): number[] {\r\n    const archivos: number[] = [];\r\n    for (let index = 0; index < fileList.length; index++) {\r\n      archivos.push(fileList.item(index)?.size ?? 0);\r\n    }\r\n    return archivos;\r\n  }\r\n\r\n  /**\r\n   * Método que verifica si las extensiones son válidas.\r\n   * @param extensionesArchivosSeleccionados Arreglo con las extensiones de cada uno de los archivos seleccionados.\r\n   * @returns Boolean\r\n   */\r\n  private manejoErrorExtensionesValidas(extensionesArchivosSeleccionados: string[]) {\r\n    if (this.extensionesAceptadas) {\r\n      return this.verificaExtensiones(extensionesArchivosSeleccionados);\r\n    } else {\r\n      if (!this.cargaDiferida) {\r\n        (this.inputArchivo?.nativeElement || {}).files = this.archivo;\r\n      }\r\n      return true;\r\n    }\r\n  }\r\n  /**\r\n   * Método que verifica si las extensiones de los archivos seleccionados son válidas, y asigna los archivos\r\n   *  a la propiedad `inputArchivo` en caso de que sean válidos.\r\n   * @param extensionesArchivosSeleccionados Arreglo con las extensiones de cada uno de los archivos seleccionados.\r\n   * @returns Boolean\r\n   */\r\n  private verificaExtensiones(extensionesArchivosSeleccionados: string[]): boolean {\r\n    const extensiones = this.extensionesAceptadas?.split(/,/).map(extension => extension.replace(/./, ''));\r\n    if (!this.extensionesValidas(extensiones ?? [], extensionesArchivosSeleccionados)) {\r\n      this.estableceMensajeError(\r\n        this.archivosMultiples ? 'Existe archivo no válido en su selección. Intente nuevamente.' : 'El archivo no es válido'\r\n      );\r\n      if (!this.cargaDiferida) {\r\n        (this.inputArchivo?.nativeElement || {}).files = null;\r\n        this.archivo = null;\r\n      }\r\n      return false;\r\n    } else {\r\n      if (!this.cargaDiferida) {\r\n        (this.inputArchivo?.nativeElement || {}).files = this.archivo;\r\n      }\r\n      return true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Método para establecer el mensaje de error en el componente, el mensaje dura 3 segundos después de eso desaparece.\r\n   * @param mensaje El mensaje  de error a mostrar en el componente\r\n   */\r\n  private estableceMensajeError(mensaje: string) {\r\n    const tiempo = 3000;\r\n    this.mensajeError = mensaje;\r\n    this.error = true;\r\n    setTimeout(() => {\r\n      this.error = false;\r\n    }, tiempo);\r\n  }\r\n\r\n  /**\r\n   * Método que valida si las extensiones de los archivos son válidos con respectos a los especificados en la propiedad `extensionesAceptadas`.\r\n   * @param extensiones Arreglo que contiene las extensiones aceptadas por el componente.\r\n   * @param extensionesArchivosSeleccionados Arreglo que contiene la extensiones de los archivos seleccionados.\r\n   * @returns Boolean\r\n   */\r\n  private extensionesValidas(extensiones: string[], extensionesArchivosSeleccionados: string[]) {\r\n    return extensionesArchivosSeleccionados.every(valor => extensiones.includes(valor));\r\n  }\r\n\r\n  /**\r\n   * Método para validar que el tamaño de los archivos seleccionados sea menor o igual al especificado en la propiedad `tamanoMaximoArchivo`. Si este no es especificado\r\n   * se permite cualquier tamaño de archivo.\r\n   * @param archivo El o los archivos seleccionados.\r\n   * @returns Boolean\r\n   */\r\n  private validoTamanioArchivos(archivo: FileList) {\r\n    if (this.tamanoMaximoArchivo) {\r\n      if (this.tamanoMaximoArchivo <= 0) {\r\n        return false;\r\n      }\r\n      const no = 1024;\r\n      const size = this.tamanoMaximoArchivo * no * no;\r\n      if (this.generarListaTamanioArchivos(archivo).some(tamanoAarchivo => tamanoAarchivo > size)) {\r\n        this.estableceMensajeError(`El tamaño máximo por archivo es de: ${this.tamanoMaximoArchivo} MB`);\r\n        (this.inputArchivo?.nativeElement || {}).files = this.existeArchivo ? this.archivo : null;\r\n        return false;\r\n      }\r\n      else {\r\n        return true;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n}\r\n","<p *ngIf=\"muestraTitulo\" class=\"titulo\">{{titulo? titulo : 'Sube tu archivo'}}</p>\r\n<div class=\"contenedor\" matRipple dragDrop (clicked)=\"inputArchivo.click()\" tabindex=\"0\"\r\n    (fileDropped)=\"establecerProceso($event)\">\r\n    <div class=\"contenedor-input\">\r\n        <label for=\"file\"> File</label>\r\n        <input id=\"file\" name=\"file\" type=\"file\" #inputArchivo hidden\r\n            (change)=\"establecerProceso($any($event).target.files)\" [multiple]=\"archivosMultiples\"\r\n            [accept]=\"extensionesAceptadas\">\r\n    </div>\r\n    <div *ngIf=\"!existeArchivo\">\r\n        <div class=\"imagen\"></div>\r\n        <p class=\"dragdrop\"> DRAG & DROP </p>\r\n        <p> Arrastre y suelte aquí ó click para buscar </p>\r\n    </div>\r\n    <div *ngIf=\"existeArchivo && !archivosMultiples\">\r\n        <div class=\"imagen archivo\"></div>\r\n        <p>{{nombreArchivo}}</p>\r\n    </div>\r\n    <div *ngIf=\"existeArchivo && archivosMultiples\">\r\n        <div class=\"imagen archivo-lista\"></div>\r\n    </div>\r\n</div>\r\n<div class=\"error\" *ngIf=\"error\">\r\n    <p>{{mensajeError}}</p>\r\n</div>\r\n<div class=\"error\" *ngIf=\"repetidos.length > 0\">\r\n    <p> Los siguientes archivos ya se encuentran cargados: </p>\r\n    <ul class=\"repetidos\">\r\n        <li *ngFor=\"let r of repetidos\">{{r}}</li>\r\n    </ul>\r\n    <button class=\"cerrar\" (click)=\"repetidos=[]\"> X </button>\r\n</div>\r\n\r\n<div *ngIf=\"existeArchivo && archivosMultiples\" class=\"contenedor-lista\">\r\n    <p class=\"titulo-lista\"> Archivos selecionados {{archivos.length}}</p>\r\n    <div class=\"lista-archivos\">\r\n        <mat-selection-list dense #listArchivos color=\"primary\">\r\n            <mat-list-option *ngFor=\"let elm of archivos;index as i\" [value]=\"elm\">\r\n                <div matListItemTitle>{{elm}}</div>\r\n            </mat-list-option>\r\n        </mat-selection-list>\r\n    </div>\r\n    <div class=\"botones\">\r\n        <button mat-button color=\"primary\" [disabled]=\"listArchivos.selectedOptions.selected.length === 0\"\r\n            (click)=\"eliminarArchivo(listArchivos.selectedOptions)\">\r\n            Eliminar archivos seleccionados ({{listArchivos.selectedOptions.selected.length}})\r\n        </button>\r\n        <button mat-button color=\"warn\" [disabled]=\"archivos.length === 0\" (click)=\"eliminarTodosArchivos()\">\r\n            Eliminar archivos\r\n        </button>\r\n    </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RediDragDropComponent } from './redi-drag-drop/redi-drag-drop.component';\r\n\r\n\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatRippleModule } from '@angular/material/core';\r\nimport { DragDropDirective } from '../models/directives/drag-drop.directive';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    RediDragDropComponent,\r\n    DragDropDirective\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    MatListModule, MatButtonModule, MatIconModule, MatRippleModule\r\n  ],\r\n  exports: [\r\n    RediDragDropComponent\r\n  ]\r\n})\r\nexport class RediDragDropModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ProcesoArchivoCsv","i6.DragDropDirective"],"mappings":"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"}