ngx-dsxlibrary 2.21.15 → 2.21.16

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.
@@ -67,7 +67,7 @@ class AppMessageErrorComponent {
67
67
  if (!this.floatLabelElement) {
68
68
  return;
69
69
  }
70
- const isVisible = !!(this.control?.touched && this.control?.invalid);
70
+ const isVisible = this.isControlErrorVisible();
71
71
  if (isVisible === this.lastAppliedVisibleState) {
72
72
  return;
73
73
  }
@@ -82,12 +82,21 @@ class AppMessageErrorComponent {
82
82
  }
83
83
  this.renderer.removeStyle(this.floatLabelElement, 'margin-bottom');
84
84
  }
85
+ isControlErrorVisible() {
86
+ if (!this.control?.invalid) {
87
+ return false;
88
+ }
89
+ if (this.control.errors?.['alreadyValueExists']) {
90
+ return !!(this.control.dirty || this.control.touched);
91
+ }
92
+ return !!this.control.touched;
93
+ }
85
94
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: AppMessageErrorComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
86
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: AppMessageErrorComponent, isStandalone: true, selector: "app-message-error", inputs: { control: "control", form: "form" }, ngImport: i0, template: "<div\r\n class=\"dsx-error-slot\"\r\n [class.is-visible]=\"control?.touched && control?.invalid\"\r\n>\r\n @if (control?.touched && control?.invalid) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como m\u00E1ximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor m\u00EDnimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor m\u00E1ximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una direcci\u00F3n de correo v\u00E1lida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else {\r\n Existe un error a\u00FAn no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block}.dsx-error-slot{max-height:0;margin-top:0;overflow:hidden;opacity:0;transition:max-height .22s ease,margin-top .22s ease,opacity .18s ease}.dsx-error-slot.is-visible{max-height:4.25rem;margin-top:.3rem;opacity:1}.dsx-error-message{--dsx-error-color: #b42318;--dsx-error-bg: #fff2f0;color:var(--dsx-error-color);font-family:Roboto,Montserrat,sans-serif;font-size:clamp(.75rem,.72rem + .12vw,.8125rem);font-weight:400;line-height:1.35;letter-spacing:.01em;display:flex;align-items:center;gap:.35rem;position:relative;z-index:1;padding:.2rem .45rem;border-left:3px solid var(--dsx-error-color);border-radius:0 6px 6px 0;background:var(--dsx-error-bg);box-shadow:0 1px 2px #00000014;max-width:min(40ch,100%);white-space:normal;word-break:break-word;transform:translateY(-2px);transition:transform .2s ease}.dsx-error-message strong{font-weight:500}.dsx-error-icon{flex-shrink:0;font-size:.78rem;line-height:1;color:var(--dsx-error-color)}.dsx-error-slot.is-visible .dsx-error-message{transform:translateY(0)}@media(max-width:640px){.dsx-error-slot.is-visible{max-height:5rem}.dsx-error-message{max-width:100%}}:host-context(.p-floatlabel){position:absolute;top:100%;left:0;width:100%;z-index:3;pointer-events:none}:host-context(.p-floatlabel) .dsx-error-slot{max-height:none;margin-top:.25rem;overflow:visible;opacity:0;transform:translateY(-3px);transition:opacity .16s ease,transform .18s ease}:host-context(.p-floatlabel) .dsx-error-slot.is-visible{opacity:1;transform:translateY(0)}:host-context(.p-floatlabel) .dsx-error-message{max-width:min(40ch,calc(100% - .25rem))}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "component", type: i1.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "pipe", type: DecimalPipe, name: "number" }] });
95
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: AppMessageErrorComponent, isStandalone: true, selector: "app-message-error", inputs: { control: "control", form: "form" }, ngImport: i0, template: "<div class=\"dsx-error-slot\" [class.is-visible]=\"isControlErrorVisible()\">\r\n @if (isControlErrorVisible()) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como m\u00E1ximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor m\u00EDnimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor m\u00E1ximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una direcci\u00F3n de correo v\u00E1lida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else if (control?.errors?.[\"alreadyValueExists\"]) {\r\n <strong>{{ control?.errors?.[\"alreadyValueExists\"]?.message }}</strong>\r\n } @else {\r\n Existe un error a\u00FAn no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block}.dsx-error-slot{max-height:0;margin-top:0;overflow:hidden;opacity:0;transition:max-height .22s ease,margin-top .22s ease,opacity .18s ease}.dsx-error-slot.is-visible{max-height:4.25rem;margin-top:.3rem;opacity:1}.dsx-error-message{--dsx-error-color: #b42318;--dsx-error-bg: #fff2f0;color:var(--dsx-error-color);font-family:Roboto,Montserrat,sans-serif;font-size:clamp(.75rem,.72rem + .12vw,.8125rem);font-weight:400;line-height:1.35;letter-spacing:.01em;display:flex;align-items:center;gap:.35rem;position:relative;z-index:1;padding:.2rem .45rem;border-left:3px solid var(--dsx-error-color);border-radius:0 6px 6px 0;background:var(--dsx-error-bg);box-shadow:0 1px 2px #00000014;max-width:min(40ch,100%);white-space:normal;word-break:break-word;transform:translateY(-2px);transition:transform .2s ease}.dsx-error-message strong{font-weight:500}.dsx-error-icon{flex-shrink:0;font-size:.78rem;line-height:1;color:var(--dsx-error-color)}.dsx-error-slot.is-visible .dsx-error-message{transform:translateY(0)}@media(max-width:640px){.dsx-error-slot.is-visible{max-height:5rem}.dsx-error-message{max-width:100%}}:host-context(.p-floatlabel){position:absolute;top:100%;left:0;width:100%;z-index:3;pointer-events:none}:host-context(.p-floatlabel) .dsx-error-slot{max-height:none;margin-top:.25rem;overflow:visible;opacity:0;transform:translateY(-3px);transition:opacity .16s ease,transform .18s ease}:host-context(.p-floatlabel) .dsx-error-slot.is-visible{opacity:1;transform:translateY(0)}:host-context(.p-floatlabel) .dsx-error-message{max-width:min(40ch,calc(100% - .25rem))}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "component", type: i1.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "pipe", type: DecimalPipe, name: "number" }] });
87
96
  }
