ngx-dsxlibrary 2.21.21 → 2.21.22
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 +4 -1
- package/fesm2022/ngx-dsxlibrary-src-lib-components.mjs.map +1 -1
- package/fesm2022/ngx-dsxlibrary-src-lib-pipe.mjs +1 -1
- package/fesm2022/ngx-dsxlibrary-src-lib-pipe.mjs.map +1 -1
- package/fesm2022/ngx-dsxlibrary.mjs +7 -4
- package/fesm2022/ngx-dsxlibrary.mjs.map +1 -1
- package/ngx-dsxlibrary-2.21.22.tgz +0 -0
- package/package.json +1 -1
- package/ngx-dsxlibrary-2.21.21.tgz +0 -0
|
@@ -405,7 +405,10 @@ class DocxPreviewComponent {
|
|
|
405
405
|
}
|
|
406
406
|
async renderDocx(fileBlob, container, options, token) {
|
|
407
407
|
try {
|
|
408
|
-
|
|
408
|
+
// Use Function constructor to bypass Vite's static import analysis.
|
|
409
|
+
// This makes 'docx-preview' a truly optional peer dependency.
|
|
410
|
+
const load = new Function('m', 'return import(m)');
|
|
411
|
+
const docxPreviewModule = (await load('docx-preview'));
|
|
409
412
|
if (token !== this.renderToken || !this.visibleState()) {
|
|
410
413
|
return;
|
|
411
414
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-dsxlibrary-src-lib-components.mjs","sources":["../../../projects/ngx-dsx/src/lib/components/app-message-error/app-message-error.component.ts","../../../projects/ngx-dsx/src/lib/components/app-message-error/app-message-error.component.html","../../../projects/ngx-dsx/src/lib/components/inputs/file/file.component.ts","../../../projects/ngx-dsx/src/lib/components/inputs/file/file.component.html","../../../projects/ngx-dsx/src/lib/components/json/json-viewer/json-viewer.component.ts","../../../projects/ngx-dsx/src/lib/components/json/json-viewer/json-viewer.component.html","../../../projects/ngx-dsx/src/lib/components/kpicard/kpicard.component.ts","../../../projects/ngx-dsx/src/lib/components/kpicard/kpicard.component.html","../../../projects/ngx-dsx/src/lib/components/view/docx-preview/docx-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/view/docx-preview/docx-preview.component.html","../../../projects/ngx-dsx/src/lib/components/view/pdf-preview/pdf-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/view/pdf-preview/pdf-preview.component.html","../../../projects/ngx-dsx/src/lib/components/ngx-dsxlibrary-src-lib-components.ts"],"sourcesContent":["import { DecimalPipe } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n DoCheck,\r\n ElementRef,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { TagModule } from 'primeng/tag';\r\n\r\n@Component({\r\n selector: 'app-message-error',\r\n imports: [TagModule, DecimalPipe],\r\n templateUrl: './app-message-error.component.html',\r\n styleUrl: './app-message-error.component.css',\r\n})\r\n/**\r\n * Renderiza mensajes de validacion para un control o formulario.\r\n *\r\n * Nota de depuracion:\r\n * - En contenedores PrimeNG `p-floatlabel`, el mensaje visual se pinta como\r\n * overlay (CSS absoluto) para no deformar la posicion del label.\r\n * - Para evitar solapamiento con el siguiente campo, este componente ajusta\r\n * temporalmente el `margin-bottom` del `.p-floatlabel` padre cuando el error\r\n * esta visible.\r\n */\r\nexport class AppMessageErrorComponent\r\n implements AfterViewInit, DoCheck, OnDestroy\r\n{\r\n // Espacio vertical reservado bajo el float label cuando hay error visible.\r\n private readonly floatLabelErrorSpace = '1.6rem';\r\n // Referencia al contenedor PrimeNG padre, si existe.\r\n private floatLabelElement: HTMLElement | null = null;\r\n // Se conserva el estilo inline original para restaurarlo al ocultar/destruir.\r\n private previousInlineMarginBottom = '';\r\n // Evita escrituras de estilo repetidas cuando el estado de visibilidad no cambia.\r\n private lastAppliedVisibleState = false;\r\n\r\n constructor(\r\n private readonly elementRef: ElementRef<HTMLElement>,\r\n private readonly renderer: Renderer2,\r\n ) {}\r\n\r\n // Control de formulario que se pasa como input.\r\n @Input() control: AbstractControl | null | undefined = null;\r\n @Input() form: FormGroup | null = null;\r\n\r\n ngAfterViewInit(): void {\r\n // Busca el FloatLabel mas cercano para ajustar su separacion inferior.\r\n this.floatLabelElement = this.elementRef.nativeElement.closest(\r\n '.p-floatlabel',\r\n ) as HTMLElement | null;\r\n\r\n if (this.floatLabelElement) {\r\n this.previousInlineMarginBottom =\r\n this.floatLabelElement.style.marginBottom;\r\n this.syncFloatLabelSpacing();\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n // Se ejecuta en cada ciclo para reaccionar al estado touched/invalid.\r\n this.syncFloatLabelSpacing();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (!this.floatLabelElement) {\r\n return;\r\n }\r\n\r\n if (this.previousInlineMarginBottom) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.previousInlineMarginBottom,\r\n );\r\n return;\r\n }\r\n\r\n this.renderer.removeStyle(this.floatLabelElement, 'margin-bottom');\r\n }\r\n\r\n private syncFloatLabelSpacing(): void {\r\n if (!this.floatLabelElement) {\r\n return;\r\n }\r\n\r\n const isVisible = this.isControlErrorVisible();\r\n if (isVisible === this.lastAppliedVisibleState) {\r\n return;\r\n }\r\n\r\n this.lastAppliedVisibleState = isVisible;\r\n if (isVisible) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.floatLabelErrorSpace,\r\n );\r\n return;\r\n }\r\n\r\n if (this.previousInlineMarginBottom) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.previousInlineMarginBottom,\r\n );\r\n return;\r\n }\r\n\r\n this.renderer.removeStyle(this.floatLabelElement, 'margin-bottom');\r\n }\r\n\r\n isControlErrorVisible(): boolean {\r\n if (!this.control?.invalid) {\r\n return false;\r\n }\r\n\r\n if (this.control.errors?.['alreadyValueExists']) {\r\n return !!(this.control.dirty || this.control.touched);\r\n }\r\n\r\n return !!this.control.touched;\r\n }\r\n}\r\n","<div class=\"dsx-error-slot\" [class.is-visible]=\"isControlErrorVisible()\">\r\n @if (isControlErrorVisible()) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como máximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor mínimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor máximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una dirección de correo válida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else if (control?.errors?.[\"alreadyValueExists\"]) {\r\n <strong>{{ control?.errors?.[\"alreadyValueExists\"]?.message }}</strong>\r\n } @else {\r\n Existe un error aún no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n","import { Component, forwardRef, input, signal, viewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FileUpload } from 'primeng/fileupload';\r\n\r\n@Component({\r\n selector: 'dsx-file-upload',\r\n imports: [FileUpload],\r\n templateUrl: './file.component.html',\r\n styleUrl: './file.component.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FileComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class FileComponent implements ControlValueAccessor {\r\n fileUpload = viewChild.required<FileUpload>('fileUpload');\r\n accept = input<string>('.xls,.xlsx');\r\n // Tamaño máximo en MB (se convierte internamente a bytes)\r\n maxFileSize = input<number>(5);\r\n // Mensajes para tipo de archivo inválido\r\n invalidSummary = input<string>('El formato es inválido.');\r\n invalidDetail = input<string>('Archivo debe tener un formato válido. ({0}).');\r\n\r\n // Mensajes para tamaño de archivo inválido\r\n invalidSizeSummary = input<string>('Tamaño de archivo inválido.');\r\n invalidSizeDetail = input<string>('El tamaño máximo permitido es {0}');\r\n disabled = signal<boolean>(false);\r\n private value: File | null = null;\r\n private onChange = (_: File | null) => {};\r\n private onTouched = () => {};\r\n\r\n onSelect(event: any) {\r\n const file = event.files?.[0] ?? null;\r\n this.value = file;\r\n this.onChange(file);\r\n this.onTouched();\r\n }\r\n\r\n /** 👇 API pública */\r\n clear() {\r\n this.fileUpload()?.clear();\r\n this.value = null;\r\n this.onChange(null);\r\n }\r\n\r\n writeValue(value: File | null): void {\r\n this.value = value;\r\n\r\n if (!value) {\r\n // Si se limpia el valor desde el formulario, limpiamos el componente\r\n this.fileUpload()?.clear();\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n}\r\n","<p-fileUpload\r\n #fileUpload\r\n mode=\"basic\"\r\n [accept]=\"accept()\"\r\n [maxFileSize]=\"maxFileSize() * 1024 * 1024\"\r\n [invalidFileTypeMessageSummary]=\"invalidSummary()\"\r\n [invalidFileTypeMessageDetail]=\"invalidDetail()\"\r\n [invalidFileSizeMessageSummary]=\"invalidSizeSummary()\"\r\n [invalidFileSizeMessageDetail]=\"invalidSizeDetail()\"\r\n (onSelect)=\"onSelect($event)\"\r\n [disabled]=\"disabled()\"\r\n/>\r\n","import { Component, effect, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { TreeNode } from 'primeng/api';\r\nimport { TreeModule } from 'primeng/tree';\r\n\r\n@Component({\r\n selector: 'app-json-viewer',\r\n standalone: true,\r\n imports: [TreeModule],\r\n templateUrl: './json-viewer.component.html',\r\n styleUrl: './json-viewer.component.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => JsonViewerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class JsonViewerComponent implements ControlValueAccessor {\r\n data = input<unknown>(null);\r\n nodes: TreeNode[] = [];\r\n selectedNode: TreeNode | null = null;\r\n private controlValue: unknown = null;\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.controlValue === null || this.controlValue === undefined) {\r\n this.updateNodes(this.data());\r\n }\r\n });\r\n }\r\n\r\n writeValue(value: unknown): void {\r\n this.controlValue = value;\r\n this.updateNodes(value);\r\n }\r\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n void fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n void fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n void isDisabled;\r\n }\r\n\r\n onNodeSelect(event: { node?: TreeNode }): void {\r\n const node = event?.node;\r\n\r\n if (!node?.children?.length) return;\r\n\r\n node.expanded = !node.expanded;\r\n this.selectedNode = null;\r\n this.nodes = [...this.nodes];\r\n }\r\n\r\n private updateNodes(value: unknown): void {\r\n this.nodes = this.buildTree(this.parseIfNeeded(value));\r\n }\r\n\r\n private parseIfNeeded(data: unknown): any {\r\n if (!data) return {};\r\n\r\n if (typeof data === 'string') {\r\n try {\r\n return JSON.parse(data);\r\n } catch {\r\n return {};\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n private buildTree(data: any, parentKey: string = '0'): TreeNode[] {\r\n if (Array.isArray(data)) {\r\n return data.map((item, index) => {\r\n const key = `${parentKey}-${index}`;\r\n\r\n if (this.isComplex(item)) {\r\n return {\r\n key,\r\n label: `[${index}]`,\r\n //icon: this.getIcon(item),\r\n children: this.buildTree(item, key),\r\n };\r\n }\r\n\r\n return {\r\n key,\r\n label: `[${index}]: ${this.formatPrimitive(item)}`,\r\n //icon: 'pi pi-file',\r\n };\r\n });\r\n }\r\n\r\n if (typeof data === 'object' && data !== null) {\r\n return Object.keys(data).map((key, index) => {\r\n const value = data[key];\r\n const nodeKey = `${parentKey}-${index}`;\r\n\r\n if (this.isComplex(value)) {\r\n return {\r\n key: nodeKey,\r\n label: key,\r\n //icon: this.getIcon(value),\r\n children: this.buildTree(value, nodeKey),\r\n };\r\n }\r\n\r\n return {\r\n key: nodeKey,\r\n label: `${key}: ${this.formatPrimitive(value)}`,\r\n icon: 'pi pi-file',\r\n };\r\n });\r\n }\r\n\r\n return [\r\n {\r\n key: parentKey,\r\n label: this.formatPrimitive(data),\r\n icon: 'pi pi-file',\r\n },\r\n ];\r\n }\r\n\r\n private isComplex(value: unknown): boolean {\r\n return (\r\n Array.isArray(value) || (typeof value === 'object' && value !== null)\r\n );\r\n }\r\n\r\n private formatPrimitive(value: unknown): string {\r\n if (value === null || value === undefined) return '-';\r\n\r\n if (typeof value === 'string') return value;\r\n\r\n return String(value);\r\n }\r\n\r\n private getIcon(value: any): string {\r\n if (Array.isArray(value)) return 'pi pi-list';\r\n\r\n if (typeof value === 'object') return 'pi pi-folder';\r\n\r\n return 'pi pi-file';\r\n }\r\n}\r\n","<p-tree\r\n\t[value]=\"nodes\"\r\n\tclass=\"json-tree w-full\"\r\n\tselectionMode=\"single\"\r\n\t[(selection)]=\"selectedNode\"\r\n\t[highlightOnSelect]=\"false\"\r\n\t(onNodeSelect)=\"onNodeSelect($event)\"\r\n>\r\n</p-tree>\r\n","import { Component, input } from '@angular/core';\r\nimport { CountUpDirective } from 'ngx-countup';\r\n\r\n@Component({\r\n selector: 'app-kpicard',\r\n imports: [CountUpDirective],\r\n templateUrl: './kpicard.component.html',\r\n styleUrl: './kpicard.component.css',\r\n})\r\nexport class KpicardComponent {\r\n //type = input.required<string>();\r\n option = input.required<'currency' | 'integer' | 'percent'>();\r\n label = input.required<string>();\r\n iconType = input<string>('fa-regular fa-bell');\r\n color = input<string>();\r\n valor = input<number>(0);\r\n theme = input<\r\n | 'light'\r\n | 'dark'\r\n | 'aqua'\r\n | 'sunset'\r\n | 'mint'\r\n | 'peach'\r\n | 'plasma'\r\n | 'nebula'\r\n >('light');\r\n\r\n options: Record<'currency' | 'integer' | 'percent', any> = {\r\n currency: {\r\n startVal: 0,\r\n duration: 0.5,\r\n //prefix: 'Q',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n suffix: ' GTQ', // Sufijo\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n integer: {\r\n startVal: 0,\r\n duration: 0.5,\r\n prefix: 'Cant. ',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n percent: {\r\n startVal: 0,\r\n duration: 0.5,\r\n suffix: '%',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n };\r\n\r\n // ✅ Método auxiliar para obtener la opción con seguridad\r\n getSelectedOption() {\r\n return this.options[this.option()] ?? this.options.currency; // Si no existe, usa `currency`\r\n }\r\n}\r\n","<div [class]=\"`kpi-card ${color()} ${theme()}-theme`\">\r\n <div class=\"kpi-container\">\r\n <span\r\n [countUp]=\"valor()\"\r\n [countUpOptions]=\"getSelectedOption()\"\r\n [class]=\"`card-value-${theme()}`\"\r\n >0</span\r\n >\r\n <span [class]=\"`card-text-${theme()}`\">{{ label() }}</span>\r\n </div>\r\n <i [class]=\"`${iconType()} icon icon-${theme()}`\"></i>\r\n</div>\r\n","import {\r\n Component,\r\n effect,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n input,\r\n Output,\r\n signal,\r\n viewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { DialogModule } from 'primeng/dialog';\r\n\r\ntype DocxRenderOptions = {\r\n ignoreWidth?: boolean;\r\n renderHeaders?: boolean;\r\n renderFooters?: boolean;\r\n};\r\n\r\ntype DocxPreviewModule = {\r\n renderAsync: (\r\n document: Blob,\r\n bodyContainer: HTMLElement,\r\n styleContainer?: HTMLElement,\r\n options?: DocxRenderOptions,\r\n ) => Promise<void>;\r\n};\r\n\r\n@Component({\r\n selector: 'app-docx-preview',\r\n imports: [DialogModule],\r\n templateUrl: './docx-preview.component.html',\r\n styleUrl: './docx-preview.component.css',\r\n})\r\nexport class DocxPreviewComponent {\r\n view = viewChild<ElementRef>('viewer');\r\n private visibleState: WritableSignal<boolean> = signal(false);\r\n private renderToken = 0;\r\n\r\n @Input()\r\n set visible(value: boolean) {\r\n this.visibleState.set(!!value);\r\n }\r\n\r\n get visible(): boolean {\r\n return this.visibleState();\r\n }\r\n\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n blob = input<Blob | null>(null);\r\n\r\n constructor() {\r\n effect(() => {\r\n const container = this.view()?.nativeElement;\r\n const isVisible = this.visibleState();\r\n const fileBlob = this.blob();\r\n\r\n if (!container) {\r\n return;\r\n }\r\n\r\n if (!isVisible) {\r\n this.renderToken++;\r\n container.innerHTML = '';\r\n return;\r\n }\r\n\r\n if (!(fileBlob instanceof Blob)) {\r\n this.renderToken++;\r\n container.innerHTML =\r\n '<p>No hay un archivo .docx válido para previsualizar.</p>';\r\n return;\r\n }\r\n\r\n if (!fileBlob.size) {\r\n this.renderToken++;\r\n container.innerHTML = '<p>El archivo .docx está vacío.</p>';\r\n return;\r\n }\r\n\r\n const token = ++this.renderToken;\r\n container.innerHTML = '';\r\n const options: DocxRenderOptions = {\r\n ignoreWidth: true,\r\n renderHeaders: true,\r\n renderFooters: true,\r\n };\r\n\r\n void this.renderDocx(fileBlob, container, options, token);\r\n });\r\n }\r\n\r\n private async renderDocx(\r\n fileBlob: Blob,\r\n container: HTMLElement,\r\n options: DocxRenderOptions,\r\n token: number,\r\n ) {\r\n try {\r\n const docxPreviewModule =\r\n (await import('docx-preview')) as unknown as DocxPreviewModule;\r\n\r\n if (token !== this.renderToken || !this.visibleState()) {\r\n return;\r\n }\r\n\r\n await docxPreviewModule.renderAsync(\r\n fileBlob,\r\n container,\r\n undefined,\r\n options,\r\n );\r\n } catch (error) {\r\n if (token !== this.renderToken || !this.visibleState()) {\r\n return;\r\n }\r\n\r\n console.error(\r\n '[DocxPreview] Error al renderizar el archivo DOCX.',\r\n error,\r\n );\r\n\r\n container.innerHTML =\r\n '<p>No se pudo renderizar la vista previa DOCX. Verifica la consola para más detalles.</p>';\r\n }\r\n }\r\n\r\n onHide() {\r\n const container = this.view()?.nativeElement;\r\n\r\n if (container) {\r\n this.renderToken++;\r\n container.innerHTML = '';\r\n }\r\n\r\n this.visibleChange.emit(false);\r\n }\r\n}\r\n","<p-dialog\r\n header=\"Vista preliminar del documento\"\r\n [visible]=\"visible\"\r\n (onHide)=\"onHide()\"\r\n [modal]=\"true\"\r\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\n [style]=\"{ width: '80vw' }\"\r\n [draggable]=\"false\"\r\n [resizable]=\"false\"\r\n>\r\n <div #viewer></div>\r\n</p-dialog>\r\n","import { Component, OnDestroy, effect, input, model } from '@angular/core';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { DialogModule } from 'primeng/dialog';\r\n\r\n@Component({\r\n selector: 'app-pdf-preview',\r\n imports: [DialogModule],\r\n templateUrl: './pdf-preview.component.html',\r\n styleUrl: './pdf-preview.component.css',\r\n})\r\nexport class PdfPreviewComponent implements OnDestroy {\r\n visible = model<boolean>(false);\r\n blob = input<Blob | null>(null);\r\n private objectUrl: string | null = null;\r\n pdfUrl: SafeResourceUrl | null = null;\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n effect((onCleanup) => {\r\n const file = this.blob();\r\n const isVisible = this.visible();\r\n\r\n if (!isVisible || file === null) {\r\n this.limpiarUrlAnterior();\r\n return;\r\n }\r\n\r\n if (file.type !== 'application/pdf') {\r\n this.limpiarUrlAnterior();\r\n console.warn('El archivo recibido no es un PDF válido');\r\n return;\r\n }\r\n\r\n this.limpiarUrlAnterior();\r\n const currentObjectUrl = URL.createObjectURL(file);\r\n this.objectUrl = currentObjectUrl;\r\n this.pdfUrl =\r\n this.sanitizer.bypassSecurityTrustResourceUrl(currentObjectUrl);\r\n\r\n onCleanup(() => {\r\n URL.revokeObjectURL(currentObjectUrl);\r\n if (this.objectUrl === currentObjectUrl) {\r\n this.objectUrl = null;\r\n this.pdfUrl = null;\r\n }\r\n });\r\n });\r\n }\r\n\r\n private limpiarUrlAnterior(): void {\r\n if (this.objectUrl) {\r\n URL.revokeObjectURL(this.objectUrl);\r\n this.objectUrl = null;\r\n }\r\n this.pdfUrl = null;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.limpiarUrlAnterior();\r\n }\r\n}\r\n","<p-dialog\r\n header=\"Vista previa del documento de soporte\"\r\n [(visible)]=\"visible\"\r\n [style]=\"{ width: '80vw', height: '90vh' }\"\r\n [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n @if (pdfUrl) {\r\n <iframe\r\n [src]=\"pdfUrl\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n style=\"border: none\"\r\n ></iframe>\r\n }\r\n</p-dialog>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-dsxlibrary-src-lib-components.mjs","sources":["../../../projects/ngx-dsx/src/lib/components/app-message-error/app-message-error.component.ts","../../../projects/ngx-dsx/src/lib/components/app-message-error/app-message-error.component.html","../../../projects/ngx-dsx/src/lib/components/inputs/file/file.component.ts","../../../projects/ngx-dsx/src/lib/components/inputs/file/file.component.html","../../../projects/ngx-dsx/src/lib/components/json/json-viewer/json-viewer.component.ts","../../../projects/ngx-dsx/src/lib/components/json/json-viewer/json-viewer.component.html","../../../projects/ngx-dsx/src/lib/components/kpicard/kpicard.component.ts","../../../projects/ngx-dsx/src/lib/components/kpicard/kpicard.component.html","../../../projects/ngx-dsx/src/lib/components/view/docx-preview/docx-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/view/docx-preview/docx-preview.component.html","../../../projects/ngx-dsx/src/lib/components/view/pdf-preview/pdf-preview.component.ts","../../../projects/ngx-dsx/src/lib/components/view/pdf-preview/pdf-preview.component.html","../../../projects/ngx-dsx/src/lib/components/ngx-dsxlibrary-src-lib-components.ts"],"sourcesContent":["import { DecimalPipe } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n DoCheck,\r\n ElementRef,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\nimport { TagModule } from 'primeng/tag';\r\n\r\n@Component({\r\n selector: 'app-message-error',\r\n imports: [TagModule, DecimalPipe],\r\n templateUrl: './app-message-error.component.html',\r\n styleUrl: './app-message-error.component.css',\r\n})\r\n/**\r\n * Renderiza mensajes de validacion para un control o formulario.\r\n *\r\n * Nota de depuracion:\r\n * - En contenedores PrimeNG `p-floatlabel`, el mensaje visual se pinta como\r\n * overlay (CSS absoluto) para no deformar la posicion del label.\r\n * - Para evitar solapamiento con el siguiente campo, este componente ajusta\r\n * temporalmente el `margin-bottom` del `.p-floatlabel` padre cuando el error\r\n * esta visible.\r\n */\r\nexport class AppMessageErrorComponent\r\n implements AfterViewInit, DoCheck, OnDestroy\r\n{\r\n // Espacio vertical reservado bajo el float label cuando hay error visible.\r\n private readonly floatLabelErrorSpace = '1.6rem';\r\n // Referencia al contenedor PrimeNG padre, si existe.\r\n private floatLabelElement: HTMLElement | null = null;\r\n // Se conserva el estilo inline original para restaurarlo al ocultar/destruir.\r\n private previousInlineMarginBottom = '';\r\n // Evita escrituras de estilo repetidas cuando el estado de visibilidad no cambia.\r\n private lastAppliedVisibleState = false;\r\n\r\n constructor(\r\n private readonly elementRef: ElementRef<HTMLElement>,\r\n private readonly renderer: Renderer2,\r\n ) {}\r\n\r\n // Control de formulario que se pasa como input.\r\n @Input() control: AbstractControl | null | undefined = null;\r\n @Input() form: FormGroup | null = null;\r\n\r\n ngAfterViewInit(): void {\r\n // Busca el FloatLabel mas cercano para ajustar su separacion inferior.\r\n this.floatLabelElement = this.elementRef.nativeElement.closest(\r\n '.p-floatlabel',\r\n ) as HTMLElement | null;\r\n\r\n if (this.floatLabelElement) {\r\n this.previousInlineMarginBottom =\r\n this.floatLabelElement.style.marginBottom;\r\n this.syncFloatLabelSpacing();\r\n }\r\n }\r\n\r\n ngDoCheck(): void {\r\n // Se ejecuta en cada ciclo para reaccionar al estado touched/invalid.\r\n this.syncFloatLabelSpacing();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (!this.floatLabelElement) {\r\n return;\r\n }\r\n\r\n if (this.previousInlineMarginBottom) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.previousInlineMarginBottom,\r\n );\r\n return;\r\n }\r\n\r\n this.renderer.removeStyle(this.floatLabelElement, 'margin-bottom');\r\n }\r\n\r\n private syncFloatLabelSpacing(): void {\r\n if (!this.floatLabelElement) {\r\n return;\r\n }\r\n\r\n const isVisible = this.isControlErrorVisible();\r\n if (isVisible === this.lastAppliedVisibleState) {\r\n return;\r\n }\r\n\r\n this.lastAppliedVisibleState = isVisible;\r\n if (isVisible) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.floatLabelErrorSpace,\r\n );\r\n return;\r\n }\r\n\r\n if (this.previousInlineMarginBottom) {\r\n this.renderer.setStyle(\r\n this.floatLabelElement,\r\n 'margin-bottom',\r\n this.previousInlineMarginBottom,\r\n );\r\n return;\r\n }\r\n\r\n this.renderer.removeStyle(this.floatLabelElement, 'margin-bottom');\r\n }\r\n\r\n isControlErrorVisible(): boolean {\r\n if (!this.control?.invalid) {\r\n return false;\r\n }\r\n\r\n if (this.control.errors?.['alreadyValueExists']) {\r\n return !!(this.control.dirty || this.control.touched);\r\n }\r\n\r\n return !!this.control.touched;\r\n }\r\n}\r\n","<div class=\"dsx-error-slot\" [class.is-visible]=\"isControlErrorVisible()\">\r\n @if (isControlErrorVisible()) {\r\n <div class=\"dsx-error-message\">\r\n <i\r\n class=\"pi pi-exclamation-triangle dsx-error-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n @if (control?.errors?.[\"required\"]) {\r\n El campo <strong>es requerido.</strong>\r\n } @else if (control?.errors?.[\"invalidNIT\"]) {\r\n <strong>{{ control?.errors?.[\"invalidNIT\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidCUI\"]) {\r\n <strong>{{ control?.errors?.[\"invalidCUI\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"invalidDateRange\"]) {\r\n <strong>{{ control?.errors?.[\"invalidDateRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"dateNotRange\"]) {\r\n <strong>{{ control?.errors?.[\"dateNotRange\"]?.message }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"minlength\"]) {\r\n Debe tener al menos\r\n <strong>{{ control?.errors?.[\"minlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"maxlength\"]) {\r\n Debe tener como máximo\r\n <strong>{{ control?.errors?.[\"maxlength\"]?.requiredLength }}</strong>\r\n caracteres.\r\n } @else if (control?.errors?.[\"min\"]) {\r\n El valor mínimo permitido es\r\n <strong>{{ control?.errors?.[\"min\"]?.min }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"max\"]) {\r\n El valor máximo permitido es\r\n <strong>{{ control?.errors?.[\"max\"]?.max | number: \"1.2-2\" }}</strong\r\n >.\r\n } @else if (control?.errors?.[\"email\"]) {\r\n Debe ser una dirección de correo válida.\r\n } @else if (control?.errors?.[\"pattern\"]) {\r\n El campo no tiene el formato requerido.\r\n } @else if (control?.errors?.[\"alreadyValueExists\"]) {\r\n <strong>{{ control?.errors?.[\"alreadyValueExists\"]?.message }}</strong>\r\n } @else {\r\n Existe un error aún no identificado.\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!-- mensaje para formulario en general -->\r\n@if (form?.invalid && form?.touched) {\r\n <div class=\"mt-2 mb-2\">\r\n @if (this.form?.errors?.[\"atLeastOneRequired\"]) {\r\n <p-tag severity=\"danger\" [rounded]=\"true\">\r\n {{ form?.getError(\"atLeastOneRequired\")?.message }}</p-tag\r\n >\r\n }\r\n </div>\r\n}\r\n","import { Component, forwardRef, input, signal, viewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FileUpload } from 'primeng/fileupload';\r\n\r\n@Component({\r\n selector: 'dsx-file-upload',\r\n imports: [FileUpload],\r\n templateUrl: './file.component.html',\r\n styleUrl: './file.component.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FileComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class FileComponent implements ControlValueAccessor {\r\n fileUpload = viewChild.required<FileUpload>('fileUpload');\r\n accept = input<string>('.xls,.xlsx');\r\n // Tamaño máximo en MB (se convierte internamente a bytes)\r\n maxFileSize = input<number>(5);\r\n // Mensajes para tipo de archivo inválido\r\n invalidSummary = input<string>('El formato es inválido.');\r\n invalidDetail = input<string>('Archivo debe tener un formato válido. ({0}).');\r\n\r\n // Mensajes para tamaño de archivo inválido\r\n invalidSizeSummary = input<string>('Tamaño de archivo inválido.');\r\n invalidSizeDetail = input<string>('El tamaño máximo permitido es {0}');\r\n disabled = signal<boolean>(false);\r\n private value: File | null = null;\r\n private onChange = (_: File | null) => {};\r\n private onTouched = () => {};\r\n\r\n onSelect(event: any) {\r\n const file = event.files?.[0] ?? null;\r\n this.value = file;\r\n this.onChange(file);\r\n this.onTouched();\r\n }\r\n\r\n /** 👇 API pública */\r\n clear() {\r\n this.fileUpload()?.clear();\r\n this.value = null;\r\n this.onChange(null);\r\n }\r\n\r\n writeValue(value: File | null): void {\r\n this.value = value;\r\n\r\n if (!value) {\r\n // Si se limpia el valor desde el formulario, limpiamos el componente\r\n this.fileUpload()?.clear();\r\n }\r\n }\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n}\r\n","<p-fileUpload\r\n #fileUpload\r\n mode=\"basic\"\r\n [accept]=\"accept()\"\r\n [maxFileSize]=\"maxFileSize() * 1024 * 1024\"\r\n [invalidFileTypeMessageSummary]=\"invalidSummary()\"\r\n [invalidFileTypeMessageDetail]=\"invalidDetail()\"\r\n [invalidFileSizeMessageSummary]=\"invalidSizeSummary()\"\r\n [invalidFileSizeMessageDetail]=\"invalidSizeDetail()\"\r\n (onSelect)=\"onSelect($event)\"\r\n [disabled]=\"disabled()\"\r\n/>\r\n","import { Component, effect, forwardRef, input } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { TreeNode } from 'primeng/api';\r\nimport { TreeModule } from 'primeng/tree';\r\n\r\n@Component({\r\n selector: 'app-json-viewer',\r\n standalone: true,\r\n imports: [TreeModule],\r\n templateUrl: './json-viewer.component.html',\r\n styleUrl: './json-viewer.component.css',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => JsonViewerComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class JsonViewerComponent implements ControlValueAccessor {\r\n data = input<unknown>(null);\r\n nodes: TreeNode[] = [];\r\n selectedNode: TreeNode | null = null;\r\n private controlValue: unknown = null;\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.controlValue === null || this.controlValue === undefined) {\r\n this.updateNodes(this.data());\r\n }\r\n });\r\n }\r\n\r\n writeValue(value: unknown): void {\r\n this.controlValue = value;\r\n this.updateNodes(value);\r\n }\r\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n void fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n void fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n void isDisabled;\r\n }\r\n\r\n onNodeSelect(event: { node?: TreeNode }): void {\r\n const node = event?.node;\r\n\r\n if (!node?.children?.length) return;\r\n\r\n node.expanded = !node.expanded;\r\n this.selectedNode = null;\r\n this.nodes = [...this.nodes];\r\n }\r\n\r\n private updateNodes(value: unknown): void {\r\n this.nodes = this.buildTree(this.parseIfNeeded(value));\r\n }\r\n\r\n private parseIfNeeded(data: unknown): any {\r\n if (!data) return {};\r\n\r\n if (typeof data === 'string') {\r\n try {\r\n return JSON.parse(data);\r\n } catch {\r\n return {};\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n\r\n private buildTree(data: any, parentKey: string = '0'): TreeNode[] {\r\n if (Array.isArray(data)) {\r\n return data.map((item, index) => {\r\n const key = `${parentKey}-${index}`;\r\n\r\n if (this.isComplex(item)) {\r\n return {\r\n key,\r\n label: `[${index}]`,\r\n //icon: this.getIcon(item),\r\n children: this.buildTree(item, key),\r\n };\r\n }\r\n\r\n return {\r\n key,\r\n label: `[${index}]: ${this.formatPrimitive(item)}`,\r\n //icon: 'pi pi-file',\r\n };\r\n });\r\n }\r\n\r\n if (typeof data === 'object' && data !== null) {\r\n return Object.keys(data).map((key, index) => {\r\n const value = data[key];\r\n const nodeKey = `${parentKey}-${index}`;\r\n\r\n if (this.isComplex(value)) {\r\n return {\r\n key: nodeKey,\r\n label: key,\r\n //icon: this.getIcon(value),\r\n children: this.buildTree(value, nodeKey),\r\n };\r\n }\r\n\r\n return {\r\n key: nodeKey,\r\n label: `${key}: ${this.formatPrimitive(value)}`,\r\n icon: 'pi pi-file',\r\n };\r\n });\r\n }\r\n\r\n return [\r\n {\r\n key: parentKey,\r\n label: this.formatPrimitive(data),\r\n icon: 'pi pi-file',\r\n },\r\n ];\r\n }\r\n\r\n private isComplex(value: unknown): boolean {\r\n return (\r\n Array.isArray(value) || (typeof value === 'object' && value !== null)\r\n );\r\n }\r\n\r\n private formatPrimitive(value: unknown): string {\r\n if (value === null || value === undefined) return '-';\r\n\r\n if (typeof value === 'string') return value;\r\n\r\n return String(value);\r\n }\r\n\r\n private getIcon(value: any): string {\r\n if (Array.isArray(value)) return 'pi pi-list';\r\n\r\n if (typeof value === 'object') return 'pi pi-folder';\r\n\r\n return 'pi pi-file';\r\n }\r\n}\r\n","<p-tree\r\n\t[value]=\"nodes\"\r\n\tclass=\"json-tree w-full\"\r\n\tselectionMode=\"single\"\r\n\t[(selection)]=\"selectedNode\"\r\n\t[highlightOnSelect]=\"false\"\r\n\t(onNodeSelect)=\"onNodeSelect($event)\"\r\n>\r\n</p-tree>\r\n","import { Component, input } from '@angular/core';\r\nimport { CountUpDirective } from 'ngx-countup';\r\n\r\n@Component({\r\n selector: 'app-kpicard',\r\n imports: [CountUpDirective],\r\n templateUrl: './kpicard.component.html',\r\n styleUrl: './kpicard.component.css',\r\n})\r\nexport class KpicardComponent {\r\n //type = input.required<string>();\r\n option = input.required<'currency' | 'integer' | 'percent'>();\r\n label = input.required<string>();\r\n iconType = input<string>('fa-regular fa-bell');\r\n color = input<string>();\r\n valor = input<number>(0);\r\n theme = input<\r\n | 'light'\r\n | 'dark'\r\n | 'aqua'\r\n | 'sunset'\r\n | 'mint'\r\n | 'peach'\r\n | 'plasma'\r\n | 'nebula'\r\n >('light');\r\n\r\n options: Record<'currency' | 'integer' | 'percent', any> = {\r\n currency: {\r\n startVal: 0,\r\n duration: 0.5,\r\n //prefix: 'Q',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n suffix: ' GTQ', // Sufijo\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n integer: {\r\n startVal: 0,\r\n duration: 0.5,\r\n prefix: 'Cant. ',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n percent: {\r\n startVal: 0,\r\n duration: 0.5,\r\n suffix: '%',\r\n decimalPlaces: 2, // Decimales\r\n useGrouping: true, // Separador de miles\r\n separator: ',', // Carácter separador\r\n decimal: '.', // Carácter decimal\r\n scrollSpyDelay: 200, // Retardo antes de la animación\r\n enableScrollSpy: true,\r\n scrollSpyOnce: true,\r\n },\r\n };\r\n\r\n // ✅ Método auxiliar para obtener la opción con seguridad\r\n getSelectedOption() {\r\n return this.options[this.option()] ?? this.options.currency; // Si no existe, usa `currency`\r\n }\r\n}\r\n","<div [class]=\"`kpi-card ${color()} ${theme()}-theme`\">\r\n <div class=\"kpi-container\">\r\n <span\r\n [countUp]=\"valor()\"\r\n [countUpOptions]=\"getSelectedOption()\"\r\n [class]=\"`card-value-${theme()}`\"\r\n >0</span\r\n >\r\n <span [class]=\"`card-text-${theme()}`\">{{ label() }}</span>\r\n </div>\r\n <i [class]=\"`${iconType()} icon icon-${theme()}`\"></i>\r\n</div>\r\n","import {\r\n Component,\r\n effect,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n input,\r\n Output,\r\n signal,\r\n viewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { DialogModule } from 'primeng/dialog';\r\n\r\ntype DocxRenderOptions = {\r\n ignoreWidth?: boolean;\r\n renderHeaders?: boolean;\r\n renderFooters?: boolean;\r\n};\r\n\r\ntype DocxPreviewModule = {\r\n renderAsync: (\r\n document: Blob,\r\n bodyContainer: HTMLElement,\r\n styleContainer?: HTMLElement,\r\n options?: DocxRenderOptions,\r\n ) => Promise<void>;\r\n};\r\n\r\n@Component({\r\n selector: 'app-docx-preview',\r\n imports: [DialogModule],\r\n templateUrl: './docx-preview.component.html',\r\n styleUrl: './docx-preview.component.css',\r\n})\r\nexport class DocxPreviewComponent {\r\n view = viewChild<ElementRef>('viewer');\r\n private visibleState: WritableSignal<boolean> = signal(false);\r\n private renderToken = 0;\r\n\r\n @Input()\r\n set visible(value: boolean) {\r\n this.visibleState.set(!!value);\r\n }\r\n\r\n get visible(): boolean {\r\n return this.visibleState();\r\n }\r\n\r\n @Output() visibleChange = new EventEmitter<boolean>();\r\n blob = input<Blob | null>(null);\r\n\r\n constructor() {\r\n effect(() => {\r\n const container = this.view()?.nativeElement;\r\n const isVisible = this.visibleState();\r\n const fileBlob = this.blob();\r\n\r\n if (!container) {\r\n return;\r\n }\r\n\r\n if (!isVisible) {\r\n this.renderToken++;\r\n container.innerHTML = '';\r\n return;\r\n }\r\n\r\n if (!(fileBlob instanceof Blob)) {\r\n this.renderToken++;\r\n container.innerHTML =\r\n '<p>No hay un archivo .docx válido para previsualizar.</p>';\r\n return;\r\n }\r\n\r\n if (!fileBlob.size) {\r\n this.renderToken++;\r\n container.innerHTML = '<p>El archivo .docx está vacío.</p>';\r\n return;\r\n }\r\n\r\n const token = ++this.renderToken;\r\n container.innerHTML = '';\r\n const options: DocxRenderOptions = {\r\n ignoreWidth: true,\r\n renderHeaders: true,\r\n renderFooters: true,\r\n };\r\n\r\n void this.renderDocx(fileBlob, container, options, token);\r\n });\r\n }\r\n\r\n private async renderDocx(\r\n fileBlob: Blob,\r\n container: HTMLElement,\r\n options: DocxRenderOptions,\r\n token: number,\r\n ) {\r\n try {\r\n // Use Function constructor to bypass Vite's static import analysis.\r\n // This makes 'docx-preview' a truly optional peer dependency.\r\n const load = new Function('m', 'return import(m)') as (m: string) => Promise<unknown>;\r\n const docxPreviewModule = (await load('docx-preview')) as unknown as DocxPreviewModule;\r\n\r\n if (token !== this.renderToken || !this.visibleState()) {\r\n return;\r\n }\r\n\r\n await docxPreviewModule.renderAsync(\r\n fileBlob,\r\n container,\r\n undefined,\r\n options,\r\n );\r\n } catch (error) {\r\n if (token !== this.renderToken || !this.visibleState()) {\r\n return;\r\n }\r\n\r\n console.error(\r\n '[DocxPreview] Error al renderizar el archivo DOCX.',\r\n error,\r\n );\r\n\r\n container.innerHTML =\r\n '<p>No se pudo renderizar la vista previa DOCX. Verifica la consola para más detalles.</p>';\r\n }\r\n }\r\n\r\n onHide() {\r\n const container = this.view()?.nativeElement;\r\n\r\n if (container) {\r\n this.renderToken++;\r\n container.innerHTML = '';\r\n }\r\n\r\n this.visibleChange.emit(false);\r\n }\r\n}\r\n","<p-dialog\r\n header=\"Vista preliminar del documento\"\r\n [visible]=\"visible\"\r\n (onHide)=\"onHide()\"\r\n [modal]=\"true\"\r\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\n [style]=\"{ width: '80vw' }\"\r\n [draggable]=\"false\"\r\n [resizable]=\"false\"\r\n>\r\n <div #viewer></div>\r\n</p-dialog>\r\n","import { Component, OnDestroy, effect, input, model } from '@angular/core';\r\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\r\nimport { DialogModule } from 'primeng/dialog';\r\n\r\n@Component({\r\n selector: 'app-pdf-preview',\r\n imports: [DialogModule],\r\n templateUrl: './pdf-preview.component.html',\r\n styleUrl: './pdf-preview.component.css',\r\n})\r\nexport class PdfPreviewComponent implements OnDestroy {\r\n visible = model<boolean>(false);\r\n blob = input<Blob | null>(null);\r\n private objectUrl: string | null = null;\r\n pdfUrl: SafeResourceUrl | null = null;\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n effect((onCleanup) => {\r\n const file = this.blob();\r\n const isVisible = this.visible();\r\n\r\n if (!isVisible || file === null) {\r\n this.limpiarUrlAnterior();\r\n return;\r\n }\r\n\r\n if (file.type !== 'application/pdf') {\r\n this.limpiarUrlAnterior();\r\n console.warn('El archivo recibido no es un PDF válido');\r\n return;\r\n }\r\n\r\n this.limpiarUrlAnterior();\r\n const currentObjectUrl = URL.createObjectURL(file);\r\n this.objectUrl = currentObjectUrl;\r\n this.pdfUrl =\r\n this.sanitizer.bypassSecurityTrustResourceUrl(currentObjectUrl);\r\n\r\n onCleanup(() => {\r\n URL.revokeObjectURL(currentObjectUrl);\r\n if (this.objectUrl === currentObjectUrl) {\r\n this.objectUrl = null;\r\n this.pdfUrl = null;\r\n }\r\n });\r\n });\r\n }\r\n\r\n private limpiarUrlAnterior(): void {\r\n if (this.objectUrl) {\r\n URL.revokeObjectURL(this.objectUrl);\r\n this.objectUrl = null;\r\n }\r\n this.pdfUrl = null;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.limpiarUrlAnterior();\r\n }\r\n}\r\n","<p-dialog\r\n header=\"Vista previa del documento de soporte\"\r\n [(visible)]=\"visible\"\r\n [style]=\"{ width: '80vw', height: '90vh' }\"\r\n [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n @if (pdfUrl) {\r\n <iframe\r\n [src]=\"pdfUrl\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n style=\"border: none\"\r\n ></iframe>\r\n }\r\n</p-dialog>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
@@ -61,7 +61,7 @@ class JsonHighlightPipe {
|
|
|
61
61
|
/**
|
|
62
62
|
* Stringifica el JSON manteniendo arrays en una línea para una vista más compacta
|
|
63
63
|
*/
|
|
64
|
-
compactStringify(obj, indent =
|
|
64
|
+
compactStringify(obj, indent = 0) {
|
|
65
65
|
const spaces = ' '.repeat(indent);
|
|
66
66
|
if (obj === null) {
|
|
67
67
|
return 'null';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-dsxlibrary-src-lib-pipe.mjs","sources":["../../../projects/ngx-dsx/src/lib/pipe/src/join-by.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/src/json-highlight.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/src/truncate.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/ngx-dsxlibrary-src-lib-pipe.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe `joinByPipe`\n *\n * Une los valores de una propiedad de un arreglo de objetos en una sola cadena\n * separado por el `separator` proporcionado.\n *\n * Uso (template):\n * - `items | joinByPipe:'name'` => une la propiedad `name` con `, ` como separador\n * - `items | joinByPipe:'name':'; '` => usa `; ` como separador\n *\n * Ejemplo:\n * const items = [{ name: 'Ana' }, { name: 'Luis' }, { other: 'x' }];\n * // Resultado: 'Ana, Luis'\n *\n * Comportamiento:\n * - Si el arreglo es nulo, indefinido o vacío devuelve `''`.\n * - Si la propiedad no existe en el primer elemento devuelve `''` y registra\n * una advertencia en la consola.\n * - Convierte cada valor a `string`, filtra valores vacíos y los concatena.\n */\n@Pipe({\n name: 'joinBy',\n standalone: true,\n})\nexport class JoinByPipe implements PipeTransform {\n /**\n * Transforma un arreglo de objetos en una cadena unida por `separator` usando\n * la propiedad indicada.\n *\n * @param array - Arreglo de objetos o `null`/`undefined`.\n * @param property - Clave del objeto cuyos valores se van a unir.\n * @param separator - Cadena que separará los valores (por defecto `', '`).\n * @returns Una cadena con los valores unidos o `''` si no hay datos válidos.\n */\n transform<T extends Record<string, any>>(\n array: T[] | null | undefined,\n property: keyof T,\n separator: string = ', ',\n ): string {\n // Si el arreglo está vacío o es nulo/indefinido retornamos cadena vacía\n if (!array?.length) return '';\n\n // Validar que la propiedad exista al menos en el primer elemento\n if (!(property in array[0])) {\n console.warn(\n `JoinByPipe: La propiedad \"${String(property)}\" no existe en el objeto.`,\n );\n return '';\n }\n\n // Convertir valores a string, eliminar vacíos y unir con el separador\n return array\n .map((item) => String(item[property] ?? ''))\n .filter((value) => value.length > 0)\n .join(separator);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'jsonHighlight',\r\n})\r\nexport class JsonHighlightPipe implements PipeTransform {\r\n /**\r\n * Stringifica el JSON manteniendo arrays en una línea para una vista más compacta\r\n */\r\n private compactStringify(obj: any, indent: number = 2): string {\r\n const spaces = ' '.repeat(indent);\r\n\r\n if (obj === null) {\r\n return 'null';\r\n }\r\n\r\n if (typeof obj !== 'object') {\r\n if (typeof obj === 'string') {\r\n return JSON.stringify(obj);\r\n }\r\n return String(obj);\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return JSON.stringify(obj.toISOString());\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n // Mantener arrays en una línea\r\n const items = obj.map((item) => {\r\n if (item instanceof Date) {\r\n return JSON.stringify(item.toISOString());\r\n }\r\n if (typeof item === 'object' && item !== null) {\r\n return this.compactStringify(item, indent);\r\n }\r\n return typeof item === 'string'\r\n ? JSON.stringify(item)\r\n : item === null\r\n ? 'null'\r\n : String(item);\r\n });\r\n return `[${items.join(', ')}]`;\r\n }\r\n\r\n // Para objetos, mantener la indentación\r\n const keys = Object.keys(obj);\r\n if (keys.length === 0) {\r\n return '{}';\r\n }\r\n\r\n const innerIndent = indent + 2;\r\n const innerSpaces = ' '.repeat(innerIndent);\r\n const lines = keys.map((key) => {\r\n const value = obj[key];\r\n const stringified =\r\n value instanceof Date\r\n ? JSON.stringify(value.toISOString())\r\n : typeof value === 'object' && value !== null\r\n ? this.compactStringify(value, innerIndent)\r\n : typeof value === 'string'\r\n ? JSON.stringify(value)\r\n : value === null\r\n ? 'null'\r\n : String(value);\r\n return `${innerSpaces}\"${key}\": ${stringified}`;\r\n });\r\n\r\n return `{\\n${lines.join(',\\n')}\\n${spaces}}`;\r\n }\r\n\r\n transform(value: any): string {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n const json = this.compactStringify(value);\r\n // Detecta fechas ISO: \"YYYY-MM-DDTHH:MM:SS.mmmZ\"\r\n const ISO_DATE_RE = /^\"(\\d{4}-\\d{2}-\\d{2})T(\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z)\"$/;\r\n\r\n // Aplica estilo y colores para diferenciar claves, valores, booleanos, números, etc.\r\n return json\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?)/g, (match) => {\r\n // Si es una clave (tiene dos puntos al final)\r\n if (/:$/.test(match)) {\r\n return `<span class=\"json-key\">${match}</span>`;\r\n }\r\n // Detectar fechas ISO (YYYY-MM-DDTHH:MM:SS.mmmZ)\r\n const isoMatch = match.match(ISO_DATE_RE);\r\n if (isoMatch) {\r\n return `<span class=\"json-string json-date\">\"<span class=\"json-date-part\">${isoMatch[1]}</span><span class=\"json-date-sep\">T</span><span class=\"json-date-time\">${isoMatch[2]}</span>\"</span>`;\r\n }\r\n // Si es un string (no tiene dos puntos)\r\n return `<span class=\"json-string\">${match}</span>`;\r\n })\r\n .replace(/\\b(true|false|null)\\b/g, (match) => {\r\n if (match === 'null') {\r\n return '<span class=\"json-null\">null</span>';\r\n }\r\n return `<span class=\"json-boolean\">${match}</span>`;\r\n })\r\n .replace(/\\b(\\d+\\.?\\d*)\\b/g, '<span class=\"json-number\">$1</span>')\r\n .replace(/[{}\\[\\]]/g, '<span class=\"json-bracket\">$&</span>')\r\n .replace(/,/g, '<span class=\"json-comma\">$&</span>')\r\n .replace(/:/g, '<span class=\"json-colon\">$&</span>');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'truncate',\r\n standalone: true,\r\n})\r\nexport class TruncatePipe implements PipeTransform {\r\n /**\r\n * Transforma una cadena de texto truncándola según los parámetros proporcionados.\r\n *\r\n * @param value - La cadena de texto que se desea truncar.\r\n * @param limit - El número máximo de caracteres permitidos. Por defecto es 100. Si no se encuentra un espacio dentro del límite, usa el límite original (15).\r\n * @param completeWords - Si es true, evita cortar palabras a la mitad. Por defecto es false.\r\n * @param ellipsis - La cadena que se añadirá al final del texto truncado. Por defecto es '...'.\r\n * @returns La cadena truncada con el ellipsis añadido, si es necesario.\r\n */\r\n transform(\r\n value: string,\r\n limit: number = 20,\r\n completeWords: boolean = false,\r\n ellipsis: string = '...'\r\n ): string {\r\n // Si el valor es nulo o indefinido, devuelve una cadena vacía para evitar errores.\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n // Si completeWords es true, ajusta el límite para no cortar palabras.\r\n if (completeWords) {\r\n // Encuentra el último espacio dentro del límite para evitar cortar palabras.\r\n limit = value.slice(0, limit).lastIndexOf(' ');\r\n\r\n // Si no se encuentra un espacio dentro del límite, usa el límite original.\r\n if (limit < 0) {\r\n limit = 15; // Valor por defecto si no hay espacios.\r\n }\r\n }\r\n\r\n // Trunca el texto y añade el ellipsis si la longitud del texto supera el límite.\r\n return value.length > limit ? value.slice(0, limit) + ellipsis : value;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-dsxlibrary-src-lib-pipe.mjs","sources":["../../../projects/ngx-dsx/src/lib/pipe/src/join-by.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/src/json-highlight.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/src/truncate.pipe.ts","../../../projects/ngx-dsx/src/lib/pipe/ngx-dsxlibrary-src-lib-pipe.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe `joinByPipe`\n *\n * Une los valores de una propiedad de un arreglo de objetos en una sola cadena\n * separado por el `separator` proporcionado.\n *\n * Uso (template):\n * - `items | joinByPipe:'name'` => une la propiedad `name` con `, ` como separador\n * - `items | joinByPipe:'name':'; '` => usa `; ` como separador\n *\n * Ejemplo:\n * const items = [{ name: 'Ana' }, { name: 'Luis' }, { other: 'x' }];\n * // Resultado: 'Ana, Luis'\n *\n * Comportamiento:\n * - Si el arreglo es nulo, indefinido o vacío devuelve `''`.\n * - Si la propiedad no existe en el primer elemento devuelve `''` y registra\n * una advertencia en la consola.\n * - Convierte cada valor a `string`, filtra valores vacíos y los concatena.\n */\n@Pipe({\n name: 'joinBy',\n standalone: true,\n})\nexport class JoinByPipe implements PipeTransform {\n /**\n * Transforma un arreglo de objetos en una cadena unida por `separator` usando\n * la propiedad indicada.\n *\n * @param array - Arreglo de objetos o `null`/`undefined`.\n * @param property - Clave del objeto cuyos valores se van a unir.\n * @param separator - Cadena que separará los valores (por defecto `', '`).\n * @returns Una cadena con los valores unidos o `''` si no hay datos válidos.\n */\n transform<T extends Record<string, any>>(\n array: T[] | null | undefined,\n property: keyof T,\n separator: string = ', ',\n ): string {\n // Si el arreglo está vacío o es nulo/indefinido retornamos cadena vacía\n if (!array?.length) return '';\n\n // Validar que la propiedad exista al menos en el primer elemento\n if (!(property in array[0])) {\n console.warn(\n `JoinByPipe: La propiedad \"${String(property)}\" no existe en el objeto.`,\n );\n return '';\n }\n\n // Convertir valores a string, eliminar vacíos y unir con el separador\n return array\n .map((item) => String(item[property] ?? ''))\n .filter((value) => value.length > 0)\n .join(separator);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'jsonHighlight',\r\n})\r\nexport class JsonHighlightPipe implements PipeTransform {\r\n /**\r\n * Stringifica el JSON manteniendo arrays en una línea para una vista más compacta\r\n */\r\n private compactStringify(obj: any, indent: number = 0): string {\r\n const spaces = ' '.repeat(indent);\r\n\r\n if (obj === null) {\r\n return 'null';\r\n }\r\n\r\n if (typeof obj !== 'object') {\r\n if (typeof obj === 'string') {\r\n return JSON.stringify(obj);\r\n }\r\n return String(obj);\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return JSON.stringify(obj.toISOString());\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n // Mantener arrays en una línea\r\n const items = obj.map((item) => {\r\n if (item instanceof Date) {\r\n return JSON.stringify(item.toISOString());\r\n }\r\n if (typeof item === 'object' && item !== null) {\r\n return this.compactStringify(item, indent);\r\n }\r\n return typeof item === 'string'\r\n ? JSON.stringify(item)\r\n : item === null\r\n ? 'null'\r\n : String(item);\r\n });\r\n return `[${items.join(', ')}]`;\r\n }\r\n\r\n // Para objetos, mantener la indentación\r\n const keys = Object.keys(obj);\r\n if (keys.length === 0) {\r\n return '{}';\r\n }\r\n\r\n const innerIndent = indent + 2;\r\n const innerSpaces = ' '.repeat(innerIndent);\r\n const lines = keys.map((key) => {\r\n const value = obj[key];\r\n const stringified =\r\n value instanceof Date\r\n ? JSON.stringify(value.toISOString())\r\n : typeof value === 'object' && value !== null\r\n ? this.compactStringify(value, innerIndent)\r\n : typeof value === 'string'\r\n ? JSON.stringify(value)\r\n : value === null\r\n ? 'null'\r\n : String(value);\r\n return `${innerSpaces}\"${key}\": ${stringified}`;\r\n });\r\n\r\n return `{\\n${lines.join(',\\n')}\\n${spaces}}`;\r\n }\r\n\r\n transform(value: any): string {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n const json = this.compactStringify(value);\r\n // Detecta fechas ISO: \"YYYY-MM-DDTHH:MM:SS.mmmZ\"\r\n const ISO_DATE_RE = /^\"(\\d{4}-\\d{2}-\\d{2})T(\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z)\"$/;\r\n\r\n // Aplica estilo y colores para diferenciar claves, valores, booleanos, números, etc.\r\n return json\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?)/g, (match) => {\r\n // Si es una clave (tiene dos puntos al final)\r\n if (/:$/.test(match)) {\r\n return `<span class=\"json-key\">${match}</span>`;\r\n }\r\n // Detectar fechas ISO (YYYY-MM-DDTHH:MM:SS.mmmZ)\r\n const isoMatch = match.match(ISO_DATE_RE);\r\n if (isoMatch) {\r\n return `<span class=\"json-string json-date\">\"<span class=\"json-date-part\">${isoMatch[1]}</span><span class=\"json-date-sep\">T</span><span class=\"json-date-time\">${isoMatch[2]}</span>\"</span>`;\r\n }\r\n // Si es un string (no tiene dos puntos)\r\n return `<span class=\"json-string\">${match}</span>`;\r\n })\r\n .replace(/\\b(true|false|null)\\b/g, (match) => {\r\n if (match === 'null') {\r\n return '<span class=\"json-null\">null</span>';\r\n }\r\n return `<span class=\"json-boolean\">${match}</span>`;\r\n })\r\n .replace(/\\b(\\d+\\.?\\d*)\\b/g, '<span class=\"json-number\">$1</span>')\r\n .replace(/[{}\\[\\]]/g, '<span class=\"json-bracket\">$&</span>')\r\n .replace(/,/g, '<span class=\"json-comma\">$&</span>')\r\n .replace(/:/g, '<span class=\"json-colon\">$&</span>');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'truncate',\r\n standalone: true,\r\n})\r\nexport class TruncatePipe implements PipeTransform {\r\n /**\r\n * Transforma una cadena de texto truncándola según los parámetros proporcionados.\r\n *\r\n * @param value - La cadena de texto que se desea truncar.\r\n * @param limit - El número máximo de caracteres permitidos. Por defecto es 100. Si no se encuentra un espacio dentro del límite, usa el límite original (15).\r\n * @param completeWords - Si es true, evita cortar palabras a la mitad. Por defecto es false.\r\n * @param ellipsis - La cadena que se añadirá al final del texto truncado. Por defecto es '...'.\r\n * @returns La cadena truncada con el ellipsis añadido, si es necesario.\r\n */\r\n transform(\r\n value: string,\r\n limit: number = 20,\r\n completeWords: boolean = false,\r\n ellipsis: string = '...'\r\n ): string {\r\n // Si el valor es nulo o indefinido, devuelve una cadena vacía para evitar errores.\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n // Si completeWords es true, ajusta el límite para no cortar palabras.\r\n if (completeWords) {\r\n // Encuentra el último espacio dentro del límite para evitar cortar palabras.\r\n limit = value.slice(0, limit).lastIndexOf(' ');\r\n\r\n // Si no se encuentra un espacio dentro del límite, usa el límite original.\r\n if (limit < 0) {\r\n limit = 15; // Valor por defecto si no hay espacios.\r\n }\r\n }\r\n\r\n // Trunca el texto y añade el ellipsis si la longitud del texto supera el límite.\r\n return value.length > limit ? value.slice(0, limit) + ellipsis : value;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -472,7 +472,10 @@ class DocxPreviewComponent {
|
|
|
472
472
|
}
|
|
473
473
|
async renderDocx(fileBlob, container, options, token) {
|
|
474
474
|
try {
|
|
475
|
-
|
|
475
|
+
// Use Function constructor to bypass Vite's static import analysis.
|
|
476
|
+
// This makes 'docx-preview' a truly optional peer dependency.
|
|
477
|
+
const load = new Function('m', 'return import(m)');
|
|
478
|
+
const docxPreviewModule = (await load('docx-preview'));
|
|
476
479
|
if (token !== this.renderToken || !this.visibleState()) {
|
|
477
480
|
return;
|
|
478
481
|
}
|
|
@@ -626,11 +629,11 @@ class IconDsxComponent {
|
|
|
626
629
|
this.svg$ = this.iconService.getIcon(this.name); // 👈 AHORA CUADRA CON EL async
|
|
627
630
|
}
|
|
628
631
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IconDsxComponent, deps: [{ token: IconDsxService }], target: i0.ɵɵFactoryTarget.Component });
|
|
629
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: IconDsxComponent, isStandalone: true, selector: "icon-dsx", inputs: { name: "name" }, ngImport: i0, template: "<span class=\"dsx-icon\" [innerHTML]=\"svg$ | async\"></span>\r\n", styles: [":host{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;width:1em;height:1em;font-size:24px}.dsx-icon{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}:host ::ng-deep .dsx-icon svg{width:100%;height:100%;fill:currentColor}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }] });
|
|
632
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.11", type: IconDsxComponent, isStandalone: true, selector: "icon-dsx", inputs: { name: "name" }, ngImport: i0, template: "<span class=\"dsx-icon\" [innerHTML]=\"svg$ | async\"></span>\r\n", styles: [":host{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;width:1em;height:1em;font-size:24px;line-height:1;flex-shrink:0}.dsx-icon{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}:host ::ng-deep .dsx-icon svg{width:100%;height:100%;fill:currentColor;shape-rendering:geometricPrecision;stroke:currentColor;stroke-width:4px;stroke-linejoin:round;stroke-linecap:round;overflow:visible;transition:fill .2s ease,stroke .2s ease}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }] });
|
|
630
633
|
}
|
|
631
634
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: IconDsxComponent, decorators: [{
|
|
632
635
|
type: Component,
|
|
633
|
-
args: [{ selector: 'icon-dsx', imports: [AsyncPipe], template: "<span class=\"dsx-icon\" [innerHTML]=\"svg$ | async\"></span>\r\n", styles: [":host{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;width:1em;height:1em;font-size:24px}.dsx-icon{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}:host ::ng-deep .dsx-icon svg{width:100%;height:100%;fill:currentColor}\n"] }]
|
|
636
|
+
args: [{ selector: 'icon-dsx', imports: [AsyncPipe], template: "<span class=\"dsx-icon\" [innerHTML]=\"svg$ | async\"></span>\r\n", styles: [":host{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;width:1em;height:1em;font-size:24px;line-height:1;flex-shrink:0}.dsx-icon{display:inline-flex;align-items:center;justify-content:center;width:100%;height:100%}:host ::ng-deep .dsx-icon svg{width:100%;height:100%;fill:currentColor;shape-rendering:geometricPrecision;stroke:currentColor;stroke-width:4px;stroke-linejoin:round;stroke-linecap:round;overflow:visible;transition:fill .2s ease,stroke .2s ease}\n"] }]
|
|
634
637
|
}], ctorParameters: () => [{ type: IconDsxService }], propDecorators: { name: [{
|
|
635
638
|
type: Input
|
|
636
639
|
}] } });
|
|
@@ -639,7 +642,7 @@ class JsonHighlightPipe {
|
|
|
639
642
|
/**
|
|
640
643
|
* Stringifica el JSON manteniendo arrays en una línea para una vista más compacta
|
|
641
644
|
*/
|
|
642
|
-
compactStringify(obj, indent =
|
|
645
|
+
compactStringify(obj, indent = 0) {
|
|
643
646
|
const spaces = ' '.repeat(indent);
|
|
644
647
|
if (obj === null) {
|
|
645
648
|
return 'null';
|