infodocviewdoc 2.0.2 → 2.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"infodocviewdoc.mjs","sources":["../../../projects/ui-components/src/lib/ui-components.service.ts","../../../projects/ui-components/src/lib/ui-components.component.ts","../../../projects/ui-components/src/lib/button/button.component.ts","../../../projects/ui-components/src/lib/button/button.component.html","../../../projects/ui-components/src/lib/document-viewer/services/file.service.ts","../../../projects/ui-components/src/lib/document-viewer/pages/pdf-viewer-page/pdf-viewer.component.ts","../../../projects/ui-components/src/lib/document-viewer/pages/pdf-viewer-page/pdf-viewer.component.html","../../../projects/ui-components/src/public-api.ts","../../../projects/ui-components/src/infodocviewdoc.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UiComponentsService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sgdea-ui-components',\r\n imports: [],\r\n template: `\r\n <p>\r\n ui-components works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class UiComponentsComponent {\r\n\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sgdea-button',\r\n imports: [],\r\n templateUrl: './button.component.html',\r\n styleUrl: './button.component.css'\r\n})\r\nexport class ButtonComponent {\r\n @Input() label: string = 'Click me';\r\n @Input() type: 'primary' | 'secondary' | 'danger' = 'primary';\r\n @Input() disabled: boolean = false;\r\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\r\n @Output() clicked = new EventEmitter<void>();\r\n\r\n onClick() {\r\n if (!this.disabled) {\r\n this.clicked.emit();\r\n }\r\n }\r\n}\r\n","<button \r\n class=\"sgdea-btn sgdea-btn--{{ type }} sgdea-btn--{{ size }}\"\r\n [disabled]=\"disabled\"\r\n (click)=\"onClick()\">\r\n {{ label }}\r\n</button>\r\n","import { Injectable } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpHeaders\n} from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DocumentViewerFileService {\n constructor(private http: HttpClient) {}\n\n getFileByParams(params: {\n nameFile: string;\n nameBucket: string;\n nameSpaceBucket: string;\n url: string;\n token: string;\n }): Observable<Blob> {\n const endpoint = `${params.url}/api/v1/file/download?objectName=${encodeURIComponent(\n params.nameFile\n )}&bucketName=${params.nameBucket}`;\n\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${params.token}`\n });\n\n return this.http\n .post(endpoint, {}, { headers, responseType: 'blob' })\n .pipe(\n catchError((error: HttpErrorResponse) => {\n const errorMessages: Record<number, string> = {\n 0: 'No hay conexión con el servidor',\n 400: 'Solicitud inválida',\n 401: 'No autorizado. Token inválido o expirado',\n 403: 'Acceso denegado',\n 404: 'Archivo no encontrado',\n 500: 'Error interno del servidor'\n };\n\n const message =\n errorMessages[error.status] ??\n 'Error inesperado al descargar el archivo';\n\n return throwError(() => new Error(message));\n })\n );\n }\n\n convertDocumentToPdf(file: Blob, token: string, baseApiUrl: string): Observable<Blob> {\n const url = `${baseApiUrl}/api/v1/file/${\n file.type === '.ppt' || file.type === '.pptx'\n ? 'conversion-ppt-to-pdf'\n : 'conversion-word-to-pdf'\n }`;\n\n const headers = new HttpHeaders({\n Authorization: `Bearer ${token}`,\n });\n\n const formData = new FormData();\n formData.append('file', file, 'documento.docx');\n\n return this.http\n .post<{ downloadUrl: string }>(url, formData, { headers })\n .pipe(\n switchMap((response) => {\n if (!response?.downloadUrl) {\n throw new Error('No se recibió downloadUrl');\n }\n\n return this.http.get(`${baseApiUrl}${response.downloadUrl}`, {\n headers,\n responseType: 'blob',\n });\n }),\n catchError((error: HttpErrorResponse) => {\n const errorMessages: Record<number, string> = {\n 0: 'No hay conexión con el servidor',\n 400: 'Solicitud inválida',\n 401: 'No autorizado. Token inválido o expirado',\n 403: 'Acceso denegado',\n 404: 'Archivo no encontrado',\n 500: 'Error interno del servidor',\n };\n\n const message =\n errorMessages[error.status] ??\n 'Error inesperado al convertir el archivo a PDF';\n\n return throwError(() => new Error(message));\n }),\n );\n }\n}\n\n","import {\n Component,\n OnInit,\n OnDestroy,\n signal,\n ViewChild,\n ElementRef,\n Input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer';\nimport { DocumentViewerFileService } from '../../services/file.service';\n\nimport Handsontable from 'handsontable';\nimport { HotTableModule } from '@handsontable/angular';\nimport 'handsontable/dist/handsontable.full.css';\n\n@Component({\n selector: 'sgdea-document-viewer',\n standalone: true,\n imports: [CommonModule, NgxExtendedPdfViewerModule, HotTableModule],\n templateUrl: './pdf-viewer.component.html',\n styleUrls: ['./pdf-viewer.component.css'],\n})\nexport class PdfViewerComponent implements OnInit, OnDestroy {\n // Entradas directas desde el host (opcionalmente se pueden pasar por @Input)\n @Input() nameFile?: string;\n @Input() nameBucket?: string;\n @Input() nameSpaceBucket?: string;\n @Input() url?: string;\n @Input() token: string = '';\n\n pdfSrc?: string;\n imageSrc?: string;\n textContent?: string;\n officeContent?: string;\n\n loading = signal(false);\n errorMessage = signal<string | null>(null);\n fileType = signal<string>('unknown');\n fileName = signal<string>('');\n\n private readonly extensionToType: { [key: string]: string } = {\n pdf: 'pdf',\n docx: 'docx',\n doc: 'doc',\n xlsx: 'xlsx',\n xls: 'xls',\n pptx: 'pptx',\n ppt: 'ppt',\n txt: 'txt',\n md: 'txt',\n csv: 'txt',\n log: 'txt',\n json: 'txt',\n xml: 'txt',\n html: 'txt',\n css: 'txt',\n js: 'txt',\n ts: 'txt',\n java: 'txt',\n py: 'txt',\n cpp: 'txt',\n c: 'txt',\n h: 'txt',\n php: 'txt',\n rb: 'txt',\n go: 'txt',\n rs: 'txt',\n swift: 'txt',\n kt: 'txt',\n sql: 'txt',\n jpg: 'image',\n jpeg: 'image',\n png: 'image',\n gif: 'image',\n tiff: 'image',\n bmp: 'image',\n svg: 'image',\n webp: 'image',\n };\n\n // Excel\n excelData: any[][] = [];\n excelColumns: any[] = [];\n excelColumnHeaders: string[] = [];\n excelSettings: any = {};\n excelSheetNames: string[] = [];\n excelCurrentSheetIndex = signal(0);\n showExcelViewer = false;\n private excelWorkbook: any = null;\n private xlsxModule: any = null;\n\n // Imagen (zoom, rotación, arrastre)\n zoomLevel = signal(100);\n rotation = signal(0);\n minZoom = 25;\n maxZoom = 400;\n zoomStep = 25;\n isDragging = false;\n dragStart = { x: 0, y: 0 };\n imagePosition = { x: 0, y: 0 };\n imageDimensions = { width: 0, height: 0 };\n\n @ViewChild('imageContainer') imageContainer!: ElementRef;\n @ViewChild('mainImage') mainImage!: ElementRef;\n\n private librariesPreloaded = {\n pdf: false,\n excel: false,\n xlsx: false,\n jspdf: false,\n };\n\n constructor(\n private route: ActivatedRoute,\n private fileService: DocumentViewerFileService,\n ) {}\n\n ngOnInit(): void {\n // 1) Si el host pasó valores por @Input, usarlos directamente\n if (\n this.url ||\n this.nameFile ||\n this.nameBucket ||\n this.nameSpaceBucket ||\n this.token\n ) {\n if (this.nameFile) this.fileName.set(this.nameFile);\n this.detectFileType();\n void this.loadWithPreload();\n return;\n }\n\n // 2) Si no hay @Input, leer query params (modo microfront)\n this.route.queryParams.subscribe((params: Params) => {\n this.nameFile = this.nameFile ?? params['nameFile'];\n this.nameBucket = this.nameBucket ?? params['nameBucket'];\n this.nameSpaceBucket = this.nameSpaceBucket ?? params['nameSpaceBucket'];\n this.token = this.token || params['token'];\n this.url = this.url ?? params['url'];\n\n if (this.nameFile) {\n this.fileName.set(this.nameFile);\n }\n\n this.detectFileType();\n void this.loadWithPreload();\n });\n }\n\n ngOnDestroy(): void {\n if (this.pdfSrc) URL.revokeObjectURL(this.pdfSrc);\n if (this.imageSrc) URL.revokeObjectURL(this.imageSrc);\n }\n\n private detectFileType(): void {\n let extension = '';\n // Prioridad: nameFile (objectName) porque en el host `url` suele ser el API base sin extensión\n if (this.nameFile) {\n extension = this.nameFile.split('.').pop()?.toLowerCase() || '';\n } else if (this.url) {\n extension = this.url.split('.').pop()?.toLowerCase() || '';\n }\n this.fileType.set(this.extensionToType[extension] || 'unknown');\n if (this.fileType() !== 'unknown') {\n void this.preloadLibrariesForType(this.fileType());\n }\n }\n\n private async loadWithPreload(): Promise<void> {\n this.loading.set(true);\n this.errorMessage.set(null);\n\n try {\n const preloadPromise = this.preloadLibrariesForType(this.fileType());\n const documentPromise = this.fileService\n .getFileByParams({\n nameFile: this.nameFile!,\n nameBucket: this.nameBucket!,\n nameSpaceBucket: this.nameSpaceBucket!,\n url: this.url!,\n token: this.token!,\n })\n .toPromise();\n\n const [blob] = await Promise.all([documentPromise, preloadPromise]);\n this.processFile(blob!);\n } catch (error: any) {\n this.errorMessage.set(error.message || 'Error al cargar el documento');\n this.loading.set(false);\n }\n }\n\n private async preloadLibrariesForType(type: string): Promise<void> {\n const preloadTasks: Promise<any>[] = [];\n\n if (!this.librariesPreloaded.pdf) {\n preloadTasks.push(import('ngx-extended-pdf-viewer').then(() => (this.librariesPreloaded.pdf = true)));\n }\n\n if (type === 'txt' && !this.librariesPreloaded.jspdf) {\n preloadTasks.push(import('jspdf').then(() => (this.librariesPreloaded.jspdf = true)));\n }\n\n if (type === 'xlsx' || type === 'xls') {\n if (!this.librariesPreloaded.xlsx) {\n preloadTasks.push(\n import('xlsx').then((module) => {\n this.xlsxModule = module;\n this.librariesPreloaded.xlsx = true;\n }),\n );\n }\n if (!this.librariesPreloaded.excel) {\n preloadTasks.push(import('handsontable').then(() => (this.librariesPreloaded.excel = true)));\n }\n }\n\n if (preloadTasks.length > 0) {\n await Promise.allSettled(preloadTasks);\n }\n }\n\n private processFile(blob: Blob): void {\n const type = this.fileType();\n\n switch (true) {\n case type === 'pdf':\n this.handlePdfFile(blob);\n break;\n case type === 'image':\n this.handleImageFile(blob);\n break;\n case type === 'txt':\n void this.convertTextToPdf(blob);\n break;\n case ['xlsx', 'xls'].includes(type):\n void this.processExcelFile(blob);\n break;\n case ['docx', 'doc', 'pptx', 'ppt'].includes(type):\n this.convertOfficeToPdf(blob);\n break;\n default:\n this.errorMessage.set('Formato no soportado');\n this.loading.set(false);\n }\n }\n\n private handlePdfFile(blob: Blob): void {\n this.pdfSrc = URL.createObjectURL(blob);\n this.loading.set(false);\n }\n\n private handleImageFile(blob: Blob): void {\n this.imageSrc = URL.createObjectURL(blob);\n this.loading.set(false);\n }\n\n private convertOfficeToPdf(blob: Blob): void {\n this.fileService.convertDocumentToPdf(blob, this.token!, this.url!).subscribe({\n next: (pdfBlob) => {\n this.pdfSrc = URL.createObjectURL(pdfBlob);\n this.fileType.set('pdf');\n this.loading.set(false);\n },\n error: (error) => {\n this.errorMessage.set(error.message || 'Error al convertir el archivo a PDF');\n this.loading.set(false);\n },\n });\n }\n\n private async convertTextToPdf(blob: Blob): Promise<void> {\n try {\n const text = await blob.text();\n if (!this.librariesPreloaded.jspdf) {\n await import('jspdf');\n }\n const { default: jsPDF } = await import('jspdf');\n const pdf = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' });\n const pageWidth = pdf.internal.pageSize.getWidth();\n const pageHeight = pdf.internal.pageSize.getHeight();\n const margin = 40;\n const maxLineWidth = pageWidth - margin * 2;\n pdf.setFontSize(11);\n pdf.setFont('helvetica');\n let yPosition = margin;\n const lineHeight = 15;\n const paragraphs = text.split('\\n');\n for (const paragraph of paragraphs) {\n if (paragraph.trim() === '') {\n yPosition += lineHeight;\n continue;\n }\n const lines = pdf.splitTextToSize(paragraph, maxLineWidth);\n for (const line of lines) {\n if (yPosition > pageHeight - margin) {\n pdf.addPage();\n yPosition = margin;\n }\n pdf.text(line, margin, yPosition);\n yPosition += lineHeight;\n }\n yPosition += lineHeight / 2;\n }\n const pdfBlob = pdf.output('blob');\n this.pdfSrc = URL.createObjectURL(pdfBlob);\n this.fileType.set('pdf');\n this.loading.set(false);\n } catch {\n const reader = new FileReader();\n reader.onload = (e) => {\n this.textContent = e.target?.result as string;\n this.loading.set(false);\n };\n reader.readAsText(blob);\n }\n }\n\n private async processExcelFile(blob: Blob): Promise<void> {\n try {\n if (!this.xlsxModule) {\n this.xlsxModule = await import('xlsx');\n }\n const buffer = await blob.arrayBuffer();\n this.excelWorkbook = this.xlsxModule.read(buffer, { type: 'array' });\n this.excelSheetNames = [...this.excelWorkbook.SheetNames];\n await this.loadExcelSheetByIndex(0);\n this.buildExcelSettings();\n this.showExcelViewer = true;\n this.loading.set(false);\n } catch {\n this.errorMessage.set('Error procesando Excel');\n this.loading.set(false);\n }\n }\n\n private async loadExcelSheetByIndex(index: number): Promise<void> {\n if (!this.excelWorkbook || !this.xlsxModule) return;\n this.showExcelViewer = false;\n const sheetName = this.excelSheetNames[index];\n const worksheet = this.excelWorkbook.Sheets[sheetName];\n if (!worksheet) return;\n let jsonData = this.xlsxModule.utils.sheet_to_json(worksheet, { header: 1, defval: '' }) as any[][];\n if (!Array.isArray(jsonData) || jsonData.length === 0) {\n jsonData = [['(Hoja vacía)']];\n }\n const headers = (jsonData[0] ?? []).map((h: any) => String(h ?? ''));\n const data = jsonData.slice(1);\n this.excelColumnHeaders = headers.length > 0 ? headers : [''];\n const maxColumns = Math.max(this.excelColumnHeaders.length, ...data.map((row) => row.length));\n this.excelColumnHeaders = Array.from({ length: maxColumns }, (_, i) => this.excelColumnHeaders[i] ?? `Col ${i + 1}`);\n this.excelData = data.map((row) => Array.from({ length: maxColumns }, (_, i) => row[i] ?? ''));\n this.excelColumns = Array.from({ length: maxColumns }, () => ({ type: 'text' }));\n this.excelCurrentSheetIndex.set(index);\n this.showExcelViewer = true;\n }\n\n selectExcelSheet(index: number): void {\n void this.loadExcelSheetByIndex(index);\n }\n\n private buildExcelSettings(): void {\n this.excelSettings = {\n licenseKey: 'non-commercial-and-evaluation',\n colHeaders: this.excelColumnHeaders,\n rowHeaders: true,\n stretchH: 'all',\n contextMenu: true,\n filters: true,\n dropdownMenu: true,\n readOnly: true,\n manualColumnResize: true,\n manualRowResize: true,\n columnSorting: true,\n height: '100%',\n width: '100%',\n };\n }\n\n // Helpers para template\n isExcelType(): boolean {\n return ['xlsx', 'xls'].includes(this.fileType());\n }\n\n isImageType(): boolean {\n return this.fileType() === 'image';\n }\n\n // Imagen: zoom/rotación/arrastre\n zoomIn(): void {\n this.zoomLevel.set(Math.min(this.zoomLevel() + this.zoomStep, this.maxZoom));\n }\n\n zoomOut(): void {\n this.zoomLevel.set(Math.max(this.zoomLevel() - this.zoomStep, this.minZoom));\n }\n\n rotateLeft(): void {\n this.rotation.set((this.rotation() - 90) % 360);\n }\n\n rotateRight(): void {\n this.rotation.set((this.rotation() + 90) % 360);\n }\n\n getImageTransform(): string {\n const scale = this.zoomLevel() / 100;\n const translate = `translate(${this.imagePosition.x}px, ${this.imagePosition.y}px)`;\n const rotate = `rotate(${this.rotation()}deg)`;\n const scaleStr = `scale(${scale})`;\n return `${translate} ${rotate} ${scaleStr}`;\n }\n\n getCursorStyle(): string {\n return this.zoomLevel() > 100 ? (this.isDragging ? 'grabbing' : 'grab') : 'default';\n }\n\n onImageLoad(): void {\n try {\n const imgEl = this.mainImage?.nativeElement as HTMLImageElement;\n this.imageDimensions = { width: imgEl.naturalWidth, height: imgEl.naturalHeight };\n } catch { /* noop */ }\n }\n\n onMouseWheel(event: WheelEvent): void {\n event.preventDefault();\n if (event.deltaY < 0) this.zoomIn();\n else this.zoomOut();\n }\n\n startDrag(event: MouseEvent): void {\n if (this.zoomLevel() <= 100) return;\n this.isDragging = true;\n this.dragStart = { x: event.clientX - this.imagePosition.x, y: event.clientY - this.imagePosition.y };\n }\n\n onDrag(event: MouseEvent): void {\n if (!this.isDragging) return;\n this.imagePosition = { x: event.clientX - this.dragStart.x, y: event.clientY - this.dragStart.y };\n }\n\n stopDrag(): void {\n this.isDragging = false;\n }\n}\n\n","<div *ngIf=\"loading()\" class=\"loader\">Cargando documento...</div>\n\n<div *ngIf=\"errorMessage() && !loading()\" class=\"error-message\">\n {{ errorMessage() }}\n</div>\n\n<div *ngIf=\"!loading() && !errorMessage()\" class=\"document-viewer-container\">\n\n <!-- PDF -->\n <ngx-extended-pdf-viewer\n *ngIf=\"fileType() === 'pdf' && pdfSrc\"\n [src]=\"pdfSrc\"\n height=\"auto\"\n useBrowserLocale=\"false\"\n [showDownloadButton]=\"false\"\n [showPrintButton]=\"false\"\n [showOpenFileButton]=\"false\"\n [showSecondaryToolbarButton]=\"false\"\n [showFirstAndLastPageButtons]=\"false\"\n [showPagingButtons]=\"false\"\n [showZoomButtons]=\"true\"\n [showDrawEditor]=\"false\"\n [showTextEditor]=\"false\"\n [showStampEditor]=\"false\"\n [showHighlightEditor]=\"false\"\n >\n </ngx-extended-pdf-viewer>\n\n <!-- Imagen -->\n <div *ngIf=\"isImageType() && imageSrc\" class=\"image-viewer\">\n <div class=\"image-toolbar\">\n <button (click)=\"zoomIn()\" title=\"Acercar (Ctrl +)\">➕</button>\n <button (click)=\"zoomOut()\" title=\"Alejar (Ctrl -)\">➖</button>\n <span class=\"separator\"></span>\n <button (click)=\"rotateLeft()\" title=\"Rotar izquierda (↺)\">↺</button>\n <button (click)=\"rotateRight()\" title=\"Rotar derecha (↻)\">↻</button>\n\n <span class=\"zoom-info\">{{ zoomLevel() }}%</span>\n <span class=\"rotation-info\" *ngIf=\"rotation() !== 0\">\n {{ rotation() }}°\n </span>\n\n <span class=\"image-dimensions\" *ngIf=\"imageDimensions.width\">\n {{ imageDimensions.width }} x {{ imageDimensions.height }}\n </span>\n </div>\n\n <div class=\"image-container\" #imageContainer (wheel)=\"onMouseWheel($event)\">\n <img\n #mainImage\n [src]=\"imageSrc\"\n [alt]=\"fileName()\"\n [style.transform]=\"getImageTransform()\"\n [style.cursor]=\"getCursorStyle()\"\n (load)=\"onImageLoad()\"\n (mousedown)=\"startDrag($event)\"\n (mousemove)=\"onDrag($event)\"\n (mouseup)=\"stopDrag()\"\n (mouseleave)=\"stopDrag()\"\n class=\"zoomable-image\"\n />\n </div>\n\n <div class=\"image-footer\" *ngIf=\"zoomLevel() > 100\">\n <small>Arrastra para mover la imagen</small>\n </div>\n </div>\n\n <!-- Excel -->\n <div *ngIf=\"isExcelType()\" class=\"excel-viewer-container\">\n <div *ngIf=\"excelSheetNames.length > 1\" class=\"excel-sheet-tabs\">\n <button\n *ngFor=\"let sheet of excelSheetNames; let i = index\"\n type=\"button\"\n class=\"excel-sheet-tab\"\n [class.active]=\"excelCurrentSheetIndex() === i\"\n (click)=\"selectExcelSheet(i)\"\n >\n {{ sheet }}\n </button>\n </div>\n\n <hot-table\n *ngIf=\"showExcelViewer\"\n #hotTable\n [settings]=\"excelSettings\"\n [data]=\"excelData\"\n [colHeaders]=\"excelColumnHeaders\"\n [rowHeaders]=\"true\"\n [width]=\"'100%'\"\n [height]=\"'100%'\"\n licenseKey=\"non-commercial-and-evaluation\"\n [columns]=\"excelColumns\"\n >\n </hot-table>\n\n <div *ngIf=\"!showExcelViewer\" class=\"loader\">\n Cargando hoja...\n </div>\n </div>\n</div>\n\n","/*\r\n * Public API Surface of ui-components\r\n */\r\n\r\nexport * from './lib/ui-components.service';\r\nexport * from './lib/ui-components.component';\r\nexport * from './lib/button/button.component';\r\nexport * from './lib/document-viewer/pages/pdf-viewer-page/pdf-viewer.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.DocumentViewerFileService"],"mappings":"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"}
1
+ {"version":3,"file":"infodocviewdoc.mjs","sources":["../../../projects/ui-components/src/lib/ui-components.service.ts","../../../projects/ui-components/src/lib/ui-components.component.ts","../../../projects/ui-components/src/lib/button/button.component.ts","../../../projects/ui-components/src/lib/button/button.component.html","../../../projects/ui-components/src/lib/document-viewer/services/file.service.ts","../../../projects/ui-components/src/lib/document-viewer/pages/pdf-viewer-page/pdf-viewer.component.ts","../../../projects/ui-components/src/lib/document-viewer/pages/pdf-viewer-page/pdf-viewer.component.html","../../../projects/ui-components/src/public-api.ts","../../../projects/ui-components/src/infodocviewdoc.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UiComponentsService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sgdea-ui-components',\r\n imports: [],\r\n template: `\r\n <p>\r\n ui-components works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class UiComponentsComponent {\r\n\r\n}\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sgdea-button',\r\n imports: [],\r\n templateUrl: './button.component.html',\r\n styleUrl: './button.component.css'\r\n})\r\nexport class ButtonComponent {\r\n @Input() label: string = 'Click me';\r\n @Input() type: 'primary' | 'secondary' | 'danger' = 'primary';\r\n @Input() disabled: boolean = false;\r\n @Input() size: 'small' | 'medium' | 'large' = 'medium';\r\n @Output() clicked = new EventEmitter<void>();\r\n\r\n onClick() {\r\n if (!this.disabled) {\r\n this.clicked.emit();\r\n }\r\n }\r\n}\r\n","<button \r\n class=\"sgdea-btn sgdea-btn--{{ type }} sgdea-btn--{{ size }}\"\r\n [disabled]=\"disabled\"\r\n (click)=\"onClick()\">\r\n {{ label }}\r\n</button>\r\n","import { Injectable } from '@angular/core';\nimport {\n HttpClient,\n HttpErrorResponse,\n HttpHeaders\n} from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, switchMap } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DocumentViewerFileService {\n constructor(private http: HttpClient) {}\n\n getFileByParams(params: {\n nameFile: string;\n nameBucket: string;\n nameSpaceBucket: string;\n url: string;\n token: string;\n }): Observable<Blob> {\n const endpoint = `${params.url}/api/v1/file/download?objectName=${encodeURIComponent(\n params.nameFile\n )}&bucketName=${params.nameBucket}`;\n\n const headers = new HttpHeaders({\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${params.token}`\n });\n\n return this.http\n .post(endpoint, {}, { headers, responseType: 'blob' })\n .pipe(\n catchError((error: HttpErrorResponse) => {\n const errorMessages: Record<number, string> = {\n 0: 'No hay conexión con el servidor',\n 400: 'Solicitud inválida',\n 401: 'No autorizado. Token inválido o expirado',\n 403: 'Acceso denegado',\n 404: 'Archivo no encontrado',\n 500: 'Error interno del servidor'\n };\n\n const message =\n errorMessages[error.status] ??\n 'Error inesperado al descargar el archivo';\n\n return throwError(() => new Error(message));\n })\n );\n }\n\n convertDocumentToPdf(file: Blob, token: string, baseApiUrl: string): Observable<Blob> {\n const url = `${baseApiUrl}/api/v1/file/${\n file.type === '.ppt' || file.type === '.pptx'\n ? 'conversion-ppt-to-pdf'\n : 'conversion-word-to-pdf'\n }`;\n\n const headers = new HttpHeaders({\n Authorization: `Bearer ${token}`,\n });\n\n const formData = new FormData();\n formData.append('file', file, 'documento.docx');\n\n return this.http\n .post<{ downloadUrl: string }>(url, formData, { headers })\n .pipe(\n switchMap((response) => {\n if (!response?.downloadUrl) {\n throw new Error('No se recibió downloadUrl');\n }\n\n return this.http.get(`${baseApiUrl}${response.downloadUrl}`, {\n headers,\n responseType: 'blob',\n });\n }),\n catchError((error: HttpErrorResponse) => {\n const errorMessages: Record<number, string> = {\n 0: 'No hay conexión con el servidor',\n 400: 'Solicitud inválida',\n 401: 'No autorizado. Token inválido o expirado',\n 403: 'Acceso denegado',\n 404: 'Archivo no encontrado',\n 500: 'Error interno del servidor',\n };\n\n const message =\n errorMessages[error.status] ??\n 'Error inesperado al convertir el archivo a PDF';\n\n return throwError(() => new Error(message));\n }),\n );\n }\n}\n\n","import {\n Component,\n OnInit,\n OnDestroy,\n signal,\n ViewChild,\n ElementRef,\n Input,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActivatedRoute, Params } from '@angular/router';\nimport { NgxExtendedPdfViewerModule } from 'ngx-extended-pdf-viewer';\nimport { DocumentViewerFileService } from '../../services/file.service';\n\nimport Handsontable from 'handsontable';\nimport { HotTableModule } from '@handsontable/angular';\nimport 'handsontable/dist/handsontable.full.css';\n\ninterface JsPdf {\n text(text: string, x: number, y: number): JsPdf;\n setFontSize(size: number): JsPdf;\n setFont(style: string): JsPdf;\n splitTextToSize(text: string, maxWidth: number): string[];\n addPage(): JsPdf;\n output(type: 'blob'): Blob;\n internal: any;\n}\n\n@Component({\n selector: 'sgdea-document-viewer',\n standalone: true,\n imports: [CommonModule, NgxExtendedPdfViewerModule, HotTableModule],\n templateUrl: './pdf-viewer.component.html',\n styleUrls: ['./pdf-viewer.component.css'],\n})\nexport class PdfViewerComponent implements OnInit, OnDestroy {\n @Input() nameFile?: string;\n @Input() nameBucket?: string;\n @Input() nameSpaceBucket?: string;\n @Input() url?: string;\n @Input() token: string = '';\n\n pdfSrc?: string;\n imageSrc?: string;\n textContent?: string;\n officeContent?: string;\n\n loading = signal(false);\n errorMessage = signal<string | null>(null);\n fileType = signal<string>('unknown');\n fileName = signal<string>('');\n\n private readonly extensionToType: { [key: string]: string } = {\n pdf: 'pdf',\n docx: 'docx',\n doc: 'doc',\n xlsx: 'xlsx',\n xls: 'xls',\n pptx: 'pptx',\n ppt: 'ppt',\n txt: 'txt',\n md: 'txt',\n csv: 'txt',\n log: 'txt',\n json: 'txt',\n xml: 'txt',\n html: 'txt',\n css: 'txt',\n js: 'txt',\n ts: 'txt',\n java: 'txt',\n py: 'txt',\n cpp: 'txt',\n c: 'txt',\n h: 'txt',\n php: 'txt',\n rb: 'txt',\n go: 'txt',\n rs: 'txt',\n swift: 'txt',\n kt: 'txt',\n sql: 'txt',\n jpg: 'image',\n jpeg: 'image',\n png: 'image',\n gif: 'image',\n tiff: 'image',\n bmp: 'image',\n svg: 'image',\n webp: 'image',\n };\n\n excelData: any[][] = [];\n excelColumns: any[] = [];\n excelColumnHeaders: string[] = [];\n excelSettings: any = {};\n excelSheetNames: string[] = [];\n excelCurrentSheetIndex = signal(0);\n showExcelViewer = false;\n private excelWorkbook: any = null;\n private xlsxModule: any = null;\n\n zoomLevel = signal(100);\n rotation = signal(0);\n minZoom = 25;\n maxZoom = 400;\n zoomStep = 25;\n isDragging = false;\n dragStart = { x: 0, y: 0 };\n imagePosition = { x: 0, y: 0 };\n imageDimensions = { width: 0, height: 0 };\n\n @ViewChild('imageContainer') imageContainer!: ElementRef;\n @ViewChild('mainImage') mainImage!: ElementRef;\n\n private librariesPreloaded = {\n pdf: false,\n excel: false,\n xlsx: false,\n jspdf: false,\n };\n\n constructor(\n private route: ActivatedRoute,\n private fileService: DocumentViewerFileService,\n ) {}\n\n ngOnInit(): void {\n if (\n this.url ||\n this.nameFile ||\n this.nameBucket ||\n this.nameSpaceBucket ||\n this.token\n ) {\n if (this.nameFile) {\n this.fileName.set(this.nameFile);\n }\n this.detectFileType();\n void this.loadWithPreload();\n return;\n }\n\n this.route.queryParams.subscribe((params: Params) => {\n this.nameFile = this.nameFile ?? params['nameFile'];\n this.nameBucket = this.nameBucket ?? params['nameBucket'];\n this.nameSpaceBucket = this.nameSpaceBucket ?? params['nameSpaceBucket'];\n this.token = this.token || params['token'];\n this.url = this.url ?? params['url'];\n\n if (this.nameFile) {\n this.fileName.set(this.nameFile);\n }\n\n this.detectFileType();\n void this.loadWithPreload();\n });\n }\n\n ngOnDestroy(): void {\n if (this.pdfSrc) URL.revokeObjectURL(this.pdfSrc);\n if (this.imageSrc) URL.revokeObjectURL(this.imageSrc);\n }\n\n private detectFileType(): void {\n let extension = '';\n if (this.nameFile) {\n extension = this.nameFile.split('.').pop()?.toLowerCase() || '';\n } else if (this.url) {\n extension = this.url.split('.').pop()?.toLowerCase() || '';\n }\n this.fileType.set(this.extensionToType[extension] || 'unknown');\n\n if (this.fileType() !== 'unknown') {\n void this.preloadLibrariesForType(this.fileType());\n }\n }\n\n private async loadWithPreload(): Promise<void> {\n this.loading.set(true);\n this.errorMessage.set(null);\n\n try {\n const preloadPromise = this.preloadLibrariesForType(this.fileType());\n const documentPromise = this.fileService\n .getFileByParams({\n nameFile: this.nameFile!,\n nameBucket: this.nameBucket!,\n nameSpaceBucket: this.nameSpaceBucket!,\n url: this.url!,\n token: this.token!,\n })\n .toPromise();\n\n const [blob] = await Promise.all([documentPromise, preloadPromise]);\n this.processFile(blob!);\n } catch (error: any) {\n this.errorMessage.set(error.message || 'Error al cargar el documento');\n this.loading.set(false);\n }\n }\n\n private async preloadLibrariesForType(type: string): Promise<void> {\n const preloadTasks: Promise<any>[] = [];\n\n if (!this.librariesPreloaded.pdf) {\n preloadTasks.push(\n import('ngx-extended-pdf-viewer')\n .then(() => {\n this.librariesPreloaded.pdf = true;\n })\n .catch((err) => console.warn('Error precargando PDF:', err)),\n );\n }\n\n if (type === 'txt' && !this.librariesPreloaded.jspdf) {\n preloadTasks.push(\n import('jspdf')\n .then(() => {\n this.librariesPreloaded.jspdf = true;\n })\n .catch((err) => console.warn('Error precargando jsPDF:', err)),\n );\n }\n\n if (type === 'xlsx' || type === 'xls') {\n if (!this.librariesPreloaded.xlsx) {\n preloadTasks.push(\n import('xlsx')\n .then((module) => {\n this.xlsxModule = module;\n this.librariesPreloaded.xlsx = true;\n })\n .catch((err) => console.warn('Error precargando XLSX:', err)),\n );\n }\n\n if (!this.librariesPreloaded.excel) {\n preloadTasks.push(\n import('handsontable')\n .then(() => {\n this.librariesPreloaded.excel = true;\n })\n .catch((err) => console.warn('Error precargando Handsontable:', err)),\n );\n }\n }\n\n if (preloadTasks.length > 0) {\n await Promise.allSettled(preloadTasks);\n }\n }\n\n private processFile(blob: Blob): void {\n const type = this.fileType();\n\n switch (true) {\n case type === 'pdf':\n this.handlePdfFile(blob);\n break;\n case type === 'image':\n this.handleImageFile(blob);\n break;\n case type === 'txt':\n this.handleTextFile(blob);\n break;\n case ['xlsx', 'xls'].includes(type):\n this.handleExcelFile(blob);\n break;\n case ['docx', 'doc', 'pptx', 'ppt'].includes(type):\n this.handleOfficeFile(blob);\n break;\n default:\n this.errorMessage.set('Formato no soportado');\n this.loading.set(false);\n }\n }\n\n private handlePdfFile(blob: Blob): void {\n this.pdfSrc = URL.createObjectURL(blob);\n this.loading.set(false);\n }\n\n private handleImageFile(blob: Blob): void {\n this.imageSrc = URL.createObjectURL(blob);\n this.loading.set(false);\n }\n\n private handleTextFile(blob: Blob): void {\n void this.convertTextToPdf(blob);\n }\n\n private handleExcelFile(blob: Blob): void {\n void this.processExcelFile(blob);\n }\n\n private handleOfficeFile(blob: Blob): void {\n this.convertOfficeToPdf(blob);\n }\n\n private convertOfficeToPdf(blob: Blob): void {\n this.fileService.convertDocumentToPdf(blob, this.token!, this.url!).subscribe({\n next: (pdfBlob) => {\n this.pdfSrc = URL.createObjectURL(pdfBlob);\n this.fileType.set('pdf');\n this.loading.set(false);\n },\n error: (error) => {\n this.errorMessage.set(error.message || 'Error al convertir el archivo a PDF');\n this.loading.set(false);\n },\n });\n }\n\n private async convertTextToPdf(blob: Blob): Promise<void> {\n try {\n const text = await blob.text();\n\n if (!this.librariesPreloaded.jspdf) {\n await import('jspdf');\n }\n\n const { default: JsPdfCtor } = await import('jspdf');\n const JsPdfClass = JsPdfCtor as unknown as new (options: {\n orientation: string;\n unit: string;\n format: string;\n }) => JsPdf;\n\n const pdf = new JsPdfClass({\n orientation: 'portrait',\n unit: 'pt',\n format: 'a4',\n });\n\n const pageWidth = pdf.internal.pageSize.getWidth();\n const pageHeight = pdf.internal.pageSize.getHeight();\n const margin = 40;\n const maxLineWidth = pageWidth - margin * 2;\n\n pdf.setFontSize(11);\n pdf.setFont('helvetica');\n\n let yPosition = margin;\n const lineHeight = 15;\n const paragraphs = text.split('\\n');\n\n for (const paragraph of paragraphs) {\n if (paragraph.trim() === '') {\n yPosition += lineHeight;\n continue;\n }\n\n const lines = pdf.splitTextToSize(paragraph, maxLineWidth);\n\n for (const line of lines) {\n if (yPosition > pageHeight - margin) {\n pdf.addPage();\n yPosition = margin;\n }\n\n pdf.text(line, margin, yPosition);\n yPosition += lineHeight;\n }\n\n yPosition += lineHeight / 2;\n }\n\n const pdfBlob = pdf.output('blob');\n this.pdfSrc = URL.createObjectURL(pdfBlob);\n this.fileType.set('pdf');\n this.loading.set(false);\n } catch {\n const reader = new FileReader();\n reader.onload = (e) => {\n this.textContent = e.target?.result as string;\n this.loading.set(false);\n };\n reader.readAsText(blob);\n }\n }\n\n private async processExcelFile(blob: Blob): Promise<void> {\n try {\n if (!this.xlsxModule) {\n this.xlsxModule = await import('xlsx');\n }\n\n const buffer = await blob.arrayBuffer();\n this.excelWorkbook = this.xlsxModule.read(buffer, { type: 'array' });\n this.excelSheetNames = [...this.excelWorkbook.SheetNames];\n await this.loadExcelSheetByIndex(0);\n this.buildExcelSettings();\n this.showExcelViewer = true;\n this.loading.set(false);\n } catch {\n this.errorMessage.set('Error procesando Excel');\n this.loading.set(false);\n }\n }\n\n private async loadExcelSheetByIndex(index: number): Promise<void> {\n if (!this.excelWorkbook || !this.xlsxModule) return;\n\n const sheetName = this.excelSheetNames[index];\n const worksheet = this.excelWorkbook.Sheets[sheetName];\n if (!worksheet) return;\n\n await new Promise((resolve) => setTimeout(resolve, 0));\n\n let jsonData = this.xlsxModule.utils.sheet_to_json(worksheet, {\n header: 1,\n defval: '',\n raw: true,\n }) as any[][];\n\n if (!jsonData.length) {\n this.excelData = [];\n this.excelColumns = [];\n this.excelColumnHeaders = [];\n return;\n }\n\n jsonData = jsonData.filter((row) =>\n row.some((cell) => cell !== '' && cell !== null && cell !== undefined),\n );\n\n if (!jsonData.length) {\n this.excelData = [];\n this.excelColumns = [];\n this.excelColumnHeaders = [];\n return;\n }\n\n const columnCount = Math.max(...jsonData.map((r) => r.length));\n const columnsToKeep: number[] = [];\n\n for (let col = 0; col < columnCount; col++) {\n const hasValue = jsonData.some(\n (row) => row[col] !== '' && row[col] !== null && row[col] !== undefined,\n );\n if (hasValue) columnsToKeep.push(col);\n }\n\n const cleanedData = jsonData.map((row) =>\n columnsToKeep.map((colIndex) => row[colIndex] ?? ''),\n );\n\n const headers = cleanedData[0];\n this.excelColumnHeaders = [...headers];\n\n this.excelColumns = headers.map((header: string, i: number) => ({\n data: i,\n title: header || `Col ${i + 1}`,\n readOnly: true,\n }));\n\n this.excelData = cleanedData.slice(1);\n }\n\n async selectExcelSheet(index: number): Promise<void> {\n if (index < 0 || index >= this.excelSheetNames.length) return;\n\n this.showExcelViewer = false;\n await new Promise((resolve) => setTimeout(resolve, 0));\n\n this.excelCurrentSheetIndex.set(index);\n await this.loadExcelSheetByIndex(index);\n this.buildExcelSettings();\n this.showExcelViewer = true;\n }\n\n private buildExcelSettings(): void {\n this.excelSettings = {\n stretchH: 'all',\n readOnly: true,\n columnSorting: true,\n licenseKey: 'non-commercial-and-evaluation',\n renderer: (\n instance: any,\n td: any,\n row: number,\n col: number,\n prop: any,\n value: any,\n cellProperties: any,\n ) => {\n Handsontable.renderers.TextRenderer(\n instance,\n td,\n row,\n col,\n prop,\n value,\n cellProperties,\n );\n\n if (value && value.toString().length > 20) {\n td.title = value.toString();\n }\n },\n };\n }\n\n isExcelType(): boolean {\n return ['xlsx', 'xls'].includes(this.fileType());\n }\n\n isImageType(): boolean {\n return this.fileType() === 'image';\n }\n\n zoomIn(): void {\n this.zoomLevel.update((level) => Math.min(level + this.zoomStep, this.maxZoom));\n this.clampImagePosition();\n }\n\n zoomOut(): void {\n this.zoomLevel.update((level) => Math.max(level - this.zoomStep, this.minZoom));\n this.clampImagePosition();\n }\n\n resetZoom(): void {\n this.zoomLevel.set(100);\n this.rotation.set(0);\n this.imagePosition = { x: 0, y: 0 };\n }\n\n rotateLeft(): void {\n this.rotation.update((rot) => (rot - 90) % 360);\n setTimeout(() => this.adjustPositionAfterRotation(), 0);\n }\n\n rotateRight(): void {\n this.rotation.update((rot) => (rot + 90) % 360);\n setTimeout(() => this.adjustPositionAfterRotation(), 0);\n }\n\n resetRotation(): void {\n this.rotation.set(0);\n this.adjustPositionAfterRotation();\n }\n\n private adjustPositionAfterRotation(): void {\n if (!this.imageContainer || !this.mainImage) return;\n this.imagePosition = { x: 0, y: 0 };\n if (this.zoomLevel() > 100) {\n this.clampImagePosition();\n }\n }\n\n getImageTransform(): string {\n const scale = this.zoomLevel() / 100;\n return `translate(${this.imagePosition.x}px, ${this.imagePosition.y}px) rotate(${this.rotation()}deg) scale(${scale})`;\n }\n\n onMouseWheel(event: WheelEvent): void {\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const delta = event.deltaY > 0 ? -this.zoomStep : this.zoomStep;\n const newZoom = this.zoomLevel() + delta;\n if (newZoom >= this.minZoom && newZoom <= this.maxZoom) {\n this.zoomLevel.set(newZoom);\n this.clampImagePosition();\n }\n }\n }\n\n startDrag(event: MouseEvent): void {\n if (this.zoomLevel() > 100) {\n this.isDragging = true;\n this.dragStart = {\n x: event.clientX - this.imagePosition.x,\n y: event.clientY - this.imagePosition.y,\n };\n event.preventDefault();\n }\n }\n\n onDrag(event: MouseEvent): void {\n if (this.isDragging && this.zoomLevel() > 100) {\n this.imagePosition = {\n x: event.clientX - this.dragStart.x,\n y: event.clientY - this.dragStart.y,\n };\n this.clampImagePosition();\n }\n }\n\n stopDrag(): void {\n this.isDragging = false;\n }\n\n private clampImagePosition(): void {\n if (!this.imageContainer || !this.mainImage || !this.imageDimensions.width) return;\n\n const container = this.imageContainer.nativeElement;\n const scaledWidth = this.imageDimensions.width * (this.zoomLevel() / 100);\n const scaledHeight = this.imageDimensions.height * (this.zoomLevel() / 100);\n\n if (\n scaledWidth <= container.clientWidth &&\n scaledHeight <= container.clientHeight\n ) {\n this.imagePosition = { x: 0, y: 0 };\n return;\n }\n\n const maxX = Math.max(0, (scaledWidth - container.clientWidth) / 2);\n const maxY = Math.max(0, (scaledHeight - container.clientHeight) / 2);\n\n this.imagePosition.x = Math.max(-maxX, Math.min(maxX, this.imagePosition.x));\n this.imagePosition.y = Math.max(-maxY, Math.min(maxY, this.imagePosition.y));\n }\n\n onImageLoad(): void {\n if (this.mainImage) {\n const img = this.mainImage.nativeElement;\n this.imageDimensions = {\n width: img.naturalWidth,\n height: img.naturalHeight,\n };\n }\n }\n\n getCursorStyle(): string {\n if (this.zoomLevel() > 100) {\n return this.isDragging ? 'grabbing' : 'grab';\n }\n return 'default';\n }\n\n isWordType(): boolean {\n return ['docx', 'doc'].includes(this.fileType());\n }\n\n isPowerPointType(): boolean {\n return ['pptx', 'ppt'].includes(this.fileType());\n }\n\n isOfficeType(): boolean {\n return ['docx', 'doc', 'pptx', 'ppt'].includes(this.fileType());\n }\n\n getPreloadStatus(): string {\n return `PDF: ${this.librariesPreloaded.pdf ? 'OK' : 'NO'}, Excel: ${this.librariesPreloaded.excel ? 'OK' : 'NO'}, XLSX: ${this.librariesPreloaded.xlsx ? 'OK' : 'NO'}, jsPDF: ${this.librariesPreloaded.jspdf ? 'OK' : 'NO'}`;\n }\n}\n\n","<div *ngIf=\"loading()\" class=\"loader\">Cargando documento...</div>\n\n<div *ngIf=\"errorMessage() && !loading()\" class=\"error-message\">\n {{ errorMessage() }}\n</div>\n\n<div *ngIf=\"!loading() && !errorMessage()\" class=\"document-viewer-container\">\n\n <!-- PDF -->\n <ngx-extended-pdf-viewer\n *ngIf=\"fileType() === 'pdf' && pdfSrc\"\n [src]=\"pdfSrc\"\n height=\"auto\"\n useBrowserLocale=\"false\"\n [showDownloadButton]=\"false\"\n [showPrintButton]=\"false\"\n [showOpenFileButton]=\"false\"\n [showSecondaryToolbarButton]=\"false\"\n [showFirstAndLastPageButtons]=\"false\"\n [showPagingButtons]=\"false\"\n [showZoomButtons]=\"true\"\n [showDrawEditor]=\"false\"\n [showTextEditor]=\"false\"\n [showStampEditor]=\"false\"\n [showHighlightEditor]=\"false\"\n >\n </ngx-extended-pdf-viewer>\n\n <!-- Imagen -->\n<!-- Visor de imágenes con zoom y rotación -->\n <div *ngIf=\"isImageType() && imageSrc\" class=\"image-viewer\">\n <!-- Barra de herramientas -->\n <div class=\"image-toolbar\">\n <button (click)=\"zoomIn()\" title=\"Acercar (Ctrl +)\">➕</button>\n <button (click)=\"zoomOut()\" title=\"Alejar (Ctrl -)\">➖</button>\n <!-- Separador -->\n <span class=\"separator\"></span>\n\n <!-- Botones de rotación AHORA FUNCIONALES -->\n <button (click)=\"rotateLeft()\" title=\"Rotar izquierda (↺)\">↺</button>\n <button (click)=\"rotateRight()\" title=\"Rotar derecha (↻)\">↻</button>\n\n <!-- Información -->\n <span class=\"zoom-info\">{{ zoomLevel() }}%</span>\n <span class=\"rotation-info\" *ngIf=\"rotation() !== 0\">\n {{ rotation() }}°\n </span>\n\n <span class=\"image-dimensions\" *ngIf=\"imageDimensions.width\">\n {{ imageDimensions.width }} x {{ imageDimensions.height }}\n </span>\n </div>\n\n <!-- Contenedor de la imagen -->\n <div\n class=\"image-container\" \n #imageContainer \n (wheel)=\"onMouseWheel($event)\"\n >\n <img\n #mainImage\n [src]=\"imageSrc\"\n [alt]=\"fileName()\"\n [style.transform]=\"getImageTransform()\"\n [style.cursor]=\"getCursorStyle()\"\n (load)=\"onImageLoad()\"\n (mousedown)=\"startDrag($event)\"\n (mousemove)=\"onDrag($event)\"\n (mouseup)=\"stopDrag()\"\n (mouseleave)=\"stopDrag()\"\n class=\"zoomable-image\"\n />\n </div>\n\n <!-- Instrucciones -->\n <div class=\"image-footer\" *ngIf=\"zoomLevel() > 100\">\n <small>Arrastra para mover la imagen</small>\n </div>\n </div>\n <!-- Excel -->\n <div *ngIf=\"isExcelType()\" class=\"excel-viewer-container\">\n\n <!-- Tabs -->\n <div *ngIf=\"excelSheetNames.length > 1\" class=\"excel-sheet-tabs\">\n <button\n *ngFor=\"let sheet of excelSheetNames; let i = index\"\n type=\"button\"\n class=\"excel-sheet-tab\"\n [class.active]=\"excelCurrentSheetIndex() === i\"\n (click)=\"selectExcelSheet(i)\"\n >\n {{ sheet }}\n </button>\n </div>\n\n <hot-table\n *ngIf=\"showExcelViewer\"\n #hotTable\n [settings]=\"excelSettings\"\n [data]=\"excelData\"\n [colHeaders]=\"excelColumnHeaders\"\n [rowHeaders]=\"true\"\n [width]=\"'100%'\"\n [height]=\"'100%'\"\n licenseKey=\"non-commercial-and-evaluation\"\n [columns]=\"excelColumns\"\n >\n </hot-table>\n\n <div *ngIf=\"!showExcelViewer\" class=\"loader\">\n Cargando hoja...\n </div>\n\n </div>\n</div>\n","/*\r\n * Public API Surface of ui-components\r\n */\r\n\r\nexport * from './lib/ui-components.service';\r\nexport * from './lib/ui-components.component';\r\nexport * from './lib/button/button.component';\r\nexport * from './lib/document-viewer/pages/pdf-viewer-page/pdf-viewer.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.DocumentViewerFileService"],"mappings":"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"}
@@ -59,25 +59,36 @@ export declare class PdfViewerComponent implements OnInit, OnDestroy {
59
59
  private processFile;
60
60
  private handlePdfFile;
61
61
  private handleImageFile;
62
+ private handleTextFile;
63
+ private handleExcelFile;
64
+ private handleOfficeFile;
62
65
  private convertOfficeToPdf;
63
66
  private convertTextToPdf;
64
67
  private processExcelFile;
65
68
  private loadExcelSheetByIndex;
66
- selectExcelSheet(index: number): void;
69
+ selectExcelSheet(index: number): Promise<void>;
67
70
  private buildExcelSettings;
68
71
  isExcelType(): boolean;
69
72
  isImageType(): boolean;
70
73
  zoomIn(): void;
71
74
  zoomOut(): void;
75
+ resetZoom(): void;
72
76
  rotateLeft(): void;
73
77
  rotateRight(): void;
78
+ resetRotation(): void;
79
+ private adjustPositionAfterRotation;
74
80
  getImageTransform(): string;
75
- getCursorStyle(): string;
76
- onImageLoad(): void;
77
81
  onMouseWheel(event: WheelEvent): void;
78
82
  startDrag(event: MouseEvent): void;
79
83
  onDrag(event: MouseEvent): void;
80
84
  stopDrag(): void;
85
+ private clampImagePosition;
86
+ onImageLoad(): void;
87
+ getCursorStyle(): string;
88
+ isWordType(): boolean;
89
+ isPowerPointType(): boolean;
90
+ isOfficeType(): boolean;
91
+ getPreloadStatus(): string;
81
92
  static ɵfac: i0.ɵɵFactoryDeclaration<PdfViewerComponent, never>;
82
93
  static ɵcmp: i0.ɵɵComponentDeclaration<PdfViewerComponent, "sgdea-document-viewer", never, { "nameFile": { "alias": "nameFile"; "required": false; }; "nameBucket": { "alias": "nameBucket"; "required": false; }; "nameSpaceBucket": { "alias": "nameSpaceBucket"; "required": false; }; "url": { "alias": "url"; "required": false; }; "token": { "alias": "token"; "required": false; }; }, {}, never, never, true, never>;
83
94
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "infodocviewdoc",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.0",
6
6
  "@angular/core": "^19.2.0",