88
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: AppMessageErrorComponent, decorators: [{
89
98
  type: Component,
90
- args: [{ selector: 'app-message-error', imports: [TagModule, DecimalPipe], template: "<div\r\n class=\"dsx-error-slot\"\r\n [class.is-visible]=\"control?.touched && control?.invalid\"\r\n>\r\n @if (control?.touched && control?.invalid) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como m\u00E1ximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor m\u00EDnimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor m\u00E1ximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una direcci\u00F3n de correo v\u00E1lida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else {\r\n Existe un error a\u00FAn no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block}.dsx-error-slot{max-height:0;margin-top:0;overflow:hidden;opacity:0;transition:max-height .22s ease,margin-top .22s ease,opacity .18s ease}.dsx-error-slot.is-visible{max-height:4.25rem;margin-top:.3rem;opacity:1}.dsx-error-message{--dsx-error-color: #b42318;--dsx-error-bg: #fff2f0;color:var(--dsx-error-color);font-family:Roboto,Montserrat,sans-serif;font-size:clamp(.75rem,.72rem + .12vw,.8125rem);font-weight:400;line-height:1.35;letter-spacing:.01em;display:flex;align-items:center;gap:.35rem;position:relative;z-index:1;padding:.2rem .45rem;border-left:3px solid var(--dsx-error-color);border-radius:0 6px 6px 0;background:var(--dsx-error-bg);box-shadow:0 1px 2px #00000014;max-width:min(40ch,100%);white-space:normal;word-break:break-word;transform:translateY(-2px);transition:transform .2s ease}.dsx-error-message strong{font-weight:500}.dsx-error-icon{flex-shrink:0;font-size:.78rem;line-height:1;color:var(--dsx-error-color)}.dsx-error-slot.is-visible .dsx-error-message{transform:translateY(0)}@media(max-width:640px){.dsx-error-slot.is-visible{max-height:5rem}.dsx-error-message{max-width:100%}}:host-context(.p-floatlabel){position:absolute;top:100%;left:0;width:100%;z-index:3;pointer-events:none}:host-context(.p-floatlabel) .dsx-error-slot{max-height:none;margin-top:.25rem;overflow:visible;opacity:0;transform:translateY(-3px);transition:opacity .16s ease,transform .18s ease}:host-context(.p-floatlabel) .dsx-error-slot.is-visible{opacity:1;transform:translateY(0)}:host-context(.p-floatlabel) .dsx-error-message{max-width:min(40ch,calc(100% - .25rem))}\n"] }]
99
+ args: [{ selector: 'app-message-error', imports: [TagModule, DecimalPipe], template: "<div class=\"dsx-error-slot\" [class.is-visible]=\"isControlErrorVisible()\">\r\n @if (isControlErrorVisible()) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como m\u00E1ximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor m\u00EDnimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor m\u00E1ximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una direcci\u00F3n de correo v\u00E1lida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else if (control?.errors?.[\"alreadyValueExists\"]) {\r\n <strong>{{ control?.errors?.[\"alreadyValueExists\"]?.message }}</strong>\r\n } @else {\r\n Existe un error a\u00FAn no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block}.dsx-error-slot{max-height:0;margin-top:0;overflow:hidden;opacity:0;transition:max-height .22s ease,margin-top .22s ease,opacity .18s ease}.dsx-error-slot.is-visible{max-height:4.25rem;margin-top:.3rem;opacity:1}.dsx-error-message{--dsx-error-color: #b42318;--dsx-error-bg: #fff2f0;color:var(--dsx-error-color);font-family:Roboto,Montserrat,sans-serif;font-size:clamp(.75rem,.72rem + .12vw,.8125rem);font-weight:400;line-height:1.35;letter-spacing:.01em;display:flex;align-items:center;gap:.35rem;position:relative;z-index:1;padding:.2rem .45rem;border-left:3px solid var(--dsx-error-color);border-radius:0 6px 6px 0;background:var(--dsx-error-bg);box-shadow:0 1px 2px #00000014;max-width:min(40ch,100%);white-space:normal;word-break:break-word;transform:translateY(-2px);transition:transform .2s ease}.dsx-error-message strong{font-weight:500}.dsx-error-icon{flex-shrink:0;font-size:.78rem;line-height:1;color:var(--dsx-error-color)}.dsx-error-slot.is-visible .dsx-error-message{transform:translateY(0)}@media(max-width:640px){.dsx-error-slot.is-visible{max-height:5rem}.dsx-error-message{max-width:100%}}:host-context(.p-floatlabel){position:absolute;top:100%;left:0;width:100%;z-index:3;pointer-events:none}:host-context(.p-floatlabel) .dsx-error-slot{max-height:none;margin-top:.25rem;overflow:visible;opacity:0;transform:translateY(-3px);transition:opacity .16s ease,transform .18s ease}:host-context(.p-floatlabel) .dsx-error-slot.is-visible{opacity:1;transform:translateY(0)}:host-context(.p-floatlabel) .dsx-error-message{max-width:min(40ch,calc(100% - .25rem))}\n"] }]
91
100
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { control: [{
92
101
  type: Input
93
102
  }], form: [{
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-dsxlibrary-src-lib-components.mjs","sources":["../../../projects/ngx-dsx/src/lib/components/app-message-error/app-message-error.component.ts","../../../projects/ngx-dsx/src/lib/components/app-message-error/app-message-error.component.html","../../../projects/ngx-dsx/src/lib/components/inputs/file/file.component.ts","../../../projects/ngx-dsx/src/lib/components/inputs/file/file.component.html","../../../projects/ngx-dsx/src/lib/components/json/json-viewer/json-viewer.component.ts","../../../projects/ngx-dsx/src/lib/components/json/json-viewer/json-viewer.component.html","../../../projects/ngx-dsx/src/lib/components/kpicard/kpicard.component.ts","../../../projects/ngx-dsx/src/lib/components/kpicard/kpicard.component.html","../../../projects/ngx-dsx/src/lib/components/view/docx-preview/docx-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/view/docx-preview/docx-preview.component.html","../../../projects/ngx-dsx/src/lib/components/view/pdf-preview/pdf-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/view/pdf-preview/pdf-preview.component.html","../../../projects/ngx-dsx/src/lib/components/ngx-dsxlibrary-src-lib-components.ts"],"sourcesContent":["import { DecimalPipe } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n DoCheck,\r\n ElementRef,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { TagModule } from 'primeng/tag';\r\n\r\n@Component({\r\n selector: 'app-message-error',\r\n imports: [TagModule, DecimalPipe],\r\n templateUrl: './app-message-error.component.html',\r\n styleUrl: './app-message-error.component.css',\r\n})\r\n/**\r\n * Renderiza mensajes de validacion para un control o formulario.\r\n *\r\n * Nota de depuracion:\r\n * - En contenedores PrimeNG `p-floatlabel`, el mensaje visual se pinta como\r\n * overlay (CSS absoluto) para no deformar la posicion del label.\r\n * - Para evitar solapamiento con el siguiente campo, este componente ajusta\r\n * temporalmente el `margin-bottom` del `.p-floatlabel` padre cuando el error\r\n * esta visible.\r\n */\r\nexport class AppMessageErrorComponent\r\n implements AfterViewInit, DoCheck, OnDestroy\r\n{\r\n // Espacio vertical reservado bajo el float label cuando hay error visible.\r\n private readonly floatLabelErrorSpace = '1.6rem';\r\n // Referencia al contenedor PrimeNG padre, si existe.\r\n private floatLabelElement: HTMLElement | null = null;\r\n // Se conserva el estilo inline original para restaurarlo al ocultar/destruir.\r\n private previousInlineMarginBottom = '';\r\n // Evita escrituras de estilo repetidas cuando el estado de visibilidad no cambia.\r\n private lastAppliedVisibleState = false;\r\n\r\n constructor(\r\n private readonly elementRef: ElementRef<HTMLElement>,\r\n private readonly renderer: Renderer2,\r\n ) {}\r\n\r\n // Control de formulario que se pasa como input.\r\n @Input() control: AbstractControl | null | undefined = null;\r\n @Input() form: FormGroup | null = null;\r\n\r\n ngAfterViewInit(): void {\r\n // Busca el FloatLabel mas cercano para ajustar su separacion inferior.\r\n this.floatLabelElement = this.elementRef.nativeElement.closest(\r\n '.p-floatlabel',\r\n ) as HTMLElement | null;\r\n\r\n if (this.floatLabelElement) {\r\n this.previousInlineMarginBottom =\r\n this.floatLabelElement.style.marginBottom;\r\n this.syncFloatLabelSpacing();\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n // Se ejecuta en cada ciclo para reaccionar al estado touched/invalid.\r\n this.syncFloatLabelSpacing();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (!this.floatLabelElement) {\r\n return;\r\n }\r\n\r\n if (this.previousInlineMarginBottom) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.previousInlineMarginBottom,\r\n );\r\n return;\r\n }\r\n\r\n this.renderer.removeStyle(this.floatLabelElement, 'margin-bottom');\r\n }\r\n\r\n private syncFloatLabelSpacing(): void {\r\n if (!this.floatLabelElement) {\r\n return;\r\n }\r\n\r\n const isVisible = !!(this.control?.touched && this.control?.invalid);\r\n if (isVisible === this.lastAppliedVisibleState) {\r\n return;\r\n }\r\n\r\n this.lastAppliedVisibleState = isVisible;\r\n if (isVisible) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.floatLabelErrorSpace,\r\n );\r\n return;\r\n }\r\n\r\n if (this.previousInlineMarginBottom) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.previousInlineMarginBottom,\r\n );\r\n return;\r\n }\r\n\r\n this.renderer.removeStyle(this.floatLabelElement, 'margin-bottom');\r\n }\r\n}\r\n","<div\r\n class=\"dsx-error-slot\"\r\n [class.is-visible]=\"control?.touched && control?.invalid\"\r\n>\r\n @if (control?.touched && control?.invalid) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como máximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor mínimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor máximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una dirección de correo válida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else {\r\n Existe un error aún no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n","import { Component, forwardRef, input, signal, viewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FileUpload } from 'primeng/fileupload';\r\n\r\n@Component({\r\n selector: 'dsx-file-upload',\r\n imports: [FileUpload],\r\n templateUrl: './file.component.html',\r\n styleUrl: './file.component.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FileComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class FileComponent implements ControlValueAccessor {\r\n fileUpload = viewChild.required<FileUpload>('fileUpload');\r\n accept = input<string>('.xls,.xlsx');\r\n // Tamaño máximo en MB (se convierte internamente a bytes)\r\n maxFileSize = input<number>(5);\r\n // Mensajes para tipo de archivo inválido\r\n invalidSummary = input<string>('El formato es inválido.');\r\n invalidDetail = input<string>('Archivo debe tener un formato válido. ({0}).');\r\n\r\n // Mensajes para tamaño de archivo inválido\r\n invalidSizeSummary = input<string>('Tamaño de archivo inválido.');\r\n invalidSizeDetail = input<string>('El tamaño máximo permitido es {0}');\r\n disabled = signal<boolean>(false);\r\n private value: File | null = null;\r\n private onChange = (_: File | null) => {};\r\n private onTouched = () => {};\r\n\r\n onSelect(event: any) {\r\n const file = event.files?.[0] ?? null;\r\n this.value = file;\r\n this.onChange(file);\r\n this.onTouched();\r\n }\r\n\r\n /** 👇 API pública */\r\n clear() {\r\n this.fileUpload()?.clear();\r\n this.value = null;\r\n this.onChange(null);\r\n }\r\n\r\n writeValue(value: File | null): void {\r\n this.value = value;\r\n\r\n if (!value) {\r\n // Si se limpia el valor desde el formulario, limpiamos el componente\r\n this.fileUpload()?.clear();\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n}\r\n","<p-fileUpload\r\n #fileUpload\r\n mode=\"basic\"\r\n [accept]=\"accept()\"\r\n [maxFileSize]=\"maxFileSize() * 1024 * 1024\"\r\n [invalidFileTypeMessageSummary]=\"invalidSummary()\"\r\n [invalidFileTypeMessageDetail]=\"invalidDetail()\"\r\n [invalidFileSizeMessageSummary]=\"invalidSizeSummary()\"\r\n [invalidFileSizeMessageDetail]=\"invalidSizeDetail()\"\r\n (onSelect)=\"onSelect($event)\"\r\n [disabled]=\"disabled()\"\r\n/>\r\n","import { Component, effect, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { TreeNode } from 'primeng/api';\r\nimport { TreeModule } from 'primeng/tree';\r\n\r\n@Component({\r\n selector: 'app-json-viewer',\r\n standalone: true,\r\n imports: [TreeModule],\r\n templateUrl: './json-viewer.component.html',\r\n styleUrl: './json-viewer.component.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => JsonViewerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class JsonViewerComponent implements ControlValueAccessor {\r\n data = input<unknown>(null);\r\n nodes: TreeNode[] = [];\r\n selectedNode: TreeNode | null = null;\r\n private controlValue: unknown = null;\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.controlValue === null || this.controlValue === undefined) {\r\n this.updateNodes(this.data());\r\n }\r\n });\r\n }\r\n\r\n writeValue(value: unknown): void {\r\n this.controlValue = value;\r\n this.updateNodes(value);\r\n }\r\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n void fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n void fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n void isDisabled;\r\n }\r\n\r\n onNodeSelect(event: { node?: TreeNode }): void {\r\n const node = event?.node;\r\n\r\n if (!node?.children?.length) return;\r\n\r\n node.expanded = !node.expanded;\r\n this.selectedNode = null;\r\n this.nodes = [...this.nodes];\r\n }\r\n\r\n private updateNodes(value: unknown): void {\r\n this.nodes = this.buildTree(this.parseIfNeeded(value));\r\n }\r\n\r\n private parseIfNeeded(data: unknown): any {\r\n if (!data) return {};\r\n\r\n if (typeof data === 'string') {\r\n try {\r\n return JSON.parse(data);\r\n } catch {\r\n return {};\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n private buildTree(data: any, parentKey: string = '0'): TreeNode[] {\r\n if (Array.isArray(data)) {\r\n return data.map((item, index) => {\r\n const key = `${parentKey}-${index}`;\r\n\r\n if (this.isComplex(item)) {\r\n return {\r\n key,\r\n label: `[${index}]`,\r\n //icon: this.getIcon(item),\r\n children: this.buildTree(item, key),\r\n };\r\n }\r\n\r\n return {\r\n key,\r\n label: `[${index}]: ${this.formatPrimitive(item)}`,\r\n //icon: 'pi pi-file',\r\n };\r\n });\r\n }\r\n\r\n if (typeof data === 'object' && data !== null) {\r\n return Object.keys(data).map((key, index) => {\r\n const value = data[key];\r\n const nodeKey = `${parentKey}-${index}`;\r\n\r\n if (this.isComplex(value)) {\r\n return {\r\n key: nodeKey,\r\n label: key,\r\n //icon: this.getIcon(value),\r\n children: this.buildTree(value, nodeKey),\r\n };\r\n }\r\n\r\n return {\r\n key: nodeKey,\r\n label: `${key}: ${this.formatPrimitive(value)}`,\r\n icon: 'pi pi-file',\r\n };\r\n });\r\n }\r\n\r\n return [\r\n {\r\n key: parentKey,\r\n label: this.formatPrimitive(data),\r\n icon: 'pi pi-file',\r\n },\r\n ];\r\n }\r\n\r\n private isComplex(value: unknown): boolean {\r\n return (\r\n Array.isArray(value) || (typeof value === 'object' && value !== null)\r\n );\r\n }\r\n\r\n private formatPrimitive(value: unknown): string {\r\n if (value === null || value === undefined) return '-';\r\n\r\n if (typeof value === 'string') return value;\r\n\r\n return String(value);\r\n }\r\n\r\n private getIcon(value: any): string {\r\n if (Array.isArray(value)) return 'pi pi-list';\r\n\r\n if (typeof value === 'object') return 'pi pi-folder';\r\n\r\n return 'pi pi-file';\r\n }\r\n}\r\n","<p-tree\r\n\t[value]=\"nodes\"\r\n\tclass=\"json-tree w-full\"\r\n\tselectionMode=\"single\"\r\n\t[(selection)]=\"selectedNode\"\r\n\t[highlightOnSelect]=\"false\"\r\n\t(onNodeSelect)=\"onNodeSelect($event)\"\r\n>\r\n</p-tree>\r\n","import { Component, input } from '@angular/core';\r\nimport { CountUpDirective } from 'ngx-countup';\r\n\r\n@Component({\r\n selector: 'app-kpicard',\r\n imports: [CountUpDirective],\r\n templateUrl: './kpicard.component.html',\r\n styleUrl: './kpicard.component.css',\r\n})\r\nexport class KpicardComponent {\r\n //type = input.required<string>();\r\n option = input.required<'currency' | 'integer' | 'percent'>();\r\n label = input.required<string>();\r\n iconType = input<string>('fa-regular fa-bell');\r\n color = input<string>();\r\n valor = input<number>(0);\r\n theme = input<\r\n | 'light'\r\n | 'dark'\r\n | 'aqua'\r\n | 'sunset'\r\n | 'mint'\r\n | 'peach'\r\n | 'plasma'\r\n | 'nebula'\r\n >('light');\r\n\r\n options: Record<'currency' | 'integer' | 'percent', any> = {\r\n currency: {\r\n startVal: 0,\r\n duration: 0.5,\r\n //prefix: 'Q',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n suffix: ' GTQ', // Sufijo\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n integer: {\r\n startVal: 0,\r\n duration: 0.5,\r\n prefix: 'Cant. ',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n percent: {\r\n startVal: 0,\r\n duration: 0.5,\r\n suffix: '%',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n };\r\n\r\n // ✅ Método auxiliar para obtener la opción con seguridad\r\n getSelectedOption() {\r\n return this.options[this.option()] ?? this.options.currency; // Si no existe, usa `currency`\r\n }\r\n}\r\n","<div [class]=\"`kpi-card ${color()} ${theme()}-theme`\">\r\n <div class=\"kpi-container\">\r\n <span\r\n [countUp]=\"valor()\"\r\n [countUpOptions]=\"getSelectedOption()\"\r\n [class]=\"`card-value-${theme()}`\"\r\n >0</span\r\n >\r\n <span [class]=\"`card-text-${theme()}`\">{{ label() }}</span>\r\n </div>\r\n <i [class]=\"`${iconType()} icon icon-${theme()}`\"></i>\r\n</div>\r\n","import {\r\n Component,\r\n effect,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n input,\r\n Output,\r\n signal,\r\n viewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { DialogModule } from 'primeng/dialog';\r\n\r\ntype DocxRenderOptions = {\r\n ignoreWidth?: boolean;\r\n renderHeaders?: boolean;\r\n renderFooters?: boolean;\r\n};\r\n\r\ntype DocxPreviewModule = {\r\n renderAsync: (\r\n document: Blob,\r\n bodyContainer: HTMLElement,\r\n styleContainer?: HTMLElement,\r\n options?: DocxRenderOptions,\r\n ) => Promise<void>;\r\n};\r\n\r\n@Component({\r\n selector: 'app-docx-preview',\r\n imports: [DialogModule],\r\n templateUrl: './docx-preview.component.html',\r\n styleUrl: './docx-preview.component.css',\r\n})\r\nexport class DocxPreviewComponent {\r\n view = viewChild<ElementRef>('viewer');\r\n private visibleState: WritableSignal<boolean> = signal(false);\r\n private renderToken = 0;\r\n\r\n @Input()\r\n set visible(value: boolean) {\r\n this.visibleState.set(!!value);\r\n }\r\n\r\n get visible(): boolean {\r\n return this.visibleState();\r\n }\r\n\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n blob = input<Blob | null>(null);\r\n\r\n constructor() {\r\n effect(() => {\r\n const container = this.view()?.nativeElement;\r\n const isVisible = this.visibleState();\r\n const fileBlob = this.blob();\r\n\r\n if (!container) {\r\n return;\r\n }\r\n\r\n if (!isVisible) {\r\n this.renderToken++;\r\n container.innerHTML = '';\r\n return;\r\n }\r\n\r\n if (!(fileBlob instanceof Blob)) {\r\n this.renderToken++;\r\n container.innerHTML =\r\n '<p>No hay un archivo .docx válido para previsualizar.</p>';\r\n return;\r\n }\r\n\r\n if (!fileBlob.size) {\r\n this.renderToken++;\r\n container.innerHTML = '<p>El archivo .docx está vacío.</p>';\r\n return;\r\n }\r\n\r\n const token = ++this.renderToken;\r\n container.innerHTML = '';\r\n const options: DocxRenderOptions = {\r\n ignoreWidth: true,\r\n renderHeaders: true,\r\n renderFooters: true,\r\n };\r\n\r\n void this.renderDocx(fileBlob, container, options, token);\r\n });\r\n }\r\n\r\n private async renderDocx(\r\n fileBlob: Blob,\r\n container: HTMLElement,\r\n options: DocxRenderOptions,\r\n token: number,\r\n ) {\r\n try {\r\n const docxPreviewModule =\r\n (await import('docx-preview')) as unknown as DocxPreviewModule;\r\n\r\n if (token !== this.renderToken || !this.visibleState()) {\r\n return;\r\n }\r\n\r\n await docxPreviewModule.renderAsync(\r\n fileBlob,\r\n container,\r\n undefined,\r\n options,\r\n );\r\n } catch (error) {\r\n if (token !== this.renderToken || !this.visibleState()) {\r\n return;\r\n }\r\n\r\n console.error(\r\n '[DocxPreview] Error al renderizar el archivo DOCX.',\r\n error,\r\n );\r\n\r\n container.innerHTML =\r\n '<p>No se pudo renderizar la vista previa DOCX. Verifica la consola para más detalles.</p>';\r\n }\r\n }\r\n\r\n onHide() {\r\n const container = this.view()?.nativeElement;\r\n\r\n if (container) {\r\n this.renderToken++;\r\n container.innerHTML = '';\r\n }\r\n\r\n this.visibleChange.emit(false);\r\n }\r\n}\r\n","<p-dialog\r\n header=\"Vista preliminar del documento\"\r\n [visible]=\"visible\"\r\n (onHide)=\"onHide()\"\r\n [modal]=\"true\"\r\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\n [style]=\"{ width: '80vw' }\"\r\n [draggable]=\"false\"\r\n [resizable]=\"false\"\r\n>\r\n <div #viewer></div>\r\n</p-dialog>\r\n","import { Component, OnDestroy, effect, input, model } from '@angular/core';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { DialogModule } from 'primeng/dialog';\r\n\r\n@Component({\r\n selector: 'app-pdf-preview',\r\n imports: [DialogModule],\r\n templateUrl: './pdf-preview.component.html',\r\n styleUrl: './pdf-preview.component.css',\r\n})\r\nexport class PdfPreviewComponent implements OnDestroy {\r\n visible = model<boolean>(false);\r\n blob = input<Blob | null>(null);\r\n private objectUrl: string | null = null;\r\n pdfUrl: SafeResourceUrl | null = null;\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n effect((onCleanup) => {\r\n const file = this.blob();\r\n const isVisible = this.visible();\r\n\r\n if (!isVisible || file === null) {\r\n this.limpiarUrlAnterior();\r\n return;\r\n }\r\n\r\n if (file.type !== 'application/pdf') {\r\n this.limpiarUrlAnterior();\r\n console.warn('El archivo recibido no es un PDF válido');\r\n return;\r\n }\r\n\r\n this.limpiarUrlAnterior();\r\n const currentObjectUrl = URL.createObjectURL(file);\r\n this.objectUrl = currentObjectUrl;\r\n this.pdfUrl =\r\n this.sanitizer.bypassSecurityTrustResourceUrl(currentObjectUrl);\r\n\r\n onCleanup(() => {\r\n URL.revokeObjectURL(currentObjectUrl);\r\n if (this.objectUrl === currentObjectUrl) {\r\n this.objectUrl = null;\r\n this.pdfUrl = null;\r\n }\r\n });\r\n });\r\n }\r\n\r\n private limpiarUrlAnterior(): void {\r\n if (this.objectUrl) {\r\n URL.revokeObjectURL(this.objectUrl);\r\n this.objectUrl = null;\r\n }\r\n this.pdfUrl = null;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.limpiarUrlAnterior();\r\n }\r\n}\r\n","<p-dialog\r\n header=\"Vista previa del documento de soporte\"\r\n [(visible)]=\"visible\"\r\n [style]=\"{ width: '80vw', height: '90vh' }\"\r\n [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n @if (pdfUrl) {\r\n <iframe\r\n [src]=\"pdfUrl\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n style=\"border: none\"\r\n ></iframe>\r\n }\r\n</p-dialog>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-dsxlibrary-src-lib-components.mjs","sources":["../../../projects/ngx-dsx/src/lib/components/app-message-error/app-message-error.component.ts","../../../projects/ngx-dsx/src/lib/components/app-message-error/app-message-error.component.html","../../../projects/ngx-dsx/src/lib/components/inputs/file/file.component.ts","../../../projects/ngx-dsx/src/lib/components/inputs/file/file.component.html","../../../projects/ngx-dsx/src/lib/components/json/json-viewer/json-viewer.component.ts","../../../projects/ngx-dsx/src/lib/components/json/json-viewer/json-viewer.component.html","../../../projects/ngx-dsx/src/lib/components/kpicard/kpicard.component.ts","../../../projects/ngx-dsx/src/lib/components/kpicard/kpicard.component.html","../../../projects/ngx-dsx/src/lib/components/view/docx-preview/docx-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/view/docx-preview/docx-preview.component.html","../../../projects/ngx-dsx/src/lib/components/view/pdf-preview/pdf-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/view/pdf-preview/pdf-preview.component.html","../../../projects/ngx-dsx/src/lib/components/ngx-dsxlibrary-src-lib-components.ts"],"sourcesContent":["import { DecimalPipe } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n DoCheck,\r\n ElementRef,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { TagModule } from 'primeng/tag';\r\n\r\n@Component({\r\n selector: 'app-message-error',\r\n imports: [TagModule, DecimalPipe],\r\n templateUrl: './app-message-error.component.html',\r\n styleUrl: './app-message-error.component.css',\r\n})\r\n/**\r\n * Renderiza mensajes de validacion para un control o formulario.\r\n *\r\n * Nota de depuracion:\r\n * - En contenedores PrimeNG `p-floatlabel`, el mensaje visual se pinta como\r\n * overlay (CSS absoluto) para no deformar la posicion del label.\r\n * - Para evitar solapamiento con el siguiente campo, este componente ajusta\r\n * temporalmente el `margin-bottom` del `.p-floatlabel` padre cuando el error\r\n * esta visible.\r\n */\r\nexport class AppMessageErrorComponent\r\n implements AfterViewInit, DoCheck, OnDestroy\r\n{\r\n // Espacio vertical reservado bajo el float label cuando hay error visible.\r\n private readonly floatLabelErrorSpace = '1.6rem';\r\n // Referencia al contenedor PrimeNG padre, si existe.\r\n private floatLabelElement: HTMLElement | null = null;\r\n // Se conserva el estilo inline original para restaurarlo al ocultar/destruir.\r\n private previousInlineMarginBottom = '';\r\n // Evita escrituras de estilo repetidas cuando el estado de visibilidad no cambia.\r\n private lastAppliedVisibleState = false;\r\n\r\n constructor(\r\n private readonly elementRef: ElementRef<HTMLElement>,\r\n private readonly renderer: Renderer2,\r\n ) {}\r\n\r\n // Control de formulario que se pasa como input.\r\n @Input() control: AbstractControl | null | undefined = null;\r\n @Input() form: FormGroup | null = null;\r\n\r\n ngAfterViewInit(): void {\r\n // Busca el FloatLabel mas cercano para ajustar su separacion inferior.\r\n this.floatLabelElement = this.elementRef.nativeElement.closest(\r\n '.p-floatlabel',\r\n ) as HTMLElement | null;\r\n\r\n if (this.floatLabelElement) {\r\n this.previousInlineMarginBottom =\r\n this.floatLabelElement.style.marginBottom;\r\n this.syncFloatLabelSpacing();\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n // Se ejecuta en cada ciclo para reaccionar al estado touched/invalid.\r\n this.syncFloatLabelSpacing();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (!this.floatLabelElement) {\r\n return;\r\n }\r\n\r\n if (this.previousInlineMarginBottom) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.previousInlineMarginBottom,\r\n );\r\n return;\r\n }\r\n\r\n this.renderer.removeStyle(this.floatLabelElement, 'margin-bottom');\r\n }\r\n\r\n private syncFloatLabelSpacing(): void {\r\n if (!this.floatLabelElement) {\r\n return;\r\n }\r\n\r\n const isVisible = this.isControlErrorVisible();\r\n if (isVisible === this.lastAppliedVisibleState) {\r\n return;\r\n }\r\n\r\n this.lastAppliedVisibleState = isVisible;\r\n if (isVisible) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.floatLabelErrorSpace,\r\n );\r\n return;\r\n }\r\n\r\n if (this.previousInlineMarginBottom) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.previousInlineMarginBottom,\r\n );\r\n return;\r\n }\r\n\r\n this.renderer.removeStyle(this.floatLabelElement, 'margin-bottom');\r\n }\r\n\r\n isControlErrorVisible(): boolean {\r\n if (!this.control?.invalid) {\r\n return false;\r\n }\r\n\r\n if (this.control.errors?.['alreadyValueExists']) {\r\n return !!(this.control.dirty || this.control.touched);\r\n }\r\n\r\n return !!this.control.touched;\r\n }\r\n}\r\n","<div class=\"dsx-error-slot\" [class.is-visible]=\"isControlErrorVisible()\">\r\n @if (isControlErrorVisible()) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como máximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor mínimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor máximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una dirección de correo válida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else if (control?.errors?.[\"alreadyValueExists\"]) {\r\n <strong>{{ control?.errors?.[\"alreadyValueExists\"]?.message }}</strong>\r\n } @else {\r\n Existe un error aún no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n","import { Component, forwardRef, input, signal, viewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FileUpload } from 'primeng/fileupload';\r\n\r\n@Component({\r\n selector: 'dsx-file-upload',\r\n imports: [FileUpload],\r\n templateUrl: './file.component.html',\r\n styleUrl: './file.component.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FileComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class FileComponent implements ControlValueAccessor {\r\n fileUpload = viewChild.required<FileUpload>('fileUpload');\r\n accept = input<string>('.xls,.xlsx');\r\n // Tamaño máximo en MB (se convierte internamente a bytes)\r\n maxFileSize = input<number>(5);\r\n // Mensajes para tipo de archivo inválido\r\n invalidSummary = input<string>('El formato es inválido.');\r\n invalidDetail = input<string>('Archivo debe tener un formato válido. ({0}).');\r\n\r\n // Mensajes para tamaño de archivo inválido\r\n invalidSizeSummary = input<string>('Tamaño de archivo inválido.');\r\n invalidSizeDetail = input<string>('El tamaño máximo permitido es {0}');\r\n disabled = signal<boolean>(false);\r\n private value: File | null = null;\r\n private onChange = (_: File | null) => {};\r\n private onTouched = () => {};\r\n\r\n onSelect(event: any) {\r\n const file = event.files?.[0] ?? null;\r\n this.value = file;\r\n this.onChange(file);\r\n this.onTouched();\r\n }\r\n\r\n /** 👇 API pública */\r\n clear() {\r\n this.fileUpload()?.clear();\r\n this.value = null;\r\n this.onChange(null);\r\n }\r\n\r\n writeValue(value: File | null): void {\r\n this.value = value;\r\n\r\n if (!value) {\r\n // Si se limpia el valor desde el formulario, limpiamos el componente\r\n this.fileUpload()?.clear();\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n}\r\n","<p-fileUpload\r\n #fileUpload\r\n mode=\"basic\"\r\n [accept]=\"accept()\"\r\n [maxFileSize]=\"maxFileSize() * 1024 * 1024\"\r\n [invalidFileTypeMessageSummary]=\"invalidSummary()\"\r\n [invalidFileTypeMessageDetail]=\"invalidDetail()\"\r\n [invalidFileSizeMessageSummary]=\"invalidSizeSummary()\"\r\n [invalidFileSizeMessageDetail]=\"invalidSizeDetail()\"\r\n (onSelect)=\"onSelect($event)\"\r\n [disabled]=\"disabled()\"\r\n/>\r\n","import { Component, effect, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { TreeNode } from 'primeng/api';\r\nimport { TreeModule } from 'primeng/tree';\r\n\r\n@Component({\r\n selector: 'app-json-viewer',\r\n standalone: true,\r\n imports: [TreeModule],\r\n templateUrl: './json-viewer.component.html',\r\n styleUrl: './json-viewer.component.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => JsonViewerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class JsonViewerComponent implements ControlValueAccessor {\r\n data = input<unknown>(null);\r\n nodes: TreeNode[] = [];\r\n selectedNode: TreeNode | null = null;\r\n private controlValue: unknown = null;\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.controlValue === null || this.controlValue === undefined) {\r\n this.updateNodes(this.data());\r\n }\r\n });\r\n }\r\n\r\n writeValue(value: unknown): void {\r\n this.controlValue = value;\r\n this.updateNodes(value);\r\n }\r\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n void fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n void fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n void isDisabled;\r\n }\r\n\r\n onNodeSelect(event: { node?: TreeNode }): void {\r\n const node = event?.node;\r\n\r\n if (!node?.children?.length) return;\r\n\r\n node.expanded = !node.expanded;\r\n this.selectedNode = null;\r\n this.nodes = [...this.nodes];\r\n }\r\n\r\n private updateNodes(value: unknown): void {\r\n this.nodes = this.buildTree(this.parseIfNeeded(value));\r\n }\r\n\r\n private parseIfNeeded(data: unknown): any {\r\n if (!data) return {};\r\n\r\n if (typeof data === 'string') {\r\n try {\r\n return JSON.parse(data);\r\n } catch {\r\n return {};\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n private buildTree(data: any, parentKey: string = '0'): TreeNode[] {\r\n if (Array.isArray(data)) {\r\n return data.map((item, index) => {\r\n const key = `${parentKey}-${index}`;\r\n\r\n if (this.isComplex(item)) {\r\n return {\r\n key,\r\n label: `[${index}]`,\r\n //icon: this.getIcon(item),\r\n children: this.buildTree(item, key),\r\n };\r\n }\r\n\r\n return {\r\n key,\r\n label: `[${index}]: ${this.formatPrimitive(item)}`,\r\n //icon: 'pi pi-file',\r\n };\r\n });\r\n }\r\n\r\n if (typeof data === 'object' && data !== null) {\r\n return Object.keys(data).map((key, index) => {\r\n const value = data[key];\r\n const nodeKey = `${parentKey}-${index}`;\r\n\r\n if (this.isComplex(value)) {\r\n return {\r\n key: nodeKey,\r\n label: key,\r\n //icon: this.getIcon(value),\r\n children: this.buildTree(value, nodeKey),\r\n };\r\n }\r\n\r\n return {\r\n key: nodeKey,\r\n label: `${key}: ${this.formatPrimitive(value)}`,\r\n icon: 'pi pi-file',\r\n };\r\n });\r\n }\r\n\r\n return [\r\n {\r\n key: parentKey,\r\n label: this.formatPrimitive(data),\r\n icon: 'pi pi-file',\r\n },\r\n ];\r\n }\r\n\r\n private isComplex(value: unknown): boolean {\r\n return (\r\n Array.isArray(value) || (typeof value === 'object' && value !== null)\r\n );\r\n }\r\n\r\n private formatPrimitive(value: unknown): string {\r\n if (value === null || value === undefined) return '-';\r\n\r\n if (typeof value === 'string') return value;\r\n\r\n return String(value);\r\n }\r\n\r\n private getIcon(value: any): string {\r\n if (Array.isArray(value)) return 'pi pi-list';\r\n\r\n if (typeof value === 'object') return 'pi pi-folder';\r\n\r\n return 'pi pi-file';\r\n }\r\n}\r\n","<p-tree\r\n\t[value]=\"nodes\"\r\n\tclass=\"json-tree w-full\"\r\n\tselectionMode=\"single\"\r\n\t[(selection)]=\"selectedNode\"\r\n\t[highlightOnSelect]=\"false\"\r\n\t(onNodeSelect)=\"onNodeSelect($event)\"\r\n>\r\n</p-tree>\r\n","import { Component, input } from '@angular/core';\r\nimport { CountUpDirective } from 'ngx-countup';\r\n\r\n@Component({\r\n selector: 'app-kpicard',\r\n imports: [CountUpDirective],\r\n templateUrl: './kpicard.component.html',\r\n styleUrl: './kpicard.component.css',\r\n})\r\nexport class KpicardComponent {\r\n //type = input.required<string>();\r\n option = input.required<'currency' | 'integer' | 'percent'>();\r\n label = input.required<string>();\r\n iconType = input<string>('fa-regular fa-bell');\r\n color = input<string>();\r\n valor = input<number>(0);\r\n theme = input<\r\n | 'light'\r\n | 'dark'\r\n | 'aqua'\r\n | 'sunset'\r\n | 'mint'\r\n | 'peach'\r\n | 'plasma'\r\n | 'nebula'\r\n >('light');\r\n\r\n options: Record<'currency' | 'integer' | 'percent', any> = {\r\n currency: {\r\n startVal: 0,\r\n duration: 0.5,\r\n //prefix: 'Q',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n suffix: ' GTQ', // Sufijo\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n integer: {\r\n startVal: 0,\r\n duration: 0.5,\r\n prefix: 'Cant. ',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n percent: {\r\n startVal: 0,\r\n duration: 0.5,\r\n suffix: '%',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n };\r\n\r\n // ✅ Método auxiliar para obtener la opción con seguridad\r\n getSelectedOption() {\r\n return this.options[this.option()] ?? this.options.currency; // Si no existe, usa `currency`\r\n }\r\n}\r\n","<div [class]=\"`kpi-card ${color()} ${theme()}-theme`\">\r\n <div class=\"kpi-container\">\r\n <span\r\n [countUp]=\"valor()\"\r\n [countUpOptions]=\"getSelectedOption()\"\r\n [class]=\"`card-value-${theme()}`\"\r\n >0</span\r\n >\r\n <span [class]=\"`card-text-${theme()}`\">{{ label() }}</span>\r\n </div>\r\n <i [class]=\"`${iconType()} icon icon-${theme()}`\"></i>\r\n</div>\r\n","import {\r\n Component,\r\n effect,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n input,\r\n Output,\r\n signal,\r\n viewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { DialogModule } from 'primeng/dialog';\r\n\r\ntype DocxRenderOptions = {\r\n ignoreWidth?: boolean;\r\n renderHeaders?: boolean;\r\n renderFooters?: boolean;\r\n};\r\n\r\ntype DocxPreviewModule = {\r\n renderAsync: (\r\n document: Blob,\r\n bodyContainer: HTMLElement,\r\n styleContainer?: HTMLElement,\r\n options?: DocxRenderOptions,\r\n ) => Promise<void>;\r\n};\r\n\r\n@Component({\r\n selector: 'app-docx-preview',\r\n imports: [DialogModule],\r\n templateUrl: './docx-preview.component.html',\r\n styleUrl: './docx-preview.component.css',\r\n})\r\nexport class DocxPreviewComponent {\r\n view = viewChild<ElementRef>('viewer');\r\n private visibleState: WritableSignal<boolean> = signal(false);\r\n private renderToken = 0;\r\n\r\n @Input()\r\n set visible(value: boolean) {\r\n this.visibleState.set(!!value);\r\n }\r\n\r\n get visible(): boolean {\r\n return this.visibleState();\r\n }\r\n\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n blob = input<Blob | null>(null);\r\n\r\n constructor() {\r\n effect(() => {\r\n const container = this.view()?.nativeElement;\r\n const isVisible = this.visibleState();\r\n const fileBlob = this.blob();\r\n\r\n if (!container) {\r\n return;\r\n }\r\n\r\n if (!isVisible) {\r\n this.renderToken++;\r\n container.innerHTML = '';\r\n return;\r\n }\r\n\r\n if (!(fileBlob instanceof Blob)) {\r\n this.renderToken++;\r\n container.innerHTML =\r\n '<p>No hay un archivo .docx válido para previsualizar.</p>';\r\n return;\r\n }\r\n\r\n if (!fileBlob.size) {\r\n this.renderToken++;\r\n container.innerHTML = '<p>El archivo .docx está vacío.</p>';\r\n return;\r\n }\r\n\r\n const token = ++this.renderToken;\r\n container.innerHTML = '';\r\n const options: DocxRenderOptions = {\r\n ignoreWidth: true,\r\n renderHeaders: true,\r\n renderFooters: true,\r\n };\r\n\r\n void this.renderDocx(fileBlob, container, options, token);\r\n });\r\n }\r\n\r\n private async renderDocx(\r\n fileBlob: Blob,\r\n container: HTMLElement,\r\n options: DocxRenderOptions,\r\n token: number,\r\n ) {\r\n try {\r\n const docxPreviewModule =\r\n (await import('docx-preview')) as unknown as DocxPreviewModule;\r\n\r\n if (token !== this.renderToken || !this.visibleState()) {\r\n return;\r\n }\r\n\r\n await docxPreviewModule.renderAsync(\r\n fileBlob,\r\n container,\r\n undefined,\r\n options,\r\n );\r\n } catch (error) {\r\n if (token !== this.renderToken || !this.visibleState()) {\r\n return;\r\n }\r\n\r\n console.error(\r\n '[DocxPreview] Error al renderizar el archivo DOCX.',\r\n error,\r\n );\r\n\r\n container.innerHTML =\r\n '<p>No se pudo renderizar la vista previa DOCX. Verifica la consola para más detalles.</p>';\r\n }\r\n }\r\n\r\n onHide() {\r\n const container = this.view()?.nativeElement;\r\n\r\n if (container) {\r\n this.renderToken++;\r\n container.innerHTML = '';\r\n }\r\n\r\n this.visibleChange.emit(false);\r\n }\r\n}\r\n","<p-dialog\r\n header=\"Vista preliminar del documento\"\r\n [visible]=\"visible\"\r\n (onHide)=\"onHide()\"\r\n [modal]=\"true\"\r\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\n [style]=\"{ width: '80vw' }\"\r\n [draggable]=\"false\"\r\n [resizable]=\"false\"\r\n>\r\n <div #viewer></div>\r\n</p-dialog>\r\n","import { Component, OnDestroy, effect, input, model } from '@angular/core';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { DialogModule } from 'primeng/dialog';\r\n\r\n@Component({\r\n selector: 'app-pdf-preview',\r\n imports: [DialogModule],\r\n templateUrl: './pdf-preview.component.html',\r\n styleUrl: './pdf-preview.component.css',\r\n})\r\nexport class PdfPreviewComponent implements OnDestroy {\r\n visible = model<boolean>(false);\r\n blob = input<Blob | null>(null);\r\n private objectUrl: string | null = null;\r\n pdfUrl: SafeResourceUrl | null = null;\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n effect((onCleanup) => {\r\n const file = this.blob();\r\n const isVisible = this.visible();\r\n\r\n if (!isVisible || file === null) {\r\n this.limpiarUrlAnterior();\r\n return;\r\n }\r\n\r\n if (file.type !== 'application/pdf') {\r\n this.limpiarUrlAnterior();\r\n console.warn('El archivo recibido no es un PDF válido');\r\n return;\r\n }\r\n\r\n this.limpiarUrlAnterior();\r\n const currentObjectUrl = URL.createObjectURL(file);\r\n this.objectUrl = currentObjectUrl;\r\n this.pdfUrl =\r\n this.sanitizer.bypassSecurityTrustResourceUrl(currentObjectUrl);\r\n\r\n onCleanup(() => {\r\n URL.revokeObjectURL(currentObjectUrl);\r\n if (this.objectUrl === currentObjectUrl) {\r\n this.objectUrl = null;\r\n this.pdfUrl = null;\r\n }\r\n });\r\n });\r\n }\r\n\r\n private limpiarUrlAnterior(): void {\r\n if (this.objectUrl) {\r\n URL.revokeObjectURL(this.objectUrl);\r\n this.objectUrl = null;\r\n }\r\n this.pdfUrl = null;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.limpiarUrlAnterior();\r\n }\r\n}\r\n","<p-dialog\r\n header=\"Vista previa del documento de soporte\"\r\n [(visible)]=\"visible\"\r\n [style]=\"{ width: '80vw', height: '90vh' }\"\r\n [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n @if (pdfUrl) {\r\n <iframe\r\n [src]=\"pdfUrl\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n style=\"border: none\"\r\n ></iframe>\r\n }\r\n</p-dialog>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { Input, Component, viewChild, input, signal, forwardRef, effect, EventEm
4
4
  import * as i1 from 'primeng/tag';
5
5
  import { TagModule } from 'primeng/tag';
6
6
  import * as i2 from '@angular/forms';
7
- import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule, FormControl } from '@angular/forms';
7
+ import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule, FormControl, FormGroup } from '@angular/forms';
8
8
  import { FileUpload, FileUploadModule } from 'primeng/fileupload';
9
9
  import * as i1$1 from 'primeng/tree';
10
10
  import { TreeModule } from 'primeng/tree';
@@ -134,7 +134,7 @@ class AppMessageErrorComponent {
134
134
  if (!this.floatLabelElement) {
135
135
  return;
136
136
  }
137
- const isVisible = !!(this.control?.touched && this.control?.invalid);
137
+ const isVisible = this.isControlErrorVisible();
138
138
  if (isVisible === this.lastAppliedVisibleState) {
139
139
  return;
140
140
  }
@@ -149,12 +149,21 @@ class AppMessageErrorComponent {
149
149
  }
150
150
  this.renderer.removeStyle(this.floatLabelElement, 'margin-bottom');
151
151
  }
152
+ isControlErrorVisible() {
153
+ if (!this.control?.invalid) {
154
+ return false;
155
+ }
156
+ if (this.control.errors?.['alreadyValueExists']) {
157
+ return !!(this.control.dirty || this.control.touched);
158
+ }
159
+ return !!this.control.touched;
160
+ }
152
161
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: AppMessageErrorComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
153
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: AppMessageErrorComponent, isStandalone: true, selector: "app-message-error", inputs: { control: "control", form: "form" }, ngImport: i0, template: "<div\r\n class=\"dsx-error-slot\"\r\n [class.is-visible]=\"control?.touched && control?.invalid\"\r\n>\r\n @if (control?.touched && control?.invalid) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como m\u00E1ximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor m\u00EDnimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor m\u00E1ximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una direcci\u00F3n de correo v\u00E1lida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else {\r\n Existe un error a\u00FAn no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block}.dsx-error-slot{max-height:0;margin-top:0;overflow:hidden;opacity:0;transition:max-height .22s ease,margin-top .22s ease,opacity .18s ease}.dsx-error-slot.is-visible{max-height:4.25rem;margin-top:.3rem;opacity:1}.dsx-error-message{--dsx-error-color: #b42318;--dsx-error-bg: #fff2f0;color:var(--dsx-error-color);font-family:Roboto,Montserrat,sans-serif;font-size:clamp(.75rem,.72rem + .12vw,.8125rem);font-weight:400;line-height:1.35;letter-spacing:.01em;display:flex;align-items:center;gap:.35rem;position:relative;z-index:1;padding:.2rem .45rem;border-left:3px solid var(--dsx-error-color);border-radius:0 6px 6px 0;background:var(--dsx-error-bg);box-shadow:0 1px 2px #00000014;max-width:min(40ch,100%);white-space:normal;word-break:break-word;transform:translateY(-2px);transition:transform .2s ease}.dsx-error-message strong{font-weight:500}.dsx-error-icon{flex-shrink:0;font-size:.78rem;line-height:1;color:var(--dsx-error-color)}.dsx-error-slot.is-visible .dsx-error-message{transform:translateY(0)}@media(max-width:640px){.dsx-error-slot.is-visible{max-height:5rem}.dsx-error-message{max-width:100%}}:host-context(.p-floatlabel){position:absolute;top:100%;left:0;width:100%;z-index:3;pointer-events:none}:host-context(.p-floatlabel) .dsx-error-slot{max-height:none;margin-top:.25rem;overflow:visible;opacity:0;transform:translateY(-3px);transition:opacity .16s ease,transform .18s ease}:host-context(.p-floatlabel) .dsx-error-slot.is-visible{opacity:1;transform:translateY(0)}:host-context(.p-floatlabel) .dsx-error-message{max-width:min(40ch,calc(100% - .25rem))}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "component", type: i1.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "pipe", type: DecimalPipe, name: "number" }] });
162
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: AppMessageErrorComponent, isStandalone: true, selector: "app-message-error", inputs: { control: "control", form: "form" }, ngImport: i0, template: "<div class=\"dsx-error-slot\" [class.is-visible]=\"isControlErrorVisible()\">\r\n @if (isControlErrorVisible()) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como m\u00E1ximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor m\u00EDnimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor m\u00E1ximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una direcci\u00F3n de correo v\u00E1lida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else if (control?.errors?.[\"alreadyValueExists\"]) {\r\n <strong>{{ control?.errors?.[\"alreadyValueExists\"]?.message }}</strong>\r\n } @else {\r\n Existe un error a\u00FAn no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block}.dsx-error-slot{max-height:0;margin-top:0;overflow:hidden;opacity:0;transition:max-height .22s ease,margin-top .22s ease,opacity .18s ease}.dsx-error-slot.is-visible{max-height:4.25rem;margin-top:.3rem;opacity:1}.dsx-error-message{--dsx-error-color: #b42318;--dsx-error-bg: #fff2f0;color:var(--dsx-error-color);font-family:Roboto,Montserrat,sans-serif;font-size:clamp(.75rem,.72rem + .12vw,.8125rem);font-weight:400;line-height:1.35;letter-spacing:.01em;display:flex;align-items:center;gap:.35rem;position:relative;z-index:1;padding:.2rem .45rem;border-left:3px solid var(--dsx-error-color);border-radius:0 6px 6px 0;background:var(--dsx-error-bg);box-shadow:0 1px 2px #00000014;max-width:min(40ch,100%);white-space:normal;word-break:break-word;transform:translateY(-2px);transition:transform .2s ease}.dsx-error-message strong{font-weight:500}.dsx-error-icon{flex-shrink:0;font-size:.78rem;line-height:1;color:var(--dsx-error-color)}.dsx-error-slot.is-visible .dsx-error-message{transform:translateY(0)}@media(max-width:640px){.dsx-error-slot.is-visible{max-height:5rem}.dsx-error-message{max-width:100%}}:host-context(.p-floatlabel){position:absolute;top:100%;left:0;width:100%;z-index:3;pointer-events:none}:host-context(.p-floatlabel) .dsx-error-slot{max-height:none;margin-top:.25rem;overflow:visible;opacity:0;transform:translateY(-3px);transition:opacity .16s ease,transform .18s ease}:host-context(.p-floatlabel) .dsx-error-slot.is-visible{opacity:1;transform:translateY(0)}:host-context(.p-floatlabel) .dsx-error-message{max-width:min(40ch,calc(100% - .25rem))}\n"], dependencies: [{ kind: "ngmodule", type: TagModule }, { kind: "component", type: i1.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "pipe", type: DecimalPipe, name: "number" }] });
154
163
  }
