cat-documents-ng 1.0.18 → 1.0.20

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.
@@ -4,7 +4,7 @@ import * as i6 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { firstValueFrom, EMPTY, tap, catchError, throwError, of, combineLatest, Subject, Observable, takeUntil, Subscription, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, BehaviorSubject } from 'rxjs';
6
6
  import * as i2 from '@angular/common/http';
7
- import { HttpHeaders, HttpParams, HttpClientModule } from '@angular/common/http';
7
+ import { HttpParams, HttpClientModule, HttpHeaders } from '@angular/common/http';
8
8
  import { __decorate } from 'tslib';
9
9
  import { EntityStore, StoreConfig, QueryEntity } from '@datorama/akita';
10
10
  import { debounceTime, distinctUntilChanged, switchMap, map, catchError as catchError$1 } from 'rxjs/operators';
@@ -1432,10 +1432,7 @@ class DocumentHttpService {
1432
1432
  * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
1433
1433
  */
1434
1434
  getDocumentCatagories(contextId) {
1435
- let headers = new HttpHeaders({
1436
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1437
- });
1438
- return this.http.get(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`, { headers })
1435
+ return this.http.get(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`)
1439
1436
  .pipe(tap((response) => {
1440
1437
  if (response && response.categories) {
1441
1438
  this.documentStore.setDocumentCategories(response.categories);
@@ -1478,10 +1475,7 @@ class DocumentHttpService {
1478
1475
  * @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
1479
1476
  */
1480
1477
  getDocumentByFolderID(folderId, contextId) {
1481
- let headers = new HttpHeaders({
1482
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1483
- });
1484
- return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.PARENT_DOCUMENT_TYPE_ID}${folderId}${URLS.CONTEXT_ID}${contextId}`, { headers }).pipe(tap((records) => {
1478
+ return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.PARENT_DOCUMENT_TYPE_ID}${folderId}${URLS.CONTEXT_ID}${contextId}`).pipe(tap((records) => {
1485
1479
  this.documentStore.set(records);
1486
1480
  }), catchError((error) => {
1487
1481
  return throwError(() => new Error(error));
@@ -1496,10 +1490,7 @@ class DocumentHttpService {
1496
1490
  * @returns {Observable<DocumentModel>} An observable that emits the updated DocumentModel.
1497
1491
  */
1498
1492
  updateDocumentName(documentId, payload) {
1499
- let headers = new HttpHeaders({
1500
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1501
- });
1502
- return this.http.put(`${this.apiUrl}${URLS.ALIAS_NAME}${documentId}`, payload, { headers }).pipe(catchError((error) => {
1493
+ return this.http.put(`${this.apiUrl}${URLS.ALIAS_NAME}${documentId}`, payload).pipe(catchError((error) => {
1503
1494
  return throwError(() => new Error(error));
1504
1495
  }));
1505
1496
  }
@@ -1509,12 +1500,9 @@ class DocumentHttpService {
1509
1500
  * @returns {Observable<UserListModel[]>} Observable that emits the user list data.
1510
1501
  */
1511
1502
  getUserListByContextId(contextId) {
1512
- let headers = new HttpHeaders({
1513
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1514
- });
1515
1503
  if (!contextId)
1516
1504
  return EMPTY;
1517
- return this.http.get(`${this.apiUrl}${URLS.USERLIST}${contextId}`, { headers }).pipe(tap((userList) => {
1505
+ return this.http.get(`${this.apiUrl}${URLS.USERLIST}${contextId}`).pipe(tap((userList) => {
1518
1506
  this.documentStore.setUserList(userList);
1519
1507
  }), catchError((error) => {
1520
1508
  return throwError(() => new Error(error));
@@ -1530,9 +1518,6 @@ class DocumentHttpService {
1530
1518
  getStatusDocumentCount(applicationId, contextId = null, categoryId = null) {
1531
1519
  if (!applicationId)
1532
1520
  return EMPTY;
1533
- let headers = new HttpHeaders({
1534
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1535
- });
1536
1521
  let url = `${this.apiUrl}${URLS.STATUS_DOCUMENT_COUNT}${applicationId}`;
1537
1522
  let params = new HttpParams();
1538
1523
  const contextParam = contextId || null;
@@ -1542,7 +1527,7 @@ class DocumentHttpService {
1542
1527
  if (categoryId) {
1543
1528
  params = params.set(SHARED.CATEGORY, categoryId);
1544
1529
  }
1545
- return this.http.get(url, { params, headers }).pipe(tap((statusData) => {
1530
+ return this.http.get(url, { params }).pipe(tap((statusData) => {
1546
1531
  this.documentStore.setStatusData(statusData);
1547
1532
  }), catchError((error) => {
1548
1533
  return throwError(() => new Error(error));
@@ -1560,9 +1545,6 @@ class DocumentHttpService {
1560
1545
  * @returns {Observable<any>} An observable that emits the filtered document data.
1561
1546
  */
1562
1547
  getDocumentsBySelection(contextId, menuItem, userId, status, searchKey = null) {
1563
- let headers = new HttpHeaders({
1564
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1565
- });
1566
1548
  let params = new HttpParams();
1567
1549
  if (userId) {
1568
1550
  params = params.set(SHARED.CONTEXT_ID, userId);
@@ -1573,7 +1555,7 @@ class DocumentHttpService {
1573
1555
  if (searchKey) {
1574
1556
  params = params.set(SHARED.SEARCH_KEY, searchKey);
1575
1557
  }
1576
- return this.http.get(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params, headers }).pipe(tap((response) => {
1558
+ return this.http.get(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params }).pipe(tap((response) => {
1577
1559
  if (response.documents) {
1578
1560
  this.documentStore.setDocumentList(response.documents);
1579
1561
  }
@@ -1582,13 +1564,10 @@ class DocumentHttpService {
1582
1564
  }));
1583
1565
  }
1584
1566
  getDocumentHistory(documentId) {
1585
- let headers = new HttpHeaders({
1586
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1587
- });
1588
1567
  if (!documentId) {
1589
1568
  return of([]);
1590
1569
  }
1591
- return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers }).pipe(catchError((error) => {
1570
+ return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`).pipe(catchError((error) => {
1592
1571
  return throwError(() => new Error(error));
1593
1572
  }));
1594
1573
  }
@@ -1600,10 +1579,7 @@ class DocumentHttpService {
1600
1579
  getCategoriesBySource(source) {
1601
1580
  if (!source)
1602
1581
  return EMPTY;
1603
- let headers = new HttpHeaders({
1604
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1605
- });
1606
- return this.http.get(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`, { headers }).pipe(catchError((error) => {
1582
+ return this.http.get(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`).pipe(catchError((error) => {
1607
1583
  return throwError(() => new Error(error));
1608
1584
  }));
1609
1585
  }
@@ -1613,12 +1589,9 @@ class DocumentHttpService {
1613
1589
  * @returns {Observable<DocumentTypeModel[]>} Observable that emits the document types.
1614
1590
  */
1615
1591
  getDocumentTypesByCategory(categoryId) {
1616
- let headers = new HttpHeaders({
1617
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1618
- });
1619
1592
  if (!categoryId)
1620
1593
  return EMPTY;
1621
- return this.http.get(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`, { headers }).pipe(catchError((error) => {
1594
+ return this.http.get(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`).pipe(catchError((error) => {
1622
1595
  return throwError(() => new Error(error));
1623
1596
  }));
1624
1597
  }
@@ -1628,10 +1601,7 @@ class DocumentHttpService {
1628
1601
  * @returns {Observable<any>} Observable that emits the upload response.
1629
1602
  */
1630
1603
  uploadFile(formData) {
1631
- let headers = new HttpHeaders({
1632
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1633
- });
1634
- return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData, { headers }).pipe(catchError((error) => {
1604
+ return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData).pipe(catchError((error) => {
1635
1605
  return throwError(() => new Error(error));
1636
1606
  }));
1637
1607
  }
@@ -1641,10 +1611,7 @@ class DocumentHttpService {
1641
1611
  * @returns {Observable<any>} Observable that emits the save response.
1642
1612
  */
1643
1613
  saveDocumentUpload(payload) {
1644
- let headers = new HttpHeaders({
1645
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1646
- });
1647
- return this.http.post(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload, { headers }).pipe(catchError((error) => {
1614
+ return this.http.post(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload).pipe(catchError((error) => {
1648
1615
  return throwError(() => new Error(error));
1649
1616
  }));
1650
1617
  }
@@ -1656,13 +1623,10 @@ class DocumentHttpService {
1656
1623
  * @returns {Observable<any>} Observable that emits the updated document data with normalized status
1657
1624
  */
1658
1625
  updateDocumentStatus(documentId, status, statusUpdateDescription) {
1659
- let headers = new HttpHeaders({
1660
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1661
- });
1662
1626
  const payload = {
1663
1627
  statusUpdateDescription: statusUpdateDescription
1664
1628
  };
1665
- return this.http.put(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload, { headers }).pipe(tap((response) => {
1629
+ return this.http.put(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload).pipe(tap((response) => {
1666
1630
  if (response && response.status) {
1667
1631
  const normalizedStatus = this.normalizeStatus(response.status);
1668
1632
  response.normalizedStatus = normalizedStatus;
@@ -1695,10 +1659,7 @@ class DocumentHttpService {
1695
1659
  * @returns {Observable<any>} Observable that emits the delete response
1696
1660
  */
1697
1661
  deleteDocument(documentId, contextId) {
1698
- let headers = new HttpHeaders({
1699
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1700
- });
1701
- return this.http.delete(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`, { headers }).pipe(tap(() => {
1662
+ return this.http.delete(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`).pipe(tap(() => {
1702
1663
  this.getDocumentCatagories(contextId).subscribe();
1703
1664
  this.getUserListByContextId(contextId).subscribe();
1704
1665
  this.getStatusDocumentCount(contextId).subscribe();
@@ -1714,10 +1675,7 @@ class DocumentHttpService {
1714
1675
  * @returns {Observable<ArrayBuffer>} Observable that emits the file data as ArrayBuffer
1715
1676
  */
1716
1677
  downloadExcelFile(documentUrl) {
1717
- let headers = new HttpHeaders({
1718
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1719
- });
1720
- return this.http.get(documentUrl, { headers,
1678
+ return this.http.get(documentUrl, {
1721
1679
  responseType: 'arraybuffer'
1722
1680
  }).pipe(catchError((error) => {
1723
1681
  return throwError(() => new Error(error));
@@ -1730,10 +1688,7 @@ class DocumentHttpService {
1730
1688
  * @returns {Observable<string>} Observable that emits the file data as string
1731
1689
  */
1732
1690
  downloadCsvFile(documentUrl) {
1733
- let headers = new HttpHeaders({
1734
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1735
- });
1736
- return this.http.get(documentUrl, { headers,
1691
+ return this.http.get(documentUrl, {
1737
1692
  responseType: 'text'
1738
1693
  }).pipe(catchError((error) => {
1739
1694
  return throwError(() => new Error(error));
@@ -1745,28 +1700,22 @@ class DocumentHttpService {
1745
1700
  * @returns Observable of file content as text
1746
1701
  */
1747
1702
  downloadEmailFile(documentUrl) {
1748
- let headers = new HttpHeaders({
1749
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1750
- });
1751
1703
  const isAzureBlobStorage = documentUrl.includes('.blob.core.windows.net');
1752
1704
  if (isAzureBlobStorage) {
1753
- return this.http.get(documentUrl, { headers,
1705
+ return this.http.get(documentUrl, {
1754
1706
  responseType: 'text'
1755
1707
  }).pipe(catchError((error) => {
1756
1708
  return throwError(() => new Error('Failed to download email file. Please check if the file URL is valid and accessible.'));
1757
1709
  }));
1758
1710
  }
1759
1711
  else {
1760
- return this.http.get(documentUrl, { headers }).pipe(catchError((error) => {
1712
+ return this.http.get(documentUrl).pipe(catchError((error) => {
1761
1713
  return throwError(() => new Error('Failed to download email file. Please check if the file URL is valid and accessible.'));
1762
1714
  }));
1763
1715
  }
1764
1716
  }
1765
1717
  documentRequest(payload) {
1766
- let headers = new HttpHeaders({
1767
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1768
- });
1769
- return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_REQUEST}`, payload, { headers }).pipe(catchError((error) => {
1718
+ return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_REQUEST}`, payload).pipe(catchError((error) => {
1770
1719
  return throwError(() => new Error(error));
1771
1720
  }));
1772
1721
  }
@@ -1776,12 +1725,9 @@ class DocumentHttpService {
1776
1725
  * @returns {Observable<any>} Observable that emits the valuation report data or empty object
1777
1726
  */
1778
1727
  getValuationReportByContextId(contextId) {
1779
- let headers = new HttpHeaders({
1780
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1781
- });
1782
1728
  if (!contextId)
1783
1729
  return EMPTY;
1784
- return this.http.get(`${this.apiUrl}${URLS.VALUATION_REPORT}${contextId}`, { headers }).pipe(catchError((error) => {
1730
+ return this.http.get(`${this.apiUrl}${URLS.VALUATION_REPORT}${contextId}`).pipe(catchError((error) => {
1785
1731
  // Return empty object if no data found or error occurs
1786
1732
  return of(null);
1787
1733
  }));
@@ -1789,17 +1735,14 @@ class DocumentHttpService {
1789
1735
  /**
1790
1736
  * Converts an email document to PDF format
1791
1737
  * @param {string} documentUrl - The URL of the email document to convert
1792
- * @returns {Observable<ConvertToPdfResponse>} Observable that emits the PDF URL response
1738
+ * @returns {Observable<Blob>} Observable that emits the PDF blob data
1793
1739
  */
1794
1740
  convertEmailToPdf(documentUrl) {
1795
- let headers = new HttpHeaders({
1796
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
1797
- });
1798
1741
  if (!documentUrl)
1799
1742
  return EMPTY;
1800
1743
  const payload = { documentUrl: documentUrl };
1801
1744
  return this.http.post(`${this.apiUrl}${URLS.CONVERT_TO_PDF}`, payload, {
1802
- headers
1745
+ responseType: 'blob'
1803
1746
  }).pipe(catchError((error) => {
1804
1747
  return throwError(() => new Error(error?.message || 'Failed to convert email to PDF'));
1805
1748
  }));
@@ -2724,10 +2667,7 @@ class DocumentService {
2724
2667
  * @returns {Observable<any>} Observable that emits the newly created document.
2725
2668
  */
2726
2669
  create(entity) {
2727
- let headers = new HttpHeaders({
2728
- 'Authorization': `Bearer 3def65bf-2dfc-466b-85a3-13cd1db0960e`
2729
- });
2730
- return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, entity, { headers }).pipe(tap((newEntity) => this.documentStore.add(newEntity)));
2670
+ return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, entity).pipe(tap((newEntity) => this.documentStore.add(newEntity)));
2731
2671
  }
2732
2672
  /**
2733
2673
  * Fetches all documents from the backend.
@@ -8450,20 +8390,25 @@ class DocumentContentViewerComponent {
8450
8390
  if (this.isEmail && this.documentUrl) {
8451
8391
  this.isLoadingEmail = true;
8452
8392
  this.emailError = null;
8453
- this.emailPdfUrl = null;
8393
+ // Clean up previous blob URL if exists
8394
+ if (this.emailPdfUrl) {
8395
+ URL.revokeObjectURL(this.emailPdfUrl);
8396
+ this.emailPdfUrl = null;
8397
+ }
8454
8398
  // Call convert-to-pdf API
8455
8399
  this.documentHttpService.convertEmailToPdf(this.documentUrl)
8456
8400
  .subscribe({
8457
- next: (response) => {
8458
- if (response.success && response.pdfUrl) {
8459
- // Use the PDF URL directly from the response
8460
- this.emailPdfUrl = response.pdfUrl;
8401
+ next: (pdfBlob) => {
8402
+ // Verify it's a PDF blob
8403
+ if (pdfBlob.type === 'application/pdf' || pdfBlob.size > 0) {
8404
+ // Create blob URL from PDF response
8405
+ this.emailPdfUrl = URL.createObjectURL(pdfBlob);
8461
8406
  this.emailError = null;
8462
8407
  this.isLoadingEmail = false;
8463
8408
  }
8464
8409
  else {
8465
- // Response indicates failure
8466
- this.emailError = response.message || 'Failed to convert email to PDF';
8410
+ // Invalid PDF response
8411
+ this.emailError = 'Invalid PDF response from server';
8467
8412
  this.isLoadingEmail = false;
8468
8413
  }
8469
8414
  },
@@ -8482,8 +8427,11 @@ class DocumentContentViewerComponent {
8482
8427
  * Resets Email data to initial state
8483
8428
  */
8484
8429
  resetEmailData() {
8485
- // Note: No need to revoke URL since it's a direct URL from the API, not a blob URL
8486
- this.emailPdfUrl = null;
8430
+ // Clean up blob URL to prevent memory leaks
8431
+ if (this.emailPdfUrl) {
8432
+ URL.revokeObjectURL(this.emailPdfUrl);
8433
+ this.emailPdfUrl = null;
8434
+ }
8487
8435
  this.isLoadingEmail = false;
8488
8436
  this.emailError = null;
8489
8437
  }
@@ -8498,8 +8446,11 @@ class DocumentContentViewerComponent {
8498
8446
  * Cleanup when component is destroyed
8499
8447
  */
8500
8448
  ngOnDestroy() {
8501
- // Note: No need to revoke URL since it's a direct URL from the API, not a blob URL
8502
- this.emailPdfUrl = null;
8449
+ // Clean up blob URL to prevent memory leaks
8450
+ if (this.emailPdfUrl) {
8451
+ URL.revokeObjectURL(this.emailPdfUrl);
8452
+ this.emailPdfUrl = null;
8453
+ }
8503
8454
  }
8504
8455
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentContentViewerComponent, deps: [{ token: ExcelParserService }, { token: CsvParserService }, { token: DocumentHttpService }, { token: DocumentZoomService }, { token: i5$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
8505
8456
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DocumentContentViewerComponent, isStandalone: false, selector: "document-content-viewer", inputs: { documentUrl: "documentUrl", contentType: "contentType", documentName: "documentName", selectedDocument: "selectedDocument", contextId: "contextId", isFormHide: "isFormHide" }, host: { listeners: { "wheel": "onWheel($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-content-viewer-container\">\n @if(documentUrl && contentType){\n <!-- Zoom Controls -->\n <div class=\"zoom-controls-wrapper\">\n <document-zoom-controls [selectedDocument]=\"selectedDocument\" [contextId]=\"contextId\" [isFormHide]=\"isFormHide\">\n </document-zoom-controls>\n </div>\n\n <!-- PDF Viewer -->\n @if(isPdf){\n <div class=\"pdf-container\">\n <pdf-viewer [src]=\"documentUrl\" [rotation]=\"0\" [original-size]=\"false\" [show-all]=\"true\" [fit-to-page]=\"false\"\n [zoom]=\"currentZoom / 100\" [zoom-scale]=\"'page-width'\" [stick-to-page]=\"false\" [render-text]=\"true\"\n [external-link-target]=\"'blank'\" [autoresize]=\"true\" [show-borders]=\"false\"\n style=\"width: 100%; height: 100%\"></pdf-viewer>\n </div>\n }\n\n <!-- Image Viewer -->\n @else if(isImage){\n <div class=\"image-container\">\n <img [src]=\"documentUrl\" [alt]=\"documentName || 'Document Image'\" class=\"document-image\"\n [style.transform]=\"'scale(' + (currentZoom / 100) + ')'\" [style.transform-origin]=\"'center center'\" />\n </div>\n }\n\n <!-- Excel Files -->\n @else if(isExcel){\n <div class=\"excel-container\">\n @if(isLoadingExcel){\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem; color: #3b82f6;\"></i>\n <p>Loading Excel file...</p>\n </div>\n </div>\n }@else if(excelError){\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"pi pi-exclamation-triangle\" style=\"font-size: 3rem; color: #ef4444;\"></i>\n <h4>Error Loading Excel File</h4>\n <p>{{ excelError }}</p>\n <div class=\"error-actions\">\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\n <i class=\"pi pi-download\"></i>\n Download Instead\n </button>\n </div>\n </div>\n </div>\n }\n @else if(excelData){\n <div class=\"excel-container\">\n <div class=\"excel-zoom-wrapper\" [class.zoomed]=\"currentZoom !== 100\" (wheel)=\"onWheel($event)\">\n <ngx-doc-viewer [url]=\"documentUrl\" viewer=\"office\" style=\"width:100%;height:97%;\"></ngx-doc-viewer>\n <!-- Invisible overlay to capture wheel events over document content -->\n <div class=\"wheel-capture-overlay\" (wheel)=\"onWheel($event)\"></div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Word Files -->\n @else if(isWord){\n <div class=\"docx-container\">\n <div class=\"doc-viewer-wrapper\" [class.zoomed]=\"currentZoom !== 100\" (wheel)=\"onWheel($event)\">\n <ngx-doc-viewer [url]=\"documentUrl\" viewer=\"office\" style=\"width:100%;height:97%;\"></ngx-doc-viewer>\n <div class=\"wheel-capture-overlay\" (wheel)=\"onWheel($event)\"></div>\n </div>\n </div>\n }\n\n <!-- CSV Files -->\n @else if(isCsv){\n <div class=\"csv-container\">\n @if(isLoadingCsv){\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem; color: #3b82f6;\"></i>\n <p>Loading CSV file...</p>\n </div>\n </div>\n }@else if(csvError){\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"pi pi-exclamation-triangle\" style=\"font-size: 3rem; color: #ef4444;\"></i>\n <h4>Error Loading CSV File</h4>\n <p>{{ csvError }}</p>\n <div class=\"error-actions\">\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\n <i class=\"pi pi-download\"></i>\n Download Instead\n </button>\n </div>\n </div>\n </div>\n }\n @else if(csvData){\n <div class=\"csv-content\">\n <div class=\"csv-header\">\n <div class=\"csv-info\">\n <p>{{ documentName || 'CSV File' }}</p>\n <span class=\"csv-stats\">\n {{ csvData.totalRows }} rows \u00D7 {{ csvData.totalColumns }} columns\n </span>\n </div>\n </div>\n\n <div class=\"csv-table-container\" [style.transform-origin]=\"'center center'\" (wheel)=\"onWheel($event)\">\n <p-table [value]=\"safeCsvStyledData\" [tableStyle]=\"{'min-width': '100%'}\" [scrollable]=\"true\"\n scrollHeight=\"67vh\" class=\"csv-table\">\n <ng-template pTemplate=\"body\" let-row>\n <tr>\n <ng-container *ngFor=\"let cell of row.cells; trackBy: trackByCell\">\n <td [ngClass]=\"{'csv-header-cell': cell.isHeader}\">\n {{ cell.value }}\n </td>\n </ng-container>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Email Files -->\n @else if(isEmail){\n <div class=\"email-container\">\n @if(isLoadingEmail){\n <div class=\"loading-container text-center m-1/2\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem;\"></i>\n <p>Opening email...</p>\n </div>\n }\n @else if(isEmailAsPdf && emailPdfUrl){\n <!-- Render PDF when email is converted -->\n <pdf-viewer [src]=\"emailPdfUrl\" [rotation]=\"0\" [original-size]=\"false\" [show-all]=\"true\" [fit-to-page]=\"false\"\n [zoom]=\"currentZoom/100\" [zoom-scale]=\"'page-width'\" [stick-to-page]=\"false\" [render-text]=\"true\"\n [external-link-target]=\"'blank'\" [autoresize]=\"true\" [show-borders]=\"false\"\n style=\"width: 100%; height: 82vh;\"></pdf-viewer>\n }\n @else if(emailError){\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"pi pi-exclamation-circle\" style=\"font-size: 2rem; color: #ef4444;\"></i>\n <h4>Unable to Preview Email</h4>\n <p>{{ emailError }}</p>\n <div class=\"error-actions\">\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\n <i class=\"pi pi-download\"></i>\n Download\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- OpenDocument Files -->\n @else if(isOpenDocument){\n <div class=\"docx-container\">\n <div class=\"doc-viewer-wrapper\" [class.zoomed]=\"currentZoom !== 100\" (wheel)=\"onWheel($event)\">\n <ngx-doc-viewer [url]=\"documentUrl\" viewer=\"office\" style=\"width:100%;height:800px;\"></ngx-doc-viewer>\n <!-- Invisible overlay to capture wheel events over document content -->\n <div class=\"wheel-capture-overlay\" (wheel)=\"onWheel($event)\"></div>\n </div>\n </div>\n }\n\n <!-- Unsupported Files -->\n @else if(isUnsupported){\n <div class=\"unsupported-document-container\">\n <div class=\"document-preview\">\n <div class=\"document-icon\">\n <i [class]=\"documentIcon\"></i>\n </div>\n <div class=\"document-info\">\n <h4>Unsupported Document Type</h4>\n <p>{{ documentName || 'Document' }}</p>\n <p class=\"document-note\">This document type ({{ contentType }}) is not supported for preview. Please download to\n view.</p>\n </div>\n <div class=\"document-actions\">\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\n <i class=\"pi pi-download\"></i>\n Download\n </button>\n <button type=\"button\" class=\"p-button p-button-outlined p-button-sm\" (click)=\"openInNewTab()\">\n <i class=\"pi pi-external-link\"></i>\n Open\n </button>\n </div>\n </div>\n </div>\n }\n }\n @else {\n <div class=\"no-document-container\">\n <div class=\"no-document-content\">\n <i class=\"pi pi-file-o\" style=\"font-size: 3rem; color: #6b7280;\"></i>\n <h4>No Document Uploaded</h4>\n <p>Please Upload a document to view its content.</p>\n </div>\n </div>\n }\n</div>", styles: [".document-content-viewer-container{height:100%;width:100%;display:flex;flex-direction:column;background:#f8f9fa;border-radius:8px;overflow:auto}.document-content-viewer-container .zoom-controls-wrapper{position:sticky;top:0;z-index:10;background:#f8f9faf2;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid #e5e7eb;justify-content:space-between;align-items:center;border-radius:10px}.document-content-viewer-container .docx-container{overflow:auto}.document-content-viewer-container .email-container{width:100%;height:100%;border-radius:8px;overflow:hidden}.document-content-viewer-container .email-container ::ng-deep .ng2-pdf-viewer-container{height:82%!important;overflow:auto}.document-content-viewer-container .pdf-container{width:100%;height:100%;border-radius:8px;overflow:hidden}.document-content-viewer-container .pdf-container ::ng-deep .ng2-pdf-viewer-container{height:100%;overflow:auto}.document-content-viewer-container .pdf-container ::ng-deep .ng2-pdf-viewer-container::-webkit-scrollbar{width:12px;height:12px}.document-content-viewer-container .pdf-container ::ng-deep .ng2-pdf-viewer-container::-webkit-scrollbar-track{background:#f1f1f1;border-radius:6px}.document-content-viewer-container .pdf-container ::ng-deep .ng2-pdf-viewer-container::-webkit-scrollbar-thumb{background:#888;border-radius:6px}.document-content-viewer-container .pdf-container ::ng-deep .ng2-pdf-viewer-container::-webkit-scrollbar-thumb:hover{background:#555}.document-content-viewer-container .pdf-container ::ng-deep .ng2-pdf-viewer-container{scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.document-content-viewer-container .image-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:1rem;overflow:auto}.document-content-viewer-container .image-container .document-image{max-width:100%;max-height:100%;object-fit:contain;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a;transition:transform .2s ease-in-out}.document-content-viewer-container .excel-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;border-radius:8px;overflow:auto}.document-content-viewer-container .excel-container .loading-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.document-content-viewer-container .excel-container .loading-container .loading-content{text-align:center;color:#6b7280}.document-content-viewer-container .excel-container .loading-container .loading-content i{margin-bottom:1rem;display:block}.document-content-viewer-container .excel-container .loading-container .loading-content p{margin:0;color:#9ca3af;font-size:.875rem}.document-content-viewer-container .excel-container .error-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.document-content-viewer-container .excel-container .error-container .error-content{text-align:center;color:#6b7280;max-width:400px}.document-content-viewer-container .excel-container .error-container .error-content i{margin-bottom:1rem;display:block}.document-content-viewer-container .excel-container .error-container .error-content h4{margin:0 0 .5rem;color:#dc2626;font-size:1.25rem;font-weight:600}.document-content-viewer-container .excel-container .error-container .error-content p{margin:0 0 1.5rem;color:#6b7280;font-size:.875rem}.document-content-viewer-container .excel-container .error-container .error-content .error-actions{display:flex;justify-content:center}.document-content-viewer-container .excel-container .excel-viewer{width:100%;height:100%;display:flex;flex-direction:column}.document-content-viewer-container .excel-container .excel-viewer .excel-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;background:#f8fafc;border-bottom:1px solid #e2e8f0}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-info{display:flex;align-items:center;gap:1rem}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-info i{font-size:2rem;color:#10b981}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-info .excel-details h4{margin:0 0 .25rem;color:#1f2937;font-size:1.125rem;font-weight:600}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-info .excel-details p{margin:0;color:#6b7280;font-size:.875rem}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-actions{display:flex;gap:.5rem}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-actions .p-button.p-button-sm{padding:.375rem .75rem;font-size:.75rem}.document-content-viewer-container .excel-container .excel-viewer .excel-content{flex:1;display:flex;flex-direction:column;padding:1rem;background:#fafafa;overflow:hidden}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation{display:flex;align-items:center;gap:.5rem;margin-bottom:1rem;padding:.5rem;background:#fff;border-radius:6px;border:1px solid #e5e7eb}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation .sheet-label{font-size:.875rem;font-weight:500;color:#6b7280;margin-right:.5rem}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation .sheet-tab{padding:.375rem .75rem;border:1px solid #d1d5db;background:#fff;border-radius:4px;font-size:.75rem;color:#6b7280;cursor:pointer;transition:all .2s}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation .sheet-tab:hover{background:#f3f4f6;border-color:#9ca3af}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation .sheet-tab.active{background:#10b981;color:#fff;border-color:#10b981}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container{flex:1;overflow:auto;background:#fff;border-radius:6px;border:1px solid #e5e7eb;margin-bottom:1rem;min-width:100%;position:relative;min-height:300px;overflow-x:auto;overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container::-webkit-scrollbar{display:none}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table{width:100%;min-width:max-content;border-collapse:collapse;font-size:.875rem;table-layout:auto;border:2px solid #e5e7eb;word-wrap:break-word;white-space:nowrap}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table th,.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table td{padding:.5rem .75rem;text-align:left;border-bottom:1px solid #f3f4f6;border-right:1px solid #f3f4f6;min-width:80px;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:normal;position:relative;box-sizing:border-box;vertical-align:top}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table td:empty:after{content:\"\";display:block;min-height:1.5rem}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table th:last-child,.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table td:last-child{border-right:1px solid #e5e7eb}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table th:first-child,.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table td:first-child{border-left:1px solid #e5e7eb}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table .empty-cell{background-color:#fafafa;color:#9ca3af;font-style:italic;border:1px solid #e5e7eb}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table tr{border:1px solid #e5e7eb}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table th{background:#f8fafc;font-weight:600;color:#374151;position:sticky;top:0;z-index:10;border-bottom:2px solid #e5e7eb}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table td{color:#6b7280;background:#fff}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table td:first-child{font-weight:500;color:#374151}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table tr:hover td{background:#f9fafb}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table tbody tr:last-child td{border-bottom:none}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-info-bar{display:flex;align-items:center;gap:1.5rem;padding:.75rem;background:#fff;border-radius:6px;border:1px solid #e5e7eb;font-size:.75rem}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-info-bar .info-item{display:flex;align-items:center;gap:.5rem;color:#6b7280}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-info-bar .info-item i{color:#10b981;font-size:.875rem}.document-content-viewer-container .office-document-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.document-content-viewer-container .office-document-container .document-preview{background:#fff;border-radius:12px;padding:2rem;text-align:center;box-shadow:0 10px 15px -3px #0000001a;max-width:400px;width:100%}.document-content-viewer-container .office-document-container .document-preview .document-icon{margin-bottom:1.5rem}.document-content-viewer-container .office-document-container .document-preview .document-icon i{font-size:4rem;color:#3b82f6}.document-content-viewer-container .office-document-container .document-preview .document-info{margin-bottom:2rem}.document-content-viewer-container .office-document-container .document-preview .document-info h4{margin:0 0 .5rem;color:#1f2937;font-size:1.25rem;font-weight:600}.document-content-viewer-container .office-document-container .document-preview .document-info p{margin:.25rem 0;color:#6b7280;font-size:.875rem}.document-content-viewer-container .office-document-container .document-preview .document-info p.document-note{color:#9ca3af;font-style:italic;margin-top:.75rem}.document-content-viewer-container .office-document-container .document-preview .document-actions{display:flex;gap:.75rem;justify-content:center;flex-wrap:wrap}.document-content-viewer-container .office-document-container .document-preview .document-actions .p-button{min-width:120px}.document-content-viewer-container .office-document-container .document-preview .document-actions .p-button.p-button-sm{padding:.5rem 1rem;font-size:.875rem}.document-content-viewer-container .unsupported-document-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.document-content-viewer-container .unsupported-document-container .document-preview{background:#fff;border-radius:12px;padding:2rem;text-align:center;box-shadow:0 10px 15px -3px #0000001a;max-width:400px;width:100%;border:2px solid #fbbf24}.document-content-viewer-container .unsupported-document-container .document-preview .document-icon{margin-bottom:1.5rem}.document-content-viewer-container .unsupported-document-container .document-preview .document-icon i{font-size:4rem;color:#f59e0b}.document-content-viewer-container .unsupported-document-container .document-preview .document-info{margin-bottom:2rem}.document-content-viewer-container .unsupported-document-container .document-preview .document-info h4{margin:0 0 .5rem;color:#92400e;font-size:1.25rem;font-weight:600}.document-content-viewer-container .unsupported-document-container .document-preview .document-info p{margin:.25rem 0;color:#6b7280;font-size:.875rem}.document-content-viewer-container .unsupported-document-container .document-preview .document-info p.document-note{color:#d97706;font-style:italic;margin-top:.75rem;background:#fef3c7;padding:.5rem;border-radius:6px;border:1px solid #fde68a}.document-content-viewer-container .unsupported-document-container .document-preview .document-actions{display:flex;gap:.75rem;justify-content:center;flex-wrap:wrap}.document-content-viewer-container .unsupported-document-container .document-preview .document-actions .p-button{min-width:120px}.document-content-viewer-container .unsupported-document-container .document-preview .document-actions .p-button.p-button-sm{padding:.5rem 1rem;font-size:.875rem}.document-content-viewer-container .no-document-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.document-content-viewer-container .no-document-container .no-document-content{text-align:center;color:#6b7280}.document-content-viewer-container .no-document-container .no-document-content i{margin-bottom:1rem;display:block}.document-content-viewer-container .no-document-container .no-document-content h4{margin:0 0 .5rem;color:#374151;font-size:1.25rem;font-weight:600}.document-content-viewer-container .no-document-container .no-document-content p{margin:0;color:#9ca3af;font-size:.875rem}@media (max-width: 768px){.document-content-viewer-container .office-document-container,.document-content-viewer-container .unsupported-document-container{padding:1rem}.document-content-viewer-container .office-document-container .document-preview,.document-content-viewer-container .unsupported-document-container .document-preview{padding:1.5rem;max-width:100%}.document-content-viewer-container .office-document-container .document-preview .document-icon i,.document-content-viewer-container .unsupported-document-container .document-preview .document-icon i{font-size:3rem}.document-content-viewer-container .office-document-container .document-preview .document-actions,.document-content-viewer-container .unsupported-document-container .document-preview .document-actions{flex-direction:column;align-items:center}.document-content-viewer-container .office-document-container .document-preview .document-actions .p-button,.document-content-viewer-container .unsupported-document-container .document-preview .document-actions .p-button{width:100%;max-width:200px}.document-content-viewer-container .image-container{padding:.5rem}.document-content-viewer-container .excel-container .excel-viewer .excel-header{flex-direction:column;gap:1rem;padding:1rem}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-info{justify-content:center}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-actions{justify-content:center;width:100%}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-actions .p-button{flex:1;max-width:150px}.document-content-viewer-container .excel-container .excel-viewer .excel-content{padding:.5rem}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation{flex-wrap:wrap;gap:.25rem}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation .sheet-tab{font-size:.7rem;padding:.25rem .5rem}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table{font-size:.75rem}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table th,.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table td{padding:.25rem .5rem;min-width:80px;max-width:150px}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-info-bar{flex-wrap:wrap;gap:1rem;font-size:.7rem}}@media (prefers-color-scheme: dark){.document-content-viewer-container{background:#1f2937}.document-content-viewer-container .office-document-container .document-preview,.document-content-viewer-container .unsupported-document-container .document-preview{background:#374151;color:#f9fafb}.document-content-viewer-container .office-document-container .document-preview .document-info h4,.document-content-viewer-container .unsupported-document-container .document-preview .document-info h4{color:#f9fafb}.document-content-viewer-container .office-document-container .document-preview .document-info p,.document-content-viewer-container .unsupported-document-container .document-preview .document-info p{color:#d1d5db}.document-content-viewer-container .office-document-container .document-preview .document-info p.document-note,.document-content-viewer-container .unsupported-document-container .document-preview .document-info p.document-note{color:#9ca3af;background:#4b5563;border-color:#6b7280}.document-content-viewer-container .excel-container{background:#374151}.document-content-viewer-container .excel-container .excel-viewer .excel-header{background:#4b5563;border-color:#6b7280}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-info .excel-details h4{color:#f9fafb}.document-content-viewer-container .excel-container .excel-viewer .excel-header .excel-info .excel-details p{color:#d1d5db}.document-content-viewer-container .excel-container .excel-viewer .excel-content{background:#374151}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation{background:#4b5563;border-color:#6b7280}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation .sheet-tab{background:#4b5563;border-color:#6b7280;color:#d1d5db}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation .sheet-tab:hover{background:#6b7280;border-color:#9ca3af}.document-content-viewer-container .excel-container .excel-viewer .excel-content .sheet-navigation .sheet-tab.active{background:#10b981;color:#fff;border-color:#10b981}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container{background:#4b5563;border-color:#6b7280}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table th{background:#6b7280;color:#f9fafb;border-color:#9ca3af}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table td{background:#4b5563;color:#d1d5db;border-color:#6b7280}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table td:first-child{color:#f9fafb}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-table-container .excel-table tr:hover td{background:#6b7280}.document-content-viewer-container .excel-container .excel-viewer .excel-content .excel-info-bar{background:#4b5563;border-color:#6b7280;color:#d1d5db}.document-content-viewer-container .no-document-container .no-document-content{color:#9ca3af}.document-content-viewer-container .no-document-container .no-document-content h4{color:#f9fafb}.document-content-viewer-container .no-document-container .no-document-content p{color:#d1d5db}}.excel-table{border-collapse:collapse;width:100%;font-size:.875rem}.excel-table th,.excel-table td{padding:.5rem;border:1px solid #e2e8f0;text-align:left;vertical-align:top;min-width:80px}.excel-table th[style*=background-color]:not([style*=color]),.excel-table td[style*=background-color]:not([style*=color]){color:#1f2937}.excel-table th[style*=\"font-weight: bold\"],.excel-table td[style*=\"font-weight: bold\"]{font-weight:600}.excel-table th[style*=\"font-style: italic\"],.excel-table td[style*=\"font-style: italic\"]{font-style:italic}.excel-table th{background-color:#f8fafc;font-weight:600;color:#475569;position:sticky;top:0;z-index:10}.excel-table td{background-color:#fff}.excel-table td.empty-cell{background-color:#f8fafc;color:#9ca3af}.excel-table tbody tr:hover td{background-color:#f1f5f9}.excel-table tbody tr:hover td[style*=background-color]{opacity:.8}.debug-info{margin-top:1rem;padding:1rem;background-color:#fef3c7;border:1px solid #f59e0b;border-radius:8px}.debug-info summary{cursor:pointer;font-weight:600;color:#d97706;margin-bottom:.5rem}.debug-info summary:hover{color:#b45309}.debug-info .debug-content{margin-top:.5rem}.debug-info .debug-content p{margin:.5rem 0;color:#92400e}.debug-info .debug-content ul{margin:.5rem 0;padding-left:1.5rem;color:#92400e}.debug-info .debug-content li{margin:.25rem 0}.debug-info .debug-content button{margin-top:.5rem}.docx-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;overflow:hidden}.docx-container .loading-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.docx-container .loading-container .loading-content{text-align:center;color:#6b7280}.docx-container .loading-container .loading-content i{margin-bottom:1rem;display:block}.docx-container .loading-container .loading-content p{margin:0;color:#9ca3af;font-size:.875rem}.docx-container .error-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.docx-container .error-container .error-content{text-align:center;color:#6b7280;max-width:400px}.docx-container .error-container .error-content i{margin-bottom:1rem;display:block}.docx-container .error-container .error-content h4{margin:0 0 .5rem;color:#dc2626;font-size:1.25rem;font-weight:600}.docx-container .error-container .error-content p{margin:0 0 1rem;color:#9ca3af;font-size:.875rem}.docx-container .error-container .error-content .error-actions{margin-top:1rem}.docx-container .docx-viewer{width:100%;height:100%;display:flex;flex-direction:column;background:#fff}.docx-container .docx-viewer .docx-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;border-bottom:1px solid #e5e7eb;background-color:#f9fafb}.docx-container .docx-viewer .docx-header .docx-info{display:flex;align-items:center;gap:1rem}.docx-container .docx-viewer .docx-header .docx-info i{font-size:2rem;color:#2563eb}.docx-container .docx-viewer .docx-header .docx-info .docx-details h4{margin:0 0 .25rem;font-size:1.125rem;font-weight:600;color:#111827}.docx-container .docx-viewer .docx-header .docx-info .docx-details p{margin:0 0 .125rem;font-size:.875rem;color:#6b7280}.docx-container .docx-viewer .docx-header .docx-info .docx-details .document-title{font-weight:500;color:#374151;font-size:.875rem}.docx-container .docx-viewer .docx-header .docx-info .docx-details .document-author{font-style:italic;color:#6b7280;font-size:.75rem}.docx-container .docx-viewer .docx-header .docx-actions{display:flex;gap:.5rem}.docx-container .docx-viewer .docx-content{flex:1;overflow:auto;padding:1.5rem}.docx-container .docx-viewer .docx-content .docx-stats{display:flex;flex-wrap:wrap;gap:1rem;margin-bottom:1.5rem;padding:1rem;background-color:#f8fafc;border-radius:8px;border:1px solid #e2e8f0}.docx-container .docx-viewer .docx-content .docx-stats .stat-item{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background-color:#fff;border-radius:6px;border:1px solid #e2e8f0;font-size:.75rem;color:#475569;font-weight:500}.docx-container .docx-viewer .docx-content .docx-stats .stat-item i{color:#64748b}.docx-container .docx-viewer .docx-content .docx-content-body{line-height:1.6;color:#1f2937}.docx-container .docx-viewer .docx-content .docx-content-body .docx-paragraph{margin:0 0 1rem;text-align:justify}.docx-container .docx-viewer .docx-content .docx-content-body .docx-heading{margin:1.5rem 0 1rem;font-weight:600;color:#111827;line-height:1.3}.docx-container .docx-viewer .docx-content .docx-content-body .docx-heading.docx-h1{font-size:1.875rem;border-bottom:2px solid #e5e7eb;padding-bottom:.5rem}.docx-container .docx-viewer .docx-content .docx-content-body .docx-heading.docx-h2{font-size:1.5rem;border-bottom:1px solid #e5e7eb;padding-bottom:.25rem}.docx-container .docx-viewer .docx-content .docx-content-body .docx-heading.docx-h3{font-size:1.25rem}.docx-container .docx-viewer .docx-content .docx-content-body .docx-heading.docx-h4,.docx-container .docx-viewer .docx-content .docx-content-body .docx-heading.docx-h5,.docx-container .docx-viewer .docx-content .docx-content-body .docx-heading.docx-h6{font-size:1.125rem}.docx-container .docx-viewer .docx-content .docx-content-body .docx-table{width:100%;margin:1rem 0;border-collapse:collapse;border:1px solid #e5e7eb;background-color:#fff}.docx-container .docx-viewer .docx-content .docx-content-body .docx-table .docx-header{background-color:#f8fafc;font-weight:600;color:#374151}.docx-container .docx-viewer .docx-content .docx-content-body .docx-table .docx-cell,.docx-container .docx-viewer .docx-content .docx-content-body .docx-table .docx-header{padding:.75rem;border:1px solid #e5e7eb;text-align:left;vertical-align:top}.docx-container .docx-viewer .docx-content .docx-content-body .docx-table .docx-row:hover{background-color:#f9fafb}.docx-container .docx-viewer .docx-content .docx-content-body .docx-list{margin:1rem 0;padding-left:1.5rem}.docx-container .docx-viewer .docx-content .docx-content-body .docx-list.docx-ul{list-style-type:disc}.docx-container .docx-viewer .docx-content .docx-content-body .docx-list.docx-ol{list-style-type:decimal}.docx-container .docx-viewer .docx-content .docx-content-body .docx-list .docx-list-item{margin:.5rem 0;line-height:1.5}.docx-container .docx-viewer .docx-content .docx-content-body .docx-image{max-width:100%;height:auto;border-radius:6px;box-shadow:0 2px 4px #0000001a;margin:1rem 0}.docx-container .docx-viewer .docx-content .docx-content-body blockquote{margin:1rem 0;padding:1rem 1.5rem;border-left:4px solid #3b82f6;background-color:#f8fafc;font-style:italic;color:#374151}.docx-container .docx-viewer .docx-content .docx-content-body pre,.docx-container .docx-viewer .docx-content .docx-content-body code{background-color:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:.5rem;font-family:Courier New,monospace;font-size:.875rem;color:#1e293b;overflow-x:auto}.docx-container .docx-viewer .docx-content .docx-content-body pre{padding:1rem;margin:1rem 0}.docx-container .docx-viewer .docx-content .docx-content-body a{color:#2563eb;text-decoration:none}.docx-container .docx-viewer .docx-content .docx-content-body a:hover{text-decoration:underline}.docx-container .docx-viewer .docx-content .docx-content-body em,.docx-container .docx-viewer .docx-content .docx-content-body i{font-style:italic}.docx-container .docx-viewer .docx-content .docx-content-body strong,.docx-container .docx-viewer .docx-content .docx-content-body b{font-weight:600}.docx-container .docx-viewer .docx-content .docx-content-body hr{border:none;border-top:1px solid #e5e7eb;margin:2rem 0}.word-loading-container{display:flex;align-items:center;justify-content:center;min-height:400px;width:100%;background-color:#f9fafb;border-radius:8px}.word-loading-container .loading-content{text-align:center}.word-loading-container .loading-content i{margin-bottom:1rem;display:block;font-size:2rem;color:#3b82f6}.word-loading-container .loading-content p{margin:0;color:#6b7280;font-size:1rem;font-weight:500}.docx-container{min-height:400px;overflow:auto}.doc-viewer-wrapper{transition:transform .2s ease-in-out;overflow:auto;position:relative;transform-origin:center center;height:100%;scroll-behavior:smooth}.doc-viewer-wrapper .wheel-capture-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:transparent;z-index:5;pointer-events:auto}.doc-viewer-wrapper .wheel-capture-overlay:active{pointer-events:none}.doc-viewer-wrapper ngx-doc-viewer ::ng-deep iframe{transition:transform .2s ease-in-out;transform-origin:top left;border:none;min-width:100%;min-height:100%}.excel-zoom-wrapper{overflow:auto;position:relative;height:100%;width:100%;scroll-behavior:smooth}.excel-zoom-wrapper .wheel-capture-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:transparent;z-index:5;pointer-events:auto}.excel-zoom-wrapper .wheel-capture-overlay:active{pointer-events:none}.excel-zoom-wrapper:not(.zoomed){display:flex;align-items:center;justify-content:center}.excel-zoom-wrapper.zoomed{overflow:auto;display:block}.excel-zoom-wrapper ngx-doc-viewer{transition:transform .2s ease-in-out;transform-origin:center center;display:block;width:100%;height:100%}.excel-zoom-wrapper ngx-doc-viewer ::ng-deep iframe{transition:transform .2s ease-in-out;transform-origin:top left;border:none;min-width:100%;min-height:100%}ngx-doc-viewer{display:block;width:100%;height:100%}ngx-doc-viewer ::ng-deep iframe{transition:transform .2s ease-in-out;transform-origin:center center}.csv-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;border-radius:8px;overflow:auto}.csv-container *{scrollbar-width:none;-ms-overflow-style:none}.csv-container *::-webkit-scrollbar{display:none}.csv-container .loading-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.csv-container .loading-container .loading-content{text-align:center;color:#6b7280}.csv-container .loading-container .loading-content i{margin-bottom:1rem;display:block}.csv-container .loading-container .loading-content p{margin:0;color:#9ca3af;font-size:.875rem}.csv-container .error-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.csv-container .error-container .error-content{text-align:center;color:#6b7280;max-width:400px}.csv-container .error-container .error-content i{margin-bottom:1rem;display:block}.csv-container .error-container .error-content h4{margin:0 0 .5rem;color:#dc2626;font-size:1.25rem;font-weight:600}.csv-container .error-container .error-content p{margin:0 0 1rem;color:#6b7280;font-size:.875rem}.csv-container .error-container .error-content .error-actions{margin-top:1rem}.csv-container .csv-content{width:100%;height:98%;display:flex;flex-direction:column;padding:1rem}.csv-container .csv-content .csv-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.csv-container .csv-content .csv-header .csv-info h4{margin:0 0 .5rem;color:#111827;font-size:1.25rem;font-weight:600}.csv-container .csv-content .csv-header .csv-info p{margin:0 0 .25rem;color:#6b7280;font-size:.875rem}.csv-container .csv-content .csv-header .csv-info .csv-stats{display:inline-block;background-color:#f3f4f6;color:#6b7280;font-size:.75rem;padding:.25rem .5rem;border-radius:4px;font-weight:500}.csv-container .csv-content .csv-header .csv-actions{display:flex;gap:.5rem}.csv-container .csv-content .csv-table-container{flex:1;overflow:auto;border-radius:6px;min-width:0;min-height:0;transition:transform .2s ease-in-out;scroll-behavior:smooth;transform-origin:center center;scrollbar-width:none;-ms-overflow-style:none}.csv-container .csv-content .csv-table-container::-webkit-scrollbar{display:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-wrapper{height:100%;scrollbar-width:none;-ms-overflow-style:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-wrapper::-webkit-scrollbar{display:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-scrollable-body{scrollbar-width:none;-ms-overflow-style:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-scrollable-body::-webkit-scrollbar{display:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-scrollable-header{scrollbar-width:none;-ms-overflow-style:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-scrollable-header::-webkit-scrollbar{display:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-scrollable-footer{scrollbar-width:none;-ms-overflow-style:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-scrollable-footer::-webkit-scrollbar{display:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-scrollbar-wrapper{scrollbar-width:none;-ms-overflow-style:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-scrollbar-wrapper::-webkit-scrollbar{display:none}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-table{border-collapse:collapse}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-thead>tr>th{background-color:#f8f9fa;border:1px solid #e5e7eb;padding:.75rem;font-weight:600;color:#374151;text-align:left;position:sticky;top:0;z-index:1;word-wrap:break-word;white-space:normal}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-thead>tr>th.csv-header-cell{background-color:#f1f5f9;font-weight:700;color:#1e293b}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-tbody>tr>td{border:1px solid #e5e7eb;padding:.75rem;color:#374151;vertical-align:top;word-wrap:break-word;white-space:normal}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-tbody>tr>td.csv-header-cell{background-color:#f1f5f9;font-weight:600;color:#1e293b}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-tbody>tr:nth-child(2n){background-color:#f9fafb}.csv-container .csv-content .csv-table-container .csv-table ::ng-deep .p-datatable-tbody>tr:hover{background-color:#f3f4f6}.csv-container .email-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;border-radius:8px;overflow:auto}.csv-container .email-container .loading-container{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center;color:#6b7280}.csv-container .email-container .loading-container i{margin-bottom:1rem}.csv-container .email-container .loading-container p{margin:0;color:#9ca3af;font-size:.875rem}.csv-container .email-container .error-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:2rem}.csv-container .email-container .error-container .error-content{text-align:center;max-width:400px}.csv-container .email-container .error-container .error-content i{margin-bottom:1rem}.csv-container .email-container .error-container .error-content h4{margin:0 0 .5rem;color:#111827;font-size:1.25rem}.csv-container .email-container .error-container .error-content p{margin:0 0 1.5rem;color:#6b7280;font-size:.875rem}.csv-container .email-container .error-container .error-content .error-actions{display:flex;justify-content:center;gap:.5rem}.csv-container .email-container .no-email-data{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center;color:#6b7280}.csv-container .email-container .no-email-data i{margin-bottom:1rem}.csv-container .email-container .no-email-data p{margin:0;color:#9ca3af;font-size:.875rem}.csv-container .email-container .email-viewer{display:flex;flex-direction:column;height:100%;overflow:hidden}.csv-container .email-container .email-viewer .email-header{position:relative;padding:1.5rem;border-bottom:2px solid #e5e7eb;background:linear-gradient(to bottom,#fff,#f9fafb)}.csv-container .email-container .email-viewer .email-header .email-actions{position:absolute;top:1rem;right:1rem;display:flex;gap:.5rem}.csv-container .email-container .email-viewer .email-header .email-subject{margin:0 0 1rem;padding-right:100px;color:#111827;font-size:1.5rem;font-weight:600;line-height:1.4;word-break:break-word}.csv-container .email-container .email-viewer .email-header .email-metadata{display:flex;flex-direction:column;gap:.5rem}.csv-container .email-container .email-viewer .email-header .email-metadata .email-field{display:flex;gap:.75rem;font-size:.875rem;line-height:1.5}.csv-container .email-container .email-viewer .email-header .email-metadata .email-field .field-label{min-width:80px;color:#6b7280;font-weight:600}.csv-container .email-container .email-viewer .email-header .email-metadata .email-field .field-value{color:#374151;word-break:break-word;flex:1}.csv-container .email-container .email-viewer .email-header .email-metadata .email-field .field-value i{margin-right:.25rem;color:#6b7280}.csv-container .email-container .email-viewer .email-body-container{flex:1;overflow:auto;padding:1.5rem;background:#fff}.csv-container .email-container .email-viewer .email-body-container .email-body{max-width:100%;min-height:200px}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep p{margin:0 0 1rem;line-height:1.6}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep a{color:#3b82f6;text-decoration:none}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep a:hover{text-decoration:underline}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep img{max-width:100%;height:auto;border-radius:4px}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep table{border-collapse:collapse;width:100%;margin:1rem 0}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep table td,.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep table th{padding:.5rem;border:1px solid #e5e7eb}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep table th{background-color:#f9fafb;font-weight:600}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep blockquote{margin:1rem 0;padding-left:1rem;border-left:3px solid #e5e7eb;color:#6b7280}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep ul,.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep ol{margin:0 0 1rem;padding-left:1.5rem}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-html ::ng-deep li{margin:.25rem 0}.csv-container .email-container .email-viewer .email-body-container .email-body.email-body-text pre{margin:0;padding:1rem;background:#f9fafb;border:1px solid #e5e7eb;border-radius:6px;font-family:Courier New,Courier,monospace;font-size:.875rem;line-height:1.6;color:#374151;white-space:pre-wrap;word-break:break-word;overflow-x:auto}.csv-container .email-container .email-viewer .email-attachments{padding:1rem 1.5rem;border-top:1px solid #e5e7eb;background:#f9fafb}.csv-container .email-container .email-viewer .email-attachments h4{margin:0 0 .75rem;color:#374151;font-size:.875rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.csv-container .email-container .email-viewer .email-attachments .attachment-list{display:flex;flex-direction:column;gap:.5rem}.csv-container .email-container .email-viewer .email-attachments .attachment-list .attachment-item{display:flex;align-items:center;gap:.5rem;padding:.625rem .875rem;background:#fff;border:1px solid #e5e7eb;border-radius:6px;font-size:.875rem;color:#374151;transition:all .2s ease}.csv-container .email-container .email-viewer .email-attachments .attachment-list .attachment-item i{color:#6b7280;font-size:1rem}.csv-container .email-container .email-viewer .email-attachments .attachment-list .attachment-item span{word-break:break-word}.csv-container .email-container .email-viewer .email-attachments .attachment-list .attachment-item:hover{background:#f3f4f6;border-color:#d1d5db}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i8$1.PdfViewerComponent, selector: "pdf-viewer", inputs: ["src", "c-maps-url", "page", "render-text", "render-text-mode", "original-size", "show-all", "stick-to-page", "zoom", "zoom-scale", "rotation", "external-link-target", "autoresize", "fit-to-page", "show-borders"], outputs: ["after-load-complete", "page-rendered", "pages-initialized", "text-layer-rendered", "error", "on-progress", "pageChange"] }, { kind: "component", type: i9$2.NgxDocViewerComponent, selector: "ngx-doc-viewer", inputs: ["url", "queryParams", "viewerUrl", "googleCheckInterval", "googleMaxChecks", "disableContent", "googleCheckContentLoaded", "viewer", "overrideLocalhost"], outputs: ["loaded"] }, { kind: "component", type: i2$1.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "component", type: DocumentZoomControlsComponent, selector: "document-zoom-controls", inputs: ["selectedDocument", "contextId", "isFormHide"], outputs: ["documentNameUpdated"] }], encapsulation: i0.ViewEncapsulation.None });