ng-components-tsi 0.0.56 → 0.0.57

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.
@@ -241,12 +241,23 @@ class ButtonComponent {
241
241
  getWidthClass() {
242
242
  return this.isFullWidth() ? 'w-100' : 'w-auto w-sm-100';
243
243
  }
244
+ iconsWithImage = ['sunat', 'bcp', 'ibk', 'bbva'];
245
+ isImageIcon = (icon) => this.iconsWithImage.includes(icon);
246
+ getImageName = () => {
247
+ const imageIcon = {
248
+ 'sunat': 'Sunat.ico',
249
+ 'bcp': 'BCP.svg',
250
+ 'ibk': 'IBK.svg',
251
+ 'bbva': 'BBVA.svg'
252
+ };
253
+ return `assets/images/${imageIcon[this.icon()]}`;
254
+ };
244
255
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
245
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: ButtonComponent, isStandalone: true, selector: "app-button", inputs: { autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, outline: { classPropertyName: "outline", publicName: "outline", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, texto: { classPropertyName: "texto", publicName: "texto", isSignal: true, isRequired: false, transformFunction: null }, isHtml: { classPropertyName: "isHtml", publicName: "isHtml", isSignal: true, isRequired: false, transformFunction: null }, closeButton: { classPropertyName: "closeButton", publicName: "closeButton", isSignal: true, isRequired: false, transformFunction: null }, sunatButton: { classPropertyName: "sunatButton", publicName: "sunatButton", isSignal: true, isRequired: false, transformFunction: null }, inputButton: { classPropertyName: "inputButton", publicName: "inputButton", isSignal: true, isRequired: false, transformFunction: null }, buttonDeshabilitado: { classPropertyName: "buttonDeshabilitado", publicName: "buttonDeshabilitado", isSignal: true, isRequired: false, transformFunction: null }, atajo: { classPropertyName: "atajo", publicName: "atajo", isSignal: true, isRequired: false, transformFunction: null }, dropdownButton: { classPropertyName: "dropdownButton", publicName: "dropdownButton", isSignal: true, isRequired: false, transformFunction: null }, extraClass: { classPropertyName: "extraClass", publicName: "extraClass", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, uploadButton: { classPropertyName: "uploadButton", publicName: "uploadButton", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, isRounded: { classPropertyName: "isRounded", publicName: "isRounded", isSignal: true, isRequired: false, transformFunction: null }, isNotStyle: { classPropertyName: "isNotStyle", publicName: "isNotStyle", isSignal: true, isRequired: false, transformFunction: null }, isFullWidth: { classPropertyName: "isFullWidth", publicName: "isFullWidth", isSignal: true, isRequired: false, transformFunction: null }, paddingX: { classPropertyName: "paddingX", publicName: "paddingX", isSignal: true, isRequired: false, transformFunction: null }, paddingY: { classPropertyName: "paddingY", publicName: "paddingY", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { accion: "accion", fileSelected: "fileSelected" }, viewQueries: [{ propertyName: "buttonNormal", first: true, predicate: ["boton"], descendants: true, isSignal: true }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "@if(!closeButton() && !dropdownButton() && !uploadButton() && !sunatButton() && ! inputButton()){\r\n<button atajoTecla #boton [altKeyCombination]=\"atajo()\"\r\n (emitirAtajo)=\"disabled() ? null : ( atajo() ? ejecutarAccion() : null)\" [title]=\"construirAlt()\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n [style.--focus-color-rgb]=\"getFocusColor()\"\r\n [style.--focus-color]=\"'rgba(' + getFocusColor() + ',0.5)'\"\r\n [ngClass]=\"getClasses()\" (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\"\r\n [id]=\"`id_button_${texto()}`\">\r\n @if (icon() == 'sunat') {\r\n <img src=\"assets/images/Sunat.ico\" class=\"button-icon-hover\" height=\"16px\" alt=\"Sunat\">\r\n }@else {\r\n <i [ngClass]=\"getIconClass()\" class=\"button-icon-hover\"></i>\r\n }\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n</button>\r\n}\r\n@if(sunatButton()){\r\n<button atajoTecla [altKeyCombination]=\"atajo()\"\r\n (emitirAtajo)=\"disabled() ? null : ( atajo() ? ejecutarAccion() : null)\"\r\n class=\"btn btn-rounded button-tilt-hover text-white me-1 fs-8 px-3 w-auto w-sm-100\"\r\n [ngClass]=\"[outline() ? getColorClassOutline() : getColorClass()]\" (click)=\"ejecutarAccion()\"\r\n [disabled]=\"disabled()\">\r\n <img src=\"../../../../../assets/images/Sunat.ico\" class=\"button-icon-hover\" height=\"16px\" alt=\"Sunat\"> {{texto() ?\r\n texto() : 'Importar de SUNAT'}}\r\n</button>\r\n}\r\n\r\n@if(inputButton()){\r\n<button class=\"btn button-tilt-hover text-white me-1 fs-6 px-3 py-0 w-auto w-sm-100 radius-none padd\"\r\n [ngClass]=\"[outline() ? getColorClassOutline() : getColorClass(), !texto() ? 'boton-buscar' : '']\"\r\n (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\">\r\n <i [ngClass]=\"getIconClass()\" class=\"button-icon-hover\"></i>\r\n @if(texto()){\r\n <span>{{ texto() }}</span>\r\n }\r\n</button>\r\n}\r\n\r\n@if(closeButton()){\r\n<button class=\"btn close fs-5 no-border\" (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\">\r\n <i class=\"me-1 button-icon-hover text-dark fw-bold\" [ngClass]=\"getIconClass()\"></i>\r\n</button>\r\n}\r\n\r\n@if(dropdownButton()){\r\n<button class=\"dropdown-item fs-6\" (click)=\"handleClick($event)\" [disabled]=\"disabled()\" [ngClass]=\"extraClass()\"\r\n [ngbTooltip]=\"tooltip()\" [style.cursor]=\"shouldBlockClick() ? 'not-allowed' : 'pointer'\" placement=\"right\">\r\n <i class=\"me-1\" [ngClass]=\"getIconClass()\"></i>\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n @if(uploadButton()){\r\n <input type=\"file\" #fileInput [accept]=\"accept()\" (change)=\"handleFileInput($event)\" [disabled]=\"disabled()\"\r\n class=\"d-none\">\r\n }\r\n</button>\r\n}\r\n\r\n@if(uploadButton() && !dropdownButton()){\r\n<button class=\"btn btn-rounded button-tilt-hover text-white me-1 fs-8 px-3 w-auto w-sm-100\"\r\n [ngClass]=\"outline() ? getColorClassOutline() : getColorClass()\" (click)=\"triggerFileInput()\"\r\n [disabled]=\"disabled()\" [ngbTooltip]=\"tooltip()\" type=\"button\">\r\n <i [ngClass]=\"getIconClass()\" class=\"me-1 button-icon-hover\"></i>\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n <input type=\"file\" #fileInput [accept]=\"accept()\" (change)=\"handleFileInput($event)\" [disabled]=\"disabled()\"\r\n class=\"d-none\">\r\n</button>\r\n}", styles: [".no-border{border:none!important}.button-icon-hover{display:inline-block}.btn{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes tilt-bounce{0%,to{transform:rotate(0)}25%{transform:rotate(-.5deg)}75%{transform:rotate(.5deg)}}@keyframes icon-rotate-pop{0%{transform:rotate(0) scale(1)}25%{transform:rotate(10deg) scale(1.05)}50%{transform:rotate(-10deg) scale(1.1)}75%{transform:rotate(10deg) scale(1.05)}to{transform:rotate(0) scale(1)}}.button-tilt-hover:hover{animation:tilt-bounce .6s infinite ease-in-out,aura-pulse 1.5s ease-out infinite}.button-tilt-hover:hover .button-icon-hover{animation:icon-rotate-pop 1s ease-in-out infinite}.dropdown-item{font-size:12px!important;padding:7px 20px;color:#757575;transition:color .3s ease-in-out}.dropdown-item:hover{background:#e8e8e8;color:#222}.tooltip-inner{white-space:nowrap;max-width:none!important}:host ::ng-deep .tooltip-inner{white-space:nowrap;max-width:none!important}.radius-none{border-radius:0}.padd{padding:3px 8px!important}.circle{width:40px!important;height:40px!important;min-width:40px!important;min-height:40px!important;max-width:40px!important;max-height:40px!important;border-radius:100%;color:#fff;transition:box-shadow .3s ease;display:flex!important;justify-content:center!important;align-items:center!important}.circle:hover{box-shadow:0 4px 12px #0003}@keyframes aura-pulse{0%{box-shadow:0 0 0 0 var(--focus-color, rgba(0, 123, 255, .5))}50%{box-shadow:0 0 0 6px rgba(var(--focus-color-rgb, 0, 123, 255),.2)}to{box-shadow:0 0 0 0 var(--focus-color, rgba(0, 123, 255, 0))}}.aura-focus{animation:aura-pulse 1.5s ease-out infinite;outline:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "directive", type: i1$1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: AtajosDirective, selector: "[atajoTecla]", inputs: ["altKeyCombination"], outputs: ["emitirAtajo"] }] });
256
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: ButtonComponent, isStandalone: true, selector: "app-button", inputs: { autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, outline: { classPropertyName: "outline", publicName: "outline", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, tooltip: { classPropertyName: "tooltip", publicName: "tooltip", isSignal: true, isRequired: false, transformFunction: null }, texto: { classPropertyName: "texto", publicName: "texto", isSignal: true, isRequired: false, transformFunction: null }, isHtml: { classPropertyName: "isHtml", publicName: "isHtml", isSignal: true, isRequired: false, transformFunction: null }, closeButton: { classPropertyName: "closeButton", publicName: "closeButton", isSignal: true, isRequired: false, transformFunction: null }, sunatButton: { classPropertyName: "sunatButton", publicName: "sunatButton", isSignal: true, isRequired: false, transformFunction: null }, inputButton: { classPropertyName: "inputButton", publicName: "inputButton", isSignal: true, isRequired: false, transformFunction: null }, buttonDeshabilitado: { classPropertyName: "buttonDeshabilitado", publicName: "buttonDeshabilitado", isSignal: true, isRequired: false, transformFunction: null }, atajo: { classPropertyName: "atajo", publicName: "atajo", isSignal: true, isRequired: false, transformFunction: null }, dropdownButton: { classPropertyName: "dropdownButton", publicName: "dropdownButton", isSignal: true, isRequired: false, transformFunction: null }, extraClass: { classPropertyName: "extraClass", publicName: "extraClass", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, uploadButton: { classPropertyName: "uploadButton", publicName: "uploadButton", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, isRounded: { classPropertyName: "isRounded", publicName: "isRounded", isSignal: true, isRequired: false, transformFunction: null }, isNotStyle: { classPropertyName: "isNotStyle", publicName: "isNotStyle", isSignal: true, isRequired: false, transformFunction: null }, isFullWidth: { classPropertyName: "isFullWidth", publicName: "isFullWidth", isSignal: true, isRequired: false, transformFunction: null }, paddingX: { classPropertyName: "paddingX", publicName: "paddingX", isSignal: true, isRequired: false, transformFunction: null }, paddingY: { classPropertyName: "paddingY", publicName: "paddingY", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { accion: "accion", fileSelected: "fileSelected" }, viewQueries: [{ propertyName: "buttonNormal", first: true, predicate: ["boton"], descendants: true, isSignal: true }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: "@if(!closeButton() && !dropdownButton() && !uploadButton() && ! inputButton()){\r\n<button atajoTecla #boton [altKeyCombination]=\"atajo()\"\r\n (emitirAtajo)=\"disabled() ? null : ( atajo() ? ejecutarAccion() : null)\" [title]=\"construirAlt()\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n [style.--focus-color-rgb]=\"getFocusColor()\"\r\n [style.--focus-color]=\"'rgba(' + getFocusColor() + ',0.5)'\"\r\n [ngClass]=\"getClasses()\" (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\"\r\n [id]=\"`id_button_${texto()}`\">\r\n @if (isImageIcon(icon())) {\r\n <img [src]=\"getImageName()\" class=\"button-icon-hover\" height=\"16px\">\r\n }\r\n @else {\r\n <i [ngClass]=\"getIconClass()\" class=\"button-icon-hover\"></i>\r\n }\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n</button>\r\n}\r\n\r\n@if(inputButton()){\r\n<button class=\"btn button-tilt-hover text-white me-1 fs-6 px-3 py-0 w-auto w-sm-100 radius-none padd\"\r\n [ngClass]=\"[outline() ? getColorClassOutline() : getColorClass(), !texto() ? 'boton-buscar' : '']\"\r\n (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\">\r\n <i [ngClass]=\"getIconClass()\" class=\"button-icon-hover\"></i>\r\n @if(texto()){\r\n <span>{{ texto() }}</span>\r\n }\r\n</button>\r\n}\r\n\r\n@if(closeButton()){\r\n<button class=\"btn close fs-5 no-border\" (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\">\r\n <i class=\"me-1 button-icon-hover text-dark fw-bold\" [ngClass]=\"getIconClass()\"></i>\r\n</button>\r\n}\r\n\r\n@if(dropdownButton()){\r\n<button class=\"dropdown-item fs-6\" (click)=\"handleClick($event)\" [disabled]=\"disabled()\" [ngClass]=\"extraClass()\"\r\n [ngbTooltip]=\"tooltip()\" [style.cursor]=\"shouldBlockClick() ? 'not-allowed' : 'pointer'\" placement=\"right\">\r\n \r\n @if (isImageIcon(icon())) {\r\n <img [src]=\"getImageName()\" class=\"me-1 button-icon-hover\" height=\"16px\" [alt]=\"icon()\" >\r\n }\r\n @else {\r\n <i [ngClass]=\"getIconClass()\" class=\"me-1\"></i>\r\n }\r\n\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n @if(uploadButton()){\r\n <input type=\"file\" #fileInput [accept]=\"accept()\" (change)=\"handleFileInput($event)\" [disabled]=\"disabled()\"\r\n class=\"d-none\">\r\n }\r\n</button>\r\n}\r\n\r\n@if(uploadButton() && !dropdownButton()){\r\n<button class=\"btn btn-rounded button-tilt-hover text-white me-1 fs-8 px-3 w-auto w-sm-100\"\r\n [ngClass]=\"outline() ? getColorClassOutline() : getColorClass()\" (click)=\"triggerFileInput()\"\r\n [disabled]=\"disabled()\" [ngbTooltip]=\"tooltip()\" type=\"button\">\r\n <i [ngClass]=\"getIconClass()\" class=\"me-1 button-icon-hover\"></i>\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n <input type=\"file\" #fileInput [accept]=\"accept()\" (change)=\"handleFileInput($event)\" [disabled]=\"disabled()\"\r\n class=\"d-none\">\r\n</button>\r\n}", styles: [".no-border{border:none!important}.button-icon-hover{display:inline-block}.btn{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes tilt-bounce{0%,to{transform:rotate(0)}25%{transform:rotate(-.5deg)}75%{transform:rotate(.5deg)}}@keyframes icon-rotate-pop{0%{transform:rotate(0) scale(1)}25%{transform:rotate(10deg) scale(1.05)}50%{transform:rotate(-10deg) scale(1.1)}75%{transform:rotate(10deg) scale(1.05)}to{transform:rotate(0) scale(1)}}.button-tilt-hover:hover{animation:tilt-bounce .6s infinite ease-in-out,aura-pulse 1.5s ease-out infinite}.button-tilt-hover:hover .button-icon-hover{animation:icon-rotate-pop 1s ease-in-out infinite}.dropdown-item{font-size:12px!important;padding:7px 20px;color:#757575;transition:color .3s ease-in-out}.dropdown-item:hover{background:#e8e8e8;color:#222}.tooltip-inner{white-space:nowrap;max-width:none!important}:host ::ng-deep .tooltip-inner{white-space:nowrap;max-width:none!important}.radius-none{border-radius:0}.padd{padding:3px 8px!important}.circle{width:40px!important;height:40px!important;min-width:40px!important;min-height:40px!important;max-width:40px!important;max-height:40px!important;border-radius:100%;color:#fff;transition:box-shadow .3s ease;display:flex!important;justify-content:center!important;align-items:center!important}.circle:hover{box-shadow:0 4px 12px #0003}@keyframes aura-pulse{0%{box-shadow:0 0 0 0 var(--focus-color, rgba(0, 123, 255, .5))}50%{box-shadow:0 0 0 6px rgba(var(--focus-color-rgb, 0, 123, 255),.2)}to{box-shadow:0 0 0 0 var(--focus-color, rgba(0, 123, 255, 0))}}.aura-focus{animation:aura-pulse 1.5s ease-out infinite;outline:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "directive", type: i1$1.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: AtajosDirective, selector: "[atajoTecla]", inputs: ["altKeyCombination"], outputs: ["emitirAtajo"] }] });
246
257
  }
247
258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ButtonComponent, decorators: [{
248
259
  type: Component,
249
- args: [{ selector: 'app-button', imports: [CommonModule, NgbTooltipModule, AtajosDirective], template: "@if(!closeButton() && !dropdownButton() && !uploadButton() && !sunatButton() && ! inputButton()){\r\n<button atajoTecla #boton [altKeyCombination]=\"atajo()\"\r\n (emitirAtajo)=\"disabled() ? null : ( atajo() ? ejecutarAccion() : null)\" [title]=\"construirAlt()\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n [style.--focus-color-rgb]=\"getFocusColor()\"\r\n [style.--focus-color]=\"'rgba(' + getFocusColor() + ',0.5)'\"\r\n [ngClass]=\"getClasses()\" (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\"\r\n [id]=\"`id_button_${texto()}`\">\r\n @if (icon() == 'sunat') {\r\n <img src=\"assets/images/Sunat.ico\" class=\"button-icon-hover\" height=\"16px\" alt=\"Sunat\">\r\n }@else {\r\n <i [ngClass]=\"getIconClass()\" class=\"button-icon-hover\"></i>\r\n }\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n</button>\r\n}\r\n@if(sunatButton()){\r\n<button atajoTecla [altKeyCombination]=\"atajo()\"\r\n (emitirAtajo)=\"disabled() ? null : ( atajo() ? ejecutarAccion() : null)\"\r\n class=\"btn btn-rounded button-tilt-hover text-white me-1 fs-8 px-3 w-auto w-sm-100\"\r\n [ngClass]=\"[outline() ? getColorClassOutline() : getColorClass()]\" (click)=\"ejecutarAccion()\"\r\n [disabled]=\"disabled()\">\r\n <img src=\"../../../../../assets/images/Sunat.ico\" class=\"button-icon-hover\" height=\"16px\" alt=\"Sunat\"> {{texto() ?\r\n texto() : 'Importar de SUNAT'}}\r\n</button>\r\n}\r\n\r\n@if(inputButton()){\r\n<button class=\"btn button-tilt-hover text-white me-1 fs-6 px-3 py-0 w-auto w-sm-100 radius-none padd\"\r\n [ngClass]=\"[outline() ? getColorClassOutline() : getColorClass(), !texto() ? 'boton-buscar' : '']\"\r\n (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\">\r\n <i [ngClass]=\"getIconClass()\" class=\"button-icon-hover\"></i>\r\n @if(texto()){\r\n <span>{{ texto() }}</span>\r\n }\r\n</button>\r\n}\r\n\r\n@if(closeButton()){\r\n<button class=\"btn close fs-5 no-border\" (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\">\r\n <i class=\"me-1 button-icon-hover text-dark fw-bold\" [ngClass]=\"getIconClass()\"></i>\r\n</button>\r\n}\r\n\r\n@if(dropdownButton()){\r\n<button class=\"dropdown-item fs-6\" (click)=\"handleClick($event)\" [disabled]=\"disabled()\" [ngClass]=\"extraClass()\"\r\n [ngbTooltip]=\"tooltip()\" [style.cursor]=\"shouldBlockClick() ? 'not-allowed' : 'pointer'\" placement=\"right\">\r\n <i class=\"me-1\" [ngClass]=\"getIconClass()\"></i>\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n @if(uploadButton()){\r\n <input type=\"file\" #fileInput [accept]=\"accept()\" (change)=\"handleFileInput($event)\" [disabled]=\"disabled()\"\r\n class=\"d-none\">\r\n }\r\n</button>\r\n}\r\n\r\n@if(uploadButton() && !dropdownButton()){\r\n<button class=\"btn btn-rounded button-tilt-hover text-white me-1 fs-8 px-3 w-auto w-sm-100\"\r\n [ngClass]=\"outline() ? getColorClassOutline() : getColorClass()\" (click)=\"triggerFileInput()\"\r\n [disabled]=\"disabled()\" [ngbTooltip]=\"tooltip()\" type=\"button\">\r\n <i [ngClass]=\"getIconClass()\" class=\"me-1 button-icon-hover\"></i>\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n <input type=\"file\" #fileInput [accept]=\"accept()\" (change)=\"handleFileInput($event)\" [disabled]=\"disabled()\"\r\n class=\"d-none\">\r\n</button>\r\n}", styles: [".no-border{border:none!important}.button-icon-hover{display:inline-block}.btn{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes tilt-bounce{0%,to{transform:rotate(0)}25%{transform:rotate(-.5deg)}75%{transform:rotate(.5deg)}}@keyframes icon-rotate-pop{0%{transform:rotate(0) scale(1)}25%{transform:rotate(10deg) scale(1.05)}50%{transform:rotate(-10deg) scale(1.1)}75%{transform:rotate(10deg) scale(1.05)}to{transform:rotate(0) scale(1)}}.button-tilt-hover:hover{animation:tilt-bounce .6s infinite ease-in-out,aura-pulse 1.5s ease-out infinite}.button-tilt-hover:hover .button-icon-hover{animation:icon-rotate-pop 1s ease-in-out infinite}.dropdown-item{font-size:12px!important;padding:7px 20px;color:#757575;transition:color .3s ease-in-out}.dropdown-item:hover{background:#e8e8e8;color:#222}.tooltip-inner{white-space:nowrap;max-width:none!important}:host ::ng-deep .tooltip-inner{white-space:nowrap;max-width:none!important}.radius-none{border-radius:0}.padd{padding:3px 8px!important}.circle{width:40px!important;height:40px!important;min-width:40px!important;min-height:40px!important;max-width:40px!important;max-height:40px!important;border-radius:100%;color:#fff;transition:box-shadow .3s ease;display:flex!important;justify-content:center!important;align-items:center!important}.circle:hover{box-shadow:0 4px 12px #0003}@keyframes aura-pulse{0%{box-shadow:0 0 0 0 var(--focus-color, rgba(0, 123, 255, .5))}50%{box-shadow:0 0 0 6px rgba(var(--focus-color-rgb, 0, 123, 255),.2)}to{box-shadow:0 0 0 0 var(--focus-color, rgba(0, 123, 255, 0))}}.aura-focus{animation:aura-pulse 1.5s ease-out infinite;outline:none!important}\n"] }]
260
+ args: [{ selector: 'app-button', imports: [CommonModule, NgbTooltipModule, AtajosDirective], template: "@if(!closeButton() && !dropdownButton() && !uploadButton() && ! inputButton()){\r\n<button atajoTecla #boton [altKeyCombination]=\"atajo()\"\r\n (emitirAtajo)=\"disabled() ? null : ( atajo() ? ejecutarAccion() : null)\" [title]=\"construirAlt()\"\r\n (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n [style.--focus-color-rgb]=\"getFocusColor()\"\r\n [style.--focus-color]=\"'rgba(' + getFocusColor() + ',0.5)'\"\r\n [ngClass]=\"getClasses()\" (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\"\r\n [id]=\"`id_button_${texto()}`\">\r\n @if (isImageIcon(icon())) {\r\n <img [src]=\"getImageName()\" class=\"button-icon-hover\" height=\"16px\">\r\n }\r\n @else {\r\n <i [ngClass]=\"getIconClass()\" class=\"button-icon-hover\"></i>\r\n }\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n</button>\r\n}\r\n\r\n@if(inputButton()){\r\n<button class=\"btn button-tilt-hover text-white me-1 fs-6 px-3 py-0 w-auto w-sm-100 radius-none padd\"\r\n [ngClass]=\"[outline() ? getColorClassOutline() : getColorClass(), !texto() ? 'boton-buscar' : '']\"\r\n (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\">\r\n <i [ngClass]=\"getIconClass()\" class=\"button-icon-hover\"></i>\r\n @if(texto()){\r\n <span>{{ texto() }}</span>\r\n }\r\n</button>\r\n}\r\n\r\n@if(closeButton()){\r\n<button class=\"btn close fs-5 no-border\" (click)=\"ejecutarAccion()\" [disabled]=\"disabled()\">\r\n <i class=\"me-1 button-icon-hover text-dark fw-bold\" [ngClass]=\"getIconClass()\"></i>\r\n</button>\r\n}\r\n\r\n@if(dropdownButton()){\r\n<button class=\"dropdown-item fs-6\" (click)=\"handleClick($event)\" [disabled]=\"disabled()\" [ngClass]=\"extraClass()\"\r\n [ngbTooltip]=\"tooltip()\" [style.cursor]=\"shouldBlockClick() ? 'not-allowed' : 'pointer'\" placement=\"right\">\r\n \r\n @if (isImageIcon(icon())) {\r\n <img [src]=\"getImageName()\" class=\"me-1 button-icon-hover\" height=\"16px\" [alt]=\"icon()\" >\r\n }\r\n @else {\r\n <i [ngClass]=\"getIconClass()\" class=\"me-1\"></i>\r\n }\r\n\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n @if(uploadButton()){\r\n <input type=\"file\" #fileInput [accept]=\"accept()\" (change)=\"handleFileInput($event)\" [disabled]=\"disabled()\"\r\n class=\"d-none\">\r\n }\r\n</button>\r\n}\r\n\r\n@if(uploadButton() && !dropdownButton()){\r\n<button class=\"btn btn-rounded button-tilt-hover text-white me-1 fs-8 px-3 w-auto w-sm-100\"\r\n [ngClass]=\"outline() ? getColorClassOutline() : getColorClass()\" (click)=\"triggerFileInput()\"\r\n [disabled]=\"disabled()\" [ngbTooltip]=\"tooltip()\" type=\"button\">\r\n <i [ngClass]=\"getIconClass()\" class=\"me-1 button-icon-hover\"></i>\r\n @if(texto()){\r\n <span [innerHTML]=\"isHtml() ? getSafeHtml() : texto()\"></span>\r\n }\r\n <input type=\"file\" #fileInput [accept]=\"accept()\" (change)=\"handleFileInput($event)\" [disabled]=\"disabled()\"\r\n class=\"d-none\">\r\n</button>\r\n}", styles: [".no-border{border:none!important}.button-icon-hover{display:inline-block}.btn{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@keyframes tilt-bounce{0%,to{transform:rotate(0)}25%{transform:rotate(-.5deg)}75%{transform:rotate(.5deg)}}@keyframes icon-rotate-pop{0%{transform:rotate(0) scale(1)}25%{transform:rotate(10deg) scale(1.05)}50%{transform:rotate(-10deg) scale(1.1)}75%{transform:rotate(10deg) scale(1.05)}to{transform:rotate(0) scale(1)}}.button-tilt-hover:hover{animation:tilt-bounce .6s infinite ease-in-out,aura-pulse 1.5s ease-out infinite}.button-tilt-hover:hover .button-icon-hover{animation:icon-rotate-pop 1s ease-in-out infinite}.dropdown-item{font-size:12px!important;padding:7px 20px;color:#757575;transition:color .3s ease-in-out}.dropdown-item:hover{background:#e8e8e8;color:#222}.tooltip-inner{white-space:nowrap;max-width:none!important}:host ::ng-deep .tooltip-inner{white-space:nowrap;max-width:none!important}.radius-none{border-radius:0}.padd{padding:3px 8px!important}.circle{width:40px!important;height:40px!important;min-width:40px!important;min-height:40px!important;max-width:40px!important;max-height:40px!important;border-radius:100%;color:#fff;transition:box-shadow .3s ease;display:flex!important;justify-content:center!important;align-items:center!important}.circle:hover{box-shadow:0 4px 12px #0003}@keyframes aura-pulse{0%{box-shadow:0 0 0 0 var(--focus-color, rgba(0, 123, 255, .5))}50%{box-shadow:0 0 0 6px rgba(var(--focus-color-rgb, 0, 123, 255),.2)}to{box-shadow:0 0 0 0 var(--focus-color, rgba(0, 123, 255, 0))}}.aura-focus{animation:aura-pulse 1.5s ease-out infinite;outline:none!important}\n"] }]
250
261
  }], ctorParameters: () => [], propDecorators: { fileInput: [{
251
262
  type: ViewChild,
252
263
  args: ['fileInput']
@@ -450,11 +461,11 @@ class AlertErrorComponent {
450
461
  this.activeModal.close(true);
451
462
  }
452
463
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: AlertErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
453
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: AlertErrorComponent, isStandalone: true, selector: "app-alert-error", ngImport: i0, template: "<div class=\"alert-error-container\">\n\n <div class=\"icon-wrapper\">\n <div class=\"icon-circle\">\n <i class=\"fas fa-exclamation\"></i>\n </div>\n <div class=\"icon-badge\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n </div>\n </div>\n\n <h2 class=\"error-title text-dark\">{{ titulo() }}</h2>\n\n <p class=\"error-message\" [innerHTML]=\"mensajeFormateado()\"></p>\n\n <div class=\"actions\">\n <app-button texto=\"Aceptar\" color=\"rojo_alerta\" [isFullWidth]=\"true\" (accion)=\"onAceptar()\" [autoFocus]=\"true\" paddingY=\"py-2\" />\n </div>\n\n @if (codigoEstado() || idTraza() || timestamp()) {\n <div class=\"technical-details\">\n <div class=\"tech-header\">\n <i class=\"fas fa-terminal\"></i>\n <span>DETALLES T\u00C9CNICOS</span>\n </div>\n @if (codigoEstado()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">C\u00D3DIGO_ESTADO:</span>\n <span class=\"tech-value error-code\">{{ codigoEstado() }}</span>\n </div>\n }\n @if (idTraza()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">ID_TRAZA:</span>\n <span class=\"tech-value\">{{ idTraza() }}</span>\n </div>\n }\n @if (timestamp()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">TIMESTAMP:</span>\n <span class=\"tech-value\">{{ timestamp() }}</span>\n </div>\n }\n </div>\n }\n\n</div>\n", styles: [".alert-error-container{border-radius:16px;padding:40px 30px 32px;text-align:center;margin:0 auto}@keyframes errorEntrance{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.15);opacity:1}80%{transform:scale(.95)}to{transform:scale(1)}}@keyframes errorPulse{0%,to{box-shadow:0 8px 24px #c81e1e66}50%{box-shadow:0 8px 32px #c81e1ebf,0 0 0 10px #c81e1e14}}@keyframes badgeBounce{0%{transform:scale(0);opacity:0}70%{transform:scale(1.25);opacity:1}to{transform:scale(1)}}.icon-wrapper{position:relative;display:inline-block;margin-bottom:24px}.icon-circle{width:80px;height:80px;background:linear-gradient(135deg,#f05252,#c81e1e);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px #c81e1e66;animation:errorEntrance .5s cubic-bezier(.36,.07,.19,.97) both,errorPulse 2.4s ease-in-out .5s infinite}.icon-circle i{color:#fff;font-size:36px;font-weight:900}.icon-badge{position:absolute;top:-4px;right:-6px;width:26px;height:26px;background-color:var(--background-card);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #0000001f;animation:badgeBounce .4s cubic-bezier(.36,.07,.19,.97) .4s both}.icon-badge i{color:#be0000;font-size:12px}.error-title{font-size:1.5rem;font-weight:700;margin-bottom:12px}.error-message{font-size:.95rem;color:#6b7280;line-height:1.6;margin-bottom:28px}.actions{display:flex;flex-direction:column;align-items:center;gap:12px;margin-bottom:28px}.actions app-button{width:100%}.btn-cerrar{background:none;border:none;padding:6px 16px;font-size:.95rem;color:#374151;cursor:pointer;font-weight:500}.btn-cerrar:hover{color:#1a1a2e;text-decoration:underline}.technical-details{background-color:var(--background-color);border:var(--border-table-header);border-radius:10px;padding:16px 20px;text-align:left}.tech-header{display:flex;align-items:center;gap:8px;margin-bottom:12px}.tech-header i{color:#8a8a8a;font-size:12px}.tech-header span{font-size:.7rem;font-weight:700;color:#64748b;letter-spacing:.08em;text-transform:uppercase}.tech-row{display:flex;justify-content:space-between;align-items:center;padding:3px 0}.tech-row .tech-label{font-size:.72rem;color:#929292;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.tech-row .tech-value{font-size:.78rem;color:#475569;font-family:monospace}.tech-row .tech-value.error-code{color:#e0352b;font-weight:700;text-transform:uppercase}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["autoFocus", "color", "outline", "icon", "tooltip", "texto", "isHtml", "closeButton", "sunatButton", "inputButton", "buttonDeshabilitado", "atajo", "dropdownButton", "extraClass", "disabled", "uploadButton", "accept", "isRounded", "isNotStyle", "isFullWidth", "paddingX", "paddingY"], outputs: ["accion", "fileSelected"] }] });
464
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: AlertErrorComponent, isStandalone: true, selector: "app-alert-error", ngImport: i0, template: "<div class=\"alert-error-container\">\n\n <div class=\"alert-error-content\">\n\n <div class=\"icon-wrapper\">\n <div class=\"icon-circle\">\n <i class=\"fas fa-exclamation\"></i>\n </div>\n <div class=\"icon-badge\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n </div>\n </div>\n\n <h2 class=\"error-title text-dark\">{{ titulo() }}</h2>\n\n <p class=\"error-message\" [innerHTML]=\"mensajeFormateado()\"></p>\n\n @if (codigoEstado() || idTraza() || timestamp()) {\n <div class=\"technical-details\">\n <div class=\"tech-header\">\n <i class=\"fas fa-terminal\"></i>\n <span>DETALLES T\u00C9CNICOS</span>\n </div>\n @if (codigoEstado()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">C\u00D3DIGO_ESTADO:</span>\n <span class=\"tech-value error-code\">{{ codigoEstado() }}</span>\n </div>\n }\n @if (idTraza()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">ID_TRAZA:</span>\n <span class=\"tech-value\">{{ idTraza() }}</span>\n </div>\n }\n @if (timestamp()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">TIMESTAMP:</span>\n <span class=\"tech-value\">{{ timestamp() }}</span>\n </div>\n }\n </div>\n }\n\n </div>\n\n <div class=\"actions\">\n <app-button texto=\"Aceptar\" color=\"rojo_alerta\" [isFullWidth]=\"true\" (accion)=\"onAceptar()\" [autoFocus]=\"true\"\n paddingY=\"py-2\" />\n </div>\n\n</div>", styles: [".alert-error-container{border-radius:16px;display:flex;flex-direction:column;max-height:85vh;overflow:hidden}.alert-error-content{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding:40px 30px 24px;text-align:center}.alert-error-content::-webkit-scrollbar{width:5px}.alert-error-content::-webkit-scrollbar-track{background:transparent}.alert-error-content::-webkit-scrollbar-thumb{background-color:#00000026;border-radius:3px}@keyframes errorEntrance{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.15);opacity:1}80%{transform:scale(.95)}to{transform:scale(1)}}@keyframes errorPulse{0%,to{box-shadow:0 8px 24px #c81e1e66}50%{box-shadow:0 8px 32px #c81e1ebf,0 0 0 10px #c81e1e14}}@keyframes badgeBounce{0%{transform:scale(0);opacity:0}70%{transform:scale(1.25);opacity:1}to{transform:scale(1)}}.icon-wrapper{position:relative;display:inline-block;margin-bottom:24px}.icon-circle{width:80px;height:80px;background:linear-gradient(135deg,#f05252,#c81e1e);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px #c81e1e66;animation:errorEntrance .5s cubic-bezier(.36,.07,.19,.97) both,errorPulse 2.4s ease-in-out .5s infinite}.icon-circle i{color:#fff;font-size:36px;font-weight:900}.icon-badge{position:absolute;top:-4px;right:-6px;width:26px;height:26px;background-color:var(--background-card);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #0000001f;animation:badgeBounce .4s cubic-bezier(.36,.07,.19,.97) .4s both}.icon-badge i{color:#be0000;font-size:12px}.error-title{font-size:1.5rem;font-weight:700;margin-bottom:12px}.error-message{font-size:.95rem;color:#6b7280;line-height:1.6;margin-bottom:28px;word-break:break-word;overflow-wrap:break-word}.actions{flex-shrink:0;padding:16px 30px 24px;border-top:1px solid rgba(0,0,0,.06)}.actions app-button{width:100%}.btn-cerrar{background:none;border:none;padding:6px 16px;font-size:.95rem;color:#374151;cursor:pointer;font-weight:500}.btn-cerrar:hover{color:#1a1a2e;text-decoration:underline}.technical-details{background-color:var(--background-color);border:var(--border-table-header);border-radius:10px;padding:16px 20px;text-align:left}.tech-header{display:flex;align-items:center;gap:8px;margin-bottom:12px}.tech-header i{color:#8a8a8a;font-size:12px}.tech-header span{font-size:.7rem;font-weight:700;color:#64748b;letter-spacing:.08em;text-transform:uppercase}.tech-row{display:flex;justify-content:space-between;align-items:center;padding:3px 0}.tech-row .tech-label{font-size:.72rem;color:#929292;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.tech-row .tech-value{font-size:.78rem;color:#475569;font-family:monospace;word-break:break-all;max-width:65%;text-align:right}.tech-row .tech-value.error-code{color:#e0352b;font-weight:700;text-transform:uppercase}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["autoFocus", "color", "outline", "icon", "tooltip", "texto", "isHtml", "closeButton", "sunatButton", "inputButton", "buttonDeshabilitado", "atajo", "dropdownButton", "extraClass", "disabled", "uploadButton", "accept", "isRounded", "isNotStyle", "isFullWidth", "paddingX", "paddingY"], outputs: ["accion", "fileSelected"] }] });
454
465
  }
455
466
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: AlertErrorComponent, decorators: [{
456
467
  type: Component,
457
- args: [{ selector: 'app-alert-error', imports: [CommonModule, ButtonComponent], template: "<div class=\"alert-error-container\">\n\n <div class=\"icon-wrapper\">\n <div class=\"icon-circle\">\n <i class=\"fas fa-exclamation\"></i>\n </div>\n <div class=\"icon-badge\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n </div>\n </div>\n\n <h2 class=\"error-title text-dark\">{{ titulo() }}</h2>\n\n <p class=\"error-message\" [innerHTML]=\"mensajeFormateado()\"></p>\n\n <div class=\"actions\">\n <app-button texto=\"Aceptar\" color=\"rojo_alerta\" [isFullWidth]=\"true\" (accion)=\"onAceptar()\" [autoFocus]=\"true\" paddingY=\"py-2\" />\n </div>\n\n @if (codigoEstado() || idTraza() || timestamp()) {\n <div class=\"technical-details\">\n <div class=\"tech-header\">\n <i class=\"fas fa-terminal\"></i>\n <span>DETALLES T\u00C9CNICOS</span>\n </div>\n @if (codigoEstado()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">C\u00D3DIGO_ESTADO:</span>\n <span class=\"tech-value error-code\">{{ codigoEstado() }}</span>\n </div>\n }\n @if (idTraza()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">ID_TRAZA:</span>\n <span class=\"tech-value\">{{ idTraza() }}</span>\n </div>\n }\n @if (timestamp()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">TIMESTAMP:</span>\n <span class=\"tech-value\">{{ timestamp() }}</span>\n </div>\n }\n </div>\n }\n\n</div>\n", styles: [".alert-error-container{border-radius:16px;padding:40px 30px 32px;text-align:center;margin:0 auto}@keyframes errorEntrance{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.15);opacity:1}80%{transform:scale(.95)}to{transform:scale(1)}}@keyframes errorPulse{0%,to{box-shadow:0 8px 24px #c81e1e66}50%{box-shadow:0 8px 32px #c81e1ebf,0 0 0 10px #c81e1e14}}@keyframes badgeBounce{0%{transform:scale(0);opacity:0}70%{transform:scale(1.25);opacity:1}to{transform:scale(1)}}.icon-wrapper{position:relative;display:inline-block;margin-bottom:24px}.icon-circle{width:80px;height:80px;background:linear-gradient(135deg,#f05252,#c81e1e);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px #c81e1e66;animation:errorEntrance .5s cubic-bezier(.36,.07,.19,.97) both,errorPulse 2.4s ease-in-out .5s infinite}.icon-circle i{color:#fff;font-size:36px;font-weight:900}.icon-badge{position:absolute;top:-4px;right:-6px;width:26px;height:26px;background-color:var(--background-card);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #0000001f;animation:badgeBounce .4s cubic-bezier(.36,.07,.19,.97) .4s both}.icon-badge i{color:#be0000;font-size:12px}.error-title{font-size:1.5rem;font-weight:700;margin-bottom:12px}.error-message{font-size:.95rem;color:#6b7280;line-height:1.6;margin-bottom:28px}.actions{display:flex;flex-direction:column;align-items:center;gap:12px;margin-bottom:28px}.actions app-button{width:100%}.btn-cerrar{background:none;border:none;padding:6px 16px;font-size:.95rem;color:#374151;cursor:pointer;font-weight:500}.btn-cerrar:hover{color:#1a1a2e;text-decoration:underline}.technical-details{background-color:var(--background-color);border:var(--border-table-header);border-radius:10px;padding:16px 20px;text-align:left}.tech-header{display:flex;align-items:center;gap:8px;margin-bottom:12px}.tech-header i{color:#8a8a8a;font-size:12px}.tech-header span{font-size:.7rem;font-weight:700;color:#64748b;letter-spacing:.08em;text-transform:uppercase}.tech-row{display:flex;justify-content:space-between;align-items:center;padding:3px 0}.tech-row .tech-label{font-size:.72rem;color:#929292;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.tech-row .tech-value{font-size:.78rem;color:#475569;font-family:monospace}.tech-row .tech-value.error-code{color:#e0352b;font-weight:700;text-transform:uppercase}\n"] }]
468
+ args: [{ selector: 'app-alert-error', imports: [CommonModule, ButtonComponent], template: "<div class=\"alert-error-container\">\n\n <div class=\"alert-error-content\">\n\n <div class=\"icon-wrapper\">\n <div class=\"icon-circle\">\n <i class=\"fas fa-exclamation\"></i>\n </div>\n <div class=\"icon-badge\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n </div>\n </div>\n\n <h2 class=\"error-title text-dark\">{{ titulo() }}</h2>\n\n <p class=\"error-message\" [innerHTML]=\"mensajeFormateado()\"></p>\n\n @if (codigoEstado() || idTraza() || timestamp()) {\n <div class=\"technical-details\">\n <div class=\"tech-header\">\n <i class=\"fas fa-terminal\"></i>\n <span>DETALLES T\u00C9CNICOS</span>\n </div>\n @if (codigoEstado()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">C\u00D3DIGO_ESTADO:</span>\n <span class=\"tech-value error-code\">{{ codigoEstado() }}</span>\n </div>\n }\n @if (idTraza()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">ID_TRAZA:</span>\n <span class=\"tech-value\">{{ idTraza() }}</span>\n </div>\n }\n @if (timestamp()) {\n <div class=\"tech-row\">\n <span class=\"tech-label\">TIMESTAMP:</span>\n <span class=\"tech-value\">{{ timestamp() }}</span>\n </div>\n }\n </div>\n }\n\n </div>\n\n <div class=\"actions\">\n <app-button texto=\"Aceptar\" color=\"rojo_alerta\" [isFullWidth]=\"true\" (accion)=\"onAceptar()\" [autoFocus]=\"true\"\n paddingY=\"py-2\" />\n </div>\n\n</div>", styles: [".alert-error-container{border-radius:16px;display:flex;flex-direction:column;max-height:85vh;overflow:hidden}.alert-error-content{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding:40px 30px 24px;text-align:center}.alert-error-content::-webkit-scrollbar{width:5px}.alert-error-content::-webkit-scrollbar-track{background:transparent}.alert-error-content::-webkit-scrollbar-thumb{background-color:#00000026;border-radius:3px}@keyframes errorEntrance{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.15);opacity:1}80%{transform:scale(.95)}to{transform:scale(1)}}@keyframes errorPulse{0%,to{box-shadow:0 8px 24px #c81e1e66}50%{box-shadow:0 8px 32px #c81e1ebf,0 0 0 10px #c81e1e14}}@keyframes badgeBounce{0%{transform:scale(0);opacity:0}70%{transform:scale(1.25);opacity:1}to{transform:scale(1)}}.icon-wrapper{position:relative;display:inline-block;margin-bottom:24px}.icon-circle{width:80px;height:80px;background:linear-gradient(135deg,#f05252,#c81e1e);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px #c81e1e66;animation:errorEntrance .5s cubic-bezier(.36,.07,.19,.97) both,errorPulse 2.4s ease-in-out .5s infinite}.icon-circle i{color:#fff;font-size:36px;font-weight:900}.icon-badge{position:absolute;top:-4px;right:-6px;width:26px;height:26px;background-color:var(--background-card);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #0000001f;animation:badgeBounce .4s cubic-bezier(.36,.07,.19,.97) .4s both}.icon-badge i{color:#be0000;font-size:12px}.error-title{font-size:1.5rem;font-weight:700;margin-bottom:12px}.error-message{font-size:.95rem;color:#6b7280;line-height:1.6;margin-bottom:28px;word-break:break-word;overflow-wrap:break-word}.actions{flex-shrink:0;padding:16px 30px 24px;border-top:1px solid rgba(0,0,0,.06)}.actions app-button{width:100%}.btn-cerrar{background:none;border:none;padding:6px 16px;font-size:.95rem;color:#374151;cursor:pointer;font-weight:500}.btn-cerrar:hover{color:#1a1a2e;text-decoration:underline}.technical-details{background-color:var(--background-color);border:var(--border-table-header);border-radius:10px;padding:16px 20px;text-align:left}.tech-header{display:flex;align-items:center;gap:8px;margin-bottom:12px}.tech-header i{color:#8a8a8a;font-size:12px}.tech-header span{font-size:.7rem;font-weight:700;color:#64748b;letter-spacing:.08em;text-transform:uppercase}.tech-row{display:flex;justify-content:space-between;align-items:center;padding:3px 0}.tech-row .tech-label{font-size:.72rem;color:#929292;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.tech-row .tech-value{font-size:.78rem;color:#475569;font-family:monospace;word-break:break-all;max-width:65%;text-align:right}.tech-row .tech-value.error-code{color:#e0352b;font-weight:700;text-transform:uppercase}\n"] }]
458
469
  }] });
459
470
 
460
471
  class BadgeComponent {
@@ -657,11 +668,11 @@ class HeaderComponent {
657
668
  this.cerrarModal.emit();
658
669
  }
659
670
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
660
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: HeaderComponent, isStandalone: true, selector: "app-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, tamanio: { classPropertyName: "tamanio", publicName: "tamanio", isSignal: true, isRequired: false, transformFunction: null }, showFiltro: { classPropertyName: "showFiltro", publicName: "showFiltro", isSignal: true, isRequired: false, transformFunction: null }, withFiltro: { classPropertyName: "withFiltro", publicName: "withFiltro", isSignal: true, isRequired: false, transformFunction: null }, hasData: { classPropertyName: "hasData", publicName: "hasData", isSignal: true, isRequired: false, transformFunction: null }, isModal: { classPropertyName: "isModal", publicName: "isModal", isSignal: true, isRequired: false, transformFunction: null }, showAlerta: { classPropertyName: "showAlerta", publicName: "showAlerta", isSignal: true, isRequired: false, transformFunction: null }, textAlerta: { classPropertyName: "textAlerta", publicName: "textAlerta", isSignal: true, isRequired: false, transformFunction: null }, validateSalto: { classPropertyName: "validateSalto", publicName: "validateSalto", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { withFiltro: "withFiltroChange", cerrarModal: "cerrarModal" }, ngImport: i0, template: "<div class=\"d-flex justify-content-between position-relative flex-wrap\"\r\n [ngClass]=\"{ 'align-items-center': !validateSalto(), 'align-items-start': validateSalto()}\">\r\n <div (click)=\"toggleFiltro()\" [ngClass]=\"{ 'cursor-pointer': !isModal() }\" class=\"d-flex align-items-center mb-2\">\r\n <h5 class=\"fw-bold no-select\" [ngClass]=\"['fs-' + tamanio(), isModal() ? 'pt-3' : 'pt-2']\">\r\n {{ title() }}\r\n </h5>\r\n @if(showFiltro()){\r\n <div [ngClass]=\"{'pt-2': isModal()}\">\r\n <app-filter-toggle [hasData]=\"hasData()\" [(withFiltro)]=\"withFiltro\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"header-actions\">\r\n @if (showAlerta()) {\r\n <app-alerta [mensaje]=\"textAlerta()\" [validateSalto]=\"validateSalto()\" />\r\n }\r\n @if(isModal()){\r\n <app-button icon=\"cerrar\" [closeButton]=\"true\" (accion)=\"cerrar()\" />\r\n }\r\n </div>\r\n</div>", styles: [".rotate-up{transform:rotate(180deg);transition:transform .3s ease}.icon-arrow{transition:transform .3s ease;margin-left:-12px;font-size:10px}.disabled-icon{opacity:.5;cursor:not-allowed}.header-actions{display:flex;align-items:center;margin-left:auto;gap:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["autoFocus", "color", "outline", "icon", "tooltip", "texto", "isHtml", "closeButton", "sunatButton", "inputButton", "buttonDeshabilitado", "atajo", "dropdownButton", "extraClass", "disabled", "uploadButton", "accept", "isRounded", "isNotStyle", "isFullWidth", "paddingX", "paddingY"], outputs: ["accion", "fileSelected"] }, { kind: "component", type: AlertaComponent, selector: "app-alerta", inputs: ["titulo", "mensaje", "iconSize", "classContainer", "paddingClass", "validateSalto"] }, { kind: "component", type: FilterToggleComponent, selector: "app-filter-toggle", inputs: ["hasData", "tamanio", "withFiltro"], outputs: ["withFiltroChange"] }] });
671
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: HeaderComponent, isStandalone: true, selector: "app-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, tamanio: { classPropertyName: "tamanio", publicName: "tamanio", isSignal: true, isRequired: false, transformFunction: null }, showFiltro: { classPropertyName: "showFiltro", publicName: "showFiltro", isSignal: true, isRequired: false, transformFunction: null }, withFiltro: { classPropertyName: "withFiltro", publicName: "withFiltro", isSignal: true, isRequired: false, transformFunction: null }, hasData: { classPropertyName: "hasData", publicName: "hasData", isSignal: true, isRequired: false, transformFunction: null }, isModal: { classPropertyName: "isModal", publicName: "isModal", isSignal: true, isRequired: false, transformFunction: null }, showAlerta: { classPropertyName: "showAlerta", publicName: "showAlerta", isSignal: true, isRequired: false, transformFunction: null }, textAlerta: { classPropertyName: "textAlerta", publicName: "textAlerta", isSignal: true, isRequired: false, transformFunction: null }, validateSalto: { classPropertyName: "validateSalto", publicName: "validateSalto", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { withFiltro: "withFiltroChange", cerrarModal: "cerrarModal" }, ngImport: i0, template: "<div class=\"header-outer\" [ngClass]=\"{ 'align-items-center': !validateSalto(), 'align-items-start': validateSalto()}\">\r\n <div class=\"header-main\">\r\n <div (click)=\"toggleFiltro()\" [ngClass]=\"{ 'cursor-pointer': !isModal() }\"\r\n class=\"header-title d-flex align-items-center mb-2\">\r\n <h5 class=\"fw-bold no-select\" [ngClass]=\"['fs-' + tamanio(), isModal() ? 'pt-3' : 'pt-2']\">\r\n {{ title() }}\r\n </h5>\r\n @if(showFiltro()){\r\n <div [ngClass]=\"{'pt-2': isModal()}\">\r\n <app-filter-toggle [hasData]=\"hasData()\" [(withFiltro)]=\"withFiltro\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (showAlerta()) {\r\n <app-alerta class=\"header-alerta\" [mensaje]=\"textAlerta()\" [validateSalto]=\"validateSalto()\" />\r\n }\r\n </div>\r\n\r\n @if(isModal()){\r\n <div class=\"header-close\">\r\n <app-button icon=\"cerrar\" [closeButton]=\"true\" (accion)=\"cerrar()\" />\r\n </div>\r\n }\r\n</div>", styles: [".header-outer{display:flex;flex-wrap:nowrap;gap:8px}.header-title{flex:1 1 auto;min-width:0}.header-main{flex:1 1 auto;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:8px}.header-alerta{margin-left:auto;flex:0 1 auto;min-width:0;max-width:100%}.header-close{flex-shrink:0;align-self:flex-start;padding-top:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ButtonComponent, selector: "app-button", inputs: ["autoFocus", "color", "outline", "icon", "tooltip", "texto", "isHtml", "closeButton", "sunatButton", "inputButton", "buttonDeshabilitado", "atajo", "dropdownButton", "extraClass", "disabled", "uploadButton", "accept", "isRounded", "isNotStyle", "isFullWidth", "paddingX", "paddingY"], outputs: ["accion", "fileSelected"] }, { kind: "component", type: AlertaComponent, selector: "app-alerta", inputs: ["titulo", "mensaje", "iconSize", "classContainer", "paddingClass", "validateSalto"] }, { kind: "component", type: FilterToggleComponent, selector: "app-filter-toggle", inputs: ["hasData", "tamanio", "withFiltro"], outputs: ["withFiltroChange"] }] });
661
672
  }
662
673
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: HeaderComponent, decorators: [{
663
674
  type: Component,
664
- args: [{ selector: 'app-header', imports: [CommonModule, ButtonComponent, AlertaComponent, FilterToggleComponent], template: "<div class=\"d-flex justify-content-between position-relative flex-wrap\"\r\n [ngClass]=\"{ 'align-items-center': !validateSalto(), 'align-items-start': validateSalto()}\">\r\n <div (click)=\"toggleFiltro()\" [ngClass]=\"{ 'cursor-pointer': !isModal() }\" class=\"d-flex align-items-center mb-2\">\r\n <h5 class=\"fw-bold no-select\" [ngClass]=\"['fs-' + tamanio(), isModal() ? 'pt-3' : 'pt-2']\">\r\n {{ title() }}\r\n </h5>\r\n @if(showFiltro()){\r\n <div [ngClass]=\"{'pt-2': isModal()}\">\r\n <app-filter-toggle [hasData]=\"hasData()\" [(withFiltro)]=\"withFiltro\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"header-actions\">\r\n @if (showAlerta()) {\r\n <app-alerta [mensaje]=\"textAlerta()\" [validateSalto]=\"validateSalto()\" />\r\n }\r\n @if(isModal()){\r\n <app-button icon=\"cerrar\" [closeButton]=\"true\" (accion)=\"cerrar()\" />\r\n }\r\n </div>\r\n</div>", styles: [".rotate-up{transform:rotate(180deg);transition:transform .3s ease}.icon-arrow{transition:transform .3s ease;margin-left:-12px;font-size:10px}.disabled-icon{opacity:.5;cursor:not-allowed}.header-actions{display:flex;align-items:center;margin-left:auto;gap:.5rem}\n"] }]
675
+ args: [{ selector: 'app-header', imports: [CommonModule, ButtonComponent, AlertaComponent, FilterToggleComponent], template: "<div class=\"header-outer\" [ngClass]=\"{ 'align-items-center': !validateSalto(), 'align-items-start': validateSalto()}\">\r\n <div class=\"header-main\">\r\n <div (click)=\"toggleFiltro()\" [ngClass]=\"{ 'cursor-pointer': !isModal() }\"\r\n class=\"header-title d-flex align-items-center mb-2\">\r\n <h5 class=\"fw-bold no-select\" [ngClass]=\"['fs-' + tamanio(), isModal() ? 'pt-3' : 'pt-2']\">\r\n {{ title() }}\r\n </h5>\r\n @if(showFiltro()){\r\n <div [ngClass]=\"{'pt-2': isModal()}\">\r\n <app-filter-toggle [hasData]=\"hasData()\" [(withFiltro)]=\"withFiltro\" />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (showAlerta()) {\r\n <app-alerta class=\"header-alerta\" [mensaje]=\"textAlerta()\" [validateSalto]=\"validateSalto()\" />\r\n }\r\n </div>\r\n\r\n @if(isModal()){\r\n <div class=\"header-close\">\r\n <app-button icon=\"cerrar\" [closeButton]=\"true\" (accion)=\"cerrar()\" />\r\n </div>\r\n }\r\n</div>", styles: [".header-outer{display:flex;flex-wrap:nowrap;gap:8px}.header-title{flex:1 1 auto;min-width:0}.header-main{flex:1 1 auto;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:8px}.header-alerta{margin-left:auto;flex:0 1 auto;min-width:0;max-width:100%}.header-close{flex-shrink:0;align-self:flex-start;padding-top:5px}\n"] }]
665
676
  }] });
666
677
 
667
678
  class AutocompleteComponent {
@@ -1288,11 +1299,11 @@ class SwitchActivoComponent {
1288
1299
  return this._checked ? this.iconOn() : this.iconOff();
1289
1300
  }
1290
1301
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SwitchActivoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1291
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.15", type: SwitchActivoComponent, isStandalone: true, selector: "app-switch-activo", inputs: { valueOn: { classPropertyName: "valueOn", publicName: "valueOn", isSignal: true, isRequired: true, transformFunction: null }, valueOff: { classPropertyName: "valueOff", publicName: "valueOff", isSignal: true, isRequired: true, transformFunction: null }, labelOn: { classPropertyName: "labelOn", publicName: "labelOn", isSignal: true, isRequired: false, transformFunction: null }, labelOff: { classPropertyName: "labelOff", publicName: "labelOff", isSignal: true, isRequired: false, transformFunction: null }, iconOn: { classPropertyName: "iconOn", publicName: "iconOn", isSignal: true, isRequired: false, transformFunction: null }, iconOff: { classPropertyName: "iconOff", publicName: "iconOff", isSignal: true, isRequired: false, transformFunction: null }, colorOn: { classPropertyName: "colorOn", publicName: "colorOn", isSignal: true, isRequired: false, transformFunction: null }, colorOff: { classPropertyName: "colorOff", publicName: "colorOff", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { model: "modelChange" }, ngImport: i0, template: "<div class=\"form-check form-switch d-flex align-items-center\">\r\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [checked]=\"_checked\" [ngClass]=\"currentColor()\"\r\n (change)=\"toggle($event)\" [id]=\"`toogle-${id()}`\" >\r\n\r\n <span class=\"switch-circle\">\r\n <i [class]=\"currentIcon()\"></i>\r\n </span>\r\n\r\n <label class=\"label-toggle\" [for]=\"`toogle-${id()}`\" >\r\n {{ currentLabel() }}\r\n </label>\r\n</div>", styles: [".form-check{display:inline-flex;align-items:center;gap:.5rem;position:relative;padding-left:0}.form-check-input{width:50px!important;height:25px!important;border-radius:1.5rem;appearance:none;outline:none;cursor:pointer;background-color:#e9ecef;border:1px solid #ffffff;transition:background-color .2s ease-in-out,border-color .2s ease-in-out;position:relative;margin:0}.switch-circle{position:absolute;top:50%;left:3px;transform:translateY(-50%);width:19px;height:19px;background-color:#fff;border-color:#000;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;color:#fff;transition:left .2s ease-in-out,background-color .2s ease-in-out,color .2s,border-color .2s;pointer-events:none;z-index:1}.form-check-input:checked~.switch-circle{left:28px;background-color:#fff;border-color:#000;color:#fff}.label-toggle{min-width:50px;text-align:center}.form-check-input:focus{box-shadow:none!important}.bg-error{background:#e70045}.bg-exito{background:#00e68e}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
1302
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: SwitchActivoComponent, isStandalone: true, selector: "app-switch-activo", inputs: { valueOn: { classPropertyName: "valueOn", publicName: "valueOn", isSignal: true, isRequired: true, transformFunction: null }, valueOff: { classPropertyName: "valueOff", publicName: "valueOff", isSignal: true, isRequired: true, transformFunction: null }, labelOn: { classPropertyName: "labelOn", publicName: "labelOn", isSignal: true, isRequired: false, transformFunction: null }, labelOff: { classPropertyName: "labelOff", publicName: "labelOff", isSignal: true, isRequired: false, transformFunction: null }, iconOn: { classPropertyName: "iconOn", publicName: "iconOn", isSignal: true, isRequired: false, transformFunction: null }, iconOff: { classPropertyName: "iconOff", publicName: "iconOff", isSignal: true, isRequired: false, transformFunction: null }, colorOn: { classPropertyName: "colorOn", publicName: "colorOn", isSignal: true, isRequired: false, transformFunction: null }, colorOff: { classPropertyName: "colorOff", publicName: "colorOff", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { model: "modelChange" }, ngImport: i0, template: "<div class=\"form-check form-switch d-flex align-items-center\">\r\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [checked]=\"_checked\" [ngClass]=\"currentColor()\"\r\n (change)=\"toggle($event)\" [id]=\"`toogle-${id()}`\">\r\n\r\n <span class=\"switch-circle\">\r\n <i [class]=\"currentIcon()\"></i>\r\n </span>\r\n\r\n @if (currentLabel()) {\r\n <label class=\"label-toggle\" [for]=\"`toogle-${id()}`\">\r\n {{ currentLabel() }}\r\n </label>\r\n }\r\n</div>", styles: [".form-check{display:inline-flex;align-items:center;gap:.5rem;position:relative;padding-left:0}.form-check-input{width:50px!important;height:25px!important;border-radius:1.5rem;appearance:none;outline:none;cursor:pointer;background-color:#e9ecef;border:1px solid #ffffff;transition:background-color .2s ease-in-out,border-color .2s ease-in-out;position:relative;margin:0}.switch-circle{position:absolute;top:50%;left:3px;transform:translateY(-50%);width:19px;height:19px;background-color:#fff;border-color:#000;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;color:#fff;transition:left .2s ease-in-out,background-color .2s ease-in-out,color .2s,border-color .2s;pointer-events:none;z-index:1}.form-check-input:checked~.switch-circle{left:28px;background-color:#fff;border-color:#000;color:#fff}.label-toggle{min-width:50px;text-align:center}.form-check-input:focus{box-shadow:none!important}.bg-error{background:#e70045}.bg-exito{background:#00e68e}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
1292
1303
  }
1293
1304
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SwitchActivoComponent, decorators: [{
1294
1305
  type: Component,
1295
- args: [{ selector: 'app-switch-activo', imports: [CommonModule], template: "<div class=\"form-check form-switch d-flex align-items-center\">\r\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [checked]=\"_checked\" [ngClass]=\"currentColor()\"\r\n (change)=\"toggle($event)\" [id]=\"`toogle-${id()}`\" >\r\n\r\n <span class=\"switch-circle\">\r\n <i [class]=\"currentIcon()\"></i>\r\n </span>\r\n\r\n <label class=\"label-toggle\" [for]=\"`toogle-${id()}`\" >\r\n {{ currentLabel() }}\r\n </label>\r\n</div>", styles: [".form-check{display:inline-flex;align-items:center;gap:.5rem;position:relative;padding-left:0}.form-check-input{width:50px!important;height:25px!important;border-radius:1.5rem;appearance:none;outline:none;cursor:pointer;background-color:#e9ecef;border:1px solid #ffffff;transition:background-color .2s ease-in-out,border-color .2s ease-in-out;position:relative;margin:0}.switch-circle{position:absolute;top:50%;left:3px;transform:translateY(-50%);width:19px;height:19px;background-color:#fff;border-color:#000;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;color:#fff;transition:left .2s ease-in-out,background-color .2s ease-in-out,color .2s,border-color .2s;pointer-events:none;z-index:1}.form-check-input:checked~.switch-circle{left:28px;background-color:#fff;border-color:#000;color:#fff}.label-toggle{min-width:50px;text-align:center}.form-check-input:focus{box-shadow:none!important}.bg-error{background:#e70045}.bg-exito{background:#00e68e}\n"] }]
1306
+ args: [{ selector: 'app-switch-activo', imports: [CommonModule], template: "<div class=\"form-check form-switch d-flex align-items-center\">\r\n <input class=\"form-check-input\" type=\"checkbox\" role=\"switch\" [checked]=\"_checked\" [ngClass]=\"currentColor()\"\r\n (change)=\"toggle($event)\" [id]=\"`toogle-${id()}`\">\r\n\r\n <span class=\"switch-circle\">\r\n <i [class]=\"currentIcon()\"></i>\r\n </span>\r\n\r\n @if (currentLabel()) {\r\n <label class=\"label-toggle\" [for]=\"`toogle-${id()}`\">\r\n {{ currentLabel() }}\r\n </label>\r\n }\r\n</div>", styles: [".form-check{display:inline-flex;align-items:center;gap:.5rem;position:relative;padding-left:0}.form-check-input{width:50px!important;height:25px!important;border-radius:1.5rem;appearance:none;outline:none;cursor:pointer;background-color:#e9ecef;border:1px solid #ffffff;transition:background-color .2s ease-in-out,border-color .2s ease-in-out;position:relative;margin:0}.switch-circle{position:absolute;top:50%;left:3px;transform:translateY(-50%);width:19px;height:19px;background-color:#fff;border-color:#000;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:10px;color:#fff;transition:left .2s ease-in-out,background-color .2s ease-in-out,color .2s,border-color .2s;pointer-events:none;z-index:1}.form-check-input:checked~.switch-circle{left:28px;background-color:#fff;border-color:#000;color:#fff}.label-toggle{min-width:50px;text-align:center}.form-check-input:focus{box-shadow:none!important}.bg-error{background:#e70045}.bg-exito{background:#00e68e}\n"] }]
1296
1307
  }], ctorParameters: () => [] });
1297
1308
 
1298
1309
  class OnlyNumberFlexDirective {
@@ -1920,14 +1931,13 @@ class SidebarComponent {
1920
1931
  if (typeof window != 'undefined') {
1921
1932
  fromEvent(window, 'resize')
1922
1933
  .pipe(throttleTime(200))
1923
- .subscribe(() => {
1924
- const isMediumScreen = window.innerWidth <= 1160 && window.innerWidth >= 700;
1925
- this.showMenu.set(!isMediumScreen);
1926
- });
1927
- const initialCheck = window.innerWidth <= 1160 && window.innerWidth >= 700;
1928
- this.showMenu.set(!initialCheck);
1934
+ .subscribe(() => this.showMenu.set(window.innerWidth > 1400));
1935
+ this.showMenu.set(window.innerWidth > 1400);
1929
1936
  }
1930
1937
  }
1938
+ toggleMenu() {
1939
+ this.showMenu.set(!this.showMenu());
1940
+ }
1931
1941
  onMiddleClick(event, ruta) {
1932
1942
  if (event.button == 1 && ruta) {
1933
1943
  event.preventDefault();
@@ -1941,11 +1951,11 @@ class SidebarComponent {
1941
1951
  }
1942
1952
  }
1943
1953
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1944
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: SidebarComponent, isStandalone: true, selector: "app-sidebar", inputs: { lista: { classPropertyName: "lista", publicName: "lista", isSignal: true, isRequired: false, transformFunction: null }, titleMenu: { classPropertyName: "titleMenu", publicName: "titleMenu", isSignal: true, isRequired: false, transformFunction: null }, expandedWidth: { classPropertyName: "expandedWidth", publicName: "expandedWidth", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"responsive-container mtp-12\">\r\n <div class=\"flex-custom\" [ngClass]=\"{'expanded-menu': showMenu(), 'collapsed-menu': !showMenu()}\"\r\n [style.--expanded-width]=\"expandedWidth()\">\r\n <div class=\"bg-white shadow-sm rounded-1 px-3 py-2 d-flex flex-column align-items-start\">\r\n <div class=\"d-flex align-items-center py-3 w-auto cursor-pointer\" (click)=\"showMenu.set(!showMenu())\">\r\n <i class=\"fas fa-bars fs-8 px-1 py-1 icon-bar mrp-3 rounded-1 text-dark\">\r\n </i>\r\n @if(showMenu()){\r\n <p class=\"fs-7 fw-6 mb-0 ms-1\">{{titleMenu()}}</p>\r\n }\r\n </div>\r\n\r\n <ul class=\"list-unstyled w-100\">\r\n @for (item of lista(); track $index) {\r\n <li class=\"item-list fs-7 fw-light py-1 px-1\" [routerLink]=\"item.ruta\" [routerLinkActive]=\"'active'\"\r\n (mousedown)=\"onMiddleClick($event, item.ruta)\" (contextmenu)=\"onRightClick($event, item.ruta)\" title=\"{{item.nombre}}\" >\r\n <i class=\"fas fa-folder fs-7 me-2 icon-list\"></i>\r\n @if(showMenu()){\r\n <span>{{ item.nombre }}</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex-grow-1\" style=\"min-width: 0;\">\r\n <div class=\"bg-white shadow-sm rounded-1 px-3 py-2\">\r\n <p class=\"fs-7 fw-bold pt-2 w-100\">{{title()}}</p>\r\n <router-outlet></router-outlet>\r\n </div>\r\n </div>\r\n</div>", styles: [".responsive-container{display:flex;flex-direction:row;flex-wrap:nowrap}.item-list{transition:all .2s ease;display:flex;align-items:center}.item-list:not(:last-child){margin-bottom:5px}.item-list:hover{transform:scale(1.01);background:#f0f0f0;color:#1d1d1d;cursor:pointer;border-radius:5px}.active{background:#f0f0f0;color:#1d1d1d;border-radius:5px}.expanded-menu{width:var(--expanded-width, 320px);max-width:var(--expanded-width, 320px);min-width:var(--expanded-width, 320px);transition:all .2s ease;height:auto;margin-right:8px}.collapsed-menu{width:60px;min-width:60px;overflow:hidden;transition:width .2s ease;height:auto;margin-right:8px}.collapsed-menu .icon-bar,.collapsed-menu .icon-list{margin-left:3.5px}.item-list span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity .2s ease,width .2s ease}@media (max-width: 699px){.responsive-container{flex-direction:column}.expanded-menu{width:100%!important;max-width:100%!important;min-width:100%!important;margin-bottom:10px}.collapsed-menu{height:47px;margin-bottom:10px;border-radius:10px}.collapsed-menu .icon-bar{margin-top:-12px}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
1954
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: SidebarComponent, isStandalone: true, selector: "app-sidebar", inputs: { lista: { classPropertyName: "lista", publicName: "lista", isSignal: true, isRequired: false, transformFunction: null }, titleMenu: { classPropertyName: "titleMenu", publicName: "titleMenu", isSignal: true, isRequired: false, transformFunction: null }, expandedWidth: { classPropertyName: "expandedWidth", publicName: "expandedWidth", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"sidebar-wrapper mtp-12\">\r\n <div class=\"sidebar-panel\" [ngClass]=\"{'sidebar-expanded': showMenu(), 'sidebar-collapsed': !showMenu()}\"\r\n [style.--expanded-width]=\"expandedWidth()\">\r\n <div class=\"sidebar-header\" [style.justifyContent]=\"showMenu() ? 'flex-start' : 'center'\"\r\n [style.padding]=\"showMenu() ? '12px' : '10px 0'\" (click)=\"toggleMenu()\">\r\n <div class=\"sidebar-toggle-btn\">\r\n <i class=\"fa-solid fa-table-columns\" [class.flipped]=\"!showMenu()\"></i>\r\n <i class=\"fa-solid fa-chevron-left toggle-arrow\" [class.flipped]=\"!showMenu()\"></i>\r\n </div>\r\n @if (showMenu()) {\r\n <span class=\"sidebar-title\">{{ titleMenu() }}</span>\r\n }\r\n </div>\r\n\r\n <div class=\"sidebar-divider\"></div>\r\n\r\n <ul class=\"sidebar-nav\">\r\n @for (item of lista(); track $index) {\r\n <li class=\"sidebar-item\" [routerLink]=\"item.ruta\" [routerLinkActive]=\"'sidebar-item-active'\"\r\n (mousedown)=\"onMiddleClick($event, item.ruta)\" (contextmenu)=\"onRightClick($event, item.ruta)\">\r\n <span class=\"sidebar-item-icon\">\r\n <i class=\"fas fa-folder fs-8\"></i>\r\n </span>\r\n <span class=\"sidebar-item-label\">{{ item.nombre }}</span>\r\n @if (item.badge) {\r\n <div class=\"sidebar-item-badge\">\r\n <app-badge [label]=\"item.labelBadge\" [color]=\"item.bgBadge\" />\r\n </div>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n\r\n <div class=\"sidebar-content\">\r\n <div class=\"content-card\">\r\n <p class=\"content-title fs-7 fw-bold\">{{ title() }}</p>\r\n <router-outlet></router-outlet>\r\n </div>\r\n </div>\r\n</div>", styles: [".sidebar-wrapper{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:flex-start;gap:8px}.sidebar-panel{flex-shrink:0;display:flex;flex-direction:column;background:var(--background-card);border-radius:12px;border:1px solid var(--border-color-modal);box-shadow:var(--shadow-card);transition:width .25s cubic-bezier(.4,0,.2,1),min-width .25s cubic-bezier(.4,0,.2,1);position:relative;z-index:10}.sidebar-expanded{width:var(--expanded-width, 280px);min-width:var(--expanded-width, 280px);overflow:hidden}.sidebar-expanded .sidebar-title{opacity:1;transform:translate(0)}.sidebar-collapsed{width:56px;min-width:56px;overflow:hidden}.sidebar-collapsed:has(.sidebar-item:hover){overflow:visible}.sidebar-collapsed .sidebar-toggle-btn{padding:5px 7px;gap:3px}.sidebar-collapsed .sidebar-nav{overflow:visible}.sidebar-collapsed .sidebar-item-label{position:absolute;left:calc(100% + 10px);top:50%;transform:translateY(-50%) translate(-4px);background:var(--text-color);color:var(--background-card);padding:5px 11px;border-radius:7px;font-size:12px;font-weight:500;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s ease,transform .15s ease;z-index:1050;box-shadow:var(--shadow-card)}.sidebar-collapsed .sidebar-item-label:before{content:\"\";position:absolute;right:100%;top:50%;transform:translateY(-50%);border:5px solid transparent;border-right-color:var(--text-color)}.sidebar-collapsed .sidebar-item:hover .sidebar-item-label{opacity:1;transform:translateY(-50%) translate(0)}.sidebar-collapsed .sidebar-item-badge{display:none}.sidebar-header{display:flex;align-items:center;gap:10px;padding:12px;cursor:pointer;flex-shrink:0;border-radius:11px 11px 0 0;transition:background .18s ease}.sidebar-header:hover{background:var(--bs-table-hover-bg)}.sidebar-header:hover .sidebar-toggle-btn{transform:scale(1.06);box-shadow:0 4px 14px color-mix(in srgb,var(--sidebar-accent) 55%,transparent)}.sidebar-toggle-btn{flex-shrink:0;display:flex;align-items:center;justify-content:center;gap:5px;padding:6px 10px;border-radius:20px;background:var(--sidebar-accent);color:#fff;font-size:13px;box-shadow:0 2px 8px color-mix(in srgb,var(--sidebar-accent) 45%,transparent);transition:background .18s ease,box-shadow .18s ease,transform .18s ease}.sidebar-toggle-btn i{transition:transform .25s cubic-bezier(.4,0,.2,1)}.sidebar-toggle-btn i.flipped{transform:scaleX(-1)}.sidebar-toggle-btn .toggle-arrow{font-size:9px;color:#fff}.sidebar-title{font-size:12px;font-weight:700;color:var(--text-color);letter-spacing:.4px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity .2s ease,transform .2s ease}.sidebar-divider{height:1px;background:var(--border-color-modal);margin:0 10px;flex-shrink:0}.sidebar-nav{list-style:none;margin:0;padding:8px 6px;overflow-y:auto;scrollbar-width:none;flex:1}.sidebar-nav::-webkit-scrollbar{display:none}.sidebar-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;cursor:pointer;color:var(--text-color);transition:all .18s ease;margin-bottom:2px;position:relative;border-left:3px solid transparent;white-space:nowrap}.sidebar-item:hover{background:var(--bs-table-hover-bg);transform:translate(2px)}.sidebar-item-active{background:linear-gradient(90deg,color-mix(in srgb,var(--sidebar-accent) 12%,transparent),color-mix(in srgb,var(--sidebar-accent) 3%,transparent))!important;border-left:3px solid var(--sidebar-accent)!important;border-radius:0 8px 8px 0!important}.sidebar-item-active .sidebar-item-icon{color:var(--sidebar-accent);opacity:1}.sidebar-item-icon{font-size:12px;min-width:20px;text-align:center;flex-shrink:0;color:inherit;transition:color .18s ease}.sidebar-expanded .sidebar-item-label{font-size:13px;overflow:hidden;text-overflow:ellipsis;flex:1;color:inherit;animation:labelFadeIn .18s ease}.sidebar-content{flex:1;min-width:0}.content-card{background:var(--background-card);border-radius:12px;padding:12px 16px;box-shadow:var(--shadow-card);border:1px solid var(--border-color-modal)}.content-card .content-title{color:var(--text-color);margin-bottom:8px;padding-top:4px}@keyframes labelFadeIn{0%{opacity:0;transform:translate(-6px)}to{opacity:1;transform:translate(0)}}@media (max-width: 699px){.sidebar-wrapper{flex-direction:column}.sidebar-content{width:100%}.sidebar-expanded{width:100%!important;min-width:100%!important}.sidebar-collapsed{width:56px!important;min-width:56px!important;height:56px;overflow:hidden;flex-shrink:0}.sidebar-collapsed .sidebar-divider,.sidebar-collapsed .sidebar-nav{display:none}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: BadgeComponent, selector: "app-badge", inputs: ["label", "color", "size"] }] });
1945
1955
  }
1946
1956
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SidebarComponent, decorators: [{
1947
1957
  type: Component,
1948
- args: [{ selector: 'app-sidebar', imports: [NgClass, RouterLink, RouterOutlet, RouterLinkActive], template: "<div class=\"responsive-container mtp-12\">\r\n <div class=\"flex-custom\" [ngClass]=\"{'expanded-menu': showMenu(), 'collapsed-menu': !showMenu()}\"\r\n [style.--expanded-width]=\"expandedWidth()\">\r\n <div class=\"bg-white shadow-sm rounded-1 px-3 py-2 d-flex flex-column align-items-start\">\r\n <div class=\"d-flex align-items-center py-3 w-auto cursor-pointer\" (click)=\"showMenu.set(!showMenu())\">\r\n <i class=\"fas fa-bars fs-8 px-1 py-1 icon-bar mrp-3 rounded-1 text-dark\">\r\n </i>\r\n @if(showMenu()){\r\n <p class=\"fs-7 fw-6 mb-0 ms-1\">{{titleMenu()}}</p>\r\n }\r\n </div>\r\n\r\n <ul class=\"list-unstyled w-100\">\r\n @for (item of lista(); track $index) {\r\n <li class=\"item-list fs-7 fw-light py-1 px-1\" [routerLink]=\"item.ruta\" [routerLinkActive]=\"'active'\"\r\n (mousedown)=\"onMiddleClick($event, item.ruta)\" (contextmenu)=\"onRightClick($event, item.ruta)\" title=\"{{item.nombre}}\" >\r\n <i class=\"fas fa-folder fs-7 me-2 icon-list\"></i>\r\n @if(showMenu()){\r\n <span>{{ item.nombre }}</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex-grow-1\" style=\"min-width: 0;\">\r\n <div class=\"bg-white shadow-sm rounded-1 px-3 py-2\">\r\n <p class=\"fs-7 fw-bold pt-2 w-100\">{{title()}}</p>\r\n <router-outlet></router-outlet>\r\n </div>\r\n </div>\r\n</div>", styles: [".responsive-container{display:flex;flex-direction:row;flex-wrap:nowrap}.item-list{transition:all .2s ease;display:flex;align-items:center}.item-list:not(:last-child){margin-bottom:5px}.item-list:hover{transform:scale(1.01);background:#f0f0f0;color:#1d1d1d;cursor:pointer;border-radius:5px}.active{background:#f0f0f0;color:#1d1d1d;border-radius:5px}.expanded-menu{width:var(--expanded-width, 320px);max-width:var(--expanded-width, 320px);min-width:var(--expanded-width, 320px);transition:all .2s ease;height:auto;margin-right:8px}.collapsed-menu{width:60px;min-width:60px;overflow:hidden;transition:width .2s ease;height:auto;margin-right:8px}.collapsed-menu .icon-bar,.collapsed-menu .icon-list{margin-left:3.5px}.item-list span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity .2s ease,width .2s ease}@media (max-width: 699px){.responsive-container{flex-direction:column}.expanded-menu{width:100%!important;max-width:100%!important;min-width:100%!important;margin-bottom:10px}.collapsed-menu{height:47px;margin-bottom:10px;border-radius:10px}.collapsed-menu .icon-bar{margin-top:-12px}}\n"] }]
1958
+ args: [{ selector: 'app-sidebar', imports: [NgClass, RouterLink, RouterOutlet, RouterLinkActive, BadgeComponent], template: "<div class=\"sidebar-wrapper mtp-12\">\r\n <div class=\"sidebar-panel\" [ngClass]=\"{'sidebar-expanded': showMenu(), 'sidebar-collapsed': !showMenu()}\"\r\n [style.--expanded-width]=\"expandedWidth()\">\r\n <div class=\"sidebar-header\" [style.justifyContent]=\"showMenu() ? 'flex-start' : 'center'\"\r\n [style.padding]=\"showMenu() ? '12px' : '10px 0'\" (click)=\"toggleMenu()\">\r\n <div class=\"sidebar-toggle-btn\">\r\n <i class=\"fa-solid fa-table-columns\" [class.flipped]=\"!showMenu()\"></i>\r\n <i class=\"fa-solid fa-chevron-left toggle-arrow\" [class.flipped]=\"!showMenu()\"></i>\r\n </div>\r\n @if (showMenu()) {\r\n <span class=\"sidebar-title\">{{ titleMenu() }}</span>\r\n }\r\n </div>\r\n\r\n <div class=\"sidebar-divider\"></div>\r\n\r\n <ul class=\"sidebar-nav\">\r\n @for (item of lista(); track $index) {\r\n <li class=\"sidebar-item\" [routerLink]=\"item.ruta\" [routerLinkActive]=\"'sidebar-item-active'\"\r\n (mousedown)=\"onMiddleClick($event, item.ruta)\" (contextmenu)=\"onRightClick($event, item.ruta)\">\r\n <span class=\"sidebar-item-icon\">\r\n <i class=\"fas fa-folder fs-8\"></i>\r\n </span>\r\n <span class=\"sidebar-item-label\">{{ item.nombre }}</span>\r\n @if (item.badge) {\r\n <div class=\"sidebar-item-badge\">\r\n <app-badge [label]=\"item.labelBadge\" [color]=\"item.bgBadge\" />\r\n </div>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n\r\n <div class=\"sidebar-content\">\r\n <div class=\"content-card\">\r\n <p class=\"content-title fs-7 fw-bold\">{{ title() }}</p>\r\n <router-outlet></router-outlet>\r\n </div>\r\n </div>\r\n</div>", styles: [".sidebar-wrapper{display:flex;flex-direction:row;flex-wrap:nowrap;align-items:flex-start;gap:8px}.sidebar-panel{flex-shrink:0;display:flex;flex-direction:column;background:var(--background-card);border-radius:12px;border:1px solid var(--border-color-modal);box-shadow:var(--shadow-card);transition:width .25s cubic-bezier(.4,0,.2,1),min-width .25s cubic-bezier(.4,0,.2,1);position:relative;z-index:10}.sidebar-expanded{width:var(--expanded-width, 280px);min-width:var(--expanded-width, 280px);overflow:hidden}.sidebar-expanded .sidebar-title{opacity:1;transform:translate(0)}.sidebar-collapsed{width:56px;min-width:56px;overflow:hidden}.sidebar-collapsed:has(.sidebar-item:hover){overflow:visible}.sidebar-collapsed .sidebar-toggle-btn{padding:5px 7px;gap:3px}.sidebar-collapsed .sidebar-nav{overflow:visible}.sidebar-collapsed .sidebar-item-label{position:absolute;left:calc(100% + 10px);top:50%;transform:translateY(-50%) translate(-4px);background:var(--text-color);color:var(--background-card);padding:5px 11px;border-radius:7px;font-size:12px;font-weight:500;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s ease,transform .15s ease;z-index:1050;box-shadow:var(--shadow-card)}.sidebar-collapsed .sidebar-item-label:before{content:\"\";position:absolute;right:100%;top:50%;transform:translateY(-50%);border:5px solid transparent;border-right-color:var(--text-color)}.sidebar-collapsed .sidebar-item:hover .sidebar-item-label{opacity:1;transform:translateY(-50%) translate(0)}.sidebar-collapsed .sidebar-item-badge{display:none}.sidebar-header{display:flex;align-items:center;gap:10px;padding:12px;cursor:pointer;flex-shrink:0;border-radius:11px 11px 0 0;transition:background .18s ease}.sidebar-header:hover{background:var(--bs-table-hover-bg)}.sidebar-header:hover .sidebar-toggle-btn{transform:scale(1.06);box-shadow:0 4px 14px color-mix(in srgb,var(--sidebar-accent) 55%,transparent)}.sidebar-toggle-btn{flex-shrink:0;display:flex;align-items:center;justify-content:center;gap:5px;padding:6px 10px;border-radius:20px;background:var(--sidebar-accent);color:#fff;font-size:13px;box-shadow:0 2px 8px color-mix(in srgb,var(--sidebar-accent) 45%,transparent);transition:background .18s ease,box-shadow .18s ease,transform .18s ease}.sidebar-toggle-btn i{transition:transform .25s cubic-bezier(.4,0,.2,1)}.sidebar-toggle-btn i.flipped{transform:scaleX(-1)}.sidebar-toggle-btn .toggle-arrow{font-size:9px;color:#fff}.sidebar-title{font-size:12px;font-weight:700;color:var(--text-color);letter-spacing:.4px;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity .2s ease,transform .2s ease}.sidebar-divider{height:1px;background:var(--border-color-modal);margin:0 10px;flex-shrink:0}.sidebar-nav{list-style:none;margin:0;padding:8px 6px;overflow-y:auto;scrollbar-width:none;flex:1}.sidebar-nav::-webkit-scrollbar{display:none}.sidebar-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;cursor:pointer;color:var(--text-color);transition:all .18s ease;margin-bottom:2px;position:relative;border-left:3px solid transparent;white-space:nowrap}.sidebar-item:hover{background:var(--bs-table-hover-bg);transform:translate(2px)}.sidebar-item-active{background:linear-gradient(90deg,color-mix(in srgb,var(--sidebar-accent) 12%,transparent),color-mix(in srgb,var(--sidebar-accent) 3%,transparent))!important;border-left:3px solid var(--sidebar-accent)!important;border-radius:0 8px 8px 0!important}.sidebar-item-active .sidebar-item-icon{color:var(--sidebar-accent);opacity:1}.sidebar-item-icon{font-size:12px;min-width:20px;text-align:center;flex-shrink:0;color:inherit;transition:color .18s ease}.sidebar-expanded .sidebar-item-label{font-size:13px;overflow:hidden;text-overflow:ellipsis;flex:1;color:inherit;animation:labelFadeIn .18s ease}.sidebar-content{flex:1;min-width:0}.content-card{background:var(--background-card);border-radius:12px;padding:12px 16px;box-shadow:var(--shadow-card);border:1px solid var(--border-color-modal)}.content-card .content-title{color:var(--text-color);margin-bottom:8px;padding-top:4px}@keyframes labelFadeIn{0%{opacity:0;transform:translate(-6px)}to{opacity:1;transform:translate(0)}}@media (max-width: 699px){.sidebar-wrapper{flex-direction:column}.sidebar-content{width:100%}.sidebar-expanded{width:100%!important;min-width:100%!important}.sidebar-collapsed{width:56px!important;min-width:56px!important;height:56px;overflow:hidden;flex-shrink:0}.sidebar-collapsed .sidebar-divider,.sidebar-collapsed .sidebar-nav{display:none}}\n"] }]
1949
1959
  }], ctorParameters: () => [] });
1950
1960
 
1951
1961
  class DetalleCreditoComponent {
@@ -3621,7 +3631,7 @@ class TableUltimateComponent {
3621
3631
  withCheckbox = input(false);
3622
3632
  withTotal = input(false);
3623
3633
  withHeight = input(false);
3624
- withAttachment = input(true);
3634
+ withAttachment = input(false);
3625
3635
  rendered = input([]);
3626
3636
  dragOverRowId = signal(null); // dropzone para adjuntos
3627
3637
  titleTabla = input('Contrato');