155
164
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: AppMessageErrorComponent, decorators: [{
156
165
  type: Component,
157
- args: [{ selector: 'app-message-error', imports: [TagModule, DecimalPipe], template: "<div\r\n class=\"dsx-error-slot\"\r\n [class.is-visible]=\"control?.touched && control?.invalid\"\r\n>\r\n @if (control?.touched && control?.invalid) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como m\u00E1ximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor m\u00EDnimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor m\u00E1ximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una direcci\u00F3n de correo v\u00E1lida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else {\r\n Existe un error a\u00FAn no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block}.dsx-error-slot{max-height:0;margin-top:0;overflow:hidden;opacity:0;transition:max-height .22s ease,margin-top .22s ease,opacity .18s ease}.dsx-error-slot.is-visible{max-height:4.25rem;margin-top:.3rem;opacity:1}.dsx-error-message{--dsx-error-color: #b42318;--dsx-error-bg: #fff2f0;color:var(--dsx-error-color);font-family:Roboto,Montserrat,sans-serif;font-size:clamp(.75rem,.72rem + .12vw,.8125rem);font-weight:400;line-height:1.35;letter-spacing:.01em;display:flex;align-items:center;gap:.35rem;position:relative;z-index:1;padding:.2rem .45rem;border-left:3px solid var(--dsx-error-color);border-radius:0 6px 6px 0;background:var(--dsx-error-bg);box-shadow:0 1px 2px #00000014;max-width:min(40ch,100%);white-space:normal;word-break:break-word;transform:translateY(-2px);transition:transform .2s ease}.dsx-error-message strong{font-weight:500}.dsx-error-icon{flex-shrink:0;font-size:.78rem;line-height:1;color:var(--dsx-error-color)}.dsx-error-slot.is-visible .dsx-error-message{transform:translateY(0)}@media(max-width:640px){.dsx-error-slot.is-visible{max-height:5rem}.dsx-error-message{max-width:100%}}:host-context(.p-floatlabel){position:absolute;top:100%;left:0;width:100%;z-index:3;pointer-events:none}:host-context(.p-floatlabel) .dsx-error-slot{max-height:none;margin-top:.25rem;overflow:visible;opacity:0;transform:translateY(-3px);transition:opacity .16s ease,transform .18s ease}:host-context(.p-floatlabel) .dsx-error-slot.is-visible{opacity:1;transform:translateY(0)}:host-context(.p-floatlabel) .dsx-error-message{max-width:min(40ch,calc(100% - .25rem))}\n"] }]
166
+ args: [{ selector: 'app-message-error', imports: [TagModule, DecimalPipe], template: "<div class=\"dsx-error-slot\" [class.is-visible]=\"isControlErrorVisible()\">\r\n @if (isControlErrorVisible()) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como m\u00E1ximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor m\u00EDnimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor m\u00E1ximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una direcci\u00F3n de correo v\u00E1lida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else if (control?.errors?.[\"alreadyValueExists\"]) {\r\n <strong>{{ control?.errors?.[\"alreadyValueExists\"]?.message }}</strong>\r\n } @else {\r\n Existe un error a\u00FAn no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n", styles: [":host{display:block}.dsx-error-slot{max-height:0;margin-top:0;overflow:hidden;opacity:0;transition:max-height .22s ease,margin-top .22s ease,opacity .18s ease}.dsx-error-slot.is-visible{max-height:4.25rem;margin-top:.3rem;opacity:1}.dsx-error-message{--dsx-error-color: #b42318;--dsx-error-bg: #fff2f0;color:var(--dsx-error-color);font-family:Roboto,Montserrat,sans-serif;font-size:clamp(.75rem,.72rem + .12vw,.8125rem);font-weight:400;line-height:1.35;letter-spacing:.01em;display:flex;align-items:center;gap:.35rem;position:relative;z-index:1;padding:.2rem .45rem;border-left:3px solid var(--dsx-error-color);border-radius:0 6px 6px 0;background:var(--dsx-error-bg);box-shadow:0 1px 2px #00000014;max-width:min(40ch,100%);white-space:normal;word-break:break-word;transform:translateY(-2px);transition:transform .2s ease}.dsx-error-message strong{font-weight:500}.dsx-error-icon{flex-shrink:0;font-size:.78rem;line-height:1;color:var(--dsx-error-color)}.dsx-error-slot.is-visible .dsx-error-message{transform:translateY(0)}@media(max-width:640px){.dsx-error-slot.is-visible{max-height:5rem}.dsx-error-message{max-width:100%}}:host-context(.p-floatlabel){position:absolute;top:100%;left:0;width:100%;z-index:3;pointer-events:none}:host-context(.p-floatlabel) .dsx-error-slot{max-height:none;margin-top:.25rem;overflow:visible;opacity:0;transform:translateY(-3px);transition:opacity .16s ease,transform .18s ease}:host-context(.p-floatlabel) .dsx-error-slot.is-visible{opacity:1;transform:translateY(0)}:host-context(.p-floatlabel) .dsx-error-message{max-width:min(40ch,calc(100% - .25rem))}\n"] }]
158
167
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { control: [{
159
168
  type: Input
160
169
  }], form: [{
@@ -4252,12 +4261,12 @@ class UtilityAddService {
4252
4261
  for (const key in config) {
4253
4262
  if (Object.prototype.hasOwnProperty.call(config, key)) {
4254
4263
  const fieldConfig = config[key];
4255
- const { value, validators = [] } = fieldConfig;
4264
+ const { value, validators = [], asyncValidators = [], } = fieldConfig;
4256
4265
  const hasAssignedDisabled = Object.prototype.hasOwnProperty.call(fieldConfig, 'disabled');
4257
4266
  const disabled = hasAssignedDisabled
4258
4267
  ? Boolean(fieldConfig.disabled)
4259
4268
  : Boolean(resolvedOptions.disableUnassignedControls);
4260
- formGroup[key] = new FormControl({ value, disabled }, validators);
4269
+ formGroup[key] = new FormControl({ value, disabled }, validators, asyncValidators);
4261
4270
  }
4262
4271
  }
4263
4272
  // Crear el FormGroup con validadores adicionales a nivel de grupo si existen
@@ -5484,6 +5493,94 @@ function CUICorrecto(cui) {
5484
5493
  return false;
5485
5494
  }
5486
5495
  }
5496
+ function resolveControlName(control) {
5497
+ const parent = control.parent;
5498
+ if (!parent)
5499
+ return null;
5500
+ if (parent instanceof FormGroup) {
5501
+ for (const [key, childControl] of Object.entries(parent.controls)) {
5502
+ if (childControl === control) {
5503
+ return key;
5504
+ }
5505
+ }
5506
+ }
5507
+ const parentControls = parent.controls;
5508
+ if (Array.isArray(parentControls)) {
5509
+ const index = parentControls.indexOf(control);
5510
+ if (index >= 0) {
5511
+ return index.toString();
5512
+ }
5513
+ }
5514
+ return null;
5515
+ }
5516
+ function buildAlreadyExistsMessage(control, options) {
5517
+ if (options.errorMessage) {
5518
+ return options.errorMessage;
5519
+ }
5520
+ const resolvedFieldName = options.fieldName || resolveControlName(control);
5521
+ return resolvedFieldName
5522
+ ? `El valor en ${resolvedFieldName} ya existe.`
5523
+ : 'El valor ingresado ya existe';
5524
+ }
5525
+ /**
5526
+ * Validador asíncrono que verifica si un valor ya existe mediante una llamada a un servicio.
5527
+ * Útil para validar unicidad de campos como nombres de usuario, correos electrónicos, etc.
5528
+ *
5529
+ * Aplica `debounceTime(400)` y `distinctUntilChanged()` para evitar llamadas innecesarias
5530
+ * al servicio mientras el usuario escribe.
5531
+ *
5532
+ * @template T Tipo del valor del control a validar.
5533
+ * @param serviceMethod Función que recibe el valor del control y, opcionalmente,
5534
+ * el identificador del registro actual. Debe retornar un `Observable<boolean>`
5535
+ * emitiendo `true` si el valor ya existe (en otro registro), `false` en caso contrario.
5536
+ * @param options Opciones del validador:
5537
+ * - `currentId`: Id opcional del registro en edición para excluirlo en backend.
5538
+ * - `fieldName`: Nombre del campo para construir el mensaje dinámico
5539
+ * (si se omite, se intenta inferir del control).
5540
+ * - `errorMessage`: Mensaje personalizado (si se omite y se resuelve nombre
5541
+ * de campo, se usa `El valor {campo} ya existe`).
5542
+ * @returns Un `AsyncValidatorFn` que emite `null` si el valor no existe o el control está vacío,
5543
+ * o un objeto `ValidationErrors` con la clave fija `alreadyValueExists` si el valor ya existe.
5544
+ *
5545
+ * @example
5546
+ * ```ts
5547
+ * // Creación
5548
+ * email: ['', [], asyncExistsValidator(
5549
+ * (value, id) => this.userService.emailExists({ value, id: Number(id) })
5550
+ * )]
5551
+ *
5552
+ * // Edición (excluyendo el registro actual por id)
5553
+ * email: ['', [], asyncExistsValidator(
5554
+ * (value, id) => this.userService.emailExists(value, id),
5555
+ * { currentId: this.id, fieldName: 'email' }
5556
+ * )]
5557
+ * ```
5558
+ */
5559
+ function asyncExistsValidator(serviceMethod, options = {}) {
5560
+ const { currentId = null, fieldName, errorMessage } = options;
5561
+ const errorKey = 'alreadyValueExists';
5562
+ return (control) => {
5563
+ if (!control.value)
5564
+ return of(null);
5565
+ return of(control.value).pipe(debounceTime(400), distinctUntilChanged(), switchMap((value) => {
5566
+ const resolvedId = currentId ?? 0;
5567
+ return serviceMethod(value, resolvedId);
5568
+ }), map((exists) => {
5569
+ if (exists) {
5570
+ return {
5571
+ [errorKey]: {
5572
+ message: buildAlreadyExistsMessage(control, {
5573
+ fieldName,
5574
+ errorMessage,
5575
+ }),
5576
+ value: control.value,
5577
+ },
5578
+ };
5579
+ }
5580
+ return null;
5581
+ }), catchError(() => of(null)));
5582
+ };
5583
+ }
5487
5584
 
5488
5585
  /*
5489
5586
  * Public API Surface of ngx-dsx
@@ -5493,5 +5590,5 @@ function CUICorrecto(cui) {
5493
5590
  * Generated bundle index. Do not edit.
5494
5591
  */
5495
5592
 
5496
- export { AlertaService, AppMessageErrorComponent, ArrowNavigationDirective, AuthorizeService, BaseCRUDService, CACHE_KEYS, CacheService, CssV2Component, DocxPreviewComponent, DsxAddToolsModule, DteService, ENVIRONMENT, EndpointService, ErrorHandlerService, FileComponent, GTQFormatter, HttpHelpersService, INITIAL_PARAMETERS, IconDsxComponent, JoinByPipe, JsonHighlightPipe, JsonValuesDebujComponent, JsonViewerComponent, KpicardComponent, LoadingComponent, LoadingLottieComponent, LogoDsxComponent, MasterDetailChangeService, NavbarDsxComponent, NetworkStatusComponent, OnlyRangoPatternDirective, ParameterValuesService, PdfPreviewComponent, PrimeNgModule, SWEET_ALERT_THEMES, SecurityService, SelectAllOnFocusDirective, SpinnerLoadingService, TruncatePipe, UtilityAddService, atLeastOneFieldRequiredValidator, createCurrencyFormatter, createInitialCache, createTypedCacheProvider, cuiValidator, dateMinMaxValidator, dateRangeValidator, dateRangeValidatorFromTo, developmentEnvironment, getZeroBasedRolIndex, httpAuthorizeInterceptor, nitValidator, productionEnvironment, provideEnvironment, validateEnvironmentConfig };
5593
+ export { AlertaService, AppMessageErrorComponent, ArrowNavigationDirective, AuthorizeService, BaseCRUDService, CACHE_KEYS, CacheService, CssV2Component, DocxPreviewComponent, DsxAddToolsModule, DteService, ENVIRONMENT, EndpointService, ErrorHandlerService, FileComponent, GTQFormatter, HttpHelpersService, INITIAL_PARAMETERS, IconDsxComponent, JoinByPipe, JsonHighlightPipe, JsonValuesDebujComponent, JsonViewerComponent, KpicardComponent, LoadingComponent, LoadingLottieComponent, LogoDsxComponent, MasterDetailChangeService, NavbarDsxComponent, NetworkStatusComponent, OnlyRangoPatternDirective, ParameterValuesService, PdfPreviewComponent, PrimeNgModule, SWEET_ALERT_THEMES, SecurityService, SelectAllOnFocusDirective, SpinnerLoadingService, TruncatePipe, UtilityAddService, asyncExistsValidator, atLeastOneFieldRequiredValidator, createCurrencyFormatter, createInitialCache, createTypedCacheProvider, cuiValidator, dateMinMaxValidator, dateRangeValidator, dateRangeValidatorFromTo, developmentEnvironment, getZeroBasedRolIndex, httpAuthorizeInterceptor, nitValidator, productionEnvironment, provideEnvironment, validateEnvironmentConfig };
5497
5594
  //# sourceMappingURL=ngx-dsxlibrary.mjs.map