{"version":3,"file":"kif-lib-upload-files.mjs","sources":["../../../projects/kif-lib/upload-files/components/upload-files-file/upload-files-file.component.ts","../../../projects/kif-lib/upload-files/components/upload-files-file/upload-files-file.component.html","../../../projects/kif-lib/upload-files/upload-files.component.ts","../../../projects/kif-lib/upload-files/upload-files.component.html","../../../projects/kif-lib/upload-files/upload-files.module.ts","../../../projects/kif-lib/upload-files/public-api.ts","../../../projects/kif-lib/upload-files/kif-lib-upload-files.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FileUpload } from '../../interface/file-upload.interface';\nimport { CircleCheckBig, Download, X } from 'lucide-angular';\n\n@Component({\n    selector: 'kit-upload-files-file',\n    templateUrl: './upload-files-file.component.html',    \n    styleUrls: ['./upload-files-file.scss']\n})\nexport class UploadFilesFileComponent{\n    iconCircle = CircleCheckBig; \n    iconX = X; \n    iconDownload = Download;\n    @Output() public removeFile: EventEmitter<void> = new EventEmitter();\n    @Output() public validFile: EventEmitter<void> = new EventEmitter();\n\n    public progressBar:number = 0;\n    private _fileUpload!: FileUpload;\n\n    constructor(){}\n\n    @Input() public set fileUpload(file: FileUpload){\n        this._fileUpload = file;\n        this.uploadFile()\n    }\n\n    public get fileUpload(){\n        return this._fileUpload\n    }\n\n    public onRemoveFile(){\n        this.removeFile.emit()\n    }\n\n    public getFileSize(size:number){\n        return `${(size / 1024).toFixed(2)} KB`;\n    }\n\n    public uploadFile(): void {\n        const reader = new FileReader();\n\n        reader.onloadstart = () => {\n            this.progressBar = 0;\n        };\n\n        reader.onprogress = (event) => {\n            if (event.lengthComputable) {\n                this.progressBar = Math.round((event.loaded / event.total) * 100);\n            }\n        };\n\n        reader.onload = () => {\n            this.validFile.emit();\n            this.progressBar = 100;\n        };\n\n        reader.onerror = () => {\n            console.error('File upload failed');\n        };\n\n        reader.readAsArrayBuffer(this.fileUpload.file);\n    }\n\n    public downloadFile(): void {\n        const file = this.fileUpload.file;\n        \n        // Verificamos que el archivo existe\n        if (!file) {\n            console.error('No hay un archivo disponible para descargar');\n            return;\n        }\n        \n \n        const fileURL = URL.createObjectURL(file);\n\n        const downloadLink = document.createElement('a');\n        downloadLink.href = fileURL;\n  \n        downloadLink.download = file.name;\n        \n \n        document.body.appendChild(downloadLink);\n\n        downloadLink.click();\n        \n\n        document.body.removeChild(downloadLink);\n        \n\n        setTimeout(() => {\n            URL.revokeObjectURL(fileURL);\n        }, 100);\n    }\n\n\n}","\n<div class=\"p-2 mb-4 border-dashed rounded d-flex flex-column gap-2\">\n\n    <div class=\"d-flex justify-content-end w-100\">\n\n            <lucide-angular [size]=\"20\" [color]=\"'#343F4B'\" [img]=\"iconX\" (click)=\"onRemoveFile()\"></lucide-angular>\n\n    </div>\n\n    <div class=\"d-flex flex-column align-items-center text-center gap-2\">\n\n        <div class=\"mb-0\">\n        @if (progressBar === 100) {\n            <lucide-angular [size]=\"32\" [color]=\"'#2DC579'\" [img]=\"iconCircle\"></lucide-angular>\n        } @else {\n            <span class=\"loader-dots\">\n            <div class=\"dot\"></div>\n            <div class=\"dot\"></div>\n            <div class=\"dot\"></div>\n            </span>\n        }\n        </div>\n        \n\n        <p class=\"mb-0 title-dowloand\">{{fileUpload.file.name}}</p>\n        \n\n        <div class=\"progress-container d-flex align-items-center mb-0\">\n        <div class=\"flex-grow-1 me-2\">\n            <mat-progress-bar\n            [ngClass]=\"{'completed-progress': progressBar === 100}\"\n            color=\"primary\"\n            mode=\"determinate\"\n            [value]=\"progressBar\">\n            </mat-progress-bar>\n        </div>\n        <span class=\"progress-text\">{{progressBar}}%</span>\n        </div>\n        \n\n        <div class=\"file-size\">{{getFileSize(fileUpload.file.size)}}</div>\n        <button \n        class=\"d-flex align-items-center download-link border-0 bg-transparent p-0\"\n        style=\"cursor: pointer;\"\n        (click)=\"downloadFile()\"\n        aria-label=\"Descargar documento\">\n        <lucide-angular [size]=\"16\" [color]=\"'#5B62DA'\" [img]=\"iconDownload\"></lucide-angular>\n        <span class=\"ms-2\" style=\"color: #5B62DA; font-size: 14px;\">Descargar documento</span>\n    </button>\n    </div>\n</div>","import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { FileUpload } from './interface/file-upload.interface';\nimport { OctagonAlert, Upload, X } from 'lucide-angular';\n\n@Component({\n    selector: 'kit-upload-files',\n    templateUrl: './upload-files.component.html',    \n\n})\nexport class UploadFilesComponent {\n    iconUpload = Upload;\n    iconOctagon = OctagonAlert;\n    iconX =  X;\n    public message: string = 'El archivo no pudo ser cargado'\n    @ViewChild('inputFile') public inputFile!: ElementRef;\n    @Input() public filesSelected!: File[];\n    @Input() public allowedFormats: string[] = [];\n    @Input() public multipleFiles: boolean = false;\n    @Input() public description:string = 'Haz click para cargar documento';\n    @Input() public files:FileUpload[]=[];\n    @Input() sizeFile!: string;\n    @Input() invalidFileView: boolean = false;\n    // OUTPUT TO NOTIFY CHANGES\n    \n    @Output() public filesUpload: EventEmitter<FileUpload[]> = new EventEmitter();\n    @Output() public invalidFile: EventEmitter<void> = new EventEmitter();\n    @Output() public fileRemoved: EventEmitter<void> = new EventEmitter();\n    public fileNameInvalid: string = ''\n    public DIALOG_TITLE:string = ''\n    public DIALOG_INFO!:string;\n    // public files:FileUpload[]=[]\n    public dragOverActive: boolean = false;\n    constructor(){}\n\n    public get disableAddFile(){\n        return !this.multipleFiles && this.files.length === 1\n    }\n\n    public getAllowedFormats():string {\n        return this.allowedFormats.map(e =>`.${e}`).join(', ');\n    }\n\n    public handleUploadFile(event: any): void {\n        const file: File = event.target['files'][0];\n\n        event.target['value'] = '';\n        \n        this.processFile(file);\n    } \n      \n\n    public handleDrop(event: DragEvent): void {\n        event.preventDefault();\n        event.stopPropagation();\n        this.dragOverActive = false;\n        \n        if (event.dataTransfer && event.dataTransfer.files.length > 0) {\n            const files = event.dataTransfer.files;\n            \n            if (this.multipleFiles) {\n                let hasInvalidFiles = false;\n                \n                // Procesar todos los archivos\n                for (let i = 0; i < files.length; i++) {\n                    const result = this.processMultipleFiles(files[i]);\n                    if (!result) {\n                        hasInvalidFiles = true;\n                    }\n                }\n                \n                // Emitir solo una vez al final\n                this.emitFilesUpload();\n                \n                // Emitir invalidFile solo si hay archivos inválidos\n                if (hasInvalidFiles) {\n                    this.invalidFile.emit();\n                }\n            } else {\n                this.processFile(files[0]);\n            }\n        }\n    }\n\n\n    private processMultipleFiles(file: File): boolean {\n        const fileName = file.name;\n        const fileExtension = file.name.split('.').pop()?.toLowerCase();\n        \n        if (!this.files) {\n            this.files = [];\n        }\n\n        if (fileExtension && this.allowedFormats.includes(fileExtension)) {\n            if (file.size <= 10 * 1024 * 1024) {\n                this.files.push({ file, valid: true });\n                return true; // Archivo válido\n            } else {\n                this.message = 'El archivo no pudo ser cargado';\n                this.fileNameInvalid = fileName;\n                this.files.push({ file, valid: false });\n                return false; // Archivo inválido\n            }\n        } else {\n            this.message = 'El formato del archivo no es el correcto';\n            this.fileNameInvalid = fileName ? fileName : '';\n            this.files.push({ file, valid: false });\n            return false; // Archivo inválido\n        }\n    }\n        \n\n    private processFile(file: File): void {\n        const fileName = file.name;\n        const fileExtension = file.name.split('.').pop()?.toLowerCase();\n        \n        if (!this.files) {\n            this.files = [];\n        }\n        if (fileExtension && this.allowedFormats.includes(fileExtension)) {\n\n            if (file.size <= 10 * 1024 * 1024) {\n                this.files.push({ file, valid: true });\n                this.emitFilesUpload();\n            } else {\n                this.message = 'El archivo no pudo ser cargado';\n                this.invalidFile.emit();\n                if (this.multipleFiles) {\n                    this.files.push({ file, valid: false })\n                    this.emitFilesUpload(); \n                }\n            }\n        } else {\n\n            this.message = 'El formato del archivo no es el correcto'\n            this.fileNameInvalid = fileName ? fileName : '';\n            this.invalidFile.emit();\n            if (this.multipleFiles) {\n                this.files.push({ file, valid: false })\n                this.emitFilesUpload(); \n            }\n        }\n    }\n      \n    public handleValidFile(index: number) {\n        this.files[index].valid = true;\n        this.emitFilesUpload();\n    }\n    \n    public onRemoveFile(index: number) {\n        this.files.splice(index, 1);\n        this.emitFilesUpload();\n    }\n    public onRemoveInvalidFile(){\n        if (this.invalidFileView) {\n            this.fileRemoved.emit();\n        }\n    }\n    private emitFilesUpload() {\n        this.filesUpload.emit(this.files);\n    }\n\n}","@if(files && files.length > 0 && !multipleFiles){\n    @for (file of files; track file; let idx = $index) {\n        <kit-upload-files-file class=\"\" [fileUpload]=\"file\" (validFile)=\"handleValidFile(idx)\" (removeFile)=\"onRemoveFile(idx)\"></kit-upload-files-file>                                \n    }  \n} @else {\n    @if (!invalidFileView || multipleFiles) {\n        <div \n            class=\"p-2 mb-4 border-dashed rounded d-flex flex-column justify-content-center align-items-center gap-2\"\n            (click)=\"inputFile.click()\"\n            (keydown.enter)=\"inputFile.click()\"\n            (keydown.space)=\"$event.preventDefault(); inputFile.click()\"\n            (dragover)=\"$event.preventDefault(); $event.stopPropagation(); dragOverActive=true\"\n            (dragleave)=\"$event.preventDefault(); $event.stopPropagation(); dragOverActive=false\"\n            (drop)=\"handleDrop($event)\"\n            [ngClass]=\"{'bg-light-hover': dragOverActive}\"\n            tabindex=\"0\"\n            role=\"button\"\n            aria-label=\"Subir archivo\"\n            style=\"cursor: pointer; transition: all 0.3s ease;\">\n            <lucide-angular [size]=\"24\" [color]=\"dragOverActive ? '#3048DA' : '#5B62DA'\" [img]=\"iconUpload\"></lucide-angular>\n            <div [innerHTML]=\"description\"></div>\n            <p class=\"subtitle-download mb-0\">{{sizeFile?sizeFile:'10 MB'}} tamaño máximo del archivo Soporta archivos tipo: {{getAllowedFormats()}}</p>\n            <!-- Input file con atributo multiple explícito -->\n            <input \n                (change)=\"handleUploadFile($event)\"\n                type=\"file\"\n                hidden\n                #inputFile\n                [accept]=\"getAllowedFormats()\"\n                [multiple]=\"multipleFiles\" />\n        </div>\n    } @else {\n        <div \n            class=\"p-2 mb-4 border-dashed rounded d-flex flex-column align-items-center gap-2\" \n            [class.error]=\"invalidFileView\">\n            <div class=\"d-flex justify-content-end w-100\">\n                <lucide-angular \n                    [size]=\"20\" \n                    [color]=\"'#2A323C'\" \n                    [img]=\"iconX\" \n                    (click)=\"onRemoveInvalidFile()\">\n                </lucide-angular>\n            </div>\n            <lucide-angular [size]=\"32\" [color]=\"'#B4271F'\" [img]=\"iconOctagon\"></lucide-angular>\n            <div>{{fileNameInvalid}}</div>\n            <p class=\"mb-0 subtitle-download--error\" >{{message}}</p>\n            <p class=\"subtitle-download--error mb-0 fw-bold\">Reintente nuevamente</p>\n        </div>\n    }\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UploadFilesComponent } from './upload-files.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatCardModule } from '@angular/material/card';\nimport { UploadFilesFileComponent } from './components/upload-files-file/upload-files-file.component';\nimport { LucideAngularModule } from 'lucide-angular';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        MatDialogModule,\n        MatIconModule,\n        MatCardModule,\n        LucideAngularModule,\n        MatProgressBarModule\n    ],\n    declarations: [\n        UploadFilesComponent,\n        UploadFilesFileComponent\n    ],\n    exports:[\n        UploadFilesComponent\n    ],\n    providers: []\n})\nexport class KifUploadFilesModule { }\n","/*\n * Public API Surface of kif-lib-file\n */\n\nexport * from './upload-files.component';\nexport * from './upload-files.module';\nexport * from './interface';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.UploadFilesFileComponent"],"mappings":"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"}