ngx-sumax-erp-components 1.11.0 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,7 +2,11 @@ import { Component, inject } from "@angular/core";
|
|
|
2
2
|
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from "@angular/material/dialog";
|
|
3
3
|
import { MessageUtilService } from "../../utils/message-util.service";
|
|
4
4
|
import { SMX_PROFILE_EXCEL } from "../profiles/smx-excel.profile";
|
|
5
|
+
import { FormsModule } from "@angular/forms";
|
|
6
|
+
import { NgSelectModule } from "@ng-select/ng-select";
|
|
7
|
+
import { CommonModule } from "@angular/common";
|
|
5
8
|
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/common";
|
|
6
10
|
/**
|
|
7
11
|
* Componente de diálogo para cargar archivos.
|
|
8
12
|
* Utilizar {@link SmxUploadFileData} como interfaz para Data.
|
|
@@ -88,10 +92,10 @@ export class SmxUploadFileComponent {
|
|
|
88
92
|
this.dialogRef.close(null);
|
|
89
93
|
}
|
|
90
94
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmxUploadFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
91
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmxUploadFileComponent, isStandalone: true, selector: "smx-upload-file", ngImport: i0, template: "<div class=\"modal-custom-container p-4\" [style.--smx-accent]=\"profile.accentColor\">\n <!-- Cabecera -->\n <div class=\"d-flex justify-content-between align-items-center pb-3 mb-3 border-bottom\">\n <div class=\"d-flex align-items-center\">\n <div class=\"icon-header me-3\">\n <i class=\"{{ profile.headerIcon }} fs-4\"></i>\n </div>\n <div>\n <h4 class=\"fw-bold text-dark mb-0\">{{ title }}</h4>\n <span class=\"text-muted small\">{{ subtitle }}</span>\n </div>\n </div>\n <div class=\"d-flex align-items-center\">\n @if (badgeText) {\n <span class=\"badge bg-light text-primary border px-3 py-2 fs-7 fw-bold shadow-sm me-3\">\n @if (badgeIcon) {\n <i class=\"{{ badgeIcon }} me-1\"></i>\n }\n {{ badgeText }}\n </span>\n }\n </div>\n </div>\n\n <!-- Zona drag & drop -->\n <div\n class=\"upload-dropzone mb-4\"\n role=\"button\"\n [class.has-file]=\"selectedFile\"\n [class.drag-over]=\"isDragging\"\n tabindex=\"0\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"fileInput.click()\"\n (keydown.enter)=\"fileInput.click()\">\n <!-- Estado 1: sin archivo -->\n @if (!selectedFile) {\n <div>\n <div class=\"upload-icon-wrapper shadow-sm\">\n <i class=\"fa-solid fa-cloud-arrow-up fs-2\"></i>\n </div>\n <h6 class=\"fw-bold text-dark mb-1\">{{ profile.dropzoneLabel }}</h6>\n <p class=\"text-muted small mb-3\">{{ profile.formatLabel }}</p>\n <button\n type=\"button\"\n class=\"btn btn-primary px-4 py-2 fw-bold shadow-sm rounded-pill\"\n (click)=\"$event.stopPropagation(); fileInput.click()\">\n <i class=\"fa-solid fa-folder-open me-2\"></i>Explorar archivo\n </button>\n </div>\n }\n\n <!-- Estado 2: archivo seleccionado -->\n @if (selectedFile) {\n <div class=\"selected-file-card\">\n <div class=\"file-icon shadow-sm\">\n <i class=\"{{ profile.fileIcon }} fs-3\"></i>\n </div>\n <div class=\"file-details\">\n <div class=\"file-name\" [title]=\"selectedFile.name\">{{ selectedFile.name }}</div>\n <div class=\"file-size\"><i class=\"fa-solid fa-hard-drive me-1\"></i>{{ getFileSize(selectedFile.size) }}</div>\n </div>\n </div>\n }\n\n <input #fileInput type=\"file\" style=\"display: none\" [attr.accept]=\"profile.acceptAttr\" (change)=\"onFileSelected($event)\" />\n </div>\n\n <!-- Botones -->\n <div class=\"d-flex justify-content-end pt-3 border-top\">\n <button type=\"button\" class=\"btn btn-success px-5\" (click)=\"onConfirm()\"
|
|
95
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmxUploadFileComponent, isStandalone: true, selector: "smx-upload-file", ngImport: i0, template: "<div class=\"modal-custom-container p-4\" [style.--smx-accent]=\"profile.accentColor\">\n <!-- Cabecera -->\n <div class=\"d-flex justify-content-between align-items-center pb-3 mb-3 border-bottom\">\n <div class=\"d-flex align-items-center\">\n <div class=\"icon-header me-3\">\n <i class=\"{{ profile.headerIcon }} fs-4\"></i>\n </div>\n <div>\n <h4 class=\"fw-bold text-dark mb-0\">{{ title }}</h4>\n <span class=\"text-muted small\">{{ subtitle }}</span>\n </div>\n </div>\n <div class=\"d-flex align-items-center\">\n @if (badgeText) {\n <span class=\"badge bg-light text-primary border px-3 py-2 fs-7 fw-bold shadow-sm me-3\">\n @if (badgeIcon) {\n <i class=\"{{ badgeIcon }} me-1\"></i>\n }\n {{ badgeText }}\n </span>\n }\n </div>\n </div>\n\n <!-- Zona drag & drop -->\n <div\n class=\"upload-dropzone mb-4\"\n role=\"button\"\n [class.has-file]=\"selectedFile\"\n [class.drag-over]=\"isDragging\"\n tabindex=\"0\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"fileInput.click()\"\n (keydown.enter)=\"fileInput.click()\">\n <!-- Estado 1: sin archivo -->\n @if (!selectedFile) {\n <div>\n <div class=\"upload-icon-wrapper shadow-sm\">\n <i class=\"fa-solid fa-cloud-arrow-up fs-2\"></i>\n </div>\n <h6 class=\"fw-bold text-dark mb-1\">{{ profile.dropzoneLabel }}</h6>\n <p class=\"text-muted small mb-3\">{{ profile.formatLabel }}</p>\n <button\n type=\"button\"\n class=\"btn btn-primary px-4 py-2 fw-bold shadow-sm rounded-pill\"\n (click)=\"$event.stopPropagation(); fileInput.click()\">\n <i class=\"fa-solid fa-folder-open me-2\"></i>Explorar archivo\n </button>\n </div>\n }\n\n <!-- Estado 2: archivo seleccionado -->\n @if (selectedFile) {\n <div class=\"selected-file-card\">\n <div class=\"file-icon shadow-sm\">\n <i class=\"{{ profile.fileIcon }} fs-3\"></i>\n </div>\n <div class=\"file-details\">\n <div class=\"file-name\" [title]=\"selectedFile.name\">{{ selectedFile.name }}</div>\n <div class=\"file-size\"><i class=\"fa-solid fa-hard-drive me-1\"></i>{{ getFileSize(selectedFile.size) }}</div>\n </div>\n </div>\n }\n\n <input #fileInput type=\"file\" style=\"display: none\" [attr.accept]=\"profile.acceptAttr\" (change)=\"onFileSelected($event)\" />\n </div>\n\n\n\n <!-- Footer (Controles y Botones) -->\n <div class=\"d-flex justify-content-between align-items-end pt-3 border-top\">\n <div class=\"flex-grow-1 me-4\">\n @if (data.footerTemplate) {\n <ng-container *ngTemplateOutlet=\"data.footerTemplate\"></ng-container>\n }\n </div>\n <div>\n <button type=\"button\" class=\"btn btn-success px-5 py-2 shadow-sm fw-bold\" style=\"border-radius: 8px;\" (click)=\"onConfirm()\">\n Cargar\n </button>\n </div>\n </div>\n</div>\n", styles: [".modal-custom-container{background-color:#fff;border-radius:.75rem;font-family:inherit;color:#334155;--smx-accent: #28a745}.icon-header{width:48px;height:48px;border-radius:50%;background-color:color-mix(in srgb,var(--smx-accent) 12%,transparent);color:var(--smx-accent);display:flex;align-items:center;justify-content:center}.upload-dropzone{border:2px dashed #cbd5e1;border-radius:.75rem;background-color:#f8fafc;padding:2.5rem 1.5rem;text-align:center;cursor:pointer;transition:all .2s ease-in-out}.upload-dropzone:hover,.upload-dropzone.drag-over{border-color:var(--smx-accent);background-color:color-mix(in srgb,var(--smx-accent) 4%,transparent)}.upload-dropzone.has-file{border-style:solid;border-color:#e2e8f0;background-color:#fff;cursor:default;padding:1.5rem}.upload-icon-wrapper{width:70px;height:70px;border-radius:50%;background-color:#e2e8f0;color:#475569;display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;transition:all .2s}.upload-dropzone:hover .upload-icon-wrapper{background-color:color-mix(in srgb,var(--smx-accent) 15%,transparent);color:var(--smx-accent);transform:scale(1.05)}.selected-file-card{background-color:#f8fafc;border:1px solid #cbd5e1;border-radius:.5rem;padding:1rem;display:flex;align-items:center;justify-content:space-between;text-align:left;max-width:500px;margin:0 auto;box-shadow:0 1px 3px #0000000d}.selected-file-card .file-icon{width:46px;height:46px;border-radius:.5rem;background-color:color-mix(in srgb,var(--smx-accent) 15%,transparent);color:var(--smx-accent);display:flex;align-items:center;justify-content:center;margin-right:1rem;flex-shrink:0}.selected-file-card .file-details{overflow:hidden;flex-grow:1;margin-right:1rem}.selected-file-card .file-details .file-name{font-weight:600;color:#1e293b;margin-bottom:.2rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.selected-file-card .file-details .file-size{font-size:.75rem;color:#64748b}::ng-deep .smx-upload-dropdown-panel{width:auto!important;min-width:250px!important;max-width:400px!important}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: NgSelectModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
92
96
|
}
|
|
93
97
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmxUploadFileComponent, decorators: [{
|
|
94
98
|
type: Component,
|
|
95
|
-
args: [{ selector: "smx-upload-file", standalone: true, imports: [MatDialogModule], template: "<div class=\"modal-custom-container p-4\" [style.--smx-accent]=\"profile.accentColor\">\n <!-- Cabecera -->\n <div class=\"d-flex justify-content-between align-items-center pb-3 mb-3 border-bottom\">\n <div class=\"d-flex align-items-center\">\n <div class=\"icon-header me-3\">\n <i class=\"{{ profile.headerIcon }} fs-4\"></i>\n </div>\n <div>\n <h4 class=\"fw-bold text-dark mb-0\">{{ title }}</h4>\n <span class=\"text-muted small\">{{ subtitle }}</span>\n </div>\n </div>\n <div class=\"d-flex align-items-center\">\n @if (badgeText) {\n <span class=\"badge bg-light text-primary border px-3 py-2 fs-7 fw-bold shadow-sm me-3\">\n @if (badgeIcon) {\n <i class=\"{{ badgeIcon }} me-1\"></i>\n }\n {{ badgeText }}\n </span>\n }\n </div>\n </div>\n\n <!-- Zona drag & drop -->\n <div\n class=\"upload-dropzone mb-4\"\n role=\"button\"\n [class.has-file]=\"selectedFile\"\n [class.drag-over]=\"isDragging\"\n tabindex=\"0\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"fileInput.click()\"\n (keydown.enter)=\"fileInput.click()\">\n <!-- Estado 1: sin archivo -->\n @if (!selectedFile) {\n <div>\n <div class=\"upload-icon-wrapper shadow-sm\">\n <i class=\"fa-solid fa-cloud-arrow-up fs-2\"></i>\n </div>\n <h6 class=\"fw-bold text-dark mb-1\">{{ profile.dropzoneLabel }}</h6>\n <p class=\"text-muted small mb-3\">{{ profile.formatLabel }}</p>\n <button\n type=\"button\"\n class=\"btn btn-primary px-4 py-2 fw-bold shadow-sm rounded-pill\"\n (click)=\"$event.stopPropagation(); fileInput.click()\">\n <i class=\"fa-solid fa-folder-open me-2\"></i>Explorar archivo\n </button>\n </div>\n }\n\n <!-- Estado 2: archivo seleccionado -->\n @if (selectedFile) {\n <div class=\"selected-file-card\">\n <div class=\"file-icon shadow-sm\">\n <i class=\"{{ profile.fileIcon }} fs-3\"></i>\n </div>\n <div class=\"file-details\">\n <div class=\"file-name\" [title]=\"selectedFile.name\">{{ selectedFile.name }}</div>\n <div class=\"file-size\"><i class=\"fa-solid fa-hard-drive me-1\"></i>{{ getFileSize(selectedFile.size) }}</div>\n </div>\n </div>\n }\n\n <input #fileInput type=\"file\" style=\"display: none\" [attr.accept]=\"profile.acceptAttr\" (change)=\"onFileSelected($event)\" />\n </div>\n\n <!-- Botones -->\n <div class=\"d-flex justify-content-end pt-3 border-top\">\n <button type=\"button\" class=\"btn btn-success px-5\" (click)=\"onConfirm()\"
|
|
99
|
+
args: [{ selector: "smx-upload-file", standalone: true, imports: [MatDialogModule, FormsModule, NgSelectModule, CommonModule], template: "<div class=\"modal-custom-container p-4\" [style.--smx-accent]=\"profile.accentColor\">\n <!-- Cabecera -->\n <div class=\"d-flex justify-content-between align-items-center pb-3 mb-3 border-bottom\">\n <div class=\"d-flex align-items-center\">\n <div class=\"icon-header me-3\">\n <i class=\"{{ profile.headerIcon }} fs-4\"></i>\n </div>\n <div>\n <h4 class=\"fw-bold text-dark mb-0\">{{ title }}</h4>\n <span class=\"text-muted small\">{{ subtitle }}</span>\n </div>\n </div>\n <div class=\"d-flex align-items-center\">\n @if (badgeText) {\n <span class=\"badge bg-light text-primary border px-3 py-2 fs-7 fw-bold shadow-sm me-3\">\n @if (badgeIcon) {\n <i class=\"{{ badgeIcon }} me-1\"></i>\n }\n {{ badgeText }}\n </span>\n }\n </div>\n </div>\n\n <!-- Zona drag & drop -->\n <div\n class=\"upload-dropzone mb-4\"\n role=\"button\"\n [class.has-file]=\"selectedFile\"\n [class.drag-over]=\"isDragging\"\n tabindex=\"0\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"fileInput.click()\"\n (keydown.enter)=\"fileInput.click()\">\n <!-- Estado 1: sin archivo -->\n @if (!selectedFile) {\n <div>\n <div class=\"upload-icon-wrapper shadow-sm\">\n <i class=\"fa-solid fa-cloud-arrow-up fs-2\"></i>\n </div>\n <h6 class=\"fw-bold text-dark mb-1\">{{ profile.dropzoneLabel }}</h6>\n <p class=\"text-muted small mb-3\">{{ profile.formatLabel }}</p>\n <button\n type=\"button\"\n class=\"btn btn-primary px-4 py-2 fw-bold shadow-sm rounded-pill\"\n (click)=\"$event.stopPropagation(); fileInput.click()\">\n <i class=\"fa-solid fa-folder-open me-2\"></i>Explorar archivo\n </button>\n </div>\n }\n\n <!-- Estado 2: archivo seleccionado -->\n @if (selectedFile) {\n <div class=\"selected-file-card\">\n <div class=\"file-icon shadow-sm\">\n <i class=\"{{ profile.fileIcon }} fs-3\"></i>\n </div>\n <div class=\"file-details\">\n <div class=\"file-name\" [title]=\"selectedFile.name\">{{ selectedFile.name }}</div>\n <div class=\"file-size\"><i class=\"fa-solid fa-hard-drive me-1\"></i>{{ getFileSize(selectedFile.size) }}</div>\n </div>\n </div>\n }\n\n <input #fileInput type=\"file\" style=\"display: none\" [attr.accept]=\"profile.acceptAttr\" (change)=\"onFileSelected($event)\" />\n </div>\n\n\n\n <!-- Footer (Controles y Botones) -->\n <div class=\"d-flex justify-content-between align-items-end pt-3 border-top\">\n <div class=\"flex-grow-1 me-4\">\n @if (data.footerTemplate) {\n <ng-container *ngTemplateOutlet=\"data.footerTemplate\"></ng-container>\n }\n </div>\n <div>\n <button type=\"button\" class=\"btn btn-success px-5 py-2 shadow-sm fw-bold\" style=\"border-radius: 8px;\" (click)=\"onConfirm()\">\n Cargar\n </button>\n </div>\n </div>\n</div>\n", styles: [".modal-custom-container{background-color:#fff;border-radius:.75rem;font-family:inherit;color:#334155;--smx-accent: #28a745}.icon-header{width:48px;height:48px;border-radius:50%;background-color:color-mix(in srgb,var(--smx-accent) 12%,transparent);color:var(--smx-accent);display:flex;align-items:center;justify-content:center}.upload-dropzone{border:2px dashed #cbd5e1;border-radius:.75rem;background-color:#f8fafc;padding:2.5rem 1.5rem;text-align:center;cursor:pointer;transition:all .2s ease-in-out}.upload-dropzone:hover,.upload-dropzone.drag-over{border-color:var(--smx-accent);background-color:color-mix(in srgb,var(--smx-accent) 4%,transparent)}.upload-dropzone.has-file{border-style:solid;border-color:#e2e8f0;background-color:#fff;cursor:default;padding:1.5rem}.upload-icon-wrapper{width:70px;height:70px;border-radius:50%;background-color:#e2e8f0;color:#475569;display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;transition:all .2s}.upload-dropzone:hover .upload-icon-wrapper{background-color:color-mix(in srgb,var(--smx-accent) 15%,transparent);color:var(--smx-accent);transform:scale(1.05)}.selected-file-card{background-color:#f8fafc;border:1px solid #cbd5e1;border-radius:.5rem;padding:1rem;display:flex;align-items:center;justify-content:space-between;text-align:left;max-width:500px;margin:0 auto;box-shadow:0 1px 3px #0000000d}.selected-file-card .file-icon{width:46px;height:46px;border-radius:.5rem;background-color:color-mix(in srgb,var(--smx-accent) 15%,transparent);color:var(--smx-accent);display:flex;align-items:center;justify-content:center;margin-right:1rem;flex-shrink:0}.selected-file-card .file-details{overflow:hidden;flex-grow:1;margin-right:1rem}.selected-file-card .file-details .file-name{font-weight:600;color:#1e293b;margin-bottom:.2rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.selected-file-card .file-details .file-size{font-size:.75rem;color:#64748b}::ng-deep .smx-upload-dropdown-panel{width:auto!important;min-width:250px!important;max-width:400px!important}\n"] }]
|
|
96
100
|
}] });
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic214LXVwbG9hZC1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvc3VtYXgtdXBsb2FkL3NteC11cGxvYWQtZmlsZS9zbXgtdXBsb2FkLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9zdW1heC11cGxvYWQvc214LXVwbG9hZC1maWxlL3NteC11cGxvYWQtZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFVbEU7OztHQUdHO0FBUUgsTUFBTSxPQUFPLHNCQUFzQjtJQVBuQztRQVFXLFNBQUksR0FBc0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELGNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQSxZQUFvQyxDQUFBLENBQUMsQ0FBQztRQUNqRCxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRTFELGlCQUFZLEdBQWdCLElBQUksQ0FBQztRQUNqQyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLFVBQUssR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QixhQUFRLEdBQUcsb0NBQW9DLENBQUM7UUFDaEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixZQUFPLEdBQW1C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QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDZixNQUFNLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUNyRixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7K0dBbEZVLHNCQUFzQjttR0FBdEIsc0JBQXNCLDJFQ3pCbkMsNHVGQTBFQSxvOEREbkRZLGVBQWU7OzRGQUVkLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSxpQkFBaUIsY0FHZixJQUFJLFdBQ1AsQ0FBQyxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nTW9kdWxlLCBNYXREaWFsb2dSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQgeyBNZXNzYWdlVXRpbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWVzc2FnZS11dGlsLnNlcnZpY2VcIjtcbmltcG9ydCB7IFNteEZpbGVQcm9maWxlIH0gZnJvbSBcIi4uL3NteC11cGxvYWQudHlwZXNcIjtcbmltcG9ydCB7IFNNWF9QUk9GSUxFX0VYQ0VMIH0gZnJvbSBcIi4uL3Byb2ZpbGVzL3NteC1leGNlbC5wcm9maWxlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU214VXBsb2FkRmlsZURhdGEge1xuICB0aXRsZT86IHN0cmluZztcbiAgc3VidGl0bGU/OiBzdHJpbmc7XG4gIGJhZGdlVGV4dD86IHN0cmluZztcbiAgYmFkZ2VJY29uPzogc3RyaW5nO1xuICBwcm9maWxlPzogU214RmlsZVByb2ZpbGU7XG59XG5cbi8qKlxuICogQ29tcG9uZW50ZSBkZSBkacOhbG9nbyBwYXJhIGNhcmdhciBhcmNoaXZvcy5cbiAqIFV0aWxpemFyIHtAbGluayBTbXhVcGxvYWRGaWxlRGF0YX0gY29tbyBpbnRlcmZheiBwYXJhIERhdGEuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzbXgtdXBsb2FkLWZpbGVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9zbXgtdXBsb2FkLWZpbGUuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3NteC11cGxvYWQtZmlsZS5jb21wb25lbnQuc2Nzc1wiXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01hdERpYWxvZ01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNteFVwbG9hZEZpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBkYXRhOiBTbXhVcGxvYWRGaWxlRGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xuICByZWFkb25seSBkaWFsb2dSZWYgPSBpbmplY3QoTWF0RGlhbG9nUmVmPFNteFVwbG9hZEZpbGVDb21wb25lbnQ+KTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlVXRpbCA9IGluamVjdChNZXNzYWdlVXRpbFNlcnZpY2UpO1xuXG4gIHNlbGVjdGVkRmlsZTogRmlsZSB8IG51bGwgPSBudWxsO1xuICBpc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgdGl0bGUgPSBcIkNhcmdhciBhcmNoaXZvXCI7XG4gIHN1YnRpdGxlID0gXCJTZWxlY2Npb25hIG8gYXJyYXN0cmEgZWwgZG9jdW1lbnRvXCI7XG4gIGJhZGdlVGV4dCA9IFwiXCI7XG4gIGJhZGdlSWNvbiA9IFwiXCI7XG4gIHByb2ZpbGU6IFNteEZpbGVQcm9maWxlID0gU01YX1BST0ZJTEVfRVhDRUw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgaWYgKHRoaXMuZGF0YS50aXRsZSkgdGhpcy50aXRsZSA9IHRoaXMuZGF0YS50aXRsZTtcbiAgICAgIGlmICh0aGlzLmRhdGEuc3VidGl0bGUpIHRoaXMuc3VidGl0bGUgPSB0aGlzLmRhdGEuc3VidGl0bGU7XG4gICAgICBpZiAodGhpcy5kYXRhLmJhZGdlVGV4dCkgdGhpcy5iYWRnZVRleHQgPSB0aGlzLmRhdGEuYmFkZ2VUZXh0O1xuICAgICAgaWYgKHRoaXMuZGF0YS5iYWRnZUljb24pIHRoaXMuYmFkZ2VJY29uID0gdGhpcy5kYXRhLmJhZGdlSWNvbjtcbiAgICAgIGlmICh0aGlzLmRhdGEucHJvZmlsZSkgdGhpcy5wcm9maWxlID0gdGhpcy5kYXRhLnByb2ZpbGU7XG4gICAgfVxuICB9XG5cbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICB9XG5cbiAgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQW5kU2V0RmlsZShmaWxlc1swXSk7XG4gICAgfVxuICB9XG5cbiAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBmaWxlcyA9IGlucHV0Py5maWxlcztcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52YWxpZGF0ZUFuZFNldEZpbGUoZmlsZXNbMF0pO1xuICAgICAgaW5wdXQudmFsdWUgPSBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQW5kU2V0RmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLnByb2ZpbGUuYWxsb3dlZEV4dGVuc2lvbnMuc29tZSgoZXh0KSA9PiBmaWxlLm5hbWUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChleHQpKTtcbiAgICBpZiAoIXZhbGlkKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VVdGlsLmdldEFsZXJ0V2FybmluZyh0aGlzLnByb2ZpbGUuaW52YWxpZEZpbGVNZXNzYWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBmaWxlO1xuICB9XG5cbiAgZ2V0RmlsZVNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzID09PSAwKSByZXR1cm4gXCIwIEJ5dGVzXCI7XG4gICAgY29uc3QgayA9IDEwMjQ7XG4gICAgY29uc3Qgc2l6ZXMgPSBbXCJCeXRlc1wiLCBcIktCXCIsIFwiTUJcIiwgXCJHQlwiXTtcbiAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrKSk7XG4gICAgcmV0dXJuIE51bWJlci5wYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKDIpKSArIFwiIFwiICsgc2l6ZXNbaV07XG4gIH1cblxuICBvbkNvbmZpcm0oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRmlsZSkge1xuICAgICAgdGhpcy5tZXNzYWdlVXRpbC5nZXRBbGVydFdhcm5pbmcoXCJQb3IgZmF2b3IsIHNlbGVjY2lvbmUgdW4gYXJjaGl2byBwYXJhIGNvbnRpbnVhci5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuc2VsZWN0ZWRGaWxlKTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKG51bGwpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtY3VzdG9tLWNvbnRhaW5lciBwLTRcIiBbc3R5bGUuLS1zbXgtYWNjZW50XT1cInByb2ZpbGUuYWNjZW50Q29sb3JcIj5cbiAgPCEtLSBDYWJlY2VyYSAtLT5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgcGItMyBtYi0zIGJvcmRlci1ib3R0b21cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImljb24taGVhZGVyIG1lLTNcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJ7eyBwcm9maWxlLmhlYWRlckljb24gfX0gZnMtNFwiPjwvaT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGg0IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWRhcmsgbWItMFwiPnt7IHRpdGxlIH19PC9oND5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+e3sgc3VidGl0bGUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgQGlmIChiYWRnZVRleHQpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1saWdodCB0ZXh0LXByaW1hcnkgYm9yZGVyIHB4LTMgcHktMiBmcy03IGZ3LWJvbGQgc2hhZG93LXNtIG1lLTNcIj5cbiAgICAgICAgICBAaWYgKGJhZGdlSWNvbikge1xuICAgICAgICAgICAgPGkgY2xhc3M9XCJ7eyBiYWRnZUljb24gfX0gbWUtMVwiPjwvaT5cbiAgICAgICAgICB9XG4gICAgICAgICAge3sgYmFkZ2VUZXh0IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBab25hIGRyYWcgJiBkcm9wIC0tPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJ1cGxvYWQtZHJvcHpvbmUgbWItNFwiXG4gICAgcm9sZT1cImJ1dHRvblwiXG4gICAgW2NsYXNzLmhhcy1maWxlXT1cInNlbGVjdGVkRmlsZVwiXG4gICAgW2NsYXNzLmRyYWctb3Zlcl09XCJpc0RyYWdnaW5nXCJcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgIChkcmFnbGVhdmUpPVwib25EcmFnTGVhdmUoJGV2ZW50KVwiXG4gICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxuICAgIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiXG4gICAgKGtleWRvd24uZW50ZXIpPVwiZmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICA8IS0tIEVzdGFkbyAxOiBzaW4gYXJjaGl2byAtLT5cbiAgICBAaWYgKCFzZWxlY3RlZEZpbGUpIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtaWNvbi13cmFwcGVyIHNoYWRvdy1zbVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2xvdWQtYXJyb3ctdXAgZnMtMlwiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxoNiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1kYXJrIG1iLTFcIj57eyBwcm9maWxlLmRyb3B6b25lTGFiZWwgfX08L2g2PlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbWItM1wiPnt7IHByb2ZpbGUuZm9ybWF0TGFiZWwgfX08L3A+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBweC00IHB5LTIgZnctYm9sZCBzaGFkb3ctc20gcm91bmRlZC1waWxsXCJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmaWxlSW5wdXQuY2xpY2soKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtZm9sZGVyLW9wZW4gbWUtMlwiPjwvaT5FeHBsb3JhciBhcmNoaXZvXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBFc3RhZG8gMjogYXJjaGl2byBzZWxlY2Npb25hZG8gLS0+XG4gICAgQGlmIChzZWxlY3RlZEZpbGUpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1maWxlLWNhcmRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtaWNvbiBzaGFkb3ctc21cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInt7IHByb2ZpbGUuZmlsZUljb24gfX0gZnMtM1wiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWRldGFpbHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1uYW1lXCIgW3RpdGxlXT1cInNlbGVjdGVkRmlsZS5uYW1lXCI+e3sgc2VsZWN0ZWRGaWxlLm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1zaXplXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1oYXJkLWRyaXZlIG1lLTFcIj48L2k+e3sgZ2V0RmlsZVNpemUoc2VsZWN0ZWRGaWxlLnNpemUpIH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGlucHV0ICNmaWxlSW5wdXQgdHlwZT1cImZpbGVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIiBbYXR0ci5hY2NlcHRdPVwicHJvZmlsZS5hY2NlcHRBdHRyXCIgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCIgLz5cbiAgPC9kaXY+XG5cbiAgPCEtLSBCb3RvbmVzIC0tPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgcHQtMyBib3JkZXItdG9wXCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgcHgtNVwiIChjbGljayk9XCJvbkNvbmZpcm0oKVwiPkNhcmdhcjwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic214LXVwbG9hZC1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvc3VtYXgtdXBsb2FkL3NteC11cGxvYWQtZmlsZS9zbXgtdXBsb2FkLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9zdW1heC11cGxvYWQvc214LXVwbG9hZC1maWxlL3NteC11cGxvYWQtZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVcvQzs7O0dBR0c7QUFRSCxNQUFNLE9BQU8sc0JBQXNCO0lBUG5DO1FBUVcsU0FBSSxHQUFzQixNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbEQsY0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFlBQW9DLENBQUEsQ0FBQyxDQUFDO1FBQ2pELGdCQUFXLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFMUQsaUJBQVksR0FBZ0IsSUFBSSxDQUFDO1FBQ2pDLGVBQVUsR0FBRyxL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QkFDRSxpQkFBaUIsY0FHZixJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgT25Jbml0LCBUZW1wbGF0ZVJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ01vZHVsZSwgTWF0RGlhbG9nUmVmIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHsgTWVzc2FnZVV0aWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL21lc3NhZ2UtdXRpbC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTbXhGaWxlUHJvZmlsZSB9IGZyb20gXCIuLi9zbXgtdXBsb2FkLnR5cGVzXCI7XG5pbXBvcnQgeyBTTVhfUFJPRklMRV9FWENFTCB9IGZyb20gXCIuLi9wcm9maWxlcy9zbXgtZXhjZWwucHJvZmlsZVwiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE5nU2VsZWN0TW9kdWxlIH0gZnJvbSBcIkBuZy1zZWxlY3Qvbmctc2VsZWN0XCI7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU214VXBsb2FkRmlsZURhdGEge1xuICB0aXRsZT86IHN0cmluZztcbiAgc3VidGl0bGU/OiBzdHJpbmc7XG4gIGJhZGdlVGV4dD86IHN0cmluZztcbiAgYmFkZ2VJY29uPzogc3RyaW5nO1xuICBwcm9maWxlPzogU214RmlsZVByb2ZpbGU7XG4gIGZvb3RlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55Pjtcbn1cblxuLyoqXG4gKiBDb21wb25lbnRlIGRlIGRpw6Fsb2dvIHBhcmEgY2FyZ2FyIGFyY2hpdm9zLlxuICogVXRpbGl6YXIge0BsaW5rIFNteFVwbG9hZEZpbGVEYXRhfSBjb21vIGludGVyZmF6IHBhcmEgRGF0YS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNteC11cGxvYWQtZmlsZVwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3NteC11cGxvYWQtZmlsZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vc214LXVwbG9hZC1maWxlLmNvbXBvbmVudC5zY3NzXCJdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTWF0RGlhbG9nTW9kdWxlLCBGb3Jtc01vZHVsZSwgTmdTZWxlY3RNb2R1bGUsIENvbW1vbk1vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIFNteFVwbG9hZEZpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBkYXRhOiBTbXhVcGxvYWRGaWxlRGF0YSA9IGluamVjdChNQVRfRElBTE9HX0RBVEEpO1xuICByZWFkb25seSBkaWFsb2dSZWYgPSBpbmplY3QoTWF0RGlhbG9nUmVmPFNteFVwbG9hZEZpbGVDb21wb25lbnQ+KTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlVXRpbCA9IGluamVjdChNZXNzYWdlVXRpbFNlcnZpY2UpO1xuXG4gIHNlbGVjdGVkRmlsZTogRmlsZSB8IG51bGwgPSBudWxsO1xuICBpc0RyYWdnaW5nID0gZmFsc2U7XG5cbiAgdGl0bGUgPSBcIkNhcmdhciBhcmNoaXZvXCI7XG4gIHN1YnRpdGxlID0gXCJTZWxlY2Npb25hIG8gYXJyYXN0cmEgZWwgZG9jdW1lbnRvXCI7XG4gIGJhZGdlVGV4dCA9IFwiXCI7XG4gIGJhZGdlSWNvbiA9IFwiXCI7XG4gIHByb2ZpbGU6IFNteEZpbGVQcm9maWxlID0gU01YX1BST0ZJTEVfRVhDRUw7XG5cblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIGlmICh0aGlzLmRhdGEudGl0bGUpIHRoaXMudGl0bGUgPSB0aGlzLmRhdGEudGl0bGU7XG4gICAgICBpZiAodGhpcy5kYXRhLnN1YnRpdGxlKSB0aGlzLnN1YnRpdGxlID0gdGhpcy5kYXRhLnN1YnRpdGxlO1xuICAgICAgaWYgKHRoaXMuZGF0YS5iYWRnZVRleHQpIHRoaXMuYmFkZ2VUZXh0ID0gdGhpcy5kYXRhLmJhZGdlVGV4dDtcbiAgICAgIGlmICh0aGlzLmRhdGEuYmFkZ2VJY29uKSB0aGlzLmJhZGdlSWNvbiA9IHRoaXMuZGF0YS5iYWRnZUljb247XG4gICAgICBpZiAodGhpcy5kYXRhLnByb2ZpbGUpIHRoaXMucHJvZmlsZSA9IHRoaXMuZGF0YS5wcm9maWxlO1xuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICB9XG5cbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcbiAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52YWxpZGF0ZUFuZFNldEZpbGUoZmlsZXNbMF0pO1xuICAgIH1cbiAgfVxuXG4gIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZmlsZXMgPSBpbnB1dD8uZmlsZXM7XG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudmFsaWRhdGVBbmRTZXRGaWxlKGZpbGVzWzBdKTtcbiAgICAgIGlucHV0LnZhbHVlID0gXCJcIjtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUFuZFNldEZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkID0gdGhpcy5wcm9maWxlLmFsbG93ZWRFeHRlbnNpb25zLnNvbWUoKGV4dCkgPT4gZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZXh0KSk7XG4gICAgaWYgKCF2YWxpZCkge1xuICAgICAgdGhpcy5tZXNzYWdlVXRpbC5nZXRBbGVydFdhcm5pbmcodGhpcy5wcm9maWxlLmludmFsaWRGaWxlTWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gZmlsZTtcbiAgfVxuXG4gIGdldEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuIFwiMCBCeXRlc1wiO1xuICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgIGNvbnN0IHNpemVzID0gW1wiQnl0ZXNcIiwgXCJLQlwiLCBcIk1CXCIsIFwiR0JcIl07XG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuICAgIHJldHVybiBOdW1iZXIucGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgyKSkgKyBcIiBcIiArIHNpemVzW2ldO1xuICB9XG5cbiAgb25Db25maXJtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGUpIHtcbiAgICAgIHRoaXMubWVzc2FnZVV0aWwuZ2V0QWxlcnRXYXJuaW5nKFwiUG9yIGZhdm9yLCBzZWxlY2Npb25lIHVuIGFyY2hpdm8gcGFyYSBjb250aW51YXIuXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLnNlbGVjdGVkRmlsZSk7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1vZGFsLWN1c3RvbS1jb250YWluZXIgcC00XCIgW3N0eWxlLi0tc214LWFjY2VudF09XCJwcm9maWxlLmFjY2VudENvbG9yXCI+XG4gIDwhLS0gQ2FiZWNlcmEgLS0+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHBiLTMgbWItMyBib3JkZXItYm90dG9tXCI+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWhlYWRlciBtZS0zXCI+XG4gICAgICAgIDxpIGNsYXNzPVwie3sgcHJvZmlsZS5oZWFkZXJJY29uIH19IGZzLTRcIj48L2k+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxoNCBjbGFzcz1cImZ3LWJvbGQgdGV4dC1kYXJrIG1iLTBcIj57eyB0aXRsZSB9fTwvaDQ+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPnt7IHN1YnRpdGxlIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIEBpZiAoYmFkZ2VUZXh0KSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1wcmltYXJ5IGJvcmRlciBweC0zIHB5LTIgZnMtNyBmdy1ib2xkIHNoYWRvdy1zbSBtZS0zXCI+XG4gICAgICAgICAgQGlmIChiYWRnZUljb24pIHtcbiAgICAgICAgICAgIDxpIGNsYXNzPVwie3sgYmFkZ2VJY29uIH19IG1lLTFcIj48L2k+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IGJhZGdlVGV4dCB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gWm9uYSBkcmFnICYgZHJvcCAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwidXBsb2FkLWRyb3B6b25lIG1iLTRcIlxuICAgIHJvbGU9XCJidXR0b25cIlxuICAgIFtjbGFzcy5oYXMtZmlsZV09XCJzZWxlY3RlZEZpbGVcIlxuICAgIFtjbGFzcy5kcmFnLW92ZXJdPVwiaXNEcmFnZ2luZ1wiXG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAgIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwiZmlsZUlucHV0LmNsaWNrKClcIlxuICAgIChrZXlkb3duLmVudGVyKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgPCEtLSBFc3RhZG8gMTogc2luIGFyY2hpdm8gLS0+XG4gICAgQGlmICghc2VsZWN0ZWRGaWxlKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWljb24td3JhcHBlciBzaGFkb3ctc21cIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNsb3VkLWFycm93LXVwIGZzLTJcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aDYgY2xhc3M9XCJmdy1ib2xkIHRleHQtZGFyayBtYi0xXCI+e3sgcHJvZmlsZS5kcm9wem9uZUxhYmVsIH19PC9oNj5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTNcIj57eyBwcm9maWxlLmZvcm1hdExhYmVsIH19PC9wPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNCBweS0yIGZ3LWJvbGQgc2hhZG93LXNtIHJvdW5kZWQtcGlsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZmlsZUlucHV0LmNsaWNrKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWZvbGRlci1vcGVuIG1lLTJcIj48L2k+RXhwbG9yYXIgYXJjaGl2b1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0gRXN0YWRvIDI6IGFyY2hpdm8gc2VsZWNjaW9uYWRvIC0tPlxuICAgIEBpZiAoc2VsZWN0ZWRGaWxlKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtZmlsZS1jYXJkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWljb24gc2hhZG93LXNtXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJ7eyBwcm9maWxlLmZpbGVJY29uIH19IGZzLTNcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZS1kZXRhaWxzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtbmFtZVwiIFt0aXRsZV09XCJzZWxlY3RlZEZpbGUubmFtZVwiPnt7IHNlbGVjdGVkRmlsZS5uYW1lIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtc2l6ZVwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtaGFyZC1kcml2ZSBtZS0xXCI+PC9pPnt7IGdldEZpbGVTaXplKHNlbGVjdGVkRmlsZS5zaXplKSB9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDxpbnB1dCAjZmlsZUlucHV0IHR5cGU9XCJmaWxlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgW2F0dHIuYWNjZXB0XT1cInByb2ZpbGUuYWNjZXB0QXR0clwiIChjaGFuZ2UpPVwib25GaWxlU2VsZWN0ZWQoJGV2ZW50KVwiIC8+XG4gIDwvZGl2PlxuXG5cblxuICA8IS0tIEZvb3RlciAoQ29udHJvbGVzIHkgQm90b25lcykgLS0+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtZW5kIHB0LTMgYm9yZGVyLXRvcFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMSBtZS00XCI+XG4gICAgICBAaWYgKGRhdGEuZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRhdGEuZm9vdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgcHgtNSBweS0yIHNoYWRvdy1zbSBmdy1ib2xkXCIgc3R5bGU9XCJib3JkZXItcmFkaXVzOiA4cHg7XCIgKGNsaWNrKT1cIm9uQ29uZmlybSgpXCI+XG4gICAgICAgIENhcmdhclxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -11498,11 +11498,11 @@ class SmxUploadFileComponent {
|
|
|
11498
11498
|
this.dialogRef.close(null);
|
|
11499
11499
|
}
|
|
11500
11500
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmxUploadFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
11501
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmxUploadFileComponent, isStandalone: true, selector: "smx-upload-file", ngImport: i0, template: "<div class=\"modal-custom-container p-4\" [style.--smx-accent]=\"profile.accentColor\">\n <!-- Cabecera -->\n <div class=\"d-flex justify-content-between align-items-center pb-3 mb-3 border-bottom\">\n <div class=\"d-flex align-items-center\">\n <div class=\"icon-header me-3\">\n <i class=\"{{ profile.headerIcon }} fs-4\"></i>\n </div>\n <div>\n <h4 class=\"fw-bold text-dark mb-0\">{{ title }}</h4>\n <span class=\"text-muted small\">{{ subtitle }}</span>\n </div>\n </div>\n <div class=\"d-flex align-items-center\">\n @if (badgeText) {\n <span class=\"badge bg-light text-primary border px-3 py-2 fs-7 fw-bold shadow-sm me-3\">\n @if (badgeIcon) {\n <i class=\"{{ badgeIcon }} me-1\"></i>\n }\n {{ badgeText }}\n </span>\n }\n </div>\n </div>\n\n <!-- Zona drag & drop -->\n <div\n class=\"upload-dropzone mb-4\"\n role=\"button\"\n [class.has-file]=\"selectedFile\"\n [class.drag-over]=\"isDragging\"\n tabindex=\"0\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"fileInput.click()\"\n (keydown.enter)=\"fileInput.click()\">\n <!-- Estado 1: sin archivo -->\n @if (!selectedFile) {\n <div>\n <div class=\"upload-icon-wrapper shadow-sm\">\n <i class=\"fa-solid fa-cloud-arrow-up fs-2\"></i>\n </div>\n <h6 class=\"fw-bold text-dark mb-1\">{{ profile.dropzoneLabel }}</h6>\n <p class=\"text-muted small mb-3\">{{ profile.formatLabel }}</p>\n <button\n type=\"button\"\n class=\"btn btn-primary px-4 py-2 fw-bold shadow-sm rounded-pill\"\n (click)=\"$event.stopPropagation(); fileInput.click()\">\n <i class=\"fa-solid fa-folder-open me-2\"></i>Explorar archivo\n </button>\n </div>\n }\n\n <!-- Estado 2: archivo seleccionado -->\n @if (selectedFile) {\n <div class=\"selected-file-card\">\n <div class=\"file-icon shadow-sm\">\n <i class=\"{{ profile.fileIcon }} fs-3\"></i>\n </div>\n <div class=\"file-details\">\n <div class=\"file-name\" [title]=\"selectedFile.name\">{{ selectedFile.name }}</div>\n <div class=\"file-size\"><i class=\"fa-solid fa-hard-drive me-1\"></i>{{ getFileSize(selectedFile.size) }}</div>\n </div>\n </div>\n }\n\n <input #fileInput type=\"file\" style=\"display: none\" [attr.accept]=\"profile.acceptAttr\" (change)=\"onFileSelected($event)\" />\n </div>\n\n <!-- Botones -->\n <div class=\"d-flex justify-content-end pt-3 border-top\">\n <button type=\"button\" class=\"btn btn-success px-5\" (click)=\"onConfirm()\"
|
|
11501
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmxUploadFileComponent, isStandalone: true, selector: "smx-upload-file", ngImport: i0, template: "<div class=\"modal-custom-container p-4\" [style.--smx-accent]=\"profile.accentColor\">\n <!-- Cabecera -->\n <div class=\"d-flex justify-content-between align-items-center pb-3 mb-3 border-bottom\">\n <div class=\"d-flex align-items-center\">\n <div class=\"icon-header me-3\">\n <i class=\"{{ profile.headerIcon }} fs-4\"></i>\n </div>\n <div>\n <h4 class=\"fw-bold text-dark mb-0\">{{ title }}</h4>\n <span class=\"text-muted small\">{{ subtitle }}</span>\n </div>\n </div>\n <div class=\"d-flex align-items-center\">\n @if (badgeText) {\n <span class=\"badge bg-light text-primary border px-3 py-2 fs-7 fw-bold shadow-sm me-3\">\n @if (badgeIcon) {\n <i class=\"{{ badgeIcon }} me-1\"></i>\n }\n {{ badgeText }}\n </span>\n }\n </div>\n </div>\n\n <!-- Zona drag & drop -->\n <div\n class=\"upload-dropzone mb-4\"\n role=\"button\"\n [class.has-file]=\"selectedFile\"\n [class.drag-over]=\"isDragging\"\n tabindex=\"0\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"fileInput.click()\"\n (keydown.enter)=\"fileInput.click()\">\n <!-- Estado 1: sin archivo -->\n @if (!selectedFile) {\n <div>\n <div class=\"upload-icon-wrapper shadow-sm\">\n <i class=\"fa-solid fa-cloud-arrow-up fs-2\"></i>\n </div>\n <h6 class=\"fw-bold text-dark mb-1\">{{ profile.dropzoneLabel }}</h6>\n <p class=\"text-muted small mb-3\">{{ profile.formatLabel }}</p>\n <button\n type=\"button\"\n class=\"btn btn-primary px-4 py-2 fw-bold shadow-sm rounded-pill\"\n (click)=\"$event.stopPropagation(); fileInput.click()\">\n <i class=\"fa-solid fa-folder-open me-2\"></i>Explorar archivo\n </button>\n </div>\n }\n\n <!-- Estado 2: archivo seleccionado -->\n @if (selectedFile) {\n <div class=\"selected-file-card\">\n <div class=\"file-icon shadow-sm\">\n <i class=\"{{ profile.fileIcon }} fs-3\"></i>\n </div>\n <div class=\"file-details\">\n <div class=\"file-name\" [title]=\"selectedFile.name\">{{ selectedFile.name }}</div>\n <div class=\"file-size\"><i class=\"fa-solid fa-hard-drive me-1\"></i>{{ getFileSize(selectedFile.size) }}</div>\n </div>\n </div>\n }\n\n <input #fileInput type=\"file\" style=\"display: none\" [attr.accept]=\"profile.acceptAttr\" (change)=\"onFileSelected($event)\" />\n </div>\n\n\n\n <!-- Footer (Controles y Botones) -->\n <div class=\"d-flex justify-content-between align-items-end pt-3 border-top\">\n <div class=\"flex-grow-1 me-4\">\n @if (data.footerTemplate) {\n <ng-container *ngTemplateOutlet=\"data.footerTemplate\"></ng-container>\n }\n </div>\n <div>\n <button type=\"button\" class=\"btn btn-success px-5 py-2 shadow-sm fw-bold\" style=\"border-radius: 8px;\" (click)=\"onConfirm()\">\n Cargar\n </button>\n </div>\n </div>\n</div>\n", styles: [".modal-custom-container{background-color:#fff;border-radius:.75rem;font-family:inherit;color:#334155;--smx-accent: #28a745}.icon-header{width:48px;height:48px;border-radius:50%;background-color:color-mix(in srgb,var(--smx-accent) 12%,transparent);color:var(--smx-accent);display:flex;align-items:center;justify-content:center}.upload-dropzone{border:2px dashed #cbd5e1;border-radius:.75rem;background-color:#f8fafc;padding:2.5rem 1.5rem;text-align:center;cursor:pointer;transition:all .2s ease-in-out}.upload-dropzone:hover,.upload-dropzone.drag-over{border-color:var(--smx-accent);background-color:color-mix(in srgb,var(--smx-accent) 4%,transparent)}.upload-dropzone.has-file{border-style:solid;border-color:#e2e8f0;background-color:#fff;cursor:default;padding:1.5rem}.upload-icon-wrapper{width:70px;height:70px;border-radius:50%;background-color:#e2e8f0;color:#475569;display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;transition:all .2s}.upload-dropzone:hover .upload-icon-wrapper{background-color:color-mix(in srgb,var(--smx-accent) 15%,transparent);color:var(--smx-accent);transform:scale(1.05)}.selected-file-card{background-color:#f8fafc;border:1px solid #cbd5e1;border-radius:.5rem;padding:1rem;display:flex;align-items:center;justify-content:space-between;text-align:left;max-width:500px;margin:0 auto;box-shadow:0 1px 3px #0000000d}.selected-file-card .file-icon{width:46px;height:46px;border-radius:.5rem;background-color:color-mix(in srgb,var(--smx-accent) 15%,transparent);color:var(--smx-accent);display:flex;align-items:center;justify-content:center;margin-right:1rem;flex-shrink:0}.selected-file-card .file-details{overflow:hidden;flex-grow:1;margin-right:1rem}.selected-file-card .file-details .file-name{font-weight:600;color:#1e293b;margin-bottom:.2rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.selected-file-card .file-details .file-size{font-size:.75rem;color:#64748b}::ng-deep .smx-upload-dropdown-panel{width:auto!important;min-width:250px!important;max-width:400px!important}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: NgSelectModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
|
|
11502
11502
|
}
|
|
11503
11503
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmxUploadFileComponent, decorators: [{
|
|
11504
11504
|
type: Component,
|
|
11505
|
-
args: [{ selector: "smx-upload-file", standalone: true, imports: [MatDialogModule], template: "<div class=\"modal-custom-container p-4\" [style.--smx-accent]=\"profile.accentColor\">\n <!-- Cabecera -->\n <div class=\"d-flex justify-content-between align-items-center pb-3 mb-3 border-bottom\">\n <div class=\"d-flex align-items-center\">\n <div class=\"icon-header me-3\">\n <i class=\"{{ profile.headerIcon }} fs-4\"></i>\n </div>\n <div>\n <h4 class=\"fw-bold text-dark mb-0\">{{ title }}</h4>\n <span class=\"text-muted small\">{{ subtitle }}</span>\n </div>\n </div>\n <div class=\"d-flex align-items-center\">\n @if (badgeText) {\n <span class=\"badge bg-light text-primary border px-3 py-2 fs-7 fw-bold shadow-sm me-3\">\n @if (badgeIcon) {\n <i class=\"{{ badgeIcon }} me-1\"></i>\n }\n {{ badgeText }}\n </span>\n }\n </div>\n </div>\n\n <!-- Zona drag & drop -->\n <div\n class=\"upload-dropzone mb-4\"\n role=\"button\"\n [class.has-file]=\"selectedFile\"\n [class.drag-over]=\"isDragging\"\n tabindex=\"0\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"fileInput.click()\"\n (keydown.enter)=\"fileInput.click()\">\n <!-- Estado 1: sin archivo -->\n @if (!selectedFile) {\n <div>\n <div class=\"upload-icon-wrapper shadow-sm\">\n <i class=\"fa-solid fa-cloud-arrow-up fs-2\"></i>\n </div>\n <h6 class=\"fw-bold text-dark mb-1\">{{ profile.dropzoneLabel }}</h6>\n <p class=\"text-muted small mb-3\">{{ profile.formatLabel }}</p>\n <button\n type=\"button\"\n class=\"btn btn-primary px-4 py-2 fw-bold shadow-sm rounded-pill\"\n (click)=\"$event.stopPropagation(); fileInput.click()\">\n <i class=\"fa-solid fa-folder-open me-2\"></i>Explorar archivo\n </button>\n </div>\n }\n\n <!-- Estado 2: archivo seleccionado -->\n @if (selectedFile) {\n <div class=\"selected-file-card\">\n <div class=\"file-icon shadow-sm\">\n <i class=\"{{ profile.fileIcon }} fs-3\"></i>\n </div>\n <div class=\"file-details\">\n <div class=\"file-name\" [title]=\"selectedFile.name\">{{ selectedFile.name }}</div>\n <div class=\"file-size\"><i class=\"fa-solid fa-hard-drive me-1\"></i>{{ getFileSize(selectedFile.size) }}</div>\n </div>\n </div>\n }\n\n <input #fileInput type=\"file\" style=\"display: none\" [attr.accept]=\"profile.acceptAttr\" (change)=\"onFileSelected($event)\" />\n </div>\n\n <!-- Botones -->\n <div class=\"d-flex justify-content-end pt-3 border-top\">\n <button type=\"button\" class=\"btn btn-success px-5\" (click)=\"onConfirm()\"
|
|
11505
|
+
args: [{ selector: "smx-upload-file", standalone: true, imports: [MatDialogModule, FormsModule, NgSelectModule, CommonModule], template: "<div class=\"modal-custom-container p-4\" [style.--smx-accent]=\"profile.accentColor\">\n <!-- Cabecera -->\n <div class=\"d-flex justify-content-between align-items-center pb-3 mb-3 border-bottom\">\n <div class=\"d-flex align-items-center\">\n <div class=\"icon-header me-3\">\n <i class=\"{{ profile.headerIcon }} fs-4\"></i>\n </div>\n <div>\n <h4 class=\"fw-bold text-dark mb-0\">{{ title }}</h4>\n <span class=\"text-muted small\">{{ subtitle }}</span>\n </div>\n </div>\n <div class=\"d-flex align-items-center\">\n @if (badgeText) {\n <span class=\"badge bg-light text-primary border px-3 py-2 fs-7 fw-bold shadow-sm me-3\">\n @if (badgeIcon) {\n <i class=\"{{ badgeIcon }} me-1\"></i>\n }\n {{ badgeText }}\n </span>\n }\n </div>\n </div>\n\n <!-- Zona drag & drop -->\n <div\n class=\"upload-dropzone mb-4\"\n role=\"button\"\n [class.has-file]=\"selectedFile\"\n [class.drag-over]=\"isDragging\"\n tabindex=\"0\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"fileInput.click()\"\n (keydown.enter)=\"fileInput.click()\">\n <!-- Estado 1: sin archivo -->\n @if (!selectedFile) {\n <div>\n <div class=\"upload-icon-wrapper shadow-sm\">\n <i class=\"fa-solid fa-cloud-arrow-up fs-2\"></i>\n </div>\n <h6 class=\"fw-bold text-dark mb-1\">{{ profile.dropzoneLabel }}</h6>\n <p class=\"text-muted small mb-3\">{{ profile.formatLabel }}</p>\n <button\n type=\"button\"\n class=\"btn btn-primary px-4 py-2 fw-bold shadow-sm rounded-pill\"\n (click)=\"$event.stopPropagation(); fileInput.click()\">\n <i class=\"fa-solid fa-folder-open me-2\"></i>Explorar archivo\n </button>\n </div>\n }\n\n <!-- Estado 2: archivo seleccionado -->\n @if (selectedFile) {\n <div class=\"selected-file-card\">\n <div class=\"file-icon shadow-sm\">\n <i class=\"{{ profile.fileIcon }} fs-3\"></i>\n </div>\n <div class=\"file-details\">\n <div class=\"file-name\" [title]=\"selectedFile.name\">{{ selectedFile.name }}</div>\n <div class=\"file-size\"><i class=\"fa-solid fa-hard-drive me-1\"></i>{{ getFileSize(selectedFile.size) }}</div>\n </div>\n </div>\n }\n\n <input #fileInput type=\"file\" style=\"display: none\" [attr.accept]=\"profile.acceptAttr\" (change)=\"onFileSelected($event)\" />\n </div>\n\n\n\n <!-- Footer (Controles y Botones) -->\n <div class=\"d-flex justify-content-between align-items-end pt-3 border-top\">\n <div class=\"flex-grow-1 me-4\">\n @if (data.footerTemplate) {\n <ng-container *ngTemplateOutlet=\"data.footerTemplate\"></ng-container>\n }\n </div>\n <div>\n <button type=\"button\" class=\"btn btn-success px-5 py-2 shadow-sm fw-bold\" style=\"border-radius: 8px;\" (click)=\"onConfirm()\">\n Cargar\n </button>\n </div>\n </div>\n</div>\n", styles: [".modal-custom-container{background-color:#fff;border-radius:.75rem;font-family:inherit;color:#334155;--smx-accent: #28a745}.icon-header{width:48px;height:48px;border-radius:50%;background-color:color-mix(in srgb,var(--smx-accent) 12%,transparent);color:var(--smx-accent);display:flex;align-items:center;justify-content:center}.upload-dropzone{border:2px dashed #cbd5e1;border-radius:.75rem;background-color:#f8fafc;padding:2.5rem 1.5rem;text-align:center;cursor:pointer;transition:all .2s ease-in-out}.upload-dropzone:hover,.upload-dropzone.drag-over{border-color:var(--smx-accent);background-color:color-mix(in srgb,var(--smx-accent) 4%,transparent)}.upload-dropzone.has-file{border-style:solid;border-color:#e2e8f0;background-color:#fff;cursor:default;padding:1.5rem}.upload-icon-wrapper{width:70px;height:70px;border-radius:50%;background-color:#e2e8f0;color:#475569;display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;transition:all .2s}.upload-dropzone:hover .upload-icon-wrapper{background-color:color-mix(in srgb,var(--smx-accent) 15%,transparent);color:var(--smx-accent);transform:scale(1.05)}.selected-file-card{background-color:#f8fafc;border:1px solid #cbd5e1;border-radius:.5rem;padding:1rem;display:flex;align-items:center;justify-content:space-between;text-align:left;max-width:500px;margin:0 auto;box-shadow:0 1px 3px #0000000d}.selected-file-card .file-icon{width:46px;height:46px;border-radius:.5rem;background-color:color-mix(in srgb,var(--smx-accent) 15%,transparent);color:var(--smx-accent);display:flex;align-items:center;justify-content:center;margin-right:1rem;flex-shrink:0}.selected-file-card .file-details{overflow:hidden;flex-grow:1;margin-right:1rem}.selected-file-card .file-details .file-name{font-weight:600;color:#1e293b;margin-bottom:.2rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.selected-file-card .file-details .file-size{font-size:.75rem;color:#64748b}::ng-deep .smx-upload-dropdown-panel{width:auto!important;min-width:250px!important;max-width:400px!important}\n"] }]
|
|
11506
11506
|
}] });
|
|
11507
11507
|
|
|
11508
11508
|
/**
|