ngx-dsxlibrary 2.21.47 → 2.21.49
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.
- package/fesm2022/ngx-dsxlibrary-src-lib-components.mjs +113 -25
- package/fesm2022/ngx-dsxlibrary-src-lib-components.mjs.map +1 -1
- package/fesm2022/ngx-dsxlibrary-src-lib-primengdsx.mjs +61 -0
- package/fesm2022/ngx-dsxlibrary-src-lib-primengdsx.mjs.map +1 -0
- package/fesm2022/ngx-dsxlibrary.mjs +778 -77
- package/fesm2022/ngx-dsxlibrary.mjs.map +1 -1
- package/ngx-dsxlibrary-2.21.49.tgz +0 -0
- package/package.json +5 -1
- package/src/assets/css/primeng_dsx_fieldset.css +56 -0
- package/src/assets/css/{primeng_dsx.css → primeng_dsx_table.css} +10 -0
- package/types/ngx-dsxlibrary-src-lib-components.d.ts +8 -3
- package/types/ngx-dsxlibrary-src-lib-primengdsx.d.ts +20 -0
- package/types/ngx-dsxlibrary.d.ts +191 -18
- package/ngx-dsxlibrary-2.21.47.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-dsxlibrary-src-lib-components.mjs","sources":["../../../projects/ngx-dsx/src/lib/components/src/app-message-error/app-message-error.component.ts","../../../projects/ngx-dsx/src/lib/components/src/app-message-error/app-message-error.component.html","../../../projects/ngx-dsx/src/lib/components/src/app-message-help/app-message-help.component.ts","../../../projects/ngx-dsx/src/lib/components/src/app-message-help/app-message-help.component.html","../../../projects/ngx-dsx/src/lib/components/src/button/dsx-status-toggle/dsx-status-toggle.ts","../../../projects/ngx-dsx/src/lib/components/src/button/dsx-status-toggle/dsx-status-toggle.html","../../../projects/ngx-dsx/src/lib/components/src/checkBox/enable-disable/enable-disable.ts","../../../projects/ngx-dsx/src/lib/components/src/checkBox/enable-disable/enable-disable.html","../../../projects/ngx-dsx/src/lib/components/src/inputs/file/file.component.ts","../../../projects/ngx-dsx/src/lib/components/src/inputs/file/file.component.html","../../../projects/ngx-dsx/src/lib/components/src/json/json-viewer/json-viewer.component.ts","../../../projects/ngx-dsx/src/lib/components/src/json/json-viewer/json-viewer.component.html","../../../projects/ngx-dsx/src/lib/components/src/status/date-indicator/date-indicator.ts","../../../projects/ngx-dsx/src/lib/components/src/status/date-indicator/date-indicator.html","../../../projects/ngx-dsx/src/lib/components/src/status/kpicard/kpicard.component.ts","../../../projects/ngx-dsx/src/lib/components/src/status/kpicard/kpicard.component.html","../../../projects/ngx-dsx/src/lib/components/src/view/docx-preview/docx-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/src/view/docx-preview/docx-preview.component.html","../../../projects/ngx-dsx/src/lib/components/src/view/pdf-preview/pdf-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/src/view/pdf-preview/pdf-preview.component.html","../../../projects/ngx-dsx/src/lib/components/src/view/template-highlight/template-highlight.ts","../../../projects/ngx-dsx/src/lib/components/src/view/template-highlight/template-highlight.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 defaultFloatLabelErrorSpace = '1.6rem';\r\n private readonly templateFloatLabelErrorSpace = '3.1rem';\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 private lastAppliedErrorSpace = '';\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 const desiredSpace = this.getFloatLabelErrorSpace();\r\n\r\n if (\r\n isVisible === this.lastAppliedVisibleState &&\r\n (!isVisible || desiredSpace === this.lastAppliedErrorSpace)\r\n ) {\r\n return;\r\n }\r\n\r\n this.lastAppliedVisibleState = isVisible;\r\n if (isVisible) {\r\n this.lastAppliedErrorSpace = desiredSpace;\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n desiredSpace,\r\n );\r\n return;\r\n }\r\n\r\n this.lastAppliedErrorSpace = '';\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 private getFloatLabelErrorSpace(): string {\r\n if (this.control?.errors?.['invalidTemplateVariables']) {\r\n return this.templateFloatLabelErrorSpace;\r\n }\r\n\r\n return this.defaultFloatLabelErrorSpace;\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 } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong>\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong>\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong>\r\n } @else if (control?.errors?.[\"invalidDate\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDate\"]?.message }}</strong>\r\n } @else if (control?.errors?.[\"minimumAge\"]) {\r\n <strong>{{ control?.errors?.[\"minimumAge\"]?.message }}</strong>\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 } @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 } @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 if (control?.errors?.[\"invalidTemplateVariables\"]) {\r\n <div class=\"dsx-template-error\">\r\n <strong>\r\n {{ control?.errors?.[\"invalidTemplateVariables\"]?.message }}\r\n </strong>\r\n @if (control?.errors?.[\"invalidTemplateVariables\"]?.details?.length) {\r\n <span class=\"dsx-template-error-detail\">\r\n {{ control?.errors?.[\"invalidTemplateVariables\"]?.details?.[0] }}\r\n </span>\r\n }\r\n </div>\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 {\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 } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'dsx-message-help',\r\n templateUrl: './app-message-help.component.html',\r\n styleUrl: './app-message-help.component.css',\r\n})\r\nexport class AppMessageHelpComponent\r\n implements AfterViewInit, DoCheck, OnDestroy\r\n{\r\n private readonly defaultFloatLabelHelpSpace = '1.6rem';\r\n private floatLabelElement: HTMLElement | null = null;\r\n private previousInlineMarginBottom = '';\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 @Input() control: AbstractControl | null | undefined = null;\r\n @Input() helperFunction: 'dateLong' | string = 'dateLong';\r\n\r\n ngAfterViewInit(): void {\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 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 getHelpMessage(): string | null {\r\n if (this.helperFunction === 'dateLong') {\r\n return this.buildDateLongMessage();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n isHelpVisible(): boolean {\r\n if (!this.control?.valid) {\r\n return false;\r\n }\r\n\r\n return !!this.getHelpMessage();\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.isHelpVisible();\r\n\r\n if (isVisible === this.lastAppliedVisibleState) {\r\n return;\r\n }\r\n\r\n this.lastAppliedVisibleState = isVisible;\r\n\r\n if (isVisible) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.defaultFloatLabelHelpSpace,\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 private buildDateLongMessage(): string | null {\r\n const rawValue = this.control?.value;\r\n\r\n if (!rawValue) {\r\n return null;\r\n }\r\n\r\n const date = this.parseDateInput(rawValue);\r\n\r\n if (!date) {\r\n return null;\r\n }\r\n\r\n const formattedDate = new Intl.DateTimeFormat('es-GT', {\r\n weekday: 'long',\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n }).format(date);\r\n\r\n const message =\r\n formattedDate.charAt(0).toUpperCase() + formattedDate.slice(1);\r\n return `${message}`;\r\n }\r\n\r\n private parseDateInput(value: unknown): Date | null {\r\n if (value instanceof Date) {\r\n return Number.isNaN(value.getTime()) ? null : value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const shortDateMatch = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\r\n if (shortDateMatch) {\r\n const year = Number(shortDateMatch[1]);\r\n const month = Number(shortDateMatch[2]) - 1;\r\n const day = Number(shortDateMatch[3]);\r\n const localDate = new Date(year, month, day);\r\n return Number.isNaN(localDate.getTime()) ? null : localDate;\r\n }\r\n\r\n const parsedDate = new Date(value);\r\n return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","<div class=\"dsx-help-slot\" [class.is-visible]=\"isHelpVisible()\">\r\n @if (isHelpVisible()) {\r\n <div class=\"dsx-help-message\">\r\n <i class=\"pi pi-info-circle dsx-help-icon\" aria-hidden=\"true\"></i>\r\n <span>{{ getHelpMessage() }}</span>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, forwardRef, input } from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { ToggleButtonModule } from 'primeng/togglebutton';\r\n\r\n@Component({\r\n selector: 'dsx-status-toggle',\r\n imports: [FormsModule, ToggleButtonModule],\r\n templateUrl: './dsx-status-toggle.html',\r\n styleUrl: './dsx-status-toggle.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DsxStatusToggle),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DsxStatusToggle implements ControlValueAccessor {\r\n onLabel = input<string>('Activo');\r\n offLabel = input<string>('Inactivo');\r\n disabled = input<boolean>(false);\r\n formDisabled = false;\r\n\r\n value = false;\r\n\r\n onChange = (_: boolean) => {};\r\n onTouched = () => {};\r\n\r\n writeValue(value: boolean): void {\r\n this.value = !!value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.formDisabled = disabled;\r\n }\r\n\r\n change(value: boolean) {\r\n this.value = value;\r\n this.onChange(value);\r\n this.onTouched();\r\n }\r\n}\r\n","<p-toggleButton\r\n fluid\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"change($event)\"\r\n [onLabel]=\"onLabel()\"\r\n [offLabel]=\"offLabel()\"\r\n [disabled]=\"disabled() || formDisabled\"\r\n [onIcon]=\"'pi pi-check-circle'\"\r\n [offIcon]=\"'pi pi-times-circle'\"\r\n class=\"dsx-status-toggle\"\r\n/>\r\n","import { Component, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'dsx-checkbox',\r\n imports: [],\r\n templateUrl: './enable-disable.html',\r\n styleUrl: './enable-disable.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DsxEnableDisable),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DsxEnableDisable implements ControlValueAccessor {\r\n checked = false;\r\n\r\n writeValue(value: boolean): void {\r\n this.checked = !!value;\r\n }\r\n\r\n // El componente es solo lectura; no necesita propagar cambios\r\n registerOnChange(_fn: unknown): void {}\r\n registerOnTouched(_fn: unknown): void {}\r\n}\r\n","<!-- From Uiverse.io by adamgiebl -->\r\n<div class=\"container\">\r\n <input type=\"checkbox\" [checked]=\"checked\" disabled />\r\n <div class=\"checkmark\"></div>\r\n</div>\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 { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n effect,\r\n EventEmitter,\r\n forwardRef,\r\n input,\r\n Output,\r\n} 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\ntype JsonPathSegment = string | number;\r\n\r\ntype JsonViewerMode = 'view' | 'edit' | boolean;\r\n\r\ntype JsonNodeMeta = {\r\n kind: 'compact-item' | 'group-active' | 'text-primitive' | 'active-primitive';\r\n indexLabel?: string;\r\n text?: string;\r\n activeVisual?: string;\r\n activeBoolean?: boolean | null;\r\n textPath?: JsonPathSegment[];\r\n activePath?: JsonPathSegment[];\r\n title?: string;\r\n key?: string;\r\n value?: string;\r\n path?: JsonPathSegment[];\r\n};\r\n\r\n@Component({\r\n selector: 'app-json-viewer',\r\n standalone: true,\r\n imports: [CommonModule, 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 mode = input<JsonViewerMode>('view');\r\n textKey = input<string>('Texto');\r\n activeKey = input<string>('Activo');\r\n itemsKey = input<string>('Items');\r\n showStatusAsSymbol = input<boolean>(true);\r\n\r\n @Output() valueChange = new EventEmitter<unknown>();\r\n\r\n nodes: TreeNode[] = [];\r\n selectedNode: TreeNode | null = null;\r\n disabled = false;\r\n\r\n private controlValue: unknown = null;\r\n private normalizedValue: unknown = {};\r\n private readonly maxNormalizationDepth = 20;\r\n private onChange: (value: unknown) => void = () => undefined;\r\n private onTouched: () => void = () => undefined;\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.controlValue === null || this.controlValue === undefined) {\r\n this.updateNodes(this.data(), false);\r\n }\r\n });\r\n }\r\n\r\n writeValue(value: unknown): void {\r\n this.controlValue = value;\r\n this.updateNodes(value, false);\r\n }\r\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = 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 isEditMode(): boolean {\r\n const modeValue = this.mode();\r\n const editEnabled =\r\n typeof modeValue === 'boolean' ? modeValue : modeValue === 'edit';\r\n\r\n return editEnabled && !this.disabled;\r\n }\r\n\r\n getNodeMeta(node: TreeNode): JsonNodeMeta | null {\r\n const nodeData = node.data;\r\n\r\n if (!nodeData || typeof nodeData !== 'object') return null;\r\n\r\n const kind = (nodeData as { kind?: string }).kind;\r\n if (!kind) return null;\r\n\r\n return nodeData as JsonNodeMeta;\r\n }\r\n\r\n onTextEdit(\r\n path: JsonPathSegment[],\r\n value: string,\r\n nodeMeta: JsonNodeMeta,\r\n ): void {\r\n if (!this.isEditMode()) return;\r\n\r\n this.setValueAtPath(path, value);\r\n\r\n // Actualiza solo el meta del nodo para reflejar el cambio sin reconstruir el árbol.\r\n if (nodeMeta.kind === 'compact-item') {\r\n nodeMeta.text = value;\r\n } else if (nodeMeta.kind === 'text-primitive') {\r\n nodeMeta.value = value;\r\n }\r\n\r\n this.emitCurrentValue();\r\n }\r\n\r\n onTextBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n onActiveToggle(\r\n path: JsonPathSegment[],\r\n checked: boolean,\r\n nodeMeta: JsonNodeMeta,\r\n ): void {\r\n if (!this.isEditMode()) return;\r\n\r\n this.setValueAtPath(path, checked);\r\n\r\n // Actualiza el meta del nodo y recalcula el visual del símbolo.\r\n nodeMeta.activeBoolean = checked;\r\n nodeMeta.activeVisual = checked\r\n ? this.showStatusAsSymbol()\r\n ? '✓'\r\n : 'true'\r\n : this.showStatusAsSymbol()\r\n ? '✗'\r\n : 'false';\r\n\r\n // Fuerza detección de cambio en el array sin reconstruir el árbol.\r\n this.nodes = [...this.nodes];\r\n this.emitCurrentValue();\r\n this.onTouched();\r\n }\r\n\r\n private updateNodes(value: unknown, emit: boolean): void {\r\n this.normalizedValue = this.parseIfNeeded(value);\r\n this.nodes = this.buildTree(this.normalizedValue);\r\n\r\n if (emit) {\r\n this.emitCurrentValue();\r\n }\r\n }\r\n\r\n private parseIfNeeded(data: unknown): unknown {\r\n if (data === null || data === undefined || data === '') return {};\r\n\r\n return this.normalizeData(data, 0);\r\n }\r\n\r\n private normalizeData(data: unknown, depth: number): unknown {\r\n if (depth > this.maxNormalizationDepth) return data;\r\n\r\n if (typeof data === 'string') {\r\n const parsed = this.tryParseJsonString(data);\r\n\r\n if (parsed.parsed) {\r\n return this.normalizeData(parsed.value, depth + 1);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n if (Array.isArray(data)) {\r\n return data.map((item) => this.normalizeData(item, depth + 1));\r\n }\r\n\r\n if (typeof data === 'object' && data !== null) {\r\n return Object.entries(data as Record<string, unknown>).reduce(\r\n (acc, [key, value]) => {\r\n acc[key] = this.normalizeData(value, depth + 1);\r\n return acc;\r\n },\r\n {} as Record<string, unknown>,\r\n );\r\n }\r\n\r\n return data;\r\n }\r\n\r\n private tryParseJsonString(value: string): {\r\n parsed: boolean;\r\n value: unknown;\r\n } {\r\n const trimmed = value.trim();\r\n\r\n // Solo intentamos parsear si parece JSON para evitar costo innecesario\r\n // en strings de texto común.\r\n const looksLikeJson =\r\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\r\n (trimmed.startsWith('[') && trimmed.endsWith(']'));\r\n\r\n if (!looksLikeJson) {\r\n return { parsed: false, value };\r\n }\r\n\r\n try {\r\n return { parsed: true, value: JSON.parse(trimmed) };\r\n } catch {\r\n return { parsed: false, value };\r\n }\r\n }\r\n\r\n private buildTree(\r\n data: unknown,\r\n parentKey: string = '0',\r\n path: JsonPathSegment[] = [],\r\n ): TreeNode[] {\r\n if (Array.isArray(data)) {\r\n return data.map((item, index) => {\r\n const key = `${parentKey}-${index}`;\r\n const itemPath = [...path, index];\r\n\r\n const compactItem = this.toCompactTextAndActive(\r\n item,\r\n itemPath,\r\n `[${String(index).padStart(2, '0')}]`,\r\n );\r\n if (compactItem) {\r\n return {\r\n key,\r\n label: `${compactItem.indexLabel} Texto: ${compactItem.text} | ${compactItem.activeVisual}`,\r\n icon: 'pi pi-file',\r\n data: compactItem,\r\n };\r\n }\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, itemPath),\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 const objectData = data as Record<string, unknown>;\r\n\r\n return Object.keys(objectData).flatMap((key, index) => {\r\n const value = objectData[key];\r\n const nodeKey = `${parentKey}-${index}`;\r\n const childPath = [...path, key];\r\n const activeKeyName = this.activeKey();\r\n const itemsKeyName = this.itemsKey();\r\n const textKeyName = this.textKey();\r\n\r\n if (key === itemsKeyName && Array.isArray(value)) {\r\n return this.buildTree(value, nodeKey, childPath);\r\n }\r\n\r\n if (this.isItemsContainer(value)) {\r\n const container = value as Record<string, unknown>;\r\n const hasActive = Object.prototype.hasOwnProperty.call(\r\n container,\r\n activeKeyName,\r\n );\r\n const label = hasActive\r\n ? `${key} | ${this.formatActiveSymbol(container[activeKeyName])}`\r\n : key;\r\n\r\n const itemsChildren = this.buildTree(\r\n container[itemsKeyName],\r\n `${nodeKey}-0`,\r\n [...childPath, itemsKeyName],\r\n );\r\n const additionalChildren = Object.keys(container)\r\n .filter(\r\n (childKey) =>\r\n childKey !== itemsKeyName && childKey !== activeKeyName,\r\n )\r\n .flatMap((childKey, childIndex) => {\r\n return this.buildTree(\r\n { [childKey]: container[childKey] },\r\n `${nodeKey}-${childIndex + 1}`,\r\n childPath,\r\n );\r\n });\r\n\r\n const nodeMeta: JsonNodeMeta | undefined = hasActive\r\n ? {\r\n kind: 'group-active',\r\n title: key,\r\n activeVisual: this.formatActiveSymbol(container[activeKeyName]),\r\n activeBoolean: this.toBooleanLike(container[activeKeyName]),\r\n activePath: [...childPath, activeKeyName],\r\n }\r\n : undefined;\r\n\r\n return {\r\n key: nodeKey,\r\n label,\r\n icon: 'pi pi-folder',\r\n children: [...itemsChildren, ...additionalChildren],\r\n data: nodeMeta,\r\n };\r\n }\r\n\r\n const compactValue = this.toCompactTextAndActive(value, childPath, key);\r\n if (compactValue) {\r\n return {\r\n key: nodeKey,\r\n label: `${key}: Texto: ${compactValue.text} | ${compactValue.activeVisual}`,\r\n icon: 'pi pi-file',\r\n data: compactValue,\r\n };\r\n }\r\n\r\n const groupedValue = this.toGroupWithActive(value);\r\n if (groupedValue) {\r\n groupedValue.meta.title = key;\r\n groupedValue.meta.activePath = [...childPath, activeKeyName];\r\n\r\n return {\r\n key: nodeKey,\r\n label: `${key} | ${groupedValue.activeSymbol}`,\r\n icon: 'pi pi-folder',\r\n children: this.buildTree(groupedValue.children, nodeKey, childPath),\r\n data: groupedValue.meta,\r\n };\r\n }\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, childPath),\r\n };\r\n }\r\n\r\n const primitiveMeta: JsonNodeMeta | undefined =\r\n key === textKeyName\r\n ? {\r\n kind: 'text-primitive',\r\n key,\r\n value: this.formatPrimitive(value),\r\n path: childPath,\r\n }\r\n : key === activeKeyName\r\n ? {\r\n kind: 'active-primitive',\r\n key,\r\n activeVisual: this.formatActiveSymbol(value),\r\n activeBoolean: this.toBooleanLike(value),\r\n path: childPath,\r\n }\r\n : undefined;\r\n\r\n return {\r\n key: nodeKey,\r\n label:\r\n key === activeKeyName\r\n ? `${key}: ${this.formatActiveSymbol(value)}`\r\n : `${key}: ${this.formatPrimitive(value)}`,\r\n icon: 'pi pi-file',\r\n data: primitiveMeta,\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 toCompactTextAndActive(\r\n value: unknown,\r\n basePath: JsonPathSegment[],\r\n indexLabel: string,\r\n ): JsonNodeMeta | null {\r\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n const record = value as Record<string, unknown>;\r\n const textKeyName = this.textKey();\r\n const activeKeyName = this.activeKey();\r\n const hasText = Object.prototype.hasOwnProperty.call(record, textKeyName);\r\n const hasActive = Object.prototype.hasOwnProperty.call(\r\n record,\r\n activeKeyName,\r\n );\r\n\r\n if (!hasText || !hasActive) return null;\r\n\r\n const activeValue = record[activeKeyName];\r\n\r\n return {\r\n kind: 'compact-item',\r\n indexLabel,\r\n text: this.formatPrimitive(record[textKeyName]),\r\n activeVisual: this.formatActiveSymbol(activeValue),\r\n activeBoolean: this.toBooleanLike(activeValue),\r\n textPath: [...basePath, textKeyName],\r\n activePath: [...basePath, activeKeyName],\r\n };\r\n }\r\n\r\n private isItemsContainer(value: unknown): boolean {\r\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\r\n return false;\r\n }\r\n\r\n return Array.isArray((value as Record<string, unknown>)[this.itemsKey()]);\r\n }\r\n\r\n private toGroupWithActive(value: unknown): {\r\n activeSymbol: string;\r\n children: Record<string, unknown>;\r\n meta: JsonNodeMeta;\r\n } | null {\r\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n const record = value as Record<string, unknown>;\r\n const activeKeyName = this.activeKey();\r\n const hasActive = Object.prototype.hasOwnProperty.call(\r\n record,\r\n activeKeyName,\r\n );\r\n\r\n if (!hasActive) return null;\r\n\r\n const childEntries = Object.entries(record).filter(\r\n ([childKey]) => childKey !== activeKeyName,\r\n );\r\n\r\n if (childEntries.length === 0) return null;\r\n\r\n const hasComplexChildren = childEntries.some(([, childValue]) =>\r\n this.isComplex(childValue),\r\n );\r\n\r\n if (!hasComplexChildren) return null;\r\n\r\n return {\r\n activeSymbol: this.formatActiveSymbol(record[activeKeyName]),\r\n children: Object.fromEntries(childEntries),\r\n meta: {\r\n kind: 'group-active',\r\n title: '',\r\n activeVisual: this.formatActiveSymbol(record[activeKeyName]),\r\n activeBoolean: this.toBooleanLike(record[activeKeyName]),\r\n },\r\n };\r\n }\r\n\r\n private formatActiveSymbol(value: unknown): string {\r\n const boolLike = this.toBooleanLike(value);\r\n\r\n if (boolLike === true) return this.showStatusAsSymbol() ? '✓' : 'true';\r\n if (boolLike === false) return this.showStatusAsSymbol() ? '✗' : 'false';\r\n\r\n return this.formatPrimitive(value);\r\n }\r\n\r\n private toBooleanLike(value: unknown): boolean | null {\r\n if (typeof value === 'boolean') return value;\r\n\r\n if (typeof value === 'number') {\r\n if (value === 1) return true;\r\n if (value === 0) return false;\r\n return null;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const normalized = value.trim().toLowerCase();\r\n if (normalized === 'true' || normalized === '1') return true;\r\n if (normalized === 'false' || normalized === '0') return false;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private getIcon(value: unknown): 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 private setValueAtPath(path: JsonPathSegment[], value: unknown): void {\r\n if (\r\n !path.length ||\r\n typeof this.normalizedValue !== 'object' ||\r\n this.normalizedValue === null\r\n ) {\r\n return;\r\n }\r\n\r\n let target: any = this.normalizedValue;\r\n\r\n for (let index = 0; index < path.length - 1; index += 1) {\r\n const segment = path[index];\r\n\r\n if (target === null || target === undefined) return;\r\n\r\n target = target[segment as any];\r\n }\r\n\r\n const lastSegment = path[path.length - 1];\r\n\r\n if (target !== null && target !== undefined) {\r\n target[lastSegment as any] = value;\r\n }\r\n }\r\n\r\n private emitUpdatedValue(): void {\r\n this.nodes = this.buildTree(this.normalizedValue);\r\n this.emitCurrentValue();\r\n this.onTouched();\r\n }\r\n\r\n private emitCurrentValue(): void {\r\n const payload = this.cloneValue(this.normalizedValue);\r\n this.controlValue = payload;\r\n this.onChange(payload);\r\n this.valueChange.emit(payload);\r\n }\r\n\r\n private cloneValue<T>(value: T): T {\r\n try {\r\n return JSON.parse(JSON.stringify(value)) as T;\r\n } catch {\r\n return value;\r\n }\r\n }\r\n}\r\n","<p-tree\r\n [value]=\"nodes\"\r\n class=\"json-tree w-full\"\r\n selectionMode=\"single\"\r\n [(selection)]=\"selectedNode\"\r\n [highlightOnSelect]=\"false\"\r\n (onNodeSelect)=\"onNodeSelect($event)\"\r\n>\r\n <ng-template let-node pTemplate=\"default\">\r\n <div class=\"json-node\">\r\n <ng-container *ngIf=\"getNodeMeta(node) as meta; else defaultLabel\">\r\n <ng-container [ngSwitch]=\"meta.kind\">\r\n <ng-container *ngSwitchCase=\"'compact-item'\">\r\n <span class=\"json-prefix\">{{ meta.indexLabel || \"\" }}</span>\r\n <span class=\"json-key\"> Texto: </span>\r\n <ng-container *ngIf=\"isEditMode(); else compactTextView\">\r\n <input\r\n type=\"text\"\r\n class=\"json-text-input\"\r\n [class.json-text-inactive]=\"meta.activeBoolean === false\"\r\n [value]=\"meta.text || ''\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (input)=\"\r\n onTextEdit(\r\n $any(meta.textPath),\r\n $any($event.target).value,\r\n meta\r\n )\r\n \"\r\n (blur)=\"onTextBlur()\"\r\n />\r\n </ng-container>\r\n <ng-template #compactTextView>\r\n <span [class.json-text-inactive]=\"meta.activeBoolean === false\">{{\r\n meta.text || \"\"\r\n }}</span>\r\n </ng-template>\r\n <span class=\"json-separator\"> | </span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode()\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.activePath),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'group-active'\">\r\n <span>{{ meta.title || \"\" }}</span>\r\n <span class=\"json-separator\"> | </span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode() && meta.activePath\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.activePath),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'text-primitive'\">\r\n <span>{{ meta.key || \"\" }}:</span>\r\n <ng-container *ngIf=\"isEditMode(); else textPrimitiveView\">\r\n <input\r\n type=\"text\"\r\n class=\"json-text-input\"\r\n [value]=\"meta.value || ''\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (input)=\"\r\n onTextEdit($any(meta.path), $any($event.target).value, meta)\r\n \"\r\n (blur)=\"onTextBlur()\"\r\n />\r\n </ng-container>\r\n <ng-template #textPrimitiveView>\r\n <span>{{ meta.value || \"\" }}</span>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'active-primitive'\">\r\n <span>{{ meta.key || \"\" }}:</span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode()\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.path),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ node.label }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #defaultLabel>\r\n {{ node.label }}\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n</p-tree>\r\n","import { Component, input, OnChanges } from '@angular/core';\r\nimport { TagModule } from 'primeng/tag';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\n\r\n@Component({\r\n selector: 'dsx-date-indicator',\r\n imports: [TagModule, TooltipModule],\r\n templateUrl: './date-indicator.html',\r\n styleUrl: './date-indicator.css',\r\n})\r\nexport class DateIndicator implements OnChanges {\r\n date = input<Date | string>('');\r\n minDays = input<number>(1);\r\n maxDays = input<number>(365);\r\n\r\n status = 'Correcto';\r\n\r\n severity: 'success' | 'warn' | 'info' | 'danger' = 'success';\r\n\r\n icon = 'pi pi-check-circle';\r\n\r\n tooltip = '';\r\n\r\n ngOnChanges(): void {\r\n this.calculate();\r\n }\r\n\r\n private calculate(): void {\r\n const rawDate = this.date();\r\n\r\n if (!rawDate) {\r\n this.setEmptyCriticalState();\r\n return;\r\n }\r\n\r\n const targetDate = new Date(rawDate);\r\n\r\n if (Number.isNaN(targetDate.getTime())) {\r\n this.setEmptyCriticalState();\r\n return;\r\n }\r\n\r\n const today = new Date();\r\n\r\n const diffMs = today.getTime() - targetDate.getTime();\r\n\r\n const days = Math.floor(diffMs / (1000 * 60 * 60 * 24));\r\n\r\n const range = this.maxDays() - this.minDays();\r\n\r\n const step = range / 4;\r\n\r\n const level1 = this.minDays() + step;\r\n const level2 = this.minDays() + step * 2;\r\n const level3 = this.minDays() + step * 3;\r\n\r\n if (days <= level1) {\r\n this.status = 'Correcto';\r\n this.severity = 'success';\r\n this.icon = 'pi pi-check-circle';\r\n } else if (days <= level2) {\r\n this.status = 'Atención';\r\n this.severity = 'warn';\r\n this.icon = 'pi pi-exclamation-triangle';\r\n } else if (days <= level3) {\r\n this.status = 'Riesgo';\r\n this.severity = 'info';\r\n this.icon = 'pi pi-clock';\r\n } else {\r\n this.status = 'Crítico';\r\n this.severity = 'danger';\r\n this.icon = 'pi pi-times-circle';\r\n }\r\n\r\n this.tooltip = `Última actualización: ${targetDate.toLocaleDateString()} • ${days} días`;\r\n }\r\n\r\n private setEmptyCriticalState(): void {\r\n this.status = 'Crítico';\r\n this.severity = 'danger';\r\n this.icon = 'pi pi-times-circle';\r\n this.tooltip = 'Última actualización: Sin valor • 0 días';\r\n }\r\n}\r\n","<p-tag\r\n [severity]=\"severity\"\r\n [icon]=\"icon\"\r\n [value]=\"status\"\r\n [pTooltip]=\"tooltip\"\r\n>\r\n</p-tag>\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 { AvatarModule } from 'primeng/avatar';\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, AvatarModule],\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 loading = signal(false);\r\n rendered = 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.resetViewer(container);\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n this.rendered.set(false);\r\n\r\n if (!(fileBlob instanceof Blob)) {\r\n this.finishWithFallback(container);\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.finishWithFallback(container);\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 resetViewer(container: HTMLElement): void {\r\n this.renderToken++;\r\n this.loading.set(false);\r\n this.rendered.set(false);\r\n container.innerHTML = '';\r\n }\r\n\r\n private finishWithFallback(container: HTMLElement): void {\r\n this.renderToken++;\r\n this.loading.set(false);\r\n this.rendered.set(true);\r\n container.innerHTML = '';\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 viteDocxModulePath = '/@id/docx-preview';\r\n\r\n // Import dinámico en runtime para mantener docx-preview como peer opcional.\r\n const docxPreviewModule = (await import(\r\n /* @vite-ignore */ viteDocxModulePath\r\n )) 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\r\n if (token === this.renderToken && this.visibleState()) {\r\n this.loading.set(false);\r\n this.rendered.set(true);\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 this.loading.set(false);\r\n this.rendered.set(true);\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 [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 [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n <ng-template #header>\r\n <div class=\"flex justify-content-center align-items-center gap-2 px-2\">\r\n <p-avatar image=\"icon2/word-2019.png\" />\r\n <span class=\"font-bold\">Vista preliminar del documento</span>\r\n </div>\r\n </ng-template>\r\n <div class=\"docx-preview-shell\">\r\n @if (loading()) {\r\n <div class=\"docx-preview-loading\">\r\n <span class=\"docx-preview-spinner\"></span>\r\n <span>Cargando vista previa del documento...</span>\r\n </div>\r\n }\r\n\r\n <div\r\n #viewer\r\n class=\"docx-preview-viewer\"\r\n [class.is-hidden]=\"loading() && !rendered()\"\r\n ></div>\r\n </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","import { Component, computed, inject, input } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { TabsModule } from 'primeng/tabs';\r\n\r\n@Component({\r\n selector: 'dsx-template-highlight',\r\n imports: [TabsModule],\r\n templateUrl: './template-highlight.html',\r\n styleUrl: './template-highlight.css',\r\n})\r\nexport class TemplateHighlight {\r\n text = input<string | null>(null);\r\n allowedKeys = input<readonly string[]>([]);\r\n\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n highlightedText = computed<SafeHtml>(() => {\r\n return this.sanitizer.bypassSecurityTrustHtml(\r\n this.processText(this.text(), this.allowedKeys()),\r\n );\r\n });\r\n\r\n private processText(\r\n raw: string | null,\r\n allowedKeys: readonly string[],\r\n ): string {\r\n if (!raw) return '';\r\n\r\n // Primero marcamos las variables bien formadas {{...}}\r\n const spanMap = new Map<string, string>();\r\n let idx = 0;\r\n\r\n let result = this.escapeHtml(raw);\r\n\r\n result = result.replace(/{{(.*?)}}/g, (match, content) => {\r\n const trimmed = content.trim();\r\n let span: string;\r\n\r\n if (content !== trimmed) {\r\n span = `<span class=\"var-invalid\" title=\"Espacios inválidos\">${this.escapeAttr(match)}</span>`;\r\n } else if (!/^[A-Z0-9_]+$/.test(trimmed)) {\r\n span = `<span class=\"var-invalid\" title=\"Formato inválido\">${this.escapeAttr(match)}</span>`;\r\n } else if (!allowedKeys.includes(trimmed)) {\r\n span = `<span class=\"var-invalid\" title=\"Variable no definida\">${this.escapeAttr(match)}</span>`;\r\n } else {\r\n span = `<span class=\"var-valid\">${this.escapeAttr(match)}</span>`;\r\n }\r\n\r\n const placeholder = `\\x00SPAN${idx++}\\x00`;\r\n spanMap.set(placeholder, span);\r\n return placeholder;\r\n });\r\n\r\n // Ahora marcamos llaves sueltas: { o } que no estén en pareja\r\n result = result.replace(/{{|}}/g, (m) => {\r\n return `<span class=\"var-brace-error\" title=\"Llave desbalanceada\">${m}</span>`;\r\n });\r\n\r\n // Restauramos los spans reales\r\n for (const [placeholder, span] of spanMap) {\r\n result = result.replace(placeholder, span);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private escapeHtml(text: string | null): string {\r\n if (!text) return '';\r\n return text\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>');\r\n }\r\n\r\n private escapeAttr(text: string): string {\r\n return text.replace(/\"/g, '"');\r\n }\r\n}\r\n","<p-tabs value=\"0\">\r\n <p-tablist>\r\n <p-tab value=\"0\">\r\n <i class=\"pi pi-file-edit tab-icon\" aria-hidden=\"true\"></i>\r\n <span>Preliminar</span>\r\n </p-tab>\r\n <p-tab value=\"1\">\r\n <i class=\"pi pi-list tab-icon\" aria-hidden=\"true\"></i>\r\n <span>Variables</span>\r\n </p-tab>\r\n </p-tablist>\r\n <p-tabpanels>\r\n <p-tabpanel value=\"0\">\r\n <div class=\"template-highlight\" [innerHTML]=\"highlightedText()\"></div>\r\n </p-tabpanel>\r\n <p-tabpanel value=\"1\">\r\n @if (allowedKeys().length) {\r\n <ul class=\"template-vars-list\">\r\n @for (key of allowedKeys(); track key) {\r\n <li>\r\n <strong>{{ key }}</strong>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </p-tabpanel>\r\n </p-tabpanels>\r\n</p-tabs>\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/src/app-message-error/app-message-error.component.ts","../../../projects/ngx-dsx/src/lib/components/src/app-message-error/app-message-error.component.html","../../../projects/ngx-dsx/src/lib/components/src/app-message-help/app-message-help.component.ts","../../../projects/ngx-dsx/src/lib/components/src/app-message-help/app-message-help.component.html","../../../projects/ngx-dsx/src/lib/components/src/button/dsx-status-toggle/dsx-status-toggle.ts","../../../projects/ngx-dsx/src/lib/components/src/button/dsx-status-toggle/dsx-status-toggle.html","../../../projects/ngx-dsx/src/lib/components/src/checkBox/enable-disable/enable-disable.ts","../../../projects/ngx-dsx/src/lib/components/src/checkBox/enable-disable/enable-disable.html","../../../projects/ngx-dsx/src/lib/components/src/inputs/file/file.component.ts","../../../projects/ngx-dsx/src/lib/components/src/inputs/file/file.component.html","../../../projects/ngx-dsx/src/lib/components/src/json/json-viewer/json-viewer.component.ts","../../../projects/ngx-dsx/src/lib/components/src/json/json-viewer/json-viewer.component.html","../../../projects/ngx-dsx/src/lib/components/src/status/date-indicator/date-indicator.ts","../../../projects/ngx-dsx/src/lib/components/src/status/date-indicator/date-indicator.html","../../../projects/ngx-dsx/src/lib/components/src/status/kpicard/kpicard.component.ts","../../../projects/ngx-dsx/src/lib/components/src/status/kpicard/kpicard.component.html","../../../projects/ngx-dsx/src/lib/components/src/view/docx-preview/docx-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/src/view/docx-preview/docx-preview.component.html","../../../projects/ngx-dsx/src/lib/components/src/view/pdf-preview/pdf-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/src/view/pdf-preview/pdf-preview.component.html","../../../projects/ngx-dsx/src/lib/components/src/view/template-highlight/template-highlight.ts","../../../projects/ngx-dsx/src/lib/components/src/view/template-highlight/template-highlight.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 defaultFloatLabelErrorSpace = '2.1rem';\r\n private readonly templateFloatLabelErrorSpace = '2.1rem';\r\n private readonly templateFloatLabelLongErrorSpace = '3.4rem';\r\n private readonly templateLongErrorThreshold = 165;\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 private lastAppliedErrorSpace = '';\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 const desiredSpace = this.getFloatLabelErrorSpace();\r\n\r\n if (\r\n isVisible === this.lastAppliedVisibleState &&\r\n (!isVisible || desiredSpace === this.lastAppliedErrorSpace)\r\n ) {\r\n return;\r\n }\r\n\r\n this.lastAppliedVisibleState = isVisible;\r\n if (isVisible) {\r\n this.lastAppliedErrorSpace = desiredSpace;\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n desiredSpace,\r\n );\r\n return;\r\n }\r\n\r\n this.lastAppliedErrorSpace = '';\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 private getFloatLabelErrorSpace(): string {\r\n const templateError =\r\n this.control?.errors?.['invalidTemplateVariables'] ||\r\n this.control?.errors?.['invalidTemplateStructure'];\r\n\r\n if (templateError) {\r\n const errorData = templateError as {\r\n message?: string;\r\n details?: string[];\r\n };\r\n\r\n const firstDetail = Array.isArray(errorData.details)\r\n ? (errorData.details[0] ?? '')\r\n : '';\r\n\r\n const messageLength = `${errorData.message ?? ''} ${firstDetail}`.trim()\r\n .length;\r\n\r\n return messageLength > this.templateLongErrorThreshold\r\n ? this.templateFloatLabelLongErrorSpace\r\n : this.templateFloatLabelErrorSpace;\r\n }\r\n\r\n return this.defaultFloatLabelErrorSpace;\r\n }\r\n\r\n formatNumber(value: unknown): string {\r\n const num = Number(value);\r\n if (isNaN(num)) return String(value ?? '');\r\n return num % 1 === 0 ? String(num) : parseFloat(num.toFixed(2)).toString();\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 } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong>\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong>\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong>\r\n } @else if (control?.errors?.[\"invalidDate\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDate\"]?.message }}</strong>\r\n } @else if (control?.errors?.[\"minimumAge\"]) {\r\n <strong>{{ control?.errors?.[\"minimumAge\"]?.message }}</strong>\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>{{ formatNumber(control?.errors?.[\"min\"]?.min) }}</strong>\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor máximo permitido es\r\n <strong>{{ formatNumber(control?.errors?.[\"max\"]?.max) }}</strong>\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 if (control?.errors?.[\"invalidTemplateVariables\"]) {\r\n <div class=\"dsx-template-error\">\r\n <strong>\r\n {{ control?.errors?.[\"invalidTemplateVariables\"]?.message }}\r\n </strong>\r\n @if (control?.errors?.[\"invalidTemplateVariables\"]?.details?.length) {\r\n <span class=\"dsx-template-error-detail\">\r\n {{ control?.errors?.[\"invalidTemplateVariables\"]?.details?.[0] }}\r\n </span>\r\n }\r\n </div>\r\n } @else if (control?.errors?.[\"invalidTemplateStructure\"]) {\r\n <div class=\"dsx-template-error\">\r\n <strong>\r\n {{ control?.errors?.[\"invalidTemplateStructure\"]?.message }}\r\n </strong>\r\n @if (control?.errors?.[\"invalidTemplateStructure\"]?.details?.length) {\r\n <span class=\"dsx-template-error-detail\">\r\n {{ control?.errors?.[\"invalidTemplateStructure\"]?.details?.[0] }}\r\n </span>\r\n }\r\n </div>\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 {\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 } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'dsx-message-help',\r\n templateUrl: './app-message-help.component.html',\r\n styleUrl: './app-message-help.component.css',\r\n})\r\nexport class AppMessageHelpComponent\r\n implements AfterViewInit, DoCheck, OnDestroy\r\n{\r\n private readonly defaultFloatLabelHelpSpace = '1.6rem';\r\n private floatLabelElement: HTMLElement | null = null;\r\n private previousInlineMarginBottom = '';\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 @Input() control: AbstractControl | null | undefined = null;\r\n @Input() helperFunction: 'dateLong' | string = 'dateLong';\r\n\r\n ngAfterViewInit(): void {\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 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 getHelpMessage(): string | null {\r\n if (this.helperFunction === 'dateLong') {\r\n return this.buildDateLongMessage();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n isHelpVisible(): boolean {\r\n if (!this.control) {\r\n return false;\r\n }\r\n\r\n if (this.control.disabled) {\r\n return !!this.getHelpMessage();\r\n }\r\n\r\n if (!this.control.valid) {\r\n return false;\r\n }\r\n\r\n return !!this.getHelpMessage();\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.isHelpVisible();\r\n\r\n if (isVisible === this.lastAppliedVisibleState) {\r\n return;\r\n }\r\n\r\n this.lastAppliedVisibleState = isVisible;\r\n\r\n if (isVisible) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.defaultFloatLabelHelpSpace,\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 private buildDateLongMessage(): string | null {\r\n const rawValue = this.getControlValue();\r\n\r\n if (!rawValue) {\r\n return null;\r\n }\r\n\r\n const date = this.parseDateInput(rawValue);\r\n\r\n if (!date) {\r\n return null;\r\n }\r\n\r\n const formattedDate = new Intl.DateTimeFormat('es-GT', {\r\n weekday: 'long',\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n }).format(date);\r\n\r\n const message =\r\n formattedDate.charAt(0).toUpperCase() + formattedDate.slice(1);\r\n return `${message}`;\r\n }\r\n\r\n private getControlValue(): unknown {\r\n if (!this.control) {\r\n return null;\r\n }\r\n\r\n if (this.control.disabled && 'getRawValue' in this.control) {\r\n const rawControl = this.control as AbstractControl & {\r\n getRawValue: () => unknown;\r\n };\r\n return rawControl.getRawValue();\r\n }\r\n\r\n return this.control.value;\r\n }\r\n\r\n private parseDateInput(value: unknown): Date | null {\r\n if (value instanceof Date) {\r\n return Number.isNaN(value.getTime()) ? null : value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const ddmmyyyyMatch = value.match(/^(\\d{2})-(\\d{2})-(\\d{4})$/);\r\n if (ddmmyyyyMatch) {\r\n const day = Number(ddmmyyyyMatch[1]);\r\n const month = Number(ddmmyyyyMatch[2]) - 1;\r\n const year = Number(ddmmyyyyMatch[3]);\r\n const localDate = new Date(year, month, day);\r\n return Number.isNaN(localDate.getTime()) ? null : localDate;\r\n }\r\n\r\n const shortDateMatch = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/);\r\n if (shortDateMatch) {\r\n const year = Number(shortDateMatch[1]);\r\n const month = Number(shortDateMatch[2]) - 1;\r\n const day = Number(shortDateMatch[3]);\r\n const localDate = new Date(year, month, day);\r\n return Number.isNaN(localDate.getTime()) ? null : localDate;\r\n }\r\n\r\n const parsedDate = new Date(value);\r\n return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;\r\n }\r\n\r\n return null;\r\n }\r\n}\r\n","<div class=\"dsx-help-slot\" [class.is-visible]=\"isHelpVisible()\">\r\n @if (isHelpVisible()) {\r\n <div class=\"dsx-help-message\">\r\n <i class=\"pi pi-info-circle dsx-help-icon\" aria-hidden=\"true\"></i>\r\n <span>{{ getHelpMessage() }}</span>\r\n </div>\r\n }\r\n</div>\r\n","import { Component, forwardRef, input } from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { ToggleButtonModule } from 'primeng/togglebutton';\r\n\r\n@Component({\r\n selector: 'dsx-status-toggle',\r\n imports: [FormsModule, ToggleButtonModule],\r\n templateUrl: './dsx-status-toggle.html',\r\n styleUrl: './dsx-status-toggle.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DsxStatusToggle),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DsxStatusToggle implements ControlValueAccessor {\r\n disabled = input<boolean>(false);\r\n formDisabled = false;\r\n isViewOnly = input<boolean>(false);\r\n offLabel = input<string>('Inactivo');\r\n onLabel = input<string>('Activo');\r\n value = false;\r\n\r\n onChange = (_: boolean) => {};\r\n onTouched = () => {};\r\n\r\n writeValue(value: boolean): void {\r\n this.value = !!value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.formDisabled = disabled;\r\n }\r\n\r\n change(value: boolean) {\r\n this.value = value;\r\n this.onChange(value);\r\n this.onTouched();\r\n }\r\n}\r\n","@if(isViewOnly()){\r\n<p-toggleButton\r\n fluid\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"change($event)\"\r\n [onLabel]=\"onLabel()\"\r\n [offLabel]=\"offLabel()\"\r\n [disabled]=\"disabled() || formDisabled\"\r\n [onIcon]=\"'pi pi-check-circle'\"\r\n [offIcon]=\"'pi pi-times-circle'\"\r\n class=\"dsx-status-toggle\"\r\n/>\r\n}\r\n","import { Component, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'dsx-checkbox',\r\n imports: [],\r\n templateUrl: './enable-disable.html',\r\n styleUrl: './enable-disable.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DsxEnableDisable),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DsxEnableDisable implements ControlValueAccessor {\r\n checked = false;\r\n\r\n writeValue(value: boolean): void {\r\n this.checked = !!value;\r\n }\r\n\r\n // El componente es solo lectura; no necesita propagar cambios\r\n registerOnChange(_fn: unknown): void {}\r\n registerOnTouched(_fn: unknown): void {}\r\n}\r\n","<!-- From Uiverse.io by adamgiebl -->\r\n<div class=\"container\">\r\n <input type=\"checkbox\" [checked]=\"checked\" disabled />\r\n <div class=\"checkmark\"></div>\r\n</div>\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 { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n effect,\r\n EventEmitter,\r\n forwardRef,\r\n input,\r\n Output,\r\n} 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\ntype JsonPathSegment = string | number;\r\n\r\ntype JsonViewerMode = 'view' | 'edit' | boolean;\r\n\r\ntype JsonNodeMeta = {\r\n kind: 'compact-item' | 'group-active' | 'text-primitive' | 'active-primitive';\r\n indexLabel?: string;\r\n text?: string;\r\n activeVisual?: string;\r\n activeBoolean?: boolean | null;\r\n textPath?: JsonPathSegment[];\r\n activePath?: JsonPathSegment[];\r\n title?: string;\r\n key?: string;\r\n value?: string;\r\n path?: JsonPathSegment[];\r\n};\r\n\r\n@Component({\r\n selector: 'app-json-viewer',\r\n standalone: true,\r\n imports: [CommonModule, 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 mode = input<JsonViewerMode>('view');\r\n textKey = input<string>('Texto');\r\n activeKey = input<string>('Activo');\r\n itemsKey = input<string>('Items');\r\n showStatusAsSymbol = input<boolean>(true);\r\n\r\n @Output() valueChange = new EventEmitter<unknown>();\r\n\r\n nodes: TreeNode[] = [];\r\n selectedNode: TreeNode | null = null;\r\n disabled = false;\r\n\r\n private controlValue: unknown = null;\r\n private normalizedValue: unknown = {};\r\n private readonly maxNormalizationDepth = 20;\r\n private onChange: (value: unknown) => void = () => undefined;\r\n private onTouched: () => void = () => undefined;\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.controlValue === null || this.controlValue === undefined) {\r\n this.updateNodes(this.data(), false);\r\n }\r\n });\r\n }\r\n\r\n writeValue(value: unknown): void {\r\n this.controlValue = value;\r\n this.updateNodes(value, false);\r\n }\r\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = 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 isEditMode(): boolean {\r\n const modeValue = this.mode();\r\n const editEnabled =\r\n typeof modeValue === 'boolean' ? modeValue : modeValue === 'edit';\r\n\r\n return editEnabled && !this.disabled;\r\n }\r\n\r\n getNodeMeta(node: TreeNode): JsonNodeMeta | null {\r\n const nodeData = node.data;\r\n\r\n if (!nodeData || typeof nodeData !== 'object') return null;\r\n\r\n const kind = (nodeData as { kind?: string }).kind;\r\n if (!kind) return null;\r\n\r\n return nodeData as JsonNodeMeta;\r\n }\r\n\r\n onTextEdit(\r\n path: JsonPathSegment[],\r\n value: string,\r\n nodeMeta: JsonNodeMeta,\r\n ): void {\r\n if (!this.isEditMode()) return;\r\n\r\n this.setValueAtPath(path, value);\r\n\r\n // Actualiza solo el meta del nodo para reflejar el cambio sin reconstruir el árbol.\r\n if (nodeMeta.kind === 'compact-item') {\r\n nodeMeta.text = value;\r\n } else if (nodeMeta.kind === 'text-primitive') {\r\n nodeMeta.value = value;\r\n }\r\n\r\n this.emitCurrentValue();\r\n }\r\n\r\n onTextBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n onActiveToggle(\r\n path: JsonPathSegment[],\r\n checked: boolean,\r\n nodeMeta: JsonNodeMeta,\r\n ): void {\r\n if (!this.isEditMode()) return;\r\n\r\n this.setValueAtPath(path, checked);\r\n\r\n // Actualiza el meta del nodo y recalcula el visual del símbolo.\r\n nodeMeta.activeBoolean = checked;\r\n nodeMeta.activeVisual = checked\r\n ? this.showStatusAsSymbol()\r\n ? '✓'\r\n : 'true'\r\n : this.showStatusAsSymbol()\r\n ? '✗'\r\n : 'false';\r\n\r\n // Fuerza detección de cambio en el array sin reconstruir el árbol.\r\n this.nodes = [...this.nodes];\r\n this.emitCurrentValue();\r\n this.onTouched();\r\n }\r\n\r\n private updateNodes(value: unknown, emit: boolean): void {\r\n this.normalizedValue = this.parseIfNeeded(value);\r\n this.nodes = this.buildTree(this.normalizedValue);\r\n\r\n if (emit) {\r\n this.emitCurrentValue();\r\n }\r\n }\r\n\r\n private parseIfNeeded(data: unknown): unknown {\r\n if (data === null || data === undefined || data === '') return {};\r\n\r\n return this.normalizeData(data, 0);\r\n }\r\n\r\n private normalizeData(data: unknown, depth: number): unknown {\r\n if (depth > this.maxNormalizationDepth) return data;\r\n\r\n if (typeof data === 'string') {\r\n const parsed = this.tryParseJsonString(data);\r\n\r\n if (parsed.parsed) {\r\n return this.normalizeData(parsed.value, depth + 1);\r\n }\r\n\r\n return data;\r\n }\r\n\r\n if (Array.isArray(data)) {\r\n return data.map((item) => this.normalizeData(item, depth + 1));\r\n }\r\n\r\n if (typeof data === 'object' && data !== null) {\r\n return Object.entries(data as Record<string, unknown>).reduce(\r\n (acc, [key, value]) => {\r\n acc[key] = this.normalizeData(value, depth + 1);\r\n return acc;\r\n },\r\n {} as Record<string, unknown>,\r\n );\r\n }\r\n\r\n return data;\r\n }\r\n\r\n private tryParseJsonString(value: string): {\r\n parsed: boolean;\r\n value: unknown;\r\n } {\r\n const trimmed = value.trim();\r\n\r\n // Solo intentamos parsear si parece JSON para evitar costo innecesario\r\n // en strings de texto común.\r\n const looksLikeJson =\r\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\r\n (trimmed.startsWith('[') && trimmed.endsWith(']'));\r\n\r\n if (!looksLikeJson) {\r\n return { parsed: false, value };\r\n }\r\n\r\n try {\r\n return { parsed: true, value: JSON.parse(trimmed) };\r\n } catch {\r\n return { parsed: false, value };\r\n }\r\n }\r\n\r\n private buildTree(\r\n data: unknown,\r\n parentKey: string = '0',\r\n path: JsonPathSegment[] = [],\r\n ): TreeNode[] {\r\n if (Array.isArray(data)) {\r\n return data.map((item, index) => {\r\n const key = `${parentKey}-${index}`;\r\n const itemPath = [...path, index];\r\n\r\n const compactItem = this.toCompactTextAndActive(\r\n item,\r\n itemPath,\r\n `[${String(index).padStart(2, '0')}]`,\r\n );\r\n if (compactItem) {\r\n return {\r\n key,\r\n label: `${compactItem.indexLabel} Texto: ${compactItem.text} | ${compactItem.activeVisual}`,\r\n icon: 'pi pi-file',\r\n data: compactItem,\r\n };\r\n }\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, itemPath),\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 const objectData = data as Record<string, unknown>;\r\n\r\n return Object.keys(objectData).flatMap((key, index) => {\r\n const value = objectData[key];\r\n const nodeKey = `${parentKey}-${index}`;\r\n const childPath = [...path, key];\r\n const activeKeyName = this.activeKey();\r\n const itemsKeyName = this.itemsKey();\r\n const textKeyName = this.textKey();\r\n\r\n if (key === itemsKeyName && Array.isArray(value)) {\r\n return this.buildTree(value, nodeKey, childPath);\r\n }\r\n\r\n if (this.isItemsContainer(value)) {\r\n const container = value as Record<string, unknown>;\r\n const hasActive = Object.prototype.hasOwnProperty.call(\r\n container,\r\n activeKeyName,\r\n );\r\n const label = hasActive\r\n ? `${key} | ${this.formatActiveSymbol(container[activeKeyName])}`\r\n : key;\r\n\r\n const itemsChildren = this.buildTree(\r\n container[itemsKeyName],\r\n `${nodeKey}-0`,\r\n [...childPath, itemsKeyName],\r\n );\r\n const additionalChildren = Object.keys(container)\r\n .filter(\r\n (childKey) =>\r\n childKey !== itemsKeyName && childKey !== activeKeyName,\r\n )\r\n .flatMap((childKey, childIndex) => {\r\n return this.buildTree(\r\n { [childKey]: container[childKey] },\r\n `${nodeKey}-${childIndex + 1}`,\r\n childPath,\r\n );\r\n });\r\n\r\n const nodeMeta: JsonNodeMeta | undefined = hasActive\r\n ? {\r\n kind: 'group-active',\r\n title: key,\r\n activeVisual: this.formatActiveSymbol(container[activeKeyName]),\r\n activeBoolean: this.toBooleanLike(container[activeKeyName]),\r\n activePath: [...childPath, activeKeyName],\r\n }\r\n : undefined;\r\n\r\n return {\r\n key: nodeKey,\r\n label,\r\n icon: 'pi pi-folder',\r\n children: [...itemsChildren, ...additionalChildren],\r\n data: nodeMeta,\r\n };\r\n }\r\n\r\n const compactValue = this.toCompactTextAndActive(value, childPath, key);\r\n if (compactValue) {\r\n return {\r\n key: nodeKey,\r\n label: `${key}: Texto: ${compactValue.text} | ${compactValue.activeVisual}`,\r\n icon: 'pi pi-file',\r\n data: compactValue,\r\n };\r\n }\r\n\r\n const groupedValue = this.toGroupWithActive(value);\r\n if (groupedValue) {\r\n groupedValue.meta.title = key;\r\n groupedValue.meta.activePath = [...childPath, activeKeyName];\r\n\r\n return {\r\n key: nodeKey,\r\n label: `${key} | ${groupedValue.activeSymbol}`,\r\n icon: 'pi pi-folder',\r\n children: this.buildTree(groupedValue.children, nodeKey, childPath),\r\n data: groupedValue.meta,\r\n };\r\n }\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, childPath),\r\n };\r\n }\r\n\r\n const primitiveMeta: JsonNodeMeta | undefined =\r\n key === textKeyName\r\n ? {\r\n kind: 'text-primitive',\r\n key,\r\n value: this.formatPrimitive(value),\r\n path: childPath,\r\n }\r\n : key === activeKeyName\r\n ? {\r\n kind: 'active-primitive',\r\n key,\r\n activeVisual: this.formatActiveSymbol(value),\r\n activeBoolean: this.toBooleanLike(value),\r\n path: childPath,\r\n }\r\n : undefined;\r\n\r\n return {\r\n key: nodeKey,\r\n label:\r\n key === activeKeyName\r\n ? `${key}: ${this.formatActiveSymbol(value)}`\r\n : `${key}: ${this.formatPrimitive(value)}`,\r\n icon: 'pi pi-file',\r\n data: primitiveMeta,\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 toCompactTextAndActive(\r\n value: unknown,\r\n basePath: JsonPathSegment[],\r\n indexLabel: string,\r\n ): JsonNodeMeta | null {\r\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n const record = value as Record<string, unknown>;\r\n const textKeyName = this.textKey();\r\n const activeKeyName = this.activeKey();\r\n const hasText = Object.prototype.hasOwnProperty.call(record, textKeyName);\r\n const hasActive = Object.prototype.hasOwnProperty.call(\r\n record,\r\n activeKeyName,\r\n );\r\n\r\n if (!hasText || !hasActive) return null;\r\n\r\n const activeValue = record[activeKeyName];\r\n\r\n return {\r\n kind: 'compact-item',\r\n indexLabel,\r\n text: this.formatPrimitive(record[textKeyName]),\r\n activeVisual: this.formatActiveSymbol(activeValue),\r\n activeBoolean: this.toBooleanLike(activeValue),\r\n textPath: [...basePath, textKeyName],\r\n activePath: [...basePath, activeKeyName],\r\n };\r\n }\r\n\r\n private isItemsContainer(value: unknown): boolean {\r\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\r\n return false;\r\n }\r\n\r\n return Array.isArray((value as Record<string, unknown>)[this.itemsKey()]);\r\n }\r\n\r\n private toGroupWithActive(value: unknown): {\r\n activeSymbol: string;\r\n children: Record<string, unknown>;\r\n meta: JsonNodeMeta;\r\n } | null {\r\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\r\n return null;\r\n }\r\n\r\n const record = value as Record<string, unknown>;\r\n const activeKeyName = this.activeKey();\r\n const hasActive = Object.prototype.hasOwnProperty.call(\r\n record,\r\n activeKeyName,\r\n );\r\n\r\n if (!hasActive) return null;\r\n\r\n const childEntries = Object.entries(record).filter(\r\n ([childKey]) => childKey !== activeKeyName,\r\n );\r\n\r\n if (childEntries.length === 0) return null;\r\n\r\n const hasComplexChildren = childEntries.some(([, childValue]) =>\r\n this.isComplex(childValue),\r\n );\r\n\r\n if (!hasComplexChildren) return null;\r\n\r\n return {\r\n activeSymbol: this.formatActiveSymbol(record[activeKeyName]),\r\n children: Object.fromEntries(childEntries),\r\n meta: {\r\n kind: 'group-active',\r\n title: '',\r\n activeVisual: this.formatActiveSymbol(record[activeKeyName]),\r\n activeBoolean: this.toBooleanLike(record[activeKeyName]),\r\n },\r\n };\r\n }\r\n\r\n private formatActiveSymbol(value: unknown): string {\r\n const boolLike = this.toBooleanLike(value);\r\n\r\n if (boolLike === true) return this.showStatusAsSymbol() ? '✓' : 'true';\r\n if (boolLike === false) return this.showStatusAsSymbol() ? '✗' : 'false';\r\n\r\n return this.formatPrimitive(value);\r\n }\r\n\r\n private toBooleanLike(value: unknown): boolean | null {\r\n if (typeof value === 'boolean') return value;\r\n\r\n if (typeof value === 'number') {\r\n if (value === 1) return true;\r\n if (value === 0) return false;\r\n return null;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n const normalized = value.trim().toLowerCase();\r\n if (normalized === 'true' || normalized === '1') return true;\r\n if (normalized === 'false' || normalized === '0') return false;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private getIcon(value: unknown): 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 private setValueAtPath(path: JsonPathSegment[], value: unknown): void {\r\n if (\r\n !path.length ||\r\n typeof this.normalizedValue !== 'object' ||\r\n this.normalizedValue === null\r\n ) {\r\n return;\r\n }\r\n\r\n let target: any = this.normalizedValue;\r\n\r\n for (let index = 0; index < path.length - 1; index += 1) {\r\n const segment = path[index];\r\n\r\n if (target === null || target === undefined) return;\r\n\r\n target = target[segment as any];\r\n }\r\n\r\n const lastSegment = path[path.length - 1];\r\n\r\n if (target !== null && target !== undefined) {\r\n target[lastSegment as any] = value;\r\n }\r\n }\r\n\r\n private emitUpdatedValue(): void {\r\n this.nodes = this.buildTree(this.normalizedValue);\r\n this.emitCurrentValue();\r\n this.onTouched();\r\n }\r\n\r\n private emitCurrentValue(): void {\r\n const payload = this.cloneValue(this.normalizedValue);\r\n this.controlValue = payload;\r\n this.onChange(payload);\r\n this.valueChange.emit(payload);\r\n }\r\n\r\n private cloneValue<T>(value: T): T {\r\n try {\r\n return JSON.parse(JSON.stringify(value)) as T;\r\n } catch {\r\n return value;\r\n }\r\n }\r\n}\r\n","<p-tree\r\n [value]=\"nodes\"\r\n class=\"json-tree w-full\"\r\n selectionMode=\"single\"\r\n [(selection)]=\"selectedNode\"\r\n [highlightOnSelect]=\"false\"\r\n (onNodeSelect)=\"onNodeSelect($event)\"\r\n>\r\n <ng-template let-node pTemplate=\"default\">\r\n <div class=\"json-node\">\r\n <ng-container *ngIf=\"getNodeMeta(node) as meta; else defaultLabel\">\r\n <ng-container [ngSwitch]=\"meta.kind\">\r\n <ng-container *ngSwitchCase=\"'compact-item'\">\r\n <span class=\"json-prefix\">{{ meta.indexLabel || \"\" }}</span>\r\n <span class=\"json-key\"> Texto: </span>\r\n <ng-container *ngIf=\"isEditMode(); else compactTextView\">\r\n <input\r\n type=\"text\"\r\n class=\"json-text-input\"\r\n [class.json-text-inactive]=\"meta.activeBoolean === false\"\r\n [value]=\"meta.text || ''\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (input)=\"\r\n onTextEdit(\r\n $any(meta.textPath),\r\n $any($event.target).value,\r\n meta\r\n )\r\n \"\r\n (blur)=\"onTextBlur()\"\r\n />\r\n </ng-container>\r\n <ng-template #compactTextView>\r\n <span [class.json-text-inactive]=\"meta.activeBoolean === false\">{{\r\n meta.text || \"\"\r\n }}</span>\r\n </ng-template>\r\n <span class=\"json-separator\"> | </span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode()\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.activePath),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'group-active'\">\r\n <span>{{ meta.title || \"\" }}</span>\r\n <span class=\"json-separator\"> | </span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode() && meta.activePath\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.activePath),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'text-primitive'\">\r\n <span>{{ meta.key || \"\" }}:</span>\r\n <ng-container *ngIf=\"isEditMode(); else textPrimitiveView\">\r\n <input\r\n type=\"text\"\r\n class=\"json-text-input\"\r\n [value]=\"meta.value || ''\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (input)=\"\r\n onTextEdit($any(meta.path), $any($event.target).value, meta)\r\n \"\r\n (blur)=\"onTextBlur()\"\r\n />\r\n </ng-container>\r\n <ng-template #textPrimitiveView>\r\n <span>{{ meta.value || \"\" }}</span>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'active-primitive'\">\r\n <span>{{ meta.key || \"\" }}:</span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode()\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.path),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ node.label }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #defaultLabel>\r\n {{ node.label }}\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n</p-tree>\r\n","import { Component, input, OnChanges } from '@angular/core';\r\nimport { TagModule } from 'primeng/tag';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\n\r\n@Component({\r\n selector: 'dsx-date-indicator',\r\n imports: [TagModule, TooltipModule],\r\n templateUrl: './date-indicator.html',\r\n styleUrl: './date-indicator.css',\r\n})\r\nexport class DateIndicator implements OnChanges {\r\n date = input<Date | string>('');\r\n minDays = input<number>(1);\r\n maxDays = input<number>(365);\r\n\r\n status = 'Correcto';\r\n\r\n severity: 'success' | 'warn' | 'info' | 'danger' = 'success';\r\n\r\n icon = 'pi pi-check-circle';\r\n\r\n tooltip = '';\r\n\r\n ngOnChanges(): void {\r\n this.calculate();\r\n }\r\n\r\n private calculate(): void {\r\n const rawDate = this.date();\r\n\r\n if (!rawDate) {\r\n this.setEmptyCriticalState();\r\n return;\r\n }\r\n\r\n const targetDate = new Date(rawDate);\r\n\r\n if (Number.isNaN(targetDate.getTime())) {\r\n this.setEmptyCriticalState();\r\n return;\r\n }\r\n\r\n const today = new Date();\r\n\r\n const diffMs = today.getTime() - targetDate.getTime();\r\n\r\n const days = Math.floor(diffMs / (1000 * 60 * 60 * 24));\r\n\r\n const range = this.maxDays() - this.minDays();\r\n\r\n const step = range / 4;\r\n\r\n const level1 = this.minDays() + step;\r\n const level2 = this.minDays() + step * 2;\r\n const level3 = this.minDays() + step * 3;\r\n\r\n if (days <= level1) {\r\n this.status = 'Correcto';\r\n this.severity = 'success';\r\n this.icon = 'pi pi-check-circle';\r\n } else if (days <= level2) {\r\n this.status = 'Atención';\r\n this.severity = 'warn';\r\n this.icon = 'pi pi-exclamation-triangle';\r\n } else if (days <= level3) {\r\n this.status = 'Riesgo';\r\n this.severity = 'info';\r\n this.icon = 'pi pi-clock';\r\n } else {\r\n this.status = 'Crítico';\r\n this.severity = 'danger';\r\n this.icon = 'pi pi-times-circle';\r\n }\r\n\r\n this.tooltip = `Última actualización: ${targetDate.toLocaleDateString()} • ${days} días`;\r\n }\r\n\r\n private setEmptyCriticalState(): void {\r\n this.status = 'Crítico';\r\n this.severity = 'danger';\r\n this.icon = 'pi pi-times-circle';\r\n this.tooltip = 'Última actualización: Sin valor • 0 días';\r\n }\r\n}\r\n","<p-tag\r\n [severity]=\"severity\"\r\n [icon]=\"icon\"\r\n [value]=\"status\"\r\n [pTooltip]=\"tooltip\"\r\n>\r\n</p-tag>\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 { AvatarModule } from 'primeng/avatar';\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, AvatarModule],\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 loading = signal(false);\r\n rendered = 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.resetViewer(container);\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n this.rendered.set(false);\r\n\r\n if (!(fileBlob instanceof Blob)) {\r\n this.finishWithFallback(container);\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.finishWithFallback(container);\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 resetViewer(container: HTMLElement): void {\r\n this.renderToken++;\r\n this.loading.set(false);\r\n this.rendered.set(false);\r\n container.innerHTML = '';\r\n }\r\n\r\n private finishWithFallback(container: HTMLElement): void {\r\n this.renderToken++;\r\n this.loading.set(false);\r\n this.rendered.set(true);\r\n container.innerHTML = '';\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 viteDocxModulePath = '/@id/docx-preview';\r\n\r\n // Import dinámico en runtime para mantener docx-preview como peer opcional.\r\n const docxPreviewModule = (await import(\r\n /* @vite-ignore */ viteDocxModulePath\r\n )) 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\r\n if (token === this.renderToken && this.visibleState()) {\r\n this.loading.set(false);\r\n this.rendered.set(true);\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 this.loading.set(false);\r\n this.rendered.set(true);\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 [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 [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n <ng-template #header>\r\n <div class=\"flex justify-content-center align-items-center gap-2 px-2\">\r\n <p-avatar image=\"icon2/word-2019.png\" />\r\n <span class=\"font-bold\">Vista preliminar del documento</span>\r\n </div>\r\n </ng-template>\r\n <div class=\"docx-preview-shell\">\r\n @if (loading()) {\r\n <div class=\"docx-preview-loading\">\r\n <span class=\"docx-preview-spinner\"></span>\r\n <span>Cargando vista previa del documento...</span>\r\n </div>\r\n }\r\n\r\n <div\r\n #viewer\r\n class=\"docx-preview-viewer\"\r\n [class.is-hidden]=\"loading() && !rendered()\"\r\n ></div>\r\n </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","import { Component, computed, inject, input } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { TabsModule } from 'primeng/tabs';\r\n\r\n@Component({\r\n selector: 'dsx-template-highlight',\r\n imports: [TabsModule],\r\n templateUrl: './template-highlight.html',\r\n styleUrl: './template-highlight.css',\r\n})\r\nexport class TemplateHighlight {\r\n text = input<string | null>(null);\r\n allowedKeys = input<readonly string[]>([]);\r\n\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n highlightedText = computed<SafeHtml>(() => {\r\n return this.sanitizer.bypassSecurityTrustHtml(\r\n this.processText(this.text(), this.allowedKeys()),\r\n );\r\n });\r\n\r\n private processText(\r\n raw: string | null,\r\n allowedKeys: readonly string[],\r\n ): string {\r\n if (!raw) return '';\r\n\r\n // Primero marcamos variables y etiquetas en el texto crudo usando placeholders.\r\n const spanMap = new Map<string, string>();\r\n let idx = 0;\r\n let result = raw;\r\n\r\n // Variables {{...}}\r\n result = result.replace(/{{(.*?)}}/g, (match, content) => {\r\n const trimmed = content.trim();\r\n let span: string;\r\n\r\n if (content !== trimmed) {\r\n span = `<span class=\"var-invalid\" title=\"Espacios inválidos\">${this.escapeHtml(match)}</span>`;\r\n } else if (!/^[A-Z0-9_]+$/.test(trimmed)) {\r\n span = `<span class=\"var-invalid\" title=\"Formato inválido\">${this.escapeHtml(match)}</span>`;\r\n } else if (!allowedKeys.includes(trimmed)) {\r\n span = `<span class=\"var-invalid\" title=\"Variable no definida\">${this.escapeHtml(match)}</span>`;\r\n } else {\r\n span = `<span class=\"var-valid\">${this.escapeHtml(match)}</span>`;\r\n }\r\n\r\n const placeholder = `__SPAN_${idx++}__`;\r\n spanMap.set(placeholder, span);\r\n return placeholder;\r\n });\r\n\r\n // Etiquetas estructurales: <negrita>, </negrita>, </salto>\r\n const tagRegex = /<[^>\\n]+>/g;\r\n const allowedTags = new Set(['<negrita>', '</negrita>', '</salto>']);\r\n const tagMatches = [...raw.matchAll(tagRegex)];\r\n const invalidTagReasonByIndex = new Map<number, string>();\r\n const negritaStack: number[] = [];\r\n\r\n for (let i = 0; i < tagMatches.length; i++) {\r\n const tag = tagMatches[i][0];\r\n\r\n if (!allowedTags.has(tag)) {\r\n invalidTagReasonByIndex.set(\r\n i,\r\n `Etiqueta inválida: \"${tag}\". Etiquetas permitidas: <negrita>, </negrita>, </salto>.`,\r\n );\r\n continue;\r\n }\r\n\r\n if (tag === '<negrita>') {\r\n negritaStack.push(i);\r\n continue;\r\n }\r\n\r\n if (tag === '</negrita>' && negritaStack.length === 0) {\r\n invalidTagReasonByIndex.set(\r\n i,\r\n 'Estructura incorrecta: Se encontró \"</negrita>\" sin una apertura \"<negrita>\" previa.',\r\n );\r\n continue;\r\n }\r\n\r\n if (tag === '</negrita>') {\r\n negritaStack.pop();\r\n }\r\n }\r\n\r\n for (const openTagIndex of negritaStack) {\r\n invalidTagReasonByIndex.set(\r\n openTagIndex,\r\n 'Estructura incorrecta: Falta cerrar una o más etiquetas \"</negrita>\".',\r\n );\r\n }\r\n\r\n let tagIndex = 0;\r\n result = result.replace(tagRegex, (tag) => {\r\n const reason = invalidTagReasonByIndex.get(tagIndex);\r\n const span = reason\r\n ? `<span class=\"tag-invalid\" title=\"${this.escapeAttr(reason)}\">${this.escapeHtml(tag)}</span>`\r\n : `<span class=\"tag-valid\">${this.escapeHtml(tag)}</span>`;\r\n\r\n const placeholder = `__SPAN_${idx++}__`;\r\n spanMap.set(placeholder, span);\r\n tagIndex += 1;\r\n return placeholder;\r\n });\r\n\r\n // Escapamos el resto del texto (fuera de placeholders).\r\n result = this.escapeHtml(result);\r\n\r\n // Ahora marcamos llaves sueltas: {{ o }} que no estén en pareja de variable.\r\n result = result.replace(/{{|}}/g, (m) => {\r\n return `<span class=\"var-brace-error\" title=\"Llave desbalanceada\">${m}</span>`;\r\n });\r\n\r\n // Restauramos los spans reales\r\n for (const [placeholder, span] of spanMap) {\r\n result = result.replace(placeholder, span);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private escapeHtml(text: string | null): string {\r\n if (!text) return '';\r\n return text\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>');\r\n }\r\n\r\n private escapeAttr(text: string): string {\r\n return text\r\n .replace(/&/g, '&')\r\n .replace(/\"/g, '"')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>');\r\n }\r\n}\r\n","<p-tabs value=\"0\">\r\n <p-tablist>\r\n <p-tab value=\"0\">\r\n <i class=\"pi pi-file-edit tab-icon\" aria-hidden=\"true\"></i>\r\n <span>Preliminar</span>\r\n </p-tab>\r\n <p-tab value=\"1\">\r\n <i class=\"pi pi-list tab-icon\" aria-hidden=\"true\"></i>\r\n <span>Variables</span>\r\n </p-tab>\r\n </p-tablist>\r\n <p-tabpanels>\r\n <p-tabpanel value=\"0\">\r\n <div class=\"template-highlight\" [innerHTML]=\"highlightedText()\"></div>\r\n </p-tabpanel>\r\n <p-tabpanel value=\"1\">\r\n @if (allowedKeys().length) {\r\n <ul class=\"template-vars-list\">\r\n @for (key of allowedKeys(); track key) {\r\n <li>\r\n <strong>{{ key }}</strong>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </p-tabpanel>\r\n </p-tabpanels>\r\n</p-tabs>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
|