cat-documents-ng 1.0.57 → 1.0.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Shared/services/session.service.d.ts +0 -10
- package/fesm2022/cat-documents-ng.mjs +77 -77
- package/fesm2022/cat-documents-ng.mjs.map +1 -1
- package/lib/document/components/document-search/document-search.component.d.ts +1 -8
- package/lib/document/services/document-http.service.d.ts +2 -2
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ import * as i2$1 from '@angular/common';
|
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import { firstValueFrom, of, catchError, throwError, EMPTY, tap, 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 { HttpParams, HttpClientModule
|
|
7
|
+
import { HttpHeaders, HttpParams, HttpClientModule } 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';
|
|
@@ -23,7 +23,7 @@ import * as i12 from 'primeng/checkbox';
|
|
|
23
23
|
import { CheckboxModule } from 'primeng/checkbox';
|
|
24
24
|
import * as i13 from 'primeng/radiobutton';
|
|
25
25
|
import { RadioButtonModule } from 'primeng/radiobutton';
|
|
26
|
-
import * as
|
|
26
|
+
import * as i7 from '@angular/forms';
|
|
27
27
|
import { FormsModule } from '@angular/forms';
|
|
28
28
|
import * as i15 from 'primeng/dropdown';
|
|
29
29
|
import { DropdownModule } from 'primeng/dropdown';
|
|
@@ -32,7 +32,7 @@ import * as i6 from 'primeng/inputtextarea';
|
|
|
32
32
|
import { InputTextareaModule } from 'primeng/inputtextarea';
|
|
33
33
|
import * as i4 from 'primeng/sidebar';
|
|
34
34
|
import { SidebarModule } from 'primeng/sidebar';
|
|
35
|
-
import * as i5
|
|
35
|
+
import * as i5 from 'primeng/messages';
|
|
36
36
|
import { MessagesModule } from 'primeng/messages';
|
|
37
37
|
import * as i9$2 from 'primeng/badge';
|
|
38
38
|
import { BadgeModule } from 'primeng/badge';
|
|
@@ -43,7 +43,7 @@ import { InputTextModule } from 'primeng/inputtext';
|
|
|
43
43
|
import * as i2$2 from 'primeng/table';
|
|
44
44
|
import { TableModule } from 'primeng/table';
|
|
45
45
|
import * as XLSX from 'xlsx';
|
|
46
|
-
import * as i5$
|
|
46
|
+
import * as i5$1 from '@angular/platform-browser';
|
|
47
47
|
import * as i8 from 'ng2-pdf-viewer';
|
|
48
48
|
import { PdfViewerModule } from 'ng2-pdf-viewer';
|
|
49
49
|
import * as i9$1 from 'ngx-doc-viewer';
|
|
@@ -1492,7 +1492,8 @@ class DocumentHttpService {
|
|
|
1492
1492
|
getFoldersData(contextId) {
|
|
1493
1493
|
if (!contextId)
|
|
1494
1494
|
return EMPTY;
|
|
1495
|
-
|
|
1495
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1496
|
+
return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}${URLS.FOLDERS}${contextId}`, { headers }).pipe(tap((folders) => {
|
|
1496
1497
|
this.documentStore.setFolders(folders);
|
|
1497
1498
|
}), catchError((error) => {
|
|
1498
1499
|
return throwError(() => new Error(error));
|
|
@@ -1505,7 +1506,8 @@ class DocumentHttpService {
|
|
|
1505
1506
|
* @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
|
|
1506
1507
|
*/
|
|
1507
1508
|
getDocumentCatagories(contextId) {
|
|
1508
|
-
|
|
1509
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1510
|
+
return this.http.get(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`, { headers })
|
|
1509
1511
|
.pipe(tap((response) => {
|
|
1510
1512
|
if (response && response.categories) {
|
|
1511
1513
|
this.documentStore.setDocumentCategories(response.categories);
|
|
@@ -1533,9 +1535,10 @@ class DocumentHttpService {
|
|
|
1533
1535
|
* Fetches a document by its path name and transforms the response for dropdown options.
|
|
1534
1536
|
* @param {string} documentId - The document ID to fetch the document.
|
|
1535
1537
|
* @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
|
|
1536
|
-
|
|
1538
|
+
*/
|
|
1537
1539
|
getAlertsByDocumentID(documentId) {
|
|
1538
|
-
|
|
1540
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1541
|
+
return this.http.get(`${this.apiUrl}${URLS.ALERT_BY_DOCUMENT_ID}${documentId}`, { headers }).pipe(tap((documentAlert) => {
|
|
1539
1542
|
this.documentStore.setDocumentAlert(documentAlert);
|
|
1540
1543
|
}), catchError((error) => {
|
|
1541
1544
|
return throwError(() => new Error(error));
|
|
@@ -1546,9 +1549,10 @@ class DocumentHttpService {
|
|
|
1546
1549
|
* @param {string} folderId - The folder ID to fetch the document.
|
|
1547
1550
|
* @param {string} contextId - The context ID to fetch the document.
|
|
1548
1551
|
* @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
|
|
1549
|
-
|
|
1552
|
+
*/
|
|
1550
1553
|
getDocumentByFolderID(folderId, contextId) {
|
|
1551
|
-
|
|
1554
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1555
|
+
return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD}/${URLS.PARENT_DOCUMENT_TYPE_ID}${folderId}${URLS.CONTEXT_ID}${contextId}`, { headers }).pipe(tap((records) => {
|
|
1552
1556
|
this.documentStore.set(records);
|
|
1553
1557
|
}), catchError((error) => {
|
|
1554
1558
|
return throwError(() => new Error(error));
|
|
@@ -1563,7 +1567,8 @@ class DocumentHttpService {
|
|
|
1563
1567
|
* @returns {Observable<DocumentModel>} An observable that emits the updated DocumentModel.
|
|
1564
1568
|
*/
|
|
1565
1569
|
updateDocumentName(documentId, payload) {
|
|
1566
|
-
|
|
1570
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1571
|
+
return this.http.put(`${this.apiUrl}${URLS.ALIAS_NAME}${documentId}`, payload, { headers }).pipe(catchError((error) => {
|
|
1567
1572
|
return throwError(() => new Error(error));
|
|
1568
1573
|
}));
|
|
1569
1574
|
}
|
|
@@ -1575,7 +1580,8 @@ class DocumentHttpService {
|
|
|
1575
1580
|
getUserListByContextId(contextId) {
|
|
1576
1581
|
if (!contextId)
|
|
1577
1582
|
return EMPTY;
|
|
1578
|
-
|
|
1583
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1584
|
+
return this.http.get(`${this.apiUrl}${URLS.USERLIST}${contextId}`, { headers }).pipe(tap((userList) => {
|
|
1579
1585
|
this.documentStore.setUserList(userList);
|
|
1580
1586
|
}), catchError((error) => {
|
|
1581
1587
|
return throwError(() => new Error(error));
|
|
@@ -1591,6 +1597,7 @@ class DocumentHttpService {
|
|
|
1591
1597
|
getStatusDocumentCount(applicationId, contextId = null, categoryId = null) {
|
|
1592
1598
|
if (!applicationId)
|
|
1593
1599
|
return EMPTY;
|
|
1600
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1594
1601
|
let url = `${this.apiUrl}${URLS.STATUS_DOCUMENT_COUNT}${applicationId}`;
|
|
1595
1602
|
let params = new HttpParams();
|
|
1596
1603
|
const contextParam = contextId || null;
|
|
@@ -1600,7 +1607,7 @@ class DocumentHttpService {
|
|
|
1600
1607
|
if (categoryId) {
|
|
1601
1608
|
params = params.set(SHARED.CATEGORY, categoryId);
|
|
1602
1609
|
}
|
|
1603
|
-
return this.http.get(url, { params }).pipe(tap((statusData) => {
|
|
1610
|
+
return this.http.get(url, { params, headers }).pipe(tap((statusData) => {
|
|
1604
1611
|
this.documentStore.setStatusData(statusData);
|
|
1605
1612
|
}), catchError((error) => {
|
|
1606
1613
|
return throwError(() => new Error(error));
|
|
@@ -1618,6 +1625,7 @@ class DocumentHttpService {
|
|
|
1618
1625
|
* @returns {Observable<any>} An observable that emits the filtered document data.
|
|
1619
1626
|
*/
|
|
1620
1627
|
getDocumentsBySelection(contextId, menuItem, userId, status, searchKey = null) {
|
|
1628
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1621
1629
|
let params = new HttpParams();
|
|
1622
1630
|
if (userId) {
|
|
1623
1631
|
params = params.set(SHARED.CONTEXT_ID, userId);
|
|
@@ -1628,7 +1636,7 @@ class DocumentHttpService {
|
|
|
1628
1636
|
if (searchKey) {
|
|
1629
1637
|
params = params.set(SHARED.SEARCH_KEY, searchKey);
|
|
1630
1638
|
}
|
|
1631
|
-
return this.http.get(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params }).pipe(tap((response) => {
|
|
1639
|
+
return this.http.get(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params, headers }).pipe(tap((response) => {
|
|
1632
1640
|
if (response.documents) {
|
|
1633
1641
|
this.documentStore.setDocumentList(response.documents);
|
|
1634
1642
|
}
|
|
@@ -1640,7 +1648,8 @@ class DocumentHttpService {
|
|
|
1640
1648
|
if (!documentId) {
|
|
1641
1649
|
return of([]);
|
|
1642
1650
|
}
|
|
1643
|
-
|
|
1651
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1652
|
+
return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers }).pipe(catchError((error) => {
|
|
1644
1653
|
return throwError(() => new Error(error));
|
|
1645
1654
|
}));
|
|
1646
1655
|
}
|
|
@@ -1652,7 +1661,8 @@ class DocumentHttpService {
|
|
|
1652
1661
|
getCategoriesBySource(source) {
|
|
1653
1662
|
if (!source)
|
|
1654
1663
|
return EMPTY;
|
|
1655
|
-
|
|
1664
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1665
|
+
return this.http.get(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`, { headers }).pipe(catchError((error) => {
|
|
1656
1666
|
return throwError(() => new Error(error));
|
|
1657
1667
|
}));
|
|
1658
1668
|
}
|
|
@@ -1664,7 +1674,8 @@ class DocumentHttpService {
|
|
|
1664
1674
|
getBrokerDocumentCatagoriesBySource(source) {
|
|
1665
1675
|
if (!source)
|
|
1666
1676
|
return EMPTY;
|
|
1667
|
-
|
|
1677
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1678
|
+
return this.http.get(`${this.apiUrl}${URLS.BROKER_DOCUMENT_CATAGORIES}${source}`, { headers }).pipe(catchError((error) => {
|
|
1668
1679
|
return throwError(() => new Error(error));
|
|
1669
1680
|
}));
|
|
1670
1681
|
}
|
|
@@ -1676,7 +1687,8 @@ class DocumentHttpService {
|
|
|
1676
1687
|
getBrokerDocumentTypesByCategoryId(categoryId) {
|
|
1677
1688
|
if (!categoryId)
|
|
1678
1689
|
return EMPTY;
|
|
1679
|
-
|
|
1690
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1691
|
+
return this.http.get(`${this.apiUrl}${URLS.BROKER_DOCUMENT_TYPES}${categoryId}`, { headers }).pipe(catchError((error) => {
|
|
1680
1692
|
return throwError(() => new Error(error));
|
|
1681
1693
|
}));
|
|
1682
1694
|
}
|
|
@@ -1688,7 +1700,8 @@ class DocumentHttpService {
|
|
|
1688
1700
|
getDocumentTypesByCategory(categoryId) {
|
|
1689
1701
|
if (!categoryId)
|
|
1690
1702
|
return EMPTY;
|
|
1691
|
-
|
|
1703
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1704
|
+
return this.http.get(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`, { headers }).pipe(catchError((error) => {
|
|
1692
1705
|
return throwError(() => new Error(error));
|
|
1693
1706
|
}));
|
|
1694
1707
|
}
|
|
@@ -1698,7 +1711,8 @@ class DocumentHttpService {
|
|
|
1698
1711
|
* @returns {Observable<any>} Observable that emits the upload response.
|
|
1699
1712
|
*/
|
|
1700
1713
|
uploadFile(formData) {
|
|
1701
|
-
|
|
1714
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1715
|
+
return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData, { headers }).pipe(catchError((error) => {
|
|
1702
1716
|
return throwError(() => new Error(error));
|
|
1703
1717
|
}));
|
|
1704
1718
|
}
|
|
@@ -1708,7 +1722,8 @@ class DocumentHttpService {
|
|
|
1708
1722
|
* @returns {Observable<any>} Observable that emits the save response.
|
|
1709
1723
|
*/
|
|
1710
1724
|
saveDocumentUpload(payload) {
|
|
1711
|
-
|
|
1725
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1726
|
+
return this.http.post(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload, { headers }).pipe(catchError((error) => {
|
|
1712
1727
|
return throwError(() => new Error(error));
|
|
1713
1728
|
}));
|
|
1714
1729
|
}
|
|
@@ -1723,7 +1738,8 @@ class DocumentHttpService {
|
|
|
1723
1738
|
const payload = {
|
|
1724
1739
|
statusUpdateDescription: statusUpdateDescription
|
|
1725
1740
|
};
|
|
1726
|
-
|
|
1741
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1742
|
+
return this.http.put(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload, { headers }).pipe(tap((response) => {
|
|
1727
1743
|
if (response && response.status) {
|
|
1728
1744
|
const normalizedStatus = this.normalizeStatus(response.status);
|
|
1729
1745
|
response.normalizedStatus = normalizedStatus;
|
|
@@ -1756,7 +1772,8 @@ class DocumentHttpService {
|
|
|
1756
1772
|
* @returns {Observable<any>} Observable that emits the delete response
|
|
1757
1773
|
*/
|
|
1758
1774
|
deleteDocument(documentId, contextId) {
|
|
1759
|
-
|
|
1775
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1776
|
+
return this.http.delete(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`, { headers }).pipe(tap(() => {
|
|
1760
1777
|
this.getDocumentCatagories(contextId).subscribe();
|
|
1761
1778
|
this.getUserListByContextId(contextId).subscribe();
|
|
1762
1779
|
this.getStatusDocumentCount(contextId).subscribe();
|
|
@@ -1772,8 +1789,10 @@ class DocumentHttpService {
|
|
|
1772
1789
|
* @returns {Observable<ArrayBuffer>} Observable that emits the file data as ArrayBuffer
|
|
1773
1790
|
*/
|
|
1774
1791
|
downloadExcelFile(documentUrl) {
|
|
1792
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1775
1793
|
return this.http.get(documentUrl, {
|
|
1776
|
-
responseType: 'arraybuffer'
|
|
1794
|
+
responseType: 'arraybuffer',
|
|
1795
|
+
headers: headers
|
|
1777
1796
|
}).pipe(catchError((error) => {
|
|
1778
1797
|
return throwError(() => new Error(error));
|
|
1779
1798
|
}));
|
|
@@ -1785,8 +1804,10 @@ class DocumentHttpService {
|
|
|
1785
1804
|
* @returns {Observable<string>} Observable that emits the file data as string
|
|
1786
1805
|
*/
|
|
1787
1806
|
downloadCsvFile(documentUrl) {
|
|
1807
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1788
1808
|
return this.http.get(documentUrl, {
|
|
1789
|
-
responseType: 'text'
|
|
1809
|
+
responseType: 'text',
|
|
1810
|
+
headers: headers
|
|
1790
1811
|
}).pipe(catchError((error) => {
|
|
1791
1812
|
return throwError(() => new Error(error));
|
|
1792
1813
|
}));
|
|
@@ -1799,8 +1820,10 @@ class DocumentHttpService {
|
|
|
1799
1820
|
downloadEmailFile(documentUrl) {
|
|
1800
1821
|
const isAzureBlobStorage = documentUrl.includes('.blob.core.windows.net');
|
|
1801
1822
|
if (isAzureBlobStorage) {
|
|
1823
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1802
1824
|
return this.http.get(documentUrl, {
|
|
1803
|
-
responseType: 'text'
|
|
1825
|
+
responseType: 'text',
|
|
1826
|
+
headers: headers
|
|
1804
1827
|
}).pipe(catchError((error) => {
|
|
1805
1828
|
return throwError(() => new Error('Failed to download email file. Please check if the file URL is valid and accessible.'));
|
|
1806
1829
|
}));
|
|
@@ -1812,7 +1835,8 @@ class DocumentHttpService {
|
|
|
1812
1835
|
}
|
|
1813
1836
|
}
|
|
1814
1837
|
documentRequest(payload) {
|
|
1815
|
-
|
|
1838
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1839
|
+
return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_REQUEST}`, payload, { headers }).pipe(catchError((error) => {
|
|
1816
1840
|
return throwError(() => new Error(error));
|
|
1817
1841
|
}));
|
|
1818
1842
|
}
|
|
@@ -1824,7 +1848,8 @@ class DocumentHttpService {
|
|
|
1824
1848
|
getValuationReportByContextId(contextId) {
|
|
1825
1849
|
if (!contextId)
|
|
1826
1850
|
return EMPTY;
|
|
1827
|
-
|
|
1851
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1852
|
+
return this.http.get(`${this.apiUrl}${URLS.VALUATION_REPORT}${contextId}`, { headers }).pipe(catchError((error) => {
|
|
1828
1853
|
// Return empty object if no data found or error occurs
|
|
1829
1854
|
return of(null);
|
|
1830
1855
|
}));
|
|
@@ -1837,9 +1862,11 @@ class DocumentHttpService {
|
|
|
1837
1862
|
convertEmailToPdf(documentUrl) {
|
|
1838
1863
|
if (!documentUrl)
|
|
1839
1864
|
return EMPTY;
|
|
1865
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
1840
1866
|
const payload = { documentUrl: documentUrl };
|
|
1841
1867
|
return this.http.post(`${this.apiUrl}${URLS.CONVERT_TO_PDF}`, payload, {
|
|
1842
|
-
responseType: 'blob'
|
|
1868
|
+
responseType: 'blob',
|
|
1869
|
+
headers: headers
|
|
1843
1870
|
}).pipe(catchError((error) => {
|
|
1844
1871
|
return throwError(() => new Error(error?.message || 'Failed to convert email to PDF'));
|
|
1845
1872
|
}));
|
|
@@ -2764,7 +2791,8 @@ class DocumentService {
|
|
|
2764
2791
|
* @returns {Observable<any>} Observable that emits the newly created document.
|
|
2765
2792
|
*/
|
|
2766
2793
|
create(entity) {
|
|
2767
|
-
|
|
2794
|
+
let headers = new HttpHeaders().set('Authorization', 'Bearer 3dfc8b40-5d0a-4129-ae9c-93dc34aff3ae');
|
|
2795
|
+
return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, entity, { headers }).pipe(tap((newEntity) => this.documentStore.add(newEntity)));
|
|
2768
2796
|
}
|
|
2769
2797
|
/**
|
|
2770
2798
|
* Fetches all documents from the backend.
|
|
@@ -4024,7 +4052,7 @@ class DocumentUploadComponent {
|
|
|
4024
4052
|
this.dataService.destroy();
|
|
4025
4053
|
}
|
|
4026
4054
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentUploadComponent, deps: [{ token: DocumentUploadService }, { token: DocumentService }, { token: i3.PrimeNGConfig }, { token: FileFormatService }, { token: i3.MessageService }, { token: i0.ChangeDetectorRef }, { token: DocumentUploadBusinessService }, { token: DocumentUploadFormService }, { token: DocumentUploadDataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4027
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentUploadComponent, isStandalone: false, selector: "lib-document-upload", inputs: { contextId: "contextId", isDocumentSaveBtnClicked: "isDocumentSaveBtnClicked", isDocumentSidebarClosed: "isDocumentSidebarClosed", isFormHide: "isFormHide", isMultiAttachmentHidden: "isMultiAttachmentHidden" }, outputs: { onFormValidationChange: "onFormValidationChange", onUploadSuccess: "onUploadSuccess", onFilesUploaded: "onFilesUploaded", hasUnsavedChangesChange: "hasUnsavedChangesChange", onFileRemoved: "onFileRemoved" }, viewQueries: [{ propertyName: "fileUploader", first: true, predicate: ["fileUploader"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"document-upload-container\">\r\n <!-- Assignment Section -->\r\n <div class=\"assignment-section\" *ngIf=\"!isFormHide\">\r\n <h4>Assign to Applicant(s) or Application <span class=\"text-red-500\">*</span> </h4>\r\n <div class=\"radio-group\">\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Applicant\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'applicant'\"\r\n ></p-radioButton>\r\n <label [for]=\"'applicant'\" class=\"radio-label\">Applicant(s) </label>\r\n </div>\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Application\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'application'\"\r\n ></p-radioButton>\r\n <label [for]=\"'application'\" class=\"radio-label\">Application</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Applicant Selection (only shown when Applicant is selected) -->\r\n <div class=\"applicant-section\" *ngIf=\"!isFormHide && selectedAssignmentType === 'Applicant'\">\r\n <h4>Select Applicant(s) <span class=\"text-red-500\">*</span></h4>\r\n <div class=\"grid\">\r\n <div \r\n *ngFor=\"let applicant of filteredApplicantList\" \r\n class=\"applicant-item col-12 md:col-6\"\r\n >\r\n <p-checkbox \r\n [value]=\"applicant._id\"\r\n [(ngModel)]=\"selectedApplicants\"\r\n [inputId]=\"'applicant-' + applicant._id\"\r\n (onChange)=\"onApplicantSelectionChange()\"\r\n ></p-checkbox>\r\n <label [for]=\"'applicant-' + applicant._id\" class=\"applicant-label\">\r\n {{ applicant.name }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Category Selection -->\r\n <div class=\"category-section\" *ngIf=\"!isFormHide\">\r\n <h4>Category <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"categoryOptions\"\r\n [(ngModel)]=\"selectedCategory\"\r\n placeholder=\"Select Category type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onCategoryChange()\"\r\n [disabled]=\"!categoryOptions.length\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- Document Type Selection -->\r\n <div class=\"document-type-section\" *ngIf=\"!isFormHide\">\r\n <h4>Document Type <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"documentTypeOptions\"\r\n [(ngModel)]=\"selectedDocumentType\"\r\n placeholder=\"Select Document type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onDocumentTypeChange()\"\r\n [disabled]=\"!documentTypeOptions.length || !selectedCategory\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- File Upload Section -->\r\n <div class=\"file-upload-section\">\r\n <h4>Upload Documents <span class=\"text-red-500\" *ngIf=\"!isFormHide\">*</span></h4>\r\n <div class=\"grid\">\r\n <div class=\"col-12 md:col-12\">\r\n <p-fileUpload \r\n #fileUploader \r\n [multiple]=\"true\" \r\n auto=\"true\" \r\n [accept]=\"getFileUploadAcceptString()\" \r\n maxFileSize=\"27262976\"\r\n (onSelect)=\"onSelectedFiles($event)\"\r\n >\r\n <ng-template pTemplate=\"header\" let-chooseCallback=\"chooseCallback\" let-clearCallback=\"clearCallback\">\r\n <div class=\"docHeader p-2 flex flex-wrap justify-content-between align-items-center flex-1 gap-2\">\r\n <div class=\"flex gap-2\">\r\n <p-button \r\n *ngIf=\"!isMultiAttachmentHidden\"\r\n (onClick)=\"choose($event, chooseCallback)\" \r\n icon=\"pi pi-images\" \r\n [rounded]=\"true\"\r\n [outlined]=\"true\" \r\n />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"content\" let-removeFileCallback=\"removeFileCallback\"\r\n let-removeUploadedFileCallback=\"removeUploadedFileCallback\">\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <div class=\"col-12 md:col-12 p-0\" *ngIf=\"uploadedFiles.length > 0\">\r\n <div *ngFor=\"let uploadedFile of uploadedFiles; let i = index\"\r\n class=\"m-0 flex flex-column align-items-center gap-1 mt-3\">\r\n <div class=\"col-12 md:col-12 p-0 flex documentInfo\">\r\n <div class=\"documentImage\">\r\n <img src=\"../../../../assets/images/document.png\" [alt]=\"uploadedFile.file.name\" width=\"45\" height=\"50\"\r\n class=\"object-contain\" />\r\n </div>\r\n <div class=\"flex w-full flex-column mt-2 ml-2\">\r\n <div class=\"flex justify-content-between\">\r\n <div style=\"font-weight: bold;font-size: 14px\">\r\n {{ uploadedFile.file.name }}\r\n </div>\r\n <i class=\"pi pi-times cursor-pointer\" (click)=\"handleDocumentRemove(uploadedFile.file,i)\"></i>\r\n </div>\r\n <div class=\"flex justify-content-between mt-1\">\r\n <div style=\"color: #676B89; font-size: 12px; color: green;\" class=\"pi pi-verified\"> \r\n {{ uploadedFile.formattedSize }}\r\n </div>\r\n <div class=\"white-space-nowrap\" style=\"color: #0F8BFD; font-family: 14px;\"> \r\n {{ uploadedFile.progress }} % \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <p-progressBar \r\n [value]=\"uploadedFile.progress ?? 0\" \r\n [showValue]=\"false\" \r\n styleClass=\"h-1/2rem md:ml-auto relative\"\r\n [ngClass]=\"{ 'exceeded-progress-bar': (uploadedFile.progress ?? 0) > 100 }\"\r\n >\r\n </p-progressBar>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"empty\" let-chooseCallback=\"chooseCallback\">\r\n <div *ngIf=\"!uploadedFiles.length\" class=\"flex align-items-center justify-content-center flex-column\"\r\n (click)=\"triggerFileUpload()\">\r\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-8xl text-400 border-400\"></i>\r\n <p class=\"mt-4 mb-0\">Drag and drop files here to upload.</p>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"file\"> </ng-template>\r\n </p-fileUpload>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".flex{display:flex}.items-center{align-items:center}.justify-center{justify-content:center}.flex-col{flex-direction:column}.text-muted-color{color:#6c757d}.p-fileupload-buttonbar{padding:0}.p-fileupload-content{background-color:#0f8bfd1a}.p-fileupload .p-fileupload-content{padding:1rem}.docHeader .p-button-icon{padding:.5rem}.document-upload-container{padding:1rem;max-height:90vh}.assignment-section,.applicant-section,.category-section,.document-type-section,.file-upload-section{margin-bottom:1.5rem}.assignment-section h4,.applicant-section h4,.category-section h4,.document-type-section h4,.file-upload-section h4{margin:0 0 .75rem;font-size:1rem;font-weight:600;color:#212529}.radio-group{display:flex;gap:.75rem}.radio-item{display:flex;align-items:center;gap:.5rem;cursor:pointer;transition:all .2s ease}.radio-item:has(.p-radiobutton-box.p-highlight) .radio-label{color:#0f8bfd;font-weight:600}.radio-label{font-size:.9rem;color:#495057;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .2s ease}::ng-deep .p-dropdown{width:100%}::ng-deep .p-dropdown .p-dropdown-label{font-size:.9rem;color:#495057}::ng-deep .p-dropdown .p-dropdown-trigger{color:#6c757d}::ng-deep .p-dropdown:not(.p-disabled):hover{border-color:#0f8bfd}::ng-deep .p-dropdown:not(.p-disabled).p-focus{border-color:#0f8bfd;box-shadow:0 0 0 2px #0f8bfd33}::ng-deep .p-radiobutton .p-radiobutton-box{border-color:#ced4da;border-radius:4px;width:18px;height:18px}::ng-deep .p-radiobutton .p-radiobutton-box:hover{border-color:#0f8bfd}::ng-deep .p-radiobutton .p-radiobutton-box.p-highlight{border-color:#0f8bfd;background-color:transparent}::ng-deep .p-radiobutton .p-radiobutton-icon{background-color:#0f8bfd;width:8px;height:8px;border-radius:2px}.applicant-section .grid{margin:0;padding:0}.applicant-section .applicant-item{display:flex;align-items:center;gap:.75rem;border-radius:.5rem;background-color:#fff;transition:all .2s ease;cursor:pointer;margin-bottom:.75rem}.applicant-section .applicant-item:has(.p-radiobutton-box.p-highlight) .applicant-label{color:#0f8bfd;font-weight:600}.applicant-section .applicant-label{font-size:.95rem;color:#495057;cursor:pointer;-webkit-user-select:none;user-select:none;flex:1;font-weight:500;margin:0;transition:color .2s ease}@media (max-width: 768px){.applicant-section .applicant-item{margin-bottom:.5rem;padding:.75rem;min-height:50px}.applicant-section .applicant-label{font-size:.9rem}.document-upload-container{padding:.75rem}.assignment-section,.applicant-section,.category-section,.document-type-section,.file-upload-section{margin-bottom:1rem}}.category-section .p-dropdown,.document-type-section .p-dropdown{width:100%!important;min-width:100%!important}.category-section .p-dropdown-panel,.document-type-section .p-dropdown-panel{width:100%!important}:host ::ng-deep .p-dropdown{width:100%!important}:host ::ng-deep .p-dropdown-panel{width:100%!important}.applicant-list{display:none}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i10.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i11.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "component", type: i12.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "component", type: i13.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "variant", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i15.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
4055
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentUploadComponent, isStandalone: false, selector: "lib-document-upload", inputs: { contextId: "contextId", isDocumentSaveBtnClicked: "isDocumentSaveBtnClicked", isDocumentSidebarClosed: "isDocumentSidebarClosed", isFormHide: "isFormHide", isMultiAttachmentHidden: "isMultiAttachmentHidden" }, outputs: { onFormValidationChange: "onFormValidationChange", onUploadSuccess: "onUploadSuccess", onFilesUploaded: "onFilesUploaded", hasUnsavedChangesChange: "hasUnsavedChangesChange", onFileRemoved: "onFileRemoved" }, viewQueries: [{ propertyName: "fileUploader", first: true, predicate: ["fileUploader"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"document-upload-container\">\r\n <!-- Assignment Section -->\r\n <div class=\"assignment-section\" *ngIf=\"!isFormHide\">\r\n <h4>Assign to Applicant(s) or Application <span class=\"text-red-500\">*</span> </h4>\r\n <div class=\"radio-group\">\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Applicant\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'applicant'\"\r\n ></p-radioButton>\r\n <label [for]=\"'applicant'\" class=\"radio-label\">Applicant(s) </label>\r\n </div>\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Application\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'application'\"\r\n ></p-radioButton>\r\n <label [for]=\"'application'\" class=\"radio-label\">Application</label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Applicant Selection (only shown when Applicant is selected) -->\r\n <div class=\"applicant-section\" *ngIf=\"!isFormHide && selectedAssignmentType === 'Applicant'\">\r\n <h4>Select Applicant(s) <span class=\"text-red-500\">*</span></h4>\r\n <div class=\"grid\">\r\n <div \r\n *ngFor=\"let applicant of filteredApplicantList\" \r\n class=\"applicant-item col-12 md:col-6\"\r\n >\r\n <p-checkbox \r\n [value]=\"applicant._id\"\r\n [(ngModel)]=\"selectedApplicants\"\r\n [inputId]=\"'applicant-' + applicant._id\"\r\n (onChange)=\"onApplicantSelectionChange()\"\r\n ></p-checkbox>\r\n <label [for]=\"'applicant-' + applicant._id\" class=\"applicant-label\">\r\n {{ applicant.name }}\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Category Selection -->\r\n <div class=\"category-section\" *ngIf=\"!isFormHide\">\r\n <h4>Category <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"categoryOptions\"\r\n [(ngModel)]=\"selectedCategory\"\r\n placeholder=\"Select Category type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onCategoryChange()\"\r\n [disabled]=\"!categoryOptions.length\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- Document Type Selection -->\r\n <div class=\"document-type-section\" *ngIf=\"!isFormHide\">\r\n <h4>Document Type <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"documentTypeOptions\"\r\n [(ngModel)]=\"selectedDocumentType\"\r\n placeholder=\"Select Document type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onDocumentTypeChange()\"\r\n [disabled]=\"!documentTypeOptions.length || !selectedCategory\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div>\r\n\r\n <!-- File Upload Section -->\r\n <div class=\"file-upload-section\">\r\n <h4>Upload Documents <span class=\"text-red-500\" *ngIf=\"!isFormHide\">*</span></h4>\r\n <div class=\"grid\">\r\n <div class=\"col-12 md:col-12\">\r\n <p-fileUpload \r\n #fileUploader \r\n [multiple]=\"true\" \r\n auto=\"true\" \r\n [accept]=\"getFileUploadAcceptString()\" \r\n maxFileSize=\"27262976\"\r\n (onSelect)=\"onSelectedFiles($event)\"\r\n >\r\n <ng-template pTemplate=\"header\" let-chooseCallback=\"chooseCallback\" let-clearCallback=\"clearCallback\">\r\n <div class=\"docHeader p-2 flex flex-wrap justify-content-between align-items-center flex-1 gap-2\">\r\n <div class=\"flex gap-2\">\r\n <p-button \r\n *ngIf=\"!isMultiAttachmentHidden\"\r\n (onClick)=\"choose($event, chooseCallback)\" \r\n icon=\"pi pi-images\" \r\n [rounded]=\"true\"\r\n [outlined]=\"true\" \r\n />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"content\" let-removeFileCallback=\"removeFileCallback\"\r\n let-removeUploadedFileCallback=\"removeUploadedFileCallback\">\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <div class=\"col-12 md:col-12 p-0\" *ngIf=\"uploadedFiles.length > 0\">\r\n <div *ngFor=\"let uploadedFile of uploadedFiles; let i = index\"\r\n class=\"m-0 flex flex-column align-items-center gap-1 mt-3\">\r\n <div class=\"col-12 md:col-12 p-0 flex documentInfo\">\r\n <div class=\"documentImage\">\r\n <img src=\"../../../../assets/images/document.png\" [alt]=\"uploadedFile.file.name\" width=\"45\" height=\"50\"\r\n class=\"object-contain\" />\r\n </div>\r\n <div class=\"flex w-full flex-column mt-2 ml-2\">\r\n <div class=\"flex justify-content-between\">\r\n <div style=\"font-weight: bold;font-size: 14px\">\r\n {{ uploadedFile.file.name }}\r\n </div>\r\n <i class=\"pi pi-times cursor-pointer\" (click)=\"handleDocumentRemove(uploadedFile.file,i)\"></i>\r\n </div>\r\n <div class=\"flex justify-content-between mt-1\">\r\n <div style=\"color: #676B89; font-size: 12px; color: green;\" class=\"pi pi-verified\"> \r\n {{ uploadedFile.formattedSize }}\r\n </div>\r\n <div class=\"white-space-nowrap\" style=\"color: #0F8BFD; font-family: 14px;\"> \r\n {{ uploadedFile.progress }} % \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-12 md:col-12 p-0\">\r\n <p-progressBar \r\n [value]=\"uploadedFile.progress ?? 0\" \r\n [showValue]=\"false\" \r\n styleClass=\"h-1/2rem md:ml-auto relative\"\r\n [ngClass]=\"{ 'exceeded-progress-bar': (uploadedFile.progress ?? 0) > 100 }\"\r\n >\r\n </p-progressBar>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"empty\" let-chooseCallback=\"chooseCallback\">\r\n <div *ngIf=\"!uploadedFiles.length\" class=\"flex align-items-center justify-content-center flex-column\"\r\n (click)=\"triggerFileUpload()\">\r\n <i class=\"pi pi-cloud-upload border-2 border-circle p-5 text-8xl text-400 border-400\"></i>\r\n <p class=\"mt-4 mb-0\">Drag and drop files here to upload.</p>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"file\"> </ng-template>\r\n </p-fileUpload>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".flex{display:flex}.items-center{align-items:center}.justify-center{justify-content:center}.flex-col{flex-direction:column}.text-muted-color{color:#6c757d}.p-fileupload-buttonbar{padding:0}.p-fileupload-content{background-color:#0f8bfd1a}.p-fileupload .p-fileupload-content{padding:1rem}.docHeader .p-button-icon{padding:.5rem}.document-upload-container{padding:1rem;max-height:90vh}.assignment-section,.applicant-section,.category-section,.document-type-section,.file-upload-section{margin-bottom:1.5rem}.assignment-section h4,.applicant-section h4,.category-section h4,.document-type-section h4,.file-upload-section h4{margin:0 0 .75rem;font-size:1rem;font-weight:600;color:#212529}.radio-group{display:flex;gap:.75rem}.radio-item{display:flex;align-items:center;gap:.5rem;cursor:pointer;transition:all .2s ease}.radio-item:has(.p-radiobutton-box.p-highlight) .radio-label{color:#0f8bfd;font-weight:600}.radio-label{font-size:.9rem;color:#495057;cursor:pointer;-webkit-user-select:none;user-select:none;transition:color .2s ease}::ng-deep .p-dropdown{width:100%}::ng-deep .p-dropdown .p-dropdown-label{font-size:.9rem;color:#495057}::ng-deep .p-dropdown .p-dropdown-trigger{color:#6c757d}::ng-deep .p-dropdown:not(.p-disabled):hover{border-color:#0f8bfd}::ng-deep .p-dropdown:not(.p-disabled).p-focus{border-color:#0f8bfd;box-shadow:0 0 0 2px #0f8bfd33}::ng-deep .p-radiobutton .p-radiobutton-box{border-color:#ced4da;border-radius:4px;width:18px;height:18px}::ng-deep .p-radiobutton .p-radiobutton-box:hover{border-color:#0f8bfd}::ng-deep .p-radiobutton .p-radiobutton-box.p-highlight{border-color:#0f8bfd;background-color:transparent}::ng-deep .p-radiobutton .p-radiobutton-icon{background-color:#0f8bfd;width:8px;height:8px;border-radius:2px}.applicant-section .grid{margin:0;padding:0}.applicant-section .applicant-item{display:flex;align-items:center;gap:.75rem;border-radius:.5rem;background-color:#fff;transition:all .2s ease;cursor:pointer;margin-bottom:.75rem}.applicant-section .applicant-item:has(.p-radiobutton-box.p-highlight) .applicant-label{color:#0f8bfd;font-weight:600}.applicant-section .applicant-label{font-size:.95rem;color:#495057;cursor:pointer;-webkit-user-select:none;user-select:none;flex:1;font-weight:500;margin:0;transition:color .2s ease}@media (max-width: 768px){.applicant-section .applicant-item{margin-bottom:.5rem;padding:.75rem;min-height:50px}.applicant-section .applicant-label{font-size:.9rem}.document-upload-container{padding:.75rem}.assignment-section,.applicant-section,.category-section,.document-type-section,.file-upload-section{margin-bottom:1rem}}.category-section .p-dropdown,.document-type-section .p-dropdown{width:100%!important;min-width:100%!important}.category-section .p-dropdown-panel,.document-type-section .p-dropdown-panel{width:100%!important}:host ::ng-deep .p-dropdown{width:100%!important}:host ::ng-deep .p-dropdown-panel{width:100%!important}.applicant-list{display:none}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i9.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i10.FileUpload, selector: "p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "component", type: i11.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "component", type: i12.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "component", type: i13.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "variant", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i15.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "autoShowPanelOnPrintableCharacterKeyDown", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
4028
4056
|
}
|
|
4029
4057
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentUploadComponent, decorators: [{
|
|
4030
4058
|
type: Component,
|
|
@@ -4127,25 +4155,6 @@ class SessionService {
|
|
|
4127
4155
|
}
|
|
4128
4156
|
return null;
|
|
4129
4157
|
}
|
|
4130
|
-
/**
|
|
4131
|
-
* Retrieves the user's roles from the stored session data.
|
|
4132
|
-
* @returns {string[]} Array of user roles, empty array if no roles found.
|
|
4133
|
-
*/
|
|
4134
|
-
getUserRoles() {
|
|
4135
|
-
const session = this.getUserSession();
|
|
4136
|
-
const roles = session?.roles;
|
|
4137
|
-
if (!Array.isArray(roles))
|
|
4138
|
-
return [];
|
|
4139
|
-
return roles.map((r) => String(r));
|
|
4140
|
-
}
|
|
4141
|
-
/**
|
|
4142
|
-
* Checks if the user has only the agent role.
|
|
4143
|
-
* @returns {boolean} True if user only has agent role, false otherwise.
|
|
4144
|
-
*/
|
|
4145
|
-
isAgentOnly() {
|
|
4146
|
-
const roles = this.getUserRoles().map(r => r.toLowerCase());
|
|
4147
|
-
return roles.length === 1 && roles[0] === 'agent';
|
|
4148
|
-
}
|
|
4149
4158
|
/**
|
|
4150
4159
|
* Clears all stored session data from local storage.
|
|
4151
4160
|
*/
|
|
@@ -4391,7 +4400,7 @@ class RequestDocumentComponent {
|
|
|
4391
4400
|
this.destroy$.complete();
|
|
4392
4401
|
}
|
|
4393
4402
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: RequestDocumentComponent, deps: [{ token: DocumentUploadService }, { token: DocumentUploadFormService }, { token: DocumentUploadDataService }, { token: i0.ChangeDetectorRef }, { token: DocumentHttpService }, { token: SessionService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4394
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: RequestDocumentComponent, isStandalone: false, selector: "lib-request-document", inputs: { contextId: "contextId", isRequestSaveBtnClicked: "isRequestSaveBtnClicked", isRequestSidebarClosed: "isRequestSidebarClosed" }, outputs: { onFormValidationChange: "onFormValidationChange", onRequestSuccess: "onRequestSuccess", onRequestError: "onRequestError", hasUnsavedChangesChange: "hasUnsavedChangesChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"request-document-container\">\r\n <!-- Assignment Section (same structure as upload, without files) -->\r\n <!-- <div class=\"assignment-section\">\r\n <h4>Assign to Applicant(s) or Application <span class=\"text-red-500\">*</span> </h4>\r\n <div class=\"radio-group\">\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Applicant\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'req-applicant'\"\r\n ></p-radioButton>\r\n <label [for]=\"'req-applicant'\" class=\"radio-label\">Applicant(s)</label>\r\n </div>\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Application\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'req-application'\"\r\n ></p-radioButton>\r\n <label [for]=\"'req-application'\" class=\"radio-label\">Application</label>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Applicant Selection (only when Applicant is selected) -->\r\n <!-- <div class=\"applicant-section\" *ngIf=\"selectedAssignmentType === 'Applicant'\">\r\n <h4>Select Applicant(s) <span class=\"text-red-500\">*</span></h4>\r\n <div class=\"grid\">\r\n <div \r\n *ngFor=\"let applicant of filteredApplicantList\" \r\n class=\"applicant-item col-12 md:col-6\"\r\n >\r\n <p-radioButton \r\n name=\"reqSelectedApplicant\"\r\n [value]=\"applicant._id\"\r\n [(ngModel)]=\"selectedApplicant\"\r\n [inputId]=\"'req-applicant-' + applicant._id\"\r\n (onClick)=\"onApplicantSelectionChange()\"\r\n ></p-radioButton>\r\n <label [for]=\"'req-applicant-' + applicant._id\" class=\"applicant-label\">\r\n {{ applicant.name }}\r\n </label>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Category Selection -->\r\n <!-- <div class=\"category-section\">\r\n <h4>Category <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"categoryOptions\"\r\n [(ngModel)]=\"selectedCategory\"\r\n placeholder=\"Select Category type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onCategoryChange()\"\r\n [disabled]=\"!categoryOptions.length\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div> -->\r\n\r\n <!-- Document Type Selection -->\r\n <!-- <div class=\"document-type-section\">\r\n <h4>Document Type <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"documentTypeOptions\"\r\n [(ngModel)]=\"selectedDocumentType\"\r\n placeholder=\"Select Document type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onDocumentTypeChange()\"\r\n [disabled]=\"!documentTypeOptions.length || !selectedCategory\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div> -->\r\n\r\n <!-- Description Field -->\r\n <div class=\"description-section\">\r\n <h6>Description <span class=\"text-red-500\">*</span></h6>\r\n <textarea pInputTextarea [(ngModel)]=\"description\" (ngModelChange)=\"onDescriptionChange()\" rows=\"4\" placeholder=\"Add description\" class=\"w-full\"></textarea>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i6.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "directive", type:
|
|
4403
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: RequestDocumentComponent, isStandalone: false, selector: "lib-request-document", inputs: { contextId: "contextId", isRequestSaveBtnClicked: "isRequestSaveBtnClicked", isRequestSidebarClosed: "isRequestSidebarClosed" }, outputs: { onFormValidationChange: "onFormValidationChange", onRequestSuccess: "onRequestSuccess", onRequestError: "onRequestError", hasUnsavedChangesChange: "hasUnsavedChangesChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"request-document-container\">\r\n <!-- Assignment Section (same structure as upload, without files) -->\r\n <!-- <div class=\"assignment-section\">\r\n <h4>Assign to Applicant(s) or Application <span class=\"text-red-500\">*</span> </h4>\r\n <div class=\"radio-group\">\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Applicant\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'req-applicant'\"\r\n ></p-radioButton>\r\n <label [for]=\"'req-applicant'\" class=\"radio-label\">Applicant(s)</label>\r\n </div>\r\n <div class=\"radio-item\">\r\n <p-radioButton \r\n name=\"assignmentType\" \r\n value=\"Application\" \r\n [(ngModel)]=\"selectedAssignmentType\"\r\n (onClick)=\"onAssignmentTypeChange()\"\r\n [inputId]=\"'req-application'\"\r\n ></p-radioButton>\r\n <label [for]=\"'req-application'\" class=\"radio-label\">Application</label>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Applicant Selection (only when Applicant is selected) -->\r\n <!-- <div class=\"applicant-section\" *ngIf=\"selectedAssignmentType === 'Applicant'\">\r\n <h4>Select Applicant(s) <span class=\"text-red-500\">*</span></h4>\r\n <div class=\"grid\">\r\n <div \r\n *ngFor=\"let applicant of filteredApplicantList\" \r\n class=\"applicant-item col-12 md:col-6\"\r\n >\r\n <p-radioButton \r\n name=\"reqSelectedApplicant\"\r\n [value]=\"applicant._id\"\r\n [(ngModel)]=\"selectedApplicant\"\r\n [inputId]=\"'req-applicant-' + applicant._id\"\r\n (onClick)=\"onApplicantSelectionChange()\"\r\n ></p-radioButton>\r\n <label [for]=\"'req-applicant-' + applicant._id\" class=\"applicant-label\">\r\n {{ applicant.name }}\r\n </label>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Category Selection -->\r\n <!-- <div class=\"category-section\">\r\n <h4>Category <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"categoryOptions\"\r\n [(ngModel)]=\"selectedCategory\"\r\n placeholder=\"Select Category type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onCategoryChange()\"\r\n [disabled]=\"!categoryOptions.length\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div> -->\r\n\r\n <!-- Document Type Selection -->\r\n <!-- <div class=\"document-type-section\">\r\n <h4>Document Type <span class=\"text-red-500\">*</span></h4>\r\n <p-dropdown\r\n [options]=\"documentTypeOptions\"\r\n [(ngModel)]=\"selectedDocumentType\"\r\n placeholder=\"Select Document type\"\r\n optionLabel=\"label\"\r\n optionValue=\"_id\"\r\n (onChange)=\"onDocumentTypeChange()\"\r\n [disabled]=\"!documentTypeOptions.length || !selectedCategory\"\r\n class=\"w-full\"\r\n ></p-dropdown>\r\n </div> -->\r\n\r\n <!-- Description Field -->\r\n <div class=\"description-section\">\r\n <h6>Description <span class=\"text-red-500\">*</span></h6>\r\n <textarea pInputTextarea [(ngModel)]=\"description\" (ngModelChange)=\"onDescriptionChange()\" rows=\"4\" placeholder=\"Add description\" class=\"w-full\"></textarea>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i6.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
4395
4404
|
}
|
|
4396
4405
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: RequestDocumentComponent, decorators: [{
|
|
4397
4406
|
type: Component,
|
|
@@ -4515,7 +4524,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
4515
4524
|
class DocumentSearchComponent {
|
|
4516
4525
|
documentHelperService;
|
|
4517
4526
|
documentQuery;
|
|
4518
|
-
sessionService;
|
|
4519
4527
|
SHARED = SHARED;
|
|
4520
4528
|
contextId = SHARED.EMPTY;
|
|
4521
4529
|
onActionClick = new EventEmitter();
|
|
@@ -4525,10 +4533,9 @@ class DocumentSearchComponent {
|
|
|
4525
4533
|
destroy$ = new Subject();
|
|
4526
4534
|
searchSubject = new Subject();
|
|
4527
4535
|
hasActiveFilters = false;
|
|
4528
|
-
constructor(documentHelperService, documentQuery
|
|
4536
|
+
constructor(documentHelperService, documentQuery) {
|
|
4529
4537
|
this.documentHelperService = documentHelperService;
|
|
4530
4538
|
this.documentQuery = documentQuery;
|
|
4531
|
-
this.sessionService = sessionService;
|
|
4532
4539
|
}
|
|
4533
4540
|
ngOnInit() {
|
|
4534
4541
|
this.setupSearchSubscription();
|
|
@@ -4596,13 +4603,6 @@ class DocumentSearchComponent {
|
|
|
4596
4603
|
get shouldShowClearAll() {
|
|
4597
4604
|
return this.hasActiveFilters;
|
|
4598
4605
|
}
|
|
4599
|
-
/**
|
|
4600
|
-
* Determines if the Actions button should be visible
|
|
4601
|
-
* Returns false if user only has agent role
|
|
4602
|
-
*/
|
|
4603
|
-
get shouldShowActionButton() {
|
|
4604
|
-
return !this.sessionService.isAgentOnly();
|
|
4605
|
-
}
|
|
4606
4606
|
/**
|
|
4607
4607
|
* Toggles the actions dropdown menu
|
|
4608
4608
|
*/
|
|
@@ -4645,13 +4645,13 @@ class DocumentSearchComponent {
|
|
|
4645
4645
|
this.showActionsMenu = false;
|
|
4646
4646
|
}
|
|
4647
4647
|
};
|
|
4648
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentSearchComponent, deps: [{ token: DocumentHelperService }, { token: DocumentQuery }
|
|
4649
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentSearchComponent, isStandalone: false, selector: "document-search", inputs: { contextId: "contextId" }, outputs: { onActionClick: "onActionClick", onRequestClick: "onRequestClick" }, ngImport: i0, template: "<div class=\"search-container\">\r\n <div class=\"search-header\">\r\n <h2 class=\"ml-3 document-heading\">Documents</h2> \r\n </div>\r\n <div class=\"search-input-wrapper\">\r\n <input \r\n type=\"text\" \r\n [(ngModel)]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchInputChange($event)\"\r\n class=\"search-input\"\r\n placeholder=\"Search by document name, category, type, status or applicant name...\"\r\n [attr.aria-label]=\"'Search documents'\"\r\n />\r\n <button \r\n *ngIf=\"searchTerm\"\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"onClearSearch()\"\r\n [attr.aria-label]=\"'Clear search'\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <button \r\n *ngIf=\"shouldShowClearAll\"\r\n type=\"button\"\r\n class=\"clear-all-filters-link\"\r\n (click)=\"onClearAllFilters()\"\r\n [attr.aria-label]=\"'Clear all'\"\r\n >\r\n Clear All\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n\r\n <div class=\"filters-section\">\r\n <div class=\"actions-menu\"
|
|
4648
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentSearchComponent, deps: [{ token: DocumentHelperService }, { token: DocumentQuery }], target: i0.ɵɵFactoryTarget.Component });
|
|
4649
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentSearchComponent, isStandalone: false, selector: "document-search", inputs: { contextId: "contextId" }, outputs: { onActionClick: "onActionClick", onRequestClick: "onRequestClick" }, ngImport: i0, template: "<div class=\"search-container\">\r\n <div class=\"search-header\">\r\n <h2 class=\"ml-3 document-heading\">Documents</h2> \r\n </div>\r\n <div class=\"search-input-wrapper\">\r\n <input \r\n type=\"text\" \r\n [(ngModel)]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchInputChange($event)\"\r\n class=\"search-input\"\r\n placeholder=\"Search by document name, category, type, status or applicant name...\"\r\n [attr.aria-label]=\"'Search documents'\"\r\n />\r\n <button \r\n *ngIf=\"searchTerm\"\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"onClearSearch()\"\r\n [attr.aria-label]=\"'Clear search'\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <button \r\n *ngIf=\"shouldShowClearAll\"\r\n type=\"button\"\r\n class=\"clear-all-filters-link\"\r\n (click)=\"onClearAllFilters()\"\r\n [attr.aria-label]=\"'Clear all'\"\r\n >\r\n Clear All\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n\r\n <div class=\"filters-section\">\r\n <div class=\"actions-menu\">\r\n <button \r\n type=\"button\"\r\n class=\"actions-btn\" \r\n (click)=\"toggleActionsMenu()\" \r\n [class.active]=\"showActionsMenu\"\r\n [attr.aria-label]=\"'Open actions menu'\"\r\n [attr.aria-expanded]=\"showActionsMenu\"\r\n >\r\n Actions\r\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"showActionsMenu\"></i>\r\n </button>\r\n\r\n <!-- Actions Dropdown Menu -->\r\n <div class=\"actions-dropdown\" *ngIf=\"showActionsMenu\">\r\n <!-- <div class=\"dropdown-item\" (click)=\"handleUploadDocument()\">\r\n <i class=\"pi pi-upload\"></i>\r\n <span>Upload Document</span>\r\n </div> -->\r\n <div class=\"dropdown-item\" (click)=\"handleRequestDocument()\">\r\n <i class=\"pi pi-file\"></i>\r\n <span>Request Document</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div> ", styles: [".search-container{display:flex;align-items:center;gap:1rem;width:100%;justify-content:flex-start;padding:10px}.search-input-wrapper{position:relative;flex:1;display:flex;align-items:center;max-width:50%;min-width:300px}.clear-all-filters-link{background:none;border:none;color:#0f8bfd;cursor:pointer;padding:8px 12px;border-radius:4px;font-size:16px;font-weight:500;text-decoration:none!important;transition:background-color .2s ease,color .2s ease;white-space:nowrap;flex-shrink:0;display:flex;justify-content:center;align-items:center;gap:4px}.filters-section{display:flex;align-items:center;gap:1rem;flex-shrink:0;margin-left:auto}.filters-section .actions-menu{position:relative}.filters-section .actions-menu .actions-btn{background:#0f8bfd;border:none;border-radius:8px;padding:8px 10px;color:#fff;font-size:12px;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s ease;white-space:nowrap}.filters-section .actions-menu .actions-btn:hover{background:#0d7ae6;transform:translateY(-1px)}.filters-section .actions-menu .actions-btn:active{transform:translateY(0)}.filters-section .actions-menu .actions-btn.active{background:#0d7ae6}.filters-section .actions-menu .actions-btn:focus{outline:none;box-shadow:0 0 0 3px #0f8bfd4d}.filters-section .actions-menu .actions-btn i{font-size:.75rem;transition:transform .2s}.filters-section .actions-menu .actions-btn i.rotated{transform:rotate(180deg)}.filters-section .actions-menu .actions-dropdown{position:absolute;top:calc(100% + .5rem);right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:200px;overflow:hidden}.filters-section .actions-menu .actions-dropdown .dropdown-item{padding:.75rem 1rem;cursor:pointer;color:#374151;font-size:.875rem;transition:background-color .2s;display:flex;align-items:center;gap:.75rem}.filters-section .actions-menu .actions-dropdown .dropdown-item i{font-size:1rem;color:#6b7280}.filters-section .actions-menu .actions-dropdown .dropdown-item:hover{background-color:#f3f4f6}.filters-section .actions-menu .actions-dropdown .dropdown-item:not(:last-child){border-bottom:1px solid #f3f4f6}.filters-section .actions-menu .actions-dropdown .dropdown-item:active{background-color:#e5e7eb}.search-icon{position:absolute;left:12px;color:#6c757d;z-index:1}.search-input{width:100%;padding:10px 12px;border:1px solid #dee2e6;border-radius:8px;font-size:14px;outline:none;transition:border-color .2s ease,box-shadow .2s ease}.search-input:focus{border-color:#0f8bfd;box-shadow:0 0 0 3px #0f8bfd1a}.search-input::placeholder{color:#6c757d}.clear-button{position:absolute;right:12px;background:none;border:none;color:#6c757d;cursor:pointer;padding:4px;border-radius:4px;transition:background-color .2s ease,color .2s ease}.clear-button:hover{background-color:#f8f9fa;color:#495057}@media (max-width: 768px){.search-container{flex-direction:column;gap:.75rem}.search-input-wrapper{max-width:100%}.filters-section{width:100%;justify-content:center;gap:.5rem}.filters-section .actions-menu .actions-btn{width:auto;justify-content:center}.filters-section .actions-menu .actions-dropdown{left:50%;transform:translate(-50%);right:auto}}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
4650
4650
|
}
|
|
4651
4651
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentSearchComponent, decorators: [{
|
|
4652
4652
|
type: Component,
|
|
4653
|
-
args: [{ selector: 'document-search', standalone: false, template: "<div class=\"search-container\">\r\n <div class=\"search-header\">\r\n <h2 class=\"ml-3 document-heading\">Documents</h2> \r\n </div>\r\n <div class=\"search-input-wrapper\">\r\n <input \r\n type=\"text\" \r\n [(ngModel)]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchInputChange($event)\"\r\n class=\"search-input\"\r\n placeholder=\"Search by document name, category, type, status or applicant name...\"\r\n [attr.aria-label]=\"'Search documents'\"\r\n />\r\n <button \r\n *ngIf=\"searchTerm\"\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"onClearSearch()\"\r\n [attr.aria-label]=\"'Clear search'\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <button \r\n *ngIf=\"shouldShowClearAll\"\r\n type=\"button\"\r\n class=\"clear-all-filters-link\"\r\n (click)=\"onClearAllFilters()\"\r\n [attr.aria-label]=\"'Clear all'\"\r\n >\r\n Clear All\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n\r\n <div class=\"filters-section\">\r\n <div class=\"actions-menu\"
|
|
4654
|
-
}], ctorParameters: () => [{ type: DocumentHelperService }, { type: DocumentQuery }
|
|
4653
|
+
args: [{ selector: 'document-search', standalone: false, template: "<div class=\"search-container\">\r\n <div class=\"search-header\">\r\n <h2 class=\"ml-3 document-heading\">Documents</h2> \r\n </div>\r\n <div class=\"search-input-wrapper\">\r\n <input \r\n type=\"text\" \r\n [(ngModel)]=\"searchTerm\"\r\n (ngModelChange)=\"onSearchInputChange($event)\"\r\n class=\"search-input\"\r\n placeholder=\"Search by document name, category, type, status or applicant name...\"\r\n [attr.aria-label]=\"'Search documents'\"\r\n />\r\n <button \r\n *ngIf=\"searchTerm\"\r\n type=\"button\"\r\n class=\"clear-button\"\r\n (click)=\"onClearSearch()\"\r\n [attr.aria-label]=\"'Clear search'\"\r\n >\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <button \r\n *ngIf=\"shouldShowClearAll\"\r\n type=\"button\"\r\n class=\"clear-all-filters-link\"\r\n (click)=\"onClearAllFilters()\"\r\n [attr.aria-label]=\"'Clear all'\"\r\n >\r\n Clear All\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n\r\n <div class=\"filters-section\">\r\n <div class=\"actions-menu\">\r\n <button \r\n type=\"button\"\r\n class=\"actions-btn\" \r\n (click)=\"toggleActionsMenu()\" \r\n [class.active]=\"showActionsMenu\"\r\n [attr.aria-label]=\"'Open actions menu'\"\r\n [attr.aria-expanded]=\"showActionsMenu\"\r\n >\r\n Actions\r\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"showActionsMenu\"></i>\r\n </button>\r\n\r\n <!-- Actions Dropdown Menu -->\r\n <div class=\"actions-dropdown\" *ngIf=\"showActionsMenu\">\r\n <!-- <div class=\"dropdown-item\" (click)=\"handleUploadDocument()\">\r\n <i class=\"pi pi-upload\"></i>\r\n <span>Upload Document</span>\r\n </div> -->\r\n <div class=\"dropdown-item\" (click)=\"handleRequestDocument()\">\r\n <i class=\"pi pi-file\"></i>\r\n <span>Request Document</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div> ", styles: [".search-container{display:flex;align-items:center;gap:1rem;width:100%;justify-content:flex-start;padding:10px}.search-input-wrapper{position:relative;flex:1;display:flex;align-items:center;max-width:50%;min-width:300px}.clear-all-filters-link{background:none;border:none;color:#0f8bfd;cursor:pointer;padding:8px 12px;border-radius:4px;font-size:16px;font-weight:500;text-decoration:none!important;transition:background-color .2s ease,color .2s ease;white-space:nowrap;flex-shrink:0;display:flex;justify-content:center;align-items:center;gap:4px}.filters-section{display:flex;align-items:center;gap:1rem;flex-shrink:0;margin-left:auto}.filters-section .actions-menu{position:relative}.filters-section .actions-menu .actions-btn{background:#0f8bfd;border:none;border-radius:8px;padding:8px 10px;color:#fff;font-size:12px;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s ease;white-space:nowrap}.filters-section .actions-menu .actions-btn:hover{background:#0d7ae6;transform:translateY(-1px)}.filters-section .actions-menu .actions-btn:active{transform:translateY(0)}.filters-section .actions-menu .actions-btn.active{background:#0d7ae6}.filters-section .actions-menu .actions-btn:focus{outline:none;box-shadow:0 0 0 3px #0f8bfd4d}.filters-section .actions-menu .actions-btn i{font-size:.75rem;transition:transform .2s}.filters-section .actions-menu .actions-btn i.rotated{transform:rotate(180deg)}.filters-section .actions-menu .actions-dropdown{position:absolute;top:calc(100% + .5rem);right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:200px;overflow:hidden}.filters-section .actions-menu .actions-dropdown .dropdown-item{padding:.75rem 1rem;cursor:pointer;color:#374151;font-size:.875rem;transition:background-color .2s;display:flex;align-items:center;gap:.75rem}.filters-section .actions-menu .actions-dropdown .dropdown-item i{font-size:1rem;color:#6b7280}.filters-section .actions-menu .actions-dropdown .dropdown-item:hover{background-color:#f3f4f6}.filters-section .actions-menu .actions-dropdown .dropdown-item:not(:last-child){border-bottom:1px solid #f3f4f6}.filters-section .actions-menu .actions-dropdown .dropdown-item:active{background-color:#e5e7eb}.search-icon{position:absolute;left:12px;color:#6c757d;z-index:1}.search-input{width:100%;padding:10px 12px;border:1px solid #dee2e6;border-radius:8px;font-size:14px;outline:none;transition:border-color .2s ease,box-shadow .2s ease}.search-input:focus{border-color:#0f8bfd;box-shadow:0 0 0 3px #0f8bfd1a}.search-input::placeholder{color:#6c757d}.clear-button{position:absolute;right:12px;background:none;border:none;color:#6c757d;cursor:pointer;padding:4px;border-radius:4px;transition:background-color .2s ease,color .2s ease}.clear-button:hover{background-color:#f8f9fa;color:#495057}@media (max-width: 768px){.search-container{flex-direction:column;gap:.75rem}.search-input-wrapper{max-width:100%}.filters-section{width:100%;justify-content:center;gap:.5rem}.filters-section .actions-menu .actions-btn{width:auto;justify-content:center}.filters-section .actions-menu .actions-dropdown{left:50%;transform:translate(-50%);right:auto}}\n"] }]
|
|
4654
|
+
}], ctorParameters: () => [{ type: DocumentHelperService }, { type: DocumentQuery }], propDecorators: { contextId: [{
|
|
4655
4655
|
type: Input
|
|
4656
4656
|
}], onActionClick: [{
|
|
4657
4657
|
type: Output
|
|
@@ -4933,7 +4933,7 @@ class SidebarComponent {
|
|
|
4933
4933
|
this.destroy$.complete();
|
|
4934
4934
|
}
|
|
4935
4935
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SidebarComponent, deps: [{ token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4936
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: SidebarComponent, isStandalone: false, selector: "lib-sidebar", inputs: { visible: "visible", position: "position", width: "width", title: "title", showCloseButton: "showCloseButton", modal: "modal", dismissible: "dismissible", styleClass: "styleClass", appendTo: "appendTo", blockScroll: "blockScroll", closeIcon: "closeIcon", showSaveButton: "showSaveButton", saveButtonText: "saveButtonText", saveButtonDisabled: "saveButtonDisabled", successMessage: "successMessage", errorMessage: "errorMessage", hasUnsavedChanges: "hasUnsavedChanges" }, outputs: { visibleChange: "visibleChange", onShow: "onShow", onHide: "onHide", onSave: "onSave", onClose: "onClose" }, host: { listeners: { "document:keydown.escape": "handleEscapeKey($event)" } }, ngImport: i0, template: "<!-- PrimeNG Sidebar with proper backdrop handling -->\r\n<div *ngIf=\"visible\" class=\"backdrop-shadow\" (click)=\"handleClose()\"></div>\r\n\r\n<p-sidebar \r\n [(visible)]=\"visible\"\r\n [position]=\"position\"\r\n [style]=\"{width: width}\"\r\n [dismissible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [appendTo]=\"'body'\"\r\n [blockScroll]=\"blockScroll\"\r\n (visibleChange)=\"onVisibleChange($event)\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onSidebarHide()\"\r\n>\r\n <ng-template pTemplate=\"header\" *ngIf=\"title || showCloseButton || showSaveButton\">\r\n <div class=\"sidebar-header\">\r\n <h3 *ngIf=\"title\" class=\"sidebar-title\">{{ title }}</h3>\r\n <div class=\"header-content\">\r\n <ng-content select=\"[header]\"></ng-content>\r\n \r\n <p-messages \r\n *ngIf=\"showSuccessMessage\"\r\n severity=\"success\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ successMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n \r\n <p-messages \r\n *ngIf=\"showErrorMessage\"\r\n severity=\"error\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ errorMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n\r\n <div class=\"header-actions mr-3\">\r\n <button \r\n *ngIf=\"showSaveButton\"\r\n pButton \r\n type=\"button\" \r\n [label]=\"saveButtonText\"\r\n [disabled]=\"saveButtonDisabled\"\r\n class=\"p-button-primary\"\r\n (click)=\"onSave.emit()\"\r\n ></button>\r\n\r\n <button \r\n *ngIf=\"showCloseButton\"\r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-times\"\r\n class=\"p-button-text p-button-rounded\"\r\n (click)=\"handleClose()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-sidebar>\r\n", styles: [":host{display:block}.backdrop-shadow{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:1000}.sidebar-header{display:flex;justify-content:flex-end;align-items:center;padding:0;width:100%;gap:1rem}.sidebar-header ::ng-deep .p-messages .p-message-success{margin-left:2rem;font-size:15px}.sidebar-header ::ng-deep .p-messages .p-message-wrapper{padding:1rem}.sidebar-title{margin:0;font-size:1.25rem;font-weight:600;color:#212529;flex:0 1 auto;white-space:nowrap;min-width:0}.header-content{display:flex;align-items:center;gap:1rem;justify-content:space-between;width:100%}.header-actions{display:flex;align-items:center;gap:.5rem;margin-left:auto;margin-right:0}.close-button{background:none;border:none;color:#6c757d;cursor:pointer;padding:.5rem;border-radius:.375rem;transition:all .2s ease;display:flex;align-items:center;justify-content:center;min-width:2rem;min-height:2rem;margin-right:.5rem}.close-button:hover{background-color:#e9ecef;color:#495057}.close-button:focus{outline:none;box-shadow:0 0 0 3px #0f8bfd4d}.close-button i{font-size:1rem}.sidebar-content{height:100%;overflow-y:auto;padding:0}.header-actions .p-button-text.p-button-rounded{width:2rem;height:2rem;border-radius:50%}.header-actions .p-button-text.p-button-rounded:hover{background-color:#0000001a}::ng-deep .p-sidebar .p-sidebar-header{border-bottom:1px solid #e9ecef;margin-bottom:1rem;background-color:#f8f9fa}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1.5rem 1.5rem;height:calc(100% - 80px);overflow-y:auto}::ng-deep .p-sidebar.p-sidebar-right .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}::ng-deep .p-sidebar.p-sidebar-left .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}@media (max-width: 768px){::ng-deep .p-sidebar{width:100%!important;max-width:100%!important}::ng-deep .p-sidebar .p-sidebar-header{padding:1rem 1rem 0}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1rem 1rem}}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i4.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: i5
|
|
4936
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: SidebarComponent, isStandalone: false, selector: "lib-sidebar", inputs: { visible: "visible", position: "position", width: "width", title: "title", showCloseButton: "showCloseButton", modal: "modal", dismissible: "dismissible", styleClass: "styleClass", appendTo: "appendTo", blockScroll: "blockScroll", closeIcon: "closeIcon", showSaveButton: "showSaveButton", saveButtonText: "saveButtonText", saveButtonDisabled: "saveButtonDisabled", successMessage: "successMessage", errorMessage: "errorMessage", hasUnsavedChanges: "hasUnsavedChanges" }, outputs: { visibleChange: "visibleChange", onShow: "onShow", onHide: "onHide", onSave: "onSave", onClose: "onClose" }, host: { listeners: { "document:keydown.escape": "handleEscapeKey($event)" } }, ngImport: i0, template: "<!-- PrimeNG Sidebar with proper backdrop handling -->\r\n<div *ngIf=\"visible\" class=\"backdrop-shadow\" (click)=\"handleClose()\"></div>\r\n\r\n<p-sidebar \r\n [(visible)]=\"visible\"\r\n [position]=\"position\"\r\n [style]=\"{width: width}\"\r\n [dismissible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [appendTo]=\"'body'\"\r\n [blockScroll]=\"blockScroll\"\r\n (visibleChange)=\"onVisibleChange($event)\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onSidebarHide()\"\r\n>\r\n <ng-template pTemplate=\"header\" *ngIf=\"title || showCloseButton || showSaveButton\">\r\n <div class=\"sidebar-header\">\r\n <h3 *ngIf=\"title\" class=\"sidebar-title\">{{ title }}</h3>\r\n <div class=\"header-content\">\r\n <ng-content select=\"[header]\"></ng-content>\r\n \r\n <p-messages \r\n *ngIf=\"showSuccessMessage\"\r\n severity=\"success\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ successMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n \r\n <p-messages \r\n *ngIf=\"showErrorMessage\"\r\n severity=\"error\"\r\n [closable]=\"false\"\r\n [style]=\"{'margin-bottom': '0.5rem'}\"\r\n class=\"ml-3\"\r\n >\r\n <ng-template pTemplate=\"message\">\r\n <span>{{ errorMessage }}</span>\r\n </ng-template>\r\n </p-messages>\r\n\r\n <div class=\"header-actions mr-3\">\r\n <button \r\n *ngIf=\"showSaveButton\"\r\n pButton \r\n type=\"button\" \r\n [label]=\"saveButtonText\"\r\n [disabled]=\"saveButtonDisabled\"\r\n class=\"p-button-primary\"\r\n (click)=\"onSave.emit()\"\r\n ></button>\r\n\r\n <button \r\n *ngIf=\"showCloseButton\"\r\n pButton \r\n type=\"button\" \r\n icon=\"pi pi-times\"\r\n class=\"p-button-text p-button-rounded\"\r\n (click)=\"handleClose()\"\r\n ></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"content\">\r\n <div class=\"sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </ng-template>\r\n</p-sidebar>\r\n", styles: [":host{display:block}.backdrop-shadow{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;z-index:1000}.sidebar-header{display:flex;justify-content:flex-end;align-items:center;padding:0;width:100%;gap:1rem}.sidebar-header ::ng-deep .p-messages .p-message-success{margin-left:2rem;font-size:15px}.sidebar-header ::ng-deep .p-messages .p-message-wrapper{padding:1rem}.sidebar-title{margin:0;font-size:1.25rem;font-weight:600;color:#212529;flex:0 1 auto;white-space:nowrap;min-width:0}.header-content{display:flex;align-items:center;gap:1rem;justify-content:space-between;width:100%}.header-actions{display:flex;align-items:center;gap:.5rem;margin-left:auto;margin-right:0}.close-button{background:none;border:none;color:#6c757d;cursor:pointer;padding:.5rem;border-radius:.375rem;transition:all .2s ease;display:flex;align-items:center;justify-content:center;min-width:2rem;min-height:2rem;margin-right:.5rem}.close-button:hover{background-color:#e9ecef;color:#495057}.close-button:focus{outline:none;box-shadow:0 0 0 3px #0f8bfd4d}.close-button i{font-size:1rem}.sidebar-content{height:100%;overflow-y:auto;padding:0}.header-actions .p-button-text.p-button-rounded{width:2rem;height:2rem;border-radius:50%}.header-actions .p-button-text.p-button-rounded:hover{background-color:#0000001a}::ng-deep .p-sidebar .p-sidebar-header{border-bottom:1px solid #e9ecef;margin-bottom:1rem;background-color:#f8f9fa}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1.5rem 1.5rem;height:calc(100% - 80px);overflow-y:auto}::ng-deep .p-sidebar.p-sidebar-right .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}::ng-deep .p-sidebar.p-sidebar-left .p-sidebar-content{padding-left:1.5rem;padding-right:1.5rem}@media (max-width: 768px){::ng-deep .p-sidebar{width:100%!important;max-width:100%!important}::ng-deep .p-sidebar .p-sidebar-header{padding:1rem 1rem 0}::ng-deep .p-sidebar .p-sidebar-content{padding:0 1rem 1rem}}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i4.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "component", type: i5.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }] });
|
|
4937
4937
|
}
|
|
4938
4938
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SidebarComponent, decorators: [{
|
|
4939
4939
|
type: Component,
|
|
@@ -5237,7 +5237,7 @@ class FolderContainerComponent {
|
|
|
5237
5237
|
}
|
|
5238
5238
|
}
|
|
5239
5239
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FolderContainerComponent, deps: [{ token: DocumentQuery }, { token: DocumentHelperService }], target: i0.ɵɵFactoryTarget.Component });
|
|
5240
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FolderContainerComponent, isStandalone: false, selector: "lib-folder-container", inputs: { documentList: "documentList", folderList: "folderList", contextId: "contextId", userList: "userList", statusData: "statusData", categories: "categories" }, viewQueries: [{ propertyName: "documentUploadComponent", first: true, predicate: DocumentUploadComponent, descendants: true }, { propertyName: "uploadSidebarComponent", first: true, predicate: ["uploadSidebar"], descendants: true }, { propertyName: "requestSidebarComponent", first: true, predicate: ["requestSidebar"], descendants: true }, { propertyName: "requestDocumentComponent", first: true, predicate: RequestDocumentComponent, descendants: true }], ngImport: i0, template: "\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\" (onRequestClick)=\"openRequestDocumentSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <!-- <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list> -->\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-sidebar\r\n #uploadSidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [successMessage]=\"'Document Saved Successfully'\"\r\n [hasUnsavedChanges]=\"hasUnsavedChanges\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n (onClose)=\"onDocumentUploadSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-document-upload \r\n [contextId]=\"contextId\" \r\n (onFormValidationChange)=\"onFormValidationChange()\" \r\n (onUploadSuccess)=\"onDocumentUploadSuccess()\"\r\n (onUploadError)=\"onDocumentUploadError($event)\"\r\n ></lib-document-upload>\r\n</lib-sidebar>\r\n\r\n<lib-sidebar\r\n #requestSidebar\r\n [(visible)]=\"isRequestDocumentSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Request Document\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'
|
|
5240
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: FolderContainerComponent, isStandalone: false, selector: "lib-folder-container", inputs: { documentList: "documentList", folderList: "folderList", contextId: "contextId", userList: "userList", statusData: "statusData", categories: "categories" }, viewQueries: [{ propertyName: "documentUploadComponent", first: true, predicate: DocumentUploadComponent, descendants: true }, { propertyName: "uploadSidebarComponent", first: true, predicate: ["uploadSidebar"], descendants: true }, { propertyName: "requestSidebarComponent", first: true, predicate: ["requestSidebar"], descendants: true }, { propertyName: "requestDocumentComponent", first: true, predicate: RequestDocumentComponent, descendants: true }], ngImport: i0, template: "\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\" (onRequestClick)=\"openRequestDocumentSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <!-- <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list> -->\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-sidebar\r\n #uploadSidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [successMessage]=\"'Document Saved Successfully'\"\r\n [hasUnsavedChanges]=\"hasUnsavedChanges\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n (onClose)=\"onDocumentUploadSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-document-upload \r\n [contextId]=\"contextId\" \r\n (onFormValidationChange)=\"onFormValidationChange()\" \r\n (onUploadSuccess)=\"onDocumentUploadSuccess()\"\r\n (onUploadError)=\"onDocumentUploadError($event)\"\r\n ></lib-document-upload>\r\n</lib-sidebar>\r\n\r\n<lib-sidebar\r\n #requestSidebar\r\n [(visible)]=\"isRequestDocumentSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Request Document\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Send Request'\"\r\n [successMessage]=\"'Document Requested'\"\r\n [saveButtonDisabled]=\"isRequestSaveButtonDisabled\"\r\n [hasUnsavedChanges]=\"requestHasUnsavedChanges\"\r\n (onHide)=\"onRequestDocumentSidebarHide()\"\r\n (onSave)=\"onRequestDocumentSave()\"\r\n (onClose)=\"onRequestDocumentSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-request-document\r\n [contextId]=\"contextId\"\r\n (onFormValidationChange)=\"onRequestFormValidationChange()\"\r\n (onRequestSuccess)=\"onRequestDocumentSuccess()\"\r\n (onRequestError)=\"onRequestDocumentError($event)\"\r\n (hasUnsavedChangesChange)=\"onRequestUnsavedChange($event)\"\r\n ></lib-request-document>\r\n</lib-sidebar>", styles: [".user-list-wrapper{overflow:hidden;margin-bottom:1rem}.user-list-wrapper ::ng-deep *{transition:opacity .2s ease-in-out}.user-list-wrapper.ng-animating{pointer-events:none}::ng-deep lib-user-list{display:block;width:100%}\n"], dependencies: [{ kind: "component", type: DocumentUploadComponent, selector: "lib-document-upload", inputs: ["contextId", "isDocumentSaveBtnClicked", "isDocumentSidebarClosed", "isFormHide", "isMultiAttachmentHidden"], outputs: ["onFormValidationChange", "onUploadSuccess", "onFilesUploaded", "hasUnsavedChangesChange", "onFileRemoved"] }, { kind: "component", type: DocumentStatusComponent, selector: "lib-document-status", inputs: ["contextId", "statusData"] }, { kind: "component", type: DocumentSearchComponent, selector: "document-search", inputs: ["contextId"], outputs: ["onActionClick", "onRequestClick"] }, { kind: "component", type: SidebarComponent, selector: "lib-sidebar", inputs: ["visible", "position", "width", "title", "showCloseButton", "modal", "dismissible", "styleClass", "appendTo", "blockScroll", "closeIcon", "showSaveButton", "saveButtonText", "saveButtonDisabled", "successMessage", "errorMessage", "hasUnsavedChanges"], outputs: ["visibleChange", "onShow", "onHide", "onSave", "onClose"] }, { kind: "component", type: RequestDocumentComponent, selector: "lib-request-document", inputs: ["contextId", "isRequestSaveBtnClicked", "isRequestSidebarClosed"], outputs: ["onFormValidationChange", "onRequestSuccess", "onRequestError", "hasUnsavedChangesChange"] }], animations: [
|
|
5241
5241
|
trigger('slideInOut', [
|
|
5242
5242
|
state('visible', style({
|
|
5243
5243
|
height: '*',
|
|
@@ -5291,7 +5291,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
5291
5291
|
animate('300ms cubic-bezier(0.0, 0.0, 0.2, 1)')
|
|
5292
5292
|
])
|
|
5293
5293
|
])
|
|
5294
|
-
], template: "\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\" (onRequestClick)=\"openRequestDocumentSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <!-- <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list> -->\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-sidebar\r\n #uploadSidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [successMessage]=\"'Document Saved Successfully'\"\r\n [hasUnsavedChanges]=\"hasUnsavedChanges\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n (onClose)=\"onDocumentUploadSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-document-upload \r\n [contextId]=\"contextId\" \r\n (onFormValidationChange)=\"onFormValidationChange()\" \r\n (onUploadSuccess)=\"onDocumentUploadSuccess()\"\r\n (onUploadError)=\"onDocumentUploadError($event)\"\r\n ></lib-document-upload>\r\n</lib-sidebar>\r\n\r\n<lib-sidebar\r\n #requestSidebar\r\n [(visible)]=\"isRequestDocumentSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Request Document\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'
|
|
5294
|
+
], template: "\r\n<document-search [contextId]=\"contextId\" (onActionClick)=\"openDocumentUploadSidebar()\" (onRequestClick)=\"openRequestDocumentSidebar()\"></document-search>\r\n<div class=\"user-list-wrapper\" [@slideInOut]=\"userListAnimationState\">\r\n <!-- <lib-user-list [userList]=\"userList\" [categories]=\"categories\"></lib-user-list> -->\r\n</div>\r\n<lib-document-status [contextId]=\"contextId\" [statusData]=\"statusData\"></lib-document-status>\r\n\r\n<!-- Document Upload Sidebar -->\r\n<lib-sidebar\r\n #uploadSidebar\r\n [(visible)]=\"isDocumentUploadSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Upload Documents\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Save'\"\r\n [saveButtonDisabled]=\"isSaveButtonDisabled\"\r\n [successMessage]=\"'Document Saved Successfully'\"\r\n [hasUnsavedChanges]=\"hasUnsavedChanges\"\r\n (onHide)=\"onDocumentUploadSidebarHide()\"\r\n (onSave)=\"onDocumentUploadSave()\"\r\n (onClose)=\"onDocumentUploadSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-document-upload \r\n [contextId]=\"contextId\" \r\n (onFormValidationChange)=\"onFormValidationChange()\" \r\n (onUploadSuccess)=\"onDocumentUploadSuccess()\"\r\n (onUploadError)=\"onDocumentUploadError($event)\"\r\n ></lib-document-upload>\r\n</lib-sidebar>\r\n\r\n<lib-sidebar\r\n #requestSidebar\r\n [(visible)]=\"isRequestDocumentSidebarOpen\"\r\n position=\"right\"\r\n width=\"600px\"\r\n title=\"Request Document\"\r\n [showCloseButton]=\"true\"\r\n [showSaveButton]=\"true\"\r\n [saveButtonText]=\"'Send Request'\"\r\n [successMessage]=\"'Document Requested'\"\r\n [saveButtonDisabled]=\"isRequestSaveButtonDisabled\"\r\n [hasUnsavedChanges]=\"requestHasUnsavedChanges\"\r\n (onHide)=\"onRequestDocumentSidebarHide()\"\r\n (onSave)=\"onRequestDocumentSave()\"\r\n (onClose)=\"onRequestDocumentSidebarCloseWithUnsavedChanges()\"\r\n>\r\n <lib-request-document\r\n [contextId]=\"contextId\"\r\n (onFormValidationChange)=\"onRequestFormValidationChange()\"\r\n (onRequestSuccess)=\"onRequestDocumentSuccess()\"\r\n (onRequestError)=\"onRequestDocumentError($event)\"\r\n (hasUnsavedChangesChange)=\"onRequestUnsavedChange($event)\"\r\n ></lib-request-document>\r\n</lib-sidebar>", styles: [".user-list-wrapper{overflow:hidden;margin-bottom:1rem}.user-list-wrapper ::ng-deep *{transition:opacity .2s ease-in-out}.user-list-wrapper.ng-animating{pointer-events:none}::ng-deep lib-user-list{display:block;width:100%}\n"] }]
|
|
5295
5295
|
}], ctorParameters: () => [{ type: DocumentQuery }, { type: DocumentHelperService }], propDecorators: { documentList: [{
|
|
5296
5296
|
type: Input
|
|
5297
5297
|
}], folderList: [{
|
|
@@ -6894,7 +6894,7 @@ class DocumentAiChatComponent {
|
|
|
6894
6894
|
this.documentHistoryAiService.sendQuery(this.selectedDocument);
|
|
6895
6895
|
}
|
|
6896
6896
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentAiChatComponent, deps: [{ token: DocumentHistoryAiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
6897
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentAiChatComponent, isStandalone: false, selector: "document-ai-chat", inputs: { selectedDocument: "selectedDocument" }, ngImport: i0, template: "<div class=\"chat-panel document-ai-chat-panel\">\r\n <div class=\"chat-header\">\r\n <div class=\"chat-header-content\">\r\n <div class=\"chat-header-brand\">\r\n <span class=\"chat-header-icon\"><i class=\"ri-sparkling-2-fill\"></i></span>\r\n <div class=\"chat-header-text\">\r\n <h2 class=\"chat-title\">Catura Document AI</h2>\r\n </div>\r\n </div>\r\n </div>\r\n <span class=\"chat-header-menu\" style=\"cursor: pointer;\" (click)=\"documentHistoryAiService.state.showAiSidebar = false\">\r\n <i class=\"ri-close-line\" style=\"font-size: 1.4rem;\"></i>\r\n </span>\r\n </div>\r\n\r\n <div class=\"chat-messages\">\r\n <div class=\"chat-welcome\" *ngIf=\"documentHistoryAiService.state.queryMessages.length === 0 && !documentHistoryAiService.state.queryLoading\">\r\n <div class=\"welcome-illustration\">\r\n <i class=\"ri-bubble-chart-line\"></i>\r\n </div>\r\n <h3 class=\"welcome-title\">Catura Document AI</h3>\r\n <p class=\"welcome-subtitle\">\r\n We're here to help. Ask your questions below.\r\n Your conversation is private and secure.\r\n </p>\r\n <div class=\"suggested-prompts\">\r\n <button\r\n type=\"button\"\r\n class=\"prompt-chip\"\r\n (click)=\"handleSummaryPrompt()\"\r\n >\r\n <i class=\"ri-sparkling-2-line\"></i>\r\n <span>Summarise this document</span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"prompt-chip\"\r\n (click)=\"handleInsightsPrompt()\"\r\n >\r\n <i class=\"ri-sparkling-2-line\"></i>\r\n <span>Provide Insights about this document</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"documentHistoryAiService.state.queryMessages.length > 0\">\r\n <div\r\n class=\"message\"\r\n *ngFor=\"let msg of documentHistoryAiService.state.queryMessages\"\r\n [ngClass]=\"{ 'message-user': msg.role === 'user', 'message-assistant': msg.role === 'assistant' }\"\r\n >\r\n <span class=\"message-avatar\">\r\n <i [ngClass]=\"msg.role === 'user' ? 'ri-user-3-fill' : 'ri-robot-2-line'\"></i>\r\n </span>\r\n <div class=\"message-bubble\">\r\n <ng-container *ngIf=\"msg.role === 'user'\">\r\n {{ msg.content }}\r\n </ng-container>\r\n <ng-container *ngIf=\"msg.role === 'assistant'\">\r\n <div class=\"message-content ai-markdown\" [innerHTML]=\"msg.htmlContent\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"message message-assistant\" *ngIf=\"documentHistoryAiService.state.queryLoading\">\r\n <span class=\"message-avatar\">\r\n <i class=\"ri-robot-2-line\"></i>\r\n </span>\r\n <div class=\"message-bubble\">\r\n <span class=\"loading-dots\">\r\n <span></span><span></span><span></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-input-area\">\r\n <div class=\"chat-input-wrapper\">\r\n <textarea\r\n class=\"chat-input\"\r\n [(ngModel)]=\"documentHistoryAiService.state.queryText\"\r\n [placeholder]=\"'Start Message...'\"\r\n [disabled]=\"documentHistoryAiService.state.queryLoading\"\r\n rows=\"1\"\r\n (keydown)=\"handleEnter($event)\"\r\n ></textarea>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"p-button p-button-primary send-btn\"\r\n (click)=\"handleSend()\"\r\n [disabled]=\"\r\n documentHistoryAiService.state.queryLoading ||\r\n !documentHistoryAiService.state.queryText?.trim()\r\n \"\r\n aria-label=\"Send\"\r\n >\r\n <i class=\"ri-send-plane-fill\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n", styles: [":host{display:flex;flex-direction:column;flex:1;width:100%;height:100%;min-height:0}.document-ai-chat-panel{flex:1;width:100%;max-width:100%;min-height:0;max-height:none;background:#fff;display:flex;flex-direction:column;overflow:hidden}.chat-header{padding:.75rem 1rem;background:#fff;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;gap:.75rem}.chat-header-content,.chat-header-brand{display:flex;align-items:center;gap:.6rem}.chat-header-icon{width:28px;height:28px;border-radius:999px;background:#e6f3ff;display:flex;align-items:center;justify-content:center}.chat-header-icon i{font-size:1.1rem;color:#0f8bfd}.chat-header-text{display:flex;flex-direction:column}.chat-title{font-weight:600;font-size:.9rem;color:#1f2937;margin:0}.chat-header-menu{color:#676b89;font-size:1.1rem}.chat-messages{flex:1;overflow-y:auto;padding:1.5rem 1.25rem 1rem;display:flex;flex-direction:column;gap:.75rem;background:#fff}.chat-welcome{display:flex;flex-direction:column;align-items:center;text-align:center;padding:0 0 1.5rem}.welcome-illustration{width:56px;height:56px;border-radius:999px;background:linear-gradient(135deg,#e6f3ff,#0f8bfd14);display:flex;align-items:center;justify-content:center;margin-bottom:1rem}.welcome-illustration i{font-size:1.75rem;color:#0f8bfd}.welcome-title{font-size:.95rem;font-weight:600;color:#1f2937;margin:0 0 .25rem}.welcome-subtitle{font-size:.8rem;color:#676b89;margin:0 0 1.25rem}.suggested-prompts{display:flex;flex-direction:column;gap:.5rem;width:100%;max-width:260px}.prompt-chip{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.6rem 1.2rem;border-radius:999px;border:1px solid #bfdbfe;background:#eff6ff;color:#026fd4;font-size:.8rem;font-weight:500;cursor:pointer;transition:all .2s ease}.prompt-chip i{font-size:1rem}.prompt-chip:hover{background:#dbeafe;border-color:#0f8bfd}.message{display:flex;align-items:flex-end;gap:.4rem;margin-bottom:1.5rem}.message:last-child{margin-bottom:0}.message.message-user{flex-direction:row-reverse}.message.message-assistant{flex-direction:row}.message-avatar{width:28px;height:28px;border-radius:999px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.95rem}.message-user .message-avatar{background:linear-gradient(135deg,#0f8bfd,#026fd4);color:#fff}.message-assistant .message-avatar{background:#e6f3ff;color:#0f8bfd}.message-bubble{max-width:82%;padding:.6rem .9rem;border-radius:14px;font-size:.85rem;line-height:1.5;white-space:pre-wrap;word-break:break-word}.message-user .message-bubble{background:linear-gradient(135deg,#0f8bfd,#026fd4);color:#fff;border-bottom-right-radius:6px}.message-assistant .message-bubble{background:#f3f4f6;color:#1f2937;border-bottom-left-radius:6px;border:1px solid #e5e7eb}.loading-dots{display:inline-flex;gap:5px;align-items:center}.loading-dots span{width:6px;height:6px;border-radius:50%;background:#026fd4;opacity:.6;animation:loading-bounce 1.2s ease-in-out infinite both}.loading-dots span:nth-child(1){animation-delay:-.24s}.loading-dots span:nth-child(2){animation-delay:-.12s}@keyframes loading-bounce{0%,80%,to{transform:scale(.7);opacity:.5}40%{transform:scale(1);opacity:1}}.chat-input-area{padding:.75rem 1rem 1rem;background:#fff;border-top:1px solid #e5e7eb;display:flex;gap:.5rem;align-items:center}.chat-input-wrapper{flex:1;display:flex;align-items:center;min-height:40px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:999px;padding:.25rem .85rem}.chat-input{flex:1;border:none;background:transparent;font-size:.85rem;line-height:1.5;outline:none}.chat-input::placeholder{color:#676b89}.send-btn{width:36px;height:36px;border-radius:999px;display:flex;align-items:center;justify-content:center;background:#0f8bfd;border:none;color:#fff}.send-btn i{font-size:1rem}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type:
|
|
6897
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentAiChatComponent, isStandalone: false, selector: "document-ai-chat", inputs: { selectedDocument: "selectedDocument" }, ngImport: i0, template: "<div class=\"chat-panel document-ai-chat-panel\">\r\n <div class=\"chat-header\">\r\n <div class=\"chat-header-content\">\r\n <div class=\"chat-header-brand\">\r\n <span class=\"chat-header-icon\"><i class=\"ri-sparkling-2-fill\"></i></span>\r\n <div class=\"chat-header-text\">\r\n <h2 class=\"chat-title\">Catura Document AI</h2>\r\n </div>\r\n </div>\r\n </div>\r\n <span class=\"chat-header-menu\" style=\"cursor: pointer;\" (click)=\"documentHistoryAiService.state.showAiSidebar = false\">\r\n <i class=\"ri-close-line\" style=\"font-size: 1.4rem;\"></i>\r\n </span>\r\n </div>\r\n\r\n <div class=\"chat-messages\">\r\n <div class=\"chat-welcome\" *ngIf=\"documentHistoryAiService.state.queryMessages.length === 0 && !documentHistoryAiService.state.queryLoading\">\r\n <div class=\"welcome-illustration\">\r\n <i class=\"ri-bubble-chart-line\"></i>\r\n </div>\r\n <h3 class=\"welcome-title\">Catura Document AI</h3>\r\n <p class=\"welcome-subtitle\">\r\n We're here to help. Ask your questions below.\r\n Your conversation is private and secure.\r\n </p>\r\n <div class=\"suggested-prompts\">\r\n <button\r\n type=\"button\"\r\n class=\"prompt-chip\"\r\n (click)=\"handleSummaryPrompt()\"\r\n >\r\n <i class=\"ri-sparkling-2-line\"></i>\r\n <span>Summarise this document</span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"prompt-chip\"\r\n (click)=\"handleInsightsPrompt()\"\r\n >\r\n <i class=\"ri-sparkling-2-line\"></i>\r\n <span>Provide Insights about this document</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"documentHistoryAiService.state.queryMessages.length > 0\">\r\n <div\r\n class=\"message\"\r\n *ngFor=\"let msg of documentHistoryAiService.state.queryMessages\"\r\n [ngClass]=\"{ 'message-user': msg.role === 'user', 'message-assistant': msg.role === 'assistant' }\"\r\n >\r\n <span class=\"message-avatar\">\r\n <i [ngClass]=\"msg.role === 'user' ? 'ri-user-3-fill' : 'ri-robot-2-line'\"></i>\r\n </span>\r\n <div class=\"message-bubble\">\r\n <ng-container *ngIf=\"msg.role === 'user'\">\r\n {{ msg.content }}\r\n </ng-container>\r\n <ng-container *ngIf=\"msg.role === 'assistant'\">\r\n <div class=\"message-content ai-markdown\" [innerHTML]=\"msg.htmlContent\"></div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"message message-assistant\" *ngIf=\"documentHistoryAiService.state.queryLoading\">\r\n <span class=\"message-avatar\">\r\n <i class=\"ri-robot-2-line\"></i>\r\n </span>\r\n <div class=\"message-bubble\">\r\n <span class=\"loading-dots\">\r\n <span></span><span></span><span></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-input-area\">\r\n <div class=\"chat-input-wrapper\">\r\n <textarea\r\n class=\"chat-input\"\r\n [(ngModel)]=\"documentHistoryAiService.state.queryText\"\r\n [placeholder]=\"'Start Message...'\"\r\n [disabled]=\"documentHistoryAiService.state.queryLoading\"\r\n rows=\"1\"\r\n (keydown)=\"handleEnter($event)\"\r\n ></textarea>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"p-button p-button-primary send-btn\"\r\n (click)=\"handleSend()\"\r\n [disabled]=\"\r\n documentHistoryAiService.state.queryLoading ||\r\n !documentHistoryAiService.state.queryText?.trim()\r\n \"\r\n aria-label=\"Send\"\r\n >\r\n <i class=\"ri-send-plane-fill\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n", styles: [":host{display:flex;flex-direction:column;flex:1;width:100%;height:100%;min-height:0}.document-ai-chat-panel{flex:1;width:100%;max-width:100%;min-height:0;max-height:none;background:#fff;display:flex;flex-direction:column;overflow:hidden}.chat-header{padding:.75rem 1rem;background:#fff;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;gap:.75rem}.chat-header-content,.chat-header-brand{display:flex;align-items:center;gap:.6rem}.chat-header-icon{width:28px;height:28px;border-radius:999px;background:#e6f3ff;display:flex;align-items:center;justify-content:center}.chat-header-icon i{font-size:1.1rem;color:#0f8bfd}.chat-header-text{display:flex;flex-direction:column}.chat-title{font-weight:600;font-size:.9rem;color:#1f2937;margin:0}.chat-header-menu{color:#676b89;font-size:1.1rem}.chat-messages{flex:1;overflow-y:auto;padding:1.5rem 1.25rem 1rem;display:flex;flex-direction:column;gap:.75rem;background:#fff}.chat-welcome{display:flex;flex-direction:column;align-items:center;text-align:center;padding:0 0 1.5rem}.welcome-illustration{width:56px;height:56px;border-radius:999px;background:linear-gradient(135deg,#e6f3ff,#0f8bfd14);display:flex;align-items:center;justify-content:center;margin-bottom:1rem}.welcome-illustration i{font-size:1.75rem;color:#0f8bfd}.welcome-title{font-size:.95rem;font-weight:600;color:#1f2937;margin:0 0 .25rem}.welcome-subtitle{font-size:.8rem;color:#676b89;margin:0 0 1.25rem}.suggested-prompts{display:flex;flex-direction:column;gap:.5rem;width:100%;max-width:260px}.prompt-chip{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.6rem 1.2rem;border-radius:999px;border:1px solid #bfdbfe;background:#eff6ff;color:#026fd4;font-size:.8rem;font-weight:500;cursor:pointer;transition:all .2s ease}.prompt-chip i{font-size:1rem}.prompt-chip:hover{background:#dbeafe;border-color:#0f8bfd}.message{display:flex;align-items:flex-end;gap:.4rem;margin-bottom:1.5rem}.message:last-child{margin-bottom:0}.message.message-user{flex-direction:row-reverse}.message.message-assistant{flex-direction:row}.message-avatar{width:28px;height:28px;border-radius:999px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.95rem}.message-user .message-avatar{background:linear-gradient(135deg,#0f8bfd,#026fd4);color:#fff}.message-assistant .message-avatar{background:#e6f3ff;color:#0f8bfd}.message-bubble{max-width:82%;padding:.6rem .9rem;border-radius:14px;font-size:.85rem;line-height:1.5;white-space:pre-wrap;word-break:break-word}.message-user .message-bubble{background:linear-gradient(135deg,#0f8bfd,#026fd4);color:#fff;border-bottom-right-radius:6px}.message-assistant .message-bubble{background:#f3f4f6;color:#1f2937;border-bottom-left-radius:6px;border:1px solid #e5e7eb}.loading-dots{display:inline-flex;gap:5px;align-items:center}.loading-dots span{width:6px;height:6px;border-radius:50%;background:#026fd4;opacity:.6;animation:loading-bounce 1.2s ease-in-out infinite both}.loading-dots span:nth-child(1){animation-delay:-.24s}.loading-dots span:nth-child(2){animation-delay:-.12s}@keyframes loading-bounce{0%,80%,to{transform:scale(.7);opacity:.5}40%{transform:scale(1);opacity:1}}.chat-input-area{padding:.75rem 1rem 1rem;background:#fff;border-top:1px solid #e5e7eb;display:flex;gap:.5rem;align-items:center}.chat-input-wrapper{flex:1;display:flex;align-items:center;min-height:40px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:999px;padding:.25rem .85rem}.chat-input{flex:1;border:none;background:transparent;font-size:.85rem;line-height:1.5;outline:none}.chat-input::placeholder{color:#676b89}.send-btn{width:36px;height:36px;border-radius:999px;display:flex;align-items:center;justify-content:center;background:#0f8bfd;border:none;color:#fff}.send-btn i{font-size:1rem}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
6898
6898
|
}
|
|
6899
6899
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentAiChatComponent, decorators: [{
|
|
6900
6900
|
type: Component,
|
|
@@ -8231,7 +8231,7 @@ class DocumentZoomControlsComponent {
|
|
|
8231
8231
|
}
|
|
8232
8232
|
}
|
|
8233
8233
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentZoomControlsComponent, deps: [{ token: DocumentZoomService }, { token: DocumentHttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
8234
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentZoomControlsComponent, isStandalone: false, selector: "document-zoom-controls", inputs: { selectedDocument: "selectedDocument", contextId: "contextId", isFormHide: "isFormHide" }, outputs: { documentNameUpdated: "documentNameUpdated" }, ngImport: i0, template: "<div class=\"control-container\">\r\n <div class=\"inline-flex align-items-center justify-content-center gap-2\">\r\n <!-- Document name display with hover edit icon -->\r\n <div *ngIf=\"!isEditingDocumentName\" class=\"document-name-display\" \r\n [class.clickable-doc-name]=\"selectedDocument?.isAliasEditable\" \r\n [class.non-clickable-doc-name]=\"!selectedDocument?.isAliasEditable\"\r\n (click)=\"selectedDocument?.isAliasEditable ? onDocumentNameClick() : null\"\r\n [title]=\"selectedDocument?.isAliasEditable ? 'Click to edit document name' : 'Document name is not editable'\">\r\n <div class=\"alias-name\">\r\n {{ selectedDocument?.aliasName || selectedDocument?.docName }}\r\n <i *ngIf=\"selectedDocument?.isAliasEditable && !isFormHide\" class=\"pi pi-pencil edit-icon-small\"></i> \r\n </div>\r\n <!-- Subline: show `ownerName documentTypeName` (falls back to just type if no owner) -->\r\n <div class=\"document-name\">\r\n <ng-container [ngTemplateOutlet]=\"ownerTypeDisplay\"></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isEditingDocumentName\" class=\"document-edit-container\">\r\n <input #fileInput type=\"text\" class=\"h-3rem file-input-wrapper document-name-input\" pInputText\r\n [(ngModel)]=\"documentName\" (input)=\"onDocumentNameChange($event)\" (keydown.escape)=\"cancelDocumentNameEdit()\"\r\n (keydown.enter)=\"handleSaveClick()\" (blur)=\"handleSaveClick()\" />\r\n <div class=\"document-name-subline\">\r\n <ng-container [ngTemplateOutlet]=\"ownerTypeDisplay\"></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"fileNameError\" class=\"error-message-wrapper\">\r\n {{ fileNameError }}\r\n </div>\r\n </div>\r\n <div class=\"zoom-controls\">\r\n <p-button type=\"button\" icon=\"pi pi-minus\" [rounded]=\"true\" severity=\"secondary\" [outlined]=\"true\" (click)=\"zoomOut()\" [disabled]=\"isZoomOutDisabled\" title=\"Zoom Out\">\r\n </p-button>\r\n <p-button type=\"button\" icon=\"pi pi-plus\" [rounded]=\"true\" severity=\"secondary\" [outlined]=\"true\" (click)=\"zoomIn()\" [disabled]=\"isZoomInDisabled\" title=\"Zoom In\">\r\n </p-button>\r\n \r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Shared template for displaying Owner + Type -->\r\n<ng-template #ownerTypeDisplay>\r\n <ng-container *ngIf=\"((selectedDocument?.ownerName || '').trim()).length > 0; else onlyTypeTpl\">\r\n {{ selectedDocument?.ownerName }}<ng-container *ngIf=\"selectedDocument?.documentTypeName\"> {{ selectedDocument?.documentTypeName }}</ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #onlyTypeTpl>\r\n {{ selectedDocument?.documentTypeName }}\r\n\r\n", styles: ["@charset \"UTF-8\";.control-container{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:0;width:100%}.document-name-display{display:flex;flex-direction:column;gap:.25rem;cursor:pointer;padding:.75rem;border-radius:.5rem;transition:all .2s ease;border:1px solid transparent;margin-right:auto}.document-name-display:hover{background-color:transparent;border-color:transparent;transform:none;box-shadow:none}.document-name-display.non-clickable-doc-name{cursor:default}.document-name-display .alias-name{font-weight:600;color:#1e293b;font-size:1.125rem;display:flex;align-items:center;gap:.5rem;line-height:1.4}.document-name-display .alias-name .edit-icon-small{font-size:.75rem;color:#64748b;opacity:.7;transition:all .2s ease;padding:.25rem;border-radius:.25rem}.document-name-display.clickable-doc-name .alias-name:hover{color:#1d4ed8}.document-name-display .document-name{font-size:.875rem;color:#64748b;font-weight:400;line-height:1.3;word-break:break-all}.document-name-display.clickable-doc-name:hover .edit-icon-small{opacity:1;color:#475569}.document-edit-container{display:flex;flex-direction:column;gap:.375rem;padding:0;background:transparent;border-radius:0;border:none}.document-edit-container .document-name-input{border:none!important;border-bottom:2px solid #3b82f6!important;border-radius:0!important;padding:.25rem 0!important;font-size:1.125rem!important;font-weight:600!important;color:#1e293b!important;background:transparent!important;transition:border-color .2s ease;width:auto;min-width:12rem;max-width:100%;box-shadow:none!important;outline:none!important}.document-edit-container .document-name-input:focus{outline:none!important;border-bottom-color:#1d4ed8!important;box-shadow:none!important}.document-edit-container .document-name-input::placeholder{color:#94a3b8;font-weight:400}.document-edit-container .document-name-subline{font-size:.875rem;color:#94a3b8;padding-left:0;line-height:1.3}:host ::ng-deep .document-name-input.p-inputtext,:host ::ng-deep .document-name-input.p-inputtext:enabled:focus,:host ::ng-deep .document-name-input.p-inputtext:focus{border:none!important;border-bottom:2px solid #3b82f6!important;border-radius:0!important;box-shadow:none!important;outline:none!important;background:transparent!important}:host ::ng-deep .document-name-input.p-inputtext:hover,:host ::ng-deep .document-name-input.p-inputtext:enabled:hover{border:none!important;border-bottom:2px solid #1d4ed8!important;border-radius:0!important;box-shadow:none!important;outline:none!important;background:transparent!important}.error-message-wrapper{color:#dc2626;font-size:.875rem;font-weight:500;padding:.5rem .75rem;background-color:#fef2f2;border:1px solid #fecaca;border-radius:.5rem;margin-top:.25rem;display:flex;align-items:center;gap:.5rem}.error-message-wrapper:before{content:\"\\26a0\";font-size:1rem}.zoom-controls{display:flex;align-items:center;gap:.75rem;transition:all .2s ease;margin-left:auto;padding-right:10px}.zoom-controls .zoom-button{width:44px;height:44px;border-radius:.5rem;border:none;background:#fff;color:#475569;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;font-size:1.25rem;font-weight:600;box-shadow:0 1px 3px #0000001a}.zoom-controls .zoom-button:hover:not(:disabled){background:#3b82f6;color:#fff;transform:translateY(-2px);box-shadow:0 6px 16px #3b82f666}.zoom-controls .zoom-button:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #3b82f64d}.zoom-controls .zoom-button:disabled{opacity:.4;cursor:not-allowed;background:#f1f5f9;color:#94a3b8;transform:none}.zoom-controls .zoom-button i{font-size:1rem;transition:transform .2s ease}.zoom-controls .zoom-button:hover:not(:disabled) i{transform:scale(1.1)}.zoom-controls .zoom-level{min-width:4.5rem;text-align:center;font-weight:700;color:#1e293b;font-size:1rem;background:#fff;padding:.75rem 1rem;border-radius:.5rem;border:1px solid #e2e8f0;box-shadow:0 1px 2px #0000000d;transition:all .2s ease;-webkit-user-select:none;user-select:none}.zoom-controls .zoom-level:hover{background:#f8fafc;border-color:#cbd5e1;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.zoom-controls .reset-button{padding:.75rem 1.25rem;border:1px solid #cbd5e1;background:#fff;color:#64748b;border-radius:.5rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;box-shadow:0 1px 2px #0000000d;white-space:nowrap}.zoom-controls .reset-button:hover{background:#f8fafc;border-color:#94a3b8;color:#475569;transform:translateY(-1px);box-shadow:0 3px 6px #0000001a}.zoom-controls .reset-button:active{transform:translateY(0)}@media (max-width: 768px){.control-container{gap:.75rem;flex-direction:column;align-items:stretch;justify-content:flex-start}.document-name-display{margin-right:0;margin-bottom:.5rem}.zoom-controls{margin-left:0;align-self:flex-end}.zoom-controls{padding:.75rem;gap:.5rem;flex-wrap:wrap;justify-content:center}.zoom-controls .zoom-button{width:40px;height:40px}.zoom-controls .zoom-level{min-width:4rem;padding:.5rem .75rem}.zoom-controls .reset-button{padding:.5rem 1rem;font-size:.8rem}.document-name-display{padding:.5rem}.document-name-display .alias-name{font-size:1rem}}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i9.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type:
|
|
8234
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentZoomControlsComponent, isStandalone: false, selector: "document-zoom-controls", inputs: { selectedDocument: "selectedDocument", contextId: "contextId", isFormHide: "isFormHide" }, outputs: { documentNameUpdated: "documentNameUpdated" }, ngImport: i0, template: "<div class=\"control-container\">\r\n <div class=\"inline-flex align-items-center justify-content-center gap-2\">\r\n <!-- Document name display with hover edit icon -->\r\n <div *ngIf=\"!isEditingDocumentName\" class=\"document-name-display\" \r\n [class.clickable-doc-name]=\"selectedDocument?.isAliasEditable\" \r\n [class.non-clickable-doc-name]=\"!selectedDocument?.isAliasEditable\"\r\n (click)=\"selectedDocument?.isAliasEditable ? onDocumentNameClick() : null\"\r\n [title]=\"selectedDocument?.isAliasEditable ? 'Click to edit document name' : 'Document name is not editable'\">\r\n <div class=\"alias-name\">\r\n {{ selectedDocument?.aliasName || selectedDocument?.docName }}\r\n <i *ngIf=\"selectedDocument?.isAliasEditable && !isFormHide\" class=\"pi pi-pencil edit-icon-small\"></i> \r\n </div>\r\n <!-- Subline: show `ownerName documentTypeName` (falls back to just type if no owner) -->\r\n <div class=\"document-name\">\r\n <ng-container [ngTemplateOutlet]=\"ownerTypeDisplay\"></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isEditingDocumentName\" class=\"document-edit-container\">\r\n <input #fileInput type=\"text\" class=\"h-3rem file-input-wrapper document-name-input\" pInputText\r\n [(ngModel)]=\"documentName\" (input)=\"onDocumentNameChange($event)\" (keydown.escape)=\"cancelDocumentNameEdit()\"\r\n (keydown.enter)=\"handleSaveClick()\" (blur)=\"handleSaveClick()\" />\r\n <div class=\"document-name-subline\">\r\n <ng-container [ngTemplateOutlet]=\"ownerTypeDisplay\"></ng-container>\r\n </div>\r\n </div>\r\n <div *ngIf=\"fileNameError\" class=\"error-message-wrapper\">\r\n {{ fileNameError }}\r\n </div>\r\n </div>\r\n <div class=\"zoom-controls\">\r\n <p-button type=\"button\" icon=\"pi pi-minus\" [rounded]=\"true\" severity=\"secondary\" [outlined]=\"true\" (click)=\"zoomOut()\" [disabled]=\"isZoomOutDisabled\" title=\"Zoom Out\">\r\n </p-button>\r\n <p-button type=\"button\" icon=\"pi pi-plus\" [rounded]=\"true\" severity=\"secondary\" [outlined]=\"true\" (click)=\"zoomIn()\" [disabled]=\"isZoomInDisabled\" title=\"Zoom In\">\r\n </p-button>\r\n \r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Shared template for displaying Owner + Type -->\r\n<ng-template #ownerTypeDisplay>\r\n <ng-container *ngIf=\"((selectedDocument?.ownerName || '').trim()).length > 0; else onlyTypeTpl\">\r\n {{ selectedDocument?.ownerName }}<ng-container *ngIf=\"selectedDocument?.documentTypeName\"> {{ selectedDocument?.documentTypeName }}</ng-container>\r\n </ng-container>\r\n</ng-template>\r\n<ng-template #onlyTypeTpl>\r\n {{ selectedDocument?.documentTypeName }}\r\n\r\n", styles: ["@charset \"UTF-8\";.control-container{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:0;width:100%}.document-name-display{display:flex;flex-direction:column;gap:.25rem;cursor:pointer;padding:.75rem;border-radius:.5rem;transition:all .2s ease;border:1px solid transparent;margin-right:auto}.document-name-display:hover{background-color:transparent;border-color:transparent;transform:none;box-shadow:none}.document-name-display.non-clickable-doc-name{cursor:default}.document-name-display .alias-name{font-weight:600;color:#1e293b;font-size:1.125rem;display:flex;align-items:center;gap:.5rem;line-height:1.4}.document-name-display .alias-name .edit-icon-small{font-size:.75rem;color:#64748b;opacity:.7;transition:all .2s ease;padding:.25rem;border-radius:.25rem}.document-name-display.clickable-doc-name .alias-name:hover{color:#1d4ed8}.document-name-display .document-name{font-size:.875rem;color:#64748b;font-weight:400;line-height:1.3;word-break:break-all}.document-name-display.clickable-doc-name:hover .edit-icon-small{opacity:1;color:#475569}.document-edit-container{display:flex;flex-direction:column;gap:.375rem;padding:0;background:transparent;border-radius:0;border:none}.document-edit-container .document-name-input{border:none!important;border-bottom:2px solid #3b82f6!important;border-radius:0!important;padding:.25rem 0!important;font-size:1.125rem!important;font-weight:600!important;color:#1e293b!important;background:transparent!important;transition:border-color .2s ease;width:auto;min-width:12rem;max-width:100%;box-shadow:none!important;outline:none!important}.document-edit-container .document-name-input:focus{outline:none!important;border-bottom-color:#1d4ed8!important;box-shadow:none!important}.document-edit-container .document-name-input::placeholder{color:#94a3b8;font-weight:400}.document-edit-container .document-name-subline{font-size:.875rem;color:#94a3b8;padding-left:0;line-height:1.3}:host ::ng-deep .document-name-input.p-inputtext,:host ::ng-deep .document-name-input.p-inputtext:enabled:focus,:host ::ng-deep .document-name-input.p-inputtext:focus{border:none!important;border-bottom:2px solid #3b82f6!important;border-radius:0!important;box-shadow:none!important;outline:none!important;background:transparent!important}:host ::ng-deep .document-name-input.p-inputtext:hover,:host ::ng-deep .document-name-input.p-inputtext:enabled:hover{border:none!important;border-bottom:2px solid #1d4ed8!important;border-radius:0!important;box-shadow:none!important;outline:none!important;background:transparent!important}.error-message-wrapper{color:#dc2626;font-size:.875rem;font-weight:500;padding:.5rem .75rem;background-color:#fef2f2;border:1px solid #fecaca;border-radius:.5rem;margin-top:.25rem;display:flex;align-items:center;gap:.5rem}.error-message-wrapper:before{content:\"\\26a0\";font-size:1rem}.zoom-controls{display:flex;align-items:center;gap:.75rem;transition:all .2s ease;margin-left:auto;padding-right:10px}.zoom-controls .zoom-button{width:44px;height:44px;border-radius:.5rem;border:none;background:#fff;color:#475569;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .2s ease;font-size:1.25rem;font-weight:600;box-shadow:0 1px 3px #0000001a}.zoom-controls .zoom-button:hover:not(:disabled){background:#3b82f6;color:#fff;transform:translateY(-2px);box-shadow:0 6px 16px #3b82f666}.zoom-controls .zoom-button:active:not(:disabled){transform:translateY(0);box-shadow:0 2px 6px #3b82f64d}.zoom-controls .zoom-button:disabled{opacity:.4;cursor:not-allowed;background:#f1f5f9;color:#94a3b8;transform:none}.zoom-controls .zoom-button i{font-size:1rem;transition:transform .2s ease}.zoom-controls .zoom-button:hover:not(:disabled) i{transform:scale(1.1)}.zoom-controls .zoom-level{min-width:4.5rem;text-align:center;font-weight:700;color:#1e293b;font-size:1rem;background:#fff;padding:.75rem 1rem;border-radius:.5rem;border:1px solid #e2e8f0;box-shadow:0 1px 2px #0000000d;transition:all .2s ease;-webkit-user-select:none;user-select:none}.zoom-controls .zoom-level:hover{background:#f8fafc;border-color:#cbd5e1;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.zoom-controls .reset-button{padding:.75rem 1.25rem;border:1px solid #cbd5e1;background:#fff;color:#64748b;border-radius:.5rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s ease;box-shadow:0 1px 2px #0000000d;white-space:nowrap}.zoom-controls .reset-button:hover{background:#f8fafc;border-color:#94a3b8;color:#475569;transform:translateY(-1px);box-shadow:0 3px 6px #0000001a}.zoom-controls .reset-button:active{transform:translateY(0)}@media (max-width: 768px){.control-container{gap:.75rem;flex-direction:column;align-items:stretch;justify-content:flex-start}.document-name-display{margin-right:0;margin-bottom:.5rem}.zoom-controls{margin-left:0;align-self:flex-end}.zoom-controls{padding:.75rem;gap:.5rem;flex-wrap:wrap;justify-content:center}.zoom-controls .zoom-button{width:40px;height:40px}.zoom-controls .zoom-level{min-width:4rem;padding:.5rem .75rem}.zoom-controls .reset-button{padding:.5rem 1rem;font-size:.8rem}.document-name-display{padding:.5rem}.document-name-display .alias-name{font-size:1rem}}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i9.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6$1.InputText, selector: "[pInputText]", inputs: ["variant"] }] });
|
|
8235
8235
|
}
|
|
8236
8236
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentZoomControlsComponent, decorators: [{
|
|
8237
8237
|
type: Component,
|
|
@@ -8878,13 +8878,13 @@ class DocumentContentViewerComponent {
|
|
|
8878
8878
|
this.emailPdfUrl = null;
|
|
8879
8879
|
}
|
|
8880
8880
|
}
|
|
8881
|
-
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$
|
|
8881
|
+
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 });
|
|
8882
8882
|
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\">\r\n <!-- Preview must not require contentType: APIs often omit MIME while still returning documentUrl + filename extension. -->\r\n @if(documentUrl){\r\n <!-- Zoom Controls -->\r\n <div class=\"zoom-controls-wrapper\">\r\n <document-zoom-controls [selectedDocument]=\"selectedDocument\" [contextId]=\"contextId\" [isFormHide]=\"isFormHide\">\r\n </document-zoom-controls>\r\n </div>\r\n\r\n <!-- PDF Viewer -->\r\n @if(isPdf){\r\n <div class=\"pdf-container\">\r\n <pdf-viewer [src]=\"documentUrl\" [rotation]=\"0\" [original-size]=\"false\" [show-all]=\"true\" [fit-to-page]=\"false\"\r\n [zoom]=\"currentZoom / 100\" [zoom-scale]=\"'page-width'\" [stick-to-page]=\"false\" [render-text]=\"true\"\r\n [external-link-target]=\"'blank'\" [autoresize]=\"true\" [show-borders]=\"false\"\r\n style=\"width: 100%; height: 100%\"></pdf-viewer>\r\n </div>\r\n }\r\n\r\n <!-- Image Viewer -->\r\n @else if(isImage){\r\n <div class=\"image-container\">\r\n <img [src]=\"documentUrl\" [alt]=\"documentName || 'Document Image'\" class=\"document-image\"\r\n [style.transform]=\"'scale(' + (currentZoom / 100) + ')'\" [style.transform-origin]=\"'center center'\" />\r\n </div>\r\n }\r\n\r\n <!-- Excel Files -->\r\n @else if(isExcel){\r\n <div class=\"excel-container\">\r\n @if(isLoadingExcel){\r\n <div class=\"loading-container\">\r\n <div class=\"loading-content\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem; color: #3b82f6;\"></i>\r\n <p>Loading Excel file...</p>\r\n </div>\r\n </div>\r\n }@else if(excelError){\r\n <div class=\"error-container\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-exclamation-triangle\" style=\"font-size: 3rem; color: #ef4444;\"></i>\r\n <h4>Error Loading Excel File</h4>\r\n <p>{{ excelError }}</p>\r\n <div class=\"error-actions\">\r\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\r\n <i class=\"pi pi-download\"></i>\r\n Download Instead\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @else if(excelData){\r\n <div class=\"excel-container\">\r\n <div class=\"excel-zoom-wrapper\" [class.zoomed]=\"currentZoom !== 100\" (wheel)=\"onWheel($event)\">\r\n <ngx-doc-viewer [url]=\"documentUrl\" viewer=\"office\" style=\"width:100%;height:97%;\"></ngx-doc-viewer>\r\n <!-- Invisible overlay to capture wheel events over document content -->\r\n <div class=\"wheel-capture-overlay\" (wheel)=\"onWheel($event)\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Word Files -->\r\n @else if(isWord){\r\n <div class=\"docx-container\">\r\n <div class=\"doc-viewer-wrapper\" [class.zoomed]=\"currentZoom !== 100\" (wheel)=\"onWheel($event)\">\r\n <ngx-doc-viewer [url]=\"documentUrl\" viewer=\"office\" style=\"width:100%;height:97%;\"></ngx-doc-viewer>\r\n <div class=\"wheel-capture-overlay\" (wheel)=\"onWheel($event)\"></div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- CSV Files -->\r\n @else if(isCsv){\r\n <div class=\"csv-container\">\r\n @if(isLoadingCsv){\r\n <div class=\"loading-container\">\r\n <div class=\"loading-content\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem; color: #3b82f6;\"></i>\r\n <p>Loading CSV file...</p>\r\n </div>\r\n </div>\r\n }@else if(csvError){\r\n <div class=\"error-container\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-exclamation-triangle\" style=\"font-size: 3rem; color: #ef4444;\"></i>\r\n <h4>Error Loading CSV File</h4>\r\n <p>{{ csvError }}</p>\r\n <div class=\"error-actions\">\r\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\r\n <i class=\"pi pi-download\"></i>\r\n Download Instead\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @else if(csvData){\r\n <div class=\"csv-content\">\r\n <div class=\"csv-header\">\r\n <div class=\"csv-info\">\r\n <p>{{ documentName || 'CSV File' }}</p>\r\n <span class=\"csv-stats\">\r\n {{ csvData.totalRows }} rows \u00D7 {{ csvData.totalColumns }} columns\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"csv-table-container\" [style.transform-origin]=\"'center center'\" (wheel)=\"onWheel($event)\">\r\n <p-table [value]=\"safeCsvStyledData\" [tableStyle]=\"{'min-width': '100%'}\" [scrollable]=\"true\"\r\n scrollHeight=\"67vh\" class=\"csv-table\">\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <ng-container *ngFor=\"let cell of row.cells; trackBy: trackByCell\">\r\n <td [ngClass]=\"{'csv-header-cell': cell.isHeader}\">\r\n {{ cell.value }}\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Email Files -->\r\n @else if(isEmail){\r\n <div class=\"email-container\">\r\n @if(isLoadingEmail){\r\n <div class=\"loading-container text-center m-1/2\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem;\"></i>\r\n <p>Opening email...</p>\r\n </div>\r\n }\r\n @else if(isEmailAsPdf && emailPdfUrl){\r\n <!-- Render PDF when email is converted -->\r\n <pdf-viewer [src]=\"emailPdfUrl\" [rotation]=\"0\" [original-size]=\"false\" [show-all]=\"true\" [fit-to-page]=\"false\"\r\n [zoom]=\"currentZoom/100\" [zoom-scale]=\"'page-width'\" [stick-to-page]=\"false\" [render-text]=\"true\"\r\n [external-link-target]=\"'blank'\" [autoresize]=\"true\" [show-borders]=\"false\"\r\n style=\"width: 100%; height: 82vh;\"></pdf-viewer>\r\n }\r\n @else if(emailError){\r\n <div class=\"error-container\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-exclamation-circle\" style=\"font-size: 2rem; color: #ef4444;\"></i>\r\n <h4>Unable to Preview Email</h4>\r\n <p>{{ emailError }}</p>\r\n <div class=\"error-actions\">\r\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- OpenDocument Files -->\r\n @else if(isOpenDocument){\r\n <div class=\"docx-container\">\r\n <div class=\"doc-viewer-wrapper\" [class.zoomed]=\"currentZoom !== 100\" (wheel)=\"onWheel($event)\">\r\n <ngx-doc-viewer [url]=\"documentUrl\" viewer=\"office\" style=\"width:100%;height:800px;\"></ngx-doc-viewer>\r\n <!-- Invisible overlay to capture wheel events over document content -->\r\n <div class=\"wheel-capture-overlay\" (wheel)=\"onWheel($event)\"></div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Unsupported Files -->\r\n @else if(isUnsupported){\r\n <div class=\"unsupported-document-container\">\r\n <div class=\"document-preview\">\r\n <div class=\"document-icon\">\r\n <i [class]=\"documentIcon\"></i>\r\n </div>\r\n <div class=\"document-info\">\r\n <h4>Unsupported Document Type</h4>\r\n <p>{{ documentName || 'Document' }}</p>\r\n <p class=\"document-note\">This document type ({{ contentType || 'unknown' }}) is not supported for preview. Please download to\r\n view.</p>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button type=\"button\" class=\"p-button p-button-outlined p-button-sm\" (click)=\"openInNewTab()\">\r\n <i class=\"pi pi-external-link\"></i>\r\n Open\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @else {\r\n <div class=\"no-document-container\">\r\n <div class=\"no-document-content\">\r\n <i class=\"pi pi-file-o\" style=\"font-size: 3rem; color: #6b7280;\"></i>\r\n <h4>No Document Uploaded</h4>\r\n <p>Please Upload a document to view its content.</p>\r\n </div>\r\n </div>\r\n }\r\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: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i8.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$1.NgxDocViewerComponent, selector: "ngx-doc-viewer", inputs: ["url", "queryParams", "viewerUrl", "googleCheckInterval", "googleMaxChecks", "disableContent", "googleCheckContentLoaded", "viewer", "overrideLocalhost"], outputs: ["loaded"] }, { kind: "component", type: i2$2.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 });
|
|
8883
8883
|
}
|
|
8884
8884
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentContentViewerComponent, decorators: [{
|
|
8885
8885
|
type: Component,
|
|
8886
8886
|
args: [{ selector: 'document-content-viewer', standalone: false, encapsulation: ViewEncapsulation.None, template: "<div class=\"document-content-viewer-container\">\r\n <!-- Preview must not require contentType: APIs often omit MIME while still returning documentUrl + filename extension. -->\r\n @if(documentUrl){\r\n <!-- Zoom Controls -->\r\n <div class=\"zoom-controls-wrapper\">\r\n <document-zoom-controls [selectedDocument]=\"selectedDocument\" [contextId]=\"contextId\" [isFormHide]=\"isFormHide\">\r\n </document-zoom-controls>\r\n </div>\r\n\r\n <!-- PDF Viewer -->\r\n @if(isPdf){\r\n <div class=\"pdf-container\">\r\n <pdf-viewer [src]=\"documentUrl\" [rotation]=\"0\" [original-size]=\"false\" [show-all]=\"true\" [fit-to-page]=\"false\"\r\n [zoom]=\"currentZoom / 100\" [zoom-scale]=\"'page-width'\" [stick-to-page]=\"false\" [render-text]=\"true\"\r\n [external-link-target]=\"'blank'\" [autoresize]=\"true\" [show-borders]=\"false\"\r\n style=\"width: 100%; height: 100%\"></pdf-viewer>\r\n </div>\r\n }\r\n\r\n <!-- Image Viewer -->\r\n @else if(isImage){\r\n <div class=\"image-container\">\r\n <img [src]=\"documentUrl\" [alt]=\"documentName || 'Document Image'\" class=\"document-image\"\r\n [style.transform]=\"'scale(' + (currentZoom / 100) + ')'\" [style.transform-origin]=\"'center center'\" />\r\n </div>\r\n }\r\n\r\n <!-- Excel Files -->\r\n @else if(isExcel){\r\n <div class=\"excel-container\">\r\n @if(isLoadingExcel){\r\n <div class=\"loading-container\">\r\n <div class=\"loading-content\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem; color: #3b82f6;\"></i>\r\n <p>Loading Excel file...</p>\r\n </div>\r\n </div>\r\n }@else if(excelError){\r\n <div class=\"error-container\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-exclamation-triangle\" style=\"font-size: 3rem; color: #ef4444;\"></i>\r\n <h4>Error Loading Excel File</h4>\r\n <p>{{ excelError }}</p>\r\n <div class=\"error-actions\">\r\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\r\n <i class=\"pi pi-download\"></i>\r\n Download Instead\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @else if(excelData){\r\n <div class=\"excel-container\">\r\n <div class=\"excel-zoom-wrapper\" [class.zoomed]=\"currentZoom !== 100\" (wheel)=\"onWheel($event)\">\r\n <ngx-doc-viewer [url]=\"documentUrl\" viewer=\"office\" style=\"width:100%;height:97%;\"></ngx-doc-viewer>\r\n <!-- Invisible overlay to capture wheel events over document content -->\r\n <div class=\"wheel-capture-overlay\" (wheel)=\"onWheel($event)\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Word Files -->\r\n @else if(isWord){\r\n <div class=\"docx-container\">\r\n <div class=\"doc-viewer-wrapper\" [class.zoomed]=\"currentZoom !== 100\" (wheel)=\"onWheel($event)\">\r\n <ngx-doc-viewer [url]=\"documentUrl\" viewer=\"office\" style=\"width:100%;height:97%;\"></ngx-doc-viewer>\r\n <div class=\"wheel-capture-overlay\" (wheel)=\"onWheel($event)\"></div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- CSV Files -->\r\n @else if(isCsv){\r\n <div class=\"csv-container\">\r\n @if(isLoadingCsv){\r\n <div class=\"loading-container\">\r\n <div class=\"loading-content\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem; color: #3b82f6;\"></i>\r\n <p>Loading CSV file...</p>\r\n </div>\r\n </div>\r\n }@else if(csvError){\r\n <div class=\"error-container\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-exclamation-triangle\" style=\"font-size: 3rem; color: #ef4444;\"></i>\r\n <h4>Error Loading CSV File</h4>\r\n <p>{{ csvError }}</p>\r\n <div class=\"error-actions\">\r\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\r\n <i class=\"pi pi-download\"></i>\r\n Download Instead\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @else if(csvData){\r\n <div class=\"csv-content\">\r\n <div class=\"csv-header\">\r\n <div class=\"csv-info\">\r\n <p>{{ documentName || 'CSV File' }}</p>\r\n <span class=\"csv-stats\">\r\n {{ csvData.totalRows }} rows \u00D7 {{ csvData.totalColumns }} columns\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"csv-table-container\" [style.transform-origin]=\"'center center'\" (wheel)=\"onWheel($event)\">\r\n <p-table [value]=\"safeCsvStyledData\" [tableStyle]=\"{'min-width': '100%'}\" [scrollable]=\"true\"\r\n scrollHeight=\"67vh\" class=\"csv-table\">\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr>\r\n <ng-container *ngFor=\"let cell of row.cells; trackBy: trackByCell\">\r\n <td [ngClass]=\"{'csv-header-cell': cell.isHeader}\">\r\n {{ cell.value }}\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Email Files -->\r\n @else if(isEmail){\r\n <div class=\"email-container\">\r\n @if(isLoadingEmail){\r\n <div class=\"loading-container text-center m-1/2\">\r\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem;\"></i>\r\n <p>Opening email...</p>\r\n </div>\r\n }\r\n @else if(isEmailAsPdf && emailPdfUrl){\r\n <!-- Render PDF when email is converted -->\r\n <pdf-viewer [src]=\"emailPdfUrl\" [rotation]=\"0\" [original-size]=\"false\" [show-all]=\"true\" [fit-to-page]=\"false\"\r\n [zoom]=\"currentZoom/100\" [zoom-scale]=\"'page-width'\" [stick-to-page]=\"false\" [render-text]=\"true\"\r\n [external-link-target]=\"'blank'\" [autoresize]=\"true\" [show-borders]=\"false\"\r\n style=\"width: 100%; height: 82vh;\"></pdf-viewer>\r\n }\r\n @else if(emailError){\r\n <div class=\"error-container\">\r\n <div class=\"error-content\">\r\n <i class=\"pi pi-exclamation-circle\" style=\"font-size: 2rem; color: #ef4444;\"></i>\r\n <h4>Unable to Preview Email</h4>\r\n <p>{{ emailError }}</p>\r\n <div class=\"error-actions\">\r\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- OpenDocument Files -->\r\n @else if(isOpenDocument){\r\n <div class=\"docx-container\">\r\n <div class=\"doc-viewer-wrapper\" [class.zoomed]=\"currentZoom !== 100\" (wheel)=\"onWheel($event)\">\r\n <ngx-doc-viewer [url]=\"documentUrl\" viewer=\"office\" style=\"width:100%;height:800px;\"></ngx-doc-viewer>\r\n <!-- Invisible overlay to capture wheel events over document content -->\r\n <div class=\"wheel-capture-overlay\" (wheel)=\"onWheel($event)\"></div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Unsupported Files -->\r\n @else if(isUnsupported){\r\n <div class=\"unsupported-document-container\">\r\n <div class=\"document-preview\">\r\n <div class=\"document-icon\">\r\n <i [class]=\"documentIcon\"></i>\r\n </div>\r\n <div class=\"document-info\">\r\n <h4>Unsupported Document Type</h4>\r\n <p>{{ documentName || 'Document' }}</p>\r\n <p class=\"document-note\">This document type ({{ contentType || 'unknown' }}) is not supported for preview. Please download to\r\n view.</p>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button type=\"button\" class=\"p-button p-button-primary p-button-sm\" (click)=\"downloadDocument()\">\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button type=\"button\" class=\"p-button p-button-outlined p-button-sm\" (click)=\"openInNewTab()\">\r\n <i class=\"pi pi-external-link\"></i>\r\n Open\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n @else {\r\n <div class=\"no-document-container\">\r\n <div class=\"no-document-content\">\r\n <i class=\"pi pi-file-o\" style=\"font-size: 3rem; color: #6b7280;\"></i>\r\n <h4>No Document Uploaded</h4>\r\n <p>Please Upload a document to view its content.</p>\r\n </div>\r\n </div>\r\n }\r\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"] }]
|
|
8887
|
-
}], ctorParameters: () => [{ type: ExcelParserService }, { type: CsvParserService }, { type: DocumentHttpService }, { type: DocumentZoomService }, { type: i5$
|
|
8887
|
+
}], ctorParameters: () => [{ type: ExcelParserService }, { type: CsvParserService }, { type: DocumentHttpService }, { type: DocumentZoomService }, { type: i5$1.DomSanitizer }], propDecorators: { documentUrl: [{
|
|
8888
8888
|
type: Input
|
|
8889
8889
|
}], contentType: [{
|
|
8890
8890
|
type: Input
|
|
@@ -9031,7 +9031,7 @@ class DocumentActionsComponent {
|
|
|
9031
9031
|
this.rejectNote = SHARED.EMPTY;
|
|
9032
9032
|
}
|
|
9033
9033
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentActionsComponent, deps: [{ token: DocumentActionsService }, { token: SessionService }], target: i0.ɵɵFactoryTarget.Component });
|
|
9034
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentActionsComponent, isStandalone: false, selector: "document-actions", inputs: { document: "document", documentId: "documentId", currentStatus: "currentStatus", isLoading: "isLoading", isUploaded: "isUploaded", statusId: "statusId" }, outputs: { actionPerformed: "actionPerformed" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-actions-container\" *ngIf=\"document?.status !=='Pending' && !document?.isUploaded && document?.status === 'Reviewing'\">\r\n <div class=\"actions-card\" [ngClass]=\"cardClass\">\r\n <div class=\"actions-buttons\">\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn reject-btn\" [ngClass]=\"rejectButtonClass\"\r\n (click)=\"onRejectClick()\" [disabled]=\"areButtonsDisabled || isRejecting\">\r\n <i class=\"pi pi-times\" *ngIf=\"isDocumentRejected\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isRejecting\"></i>\r\n <span>{{ isDocumentRejected ? SHARED.BUTTON_LABEL_REJECTED :\r\n SHARED.BUTTON_LABEL_REJECT }}</span>\r\n </button>\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn accept-btn\" [ngClass]=\"acceptButtonClass\"\r\n (click)=\"onAcceptClick()\" [disabled]=\"areButtonsDisabled || isAccepting\">\r\n <i class=\"pi pi-check\" *ngIf=\"isDocumentApproved\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isAccepting\"></i>\r\n <span>{{ isDocumentApproved ? SHARED.BUTTON_LABEL_ACCEPTED : SHARED.BUTTON_LABEL_ACCEPT\r\n }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<p-dialog [(visible)]=\"showAcceptDialog\" [header]=\"SHARED.ACCEPT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"acceptNote\" class=\"note-label\">{{ SHARED.ACCEPT_NOTE_LABEL }}</label>\r\n <textarea id=\"acceptNote\" pInputTextarea [(ngModel)]=\"acceptNote\" [placeholder]=\"SHARED.ACCEPT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.ACCEPT_BUTTON_LABEL\" class=\"p-button-success\" (click)=\"onAcceptConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [(visible)]=\"showRejectDialog\" [header]=\"SHARED.REJECT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"rejectNote\" class=\"note-label\">{{ SHARED.REJECT_NOTE_LABEL }}</label>\r\n <textarea id=\"rejectNote\" pInputTextarea [(ngModel)]=\"rejectNote\" [placeholder]=\"SHARED.REJECT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.REJECT_BUTTON_LABEL\" class=\"p-button-danger\" [disabled]=\"isRejectNoteEmpty\"\r\n (click)=\"onRejectConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>", styles: [".document-actions-container{margin:0}.actions-card{border-radius:8px;padding:.75rem;box-shadow:0 2px 4px #0000001a;transition:all .3s ease;width:92%;margin-left:3%}.actions-card.pending-card{background-color:#f8f9fa;border:1px solid #e9ecef}.actions-card.accepted-card{background-color:#e8f5e9;border:1px solid #66bb6a}.actions-card.rejected-card{background-color:#feeaea;border:1px solid #e57373}.actions-card[class*=status-].status-approved-card{background-color:#e8f5e9;border:1px solid #66bb6a}.actions-card[class*=status-].status-rejected-card{background-color:#feeaea;border:1px solid #e57373}.actions-card[class*=status-].status-pending-card{background-color:#f8f9fa;border:1px solid #e9ecef}.actions-buttons{display:flex;gap:.5rem;align-items:center}.action-btn{padding:.5rem 1rem;border-radius:6px;border:1px solid;font-weight:500;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;gap:.5rem;min-width:48%;justify-content:center}.action-btn:disabled{opacity:.6;cursor:not-allowed}.action-btn i{font-size:.875rem}.reject-btn.default-reject{background-color:#fff;border-color:#ef4444;color:#ef4444}.reject-btn.default-reject:hover:not(:disabled){background-color:#fef2f2;border-color:#dc2626}.reject-btn.secondary-reject{background-color:#f5f5f5;border-color:transparent;color:#4a4a4a}.reject-btn.secondary-reject:hover:not(:disabled){background-color:#edf2f7}.reject-btn.primary-reject{background-color:#feeaea;border-color:#e57373;color:#e57373}.reject-btn.primary-reject:hover:not(:disabled){background-color:#fed7d7;border-color:#fc8181}.reject-btn[class*=status-].status-approved-reject{background-color:#f5f5f5;border-color:transparent;color:#4a4a4a}.reject-btn[class*=status-].status-approved-reject:hover:not(:disabled){background-color:#edf2f7}.reject-btn[class*=status-].status-rejected-reject{background-color:#feeaea;border-color:#e57373;color:#e57373}.reject-btn[class*=status-].status-rejected-reject:hover:not(:disabled){background-color:#fed7d7;border-color:#fc8181}.reject-btn[class*=status-].status-pending-reject{background-color:#fff;border-color:#ef4444;color:#ef4444}.reject-btn[class*=status-].status-pending-reject:hover:not(:disabled){background-color:#fef2f2;border-color:#dc2626}.accept-btn.default-accept{background-color:#3b82f6;border-color:#3b82f6;color:#fff}.accept-btn.default-accept:hover:not(:disabled){background-color:#2563eb;border-color:#2563eb}.accept-btn.secondary-accept{background-color:#f5f5f5;border-color:transparent;color:#4a4a4a}.accept-btn.secondary-accept:hover:not(:disabled){background-color:#edf2f7}.accept-btn.primary-accept{background-color:#4caf50;border-color:#4caf50;color:#fff}.accept-btn.primary-accept:hover:not(:disabled){background-color:#45a049;border-color:#45a049}.accept-btn[class*=status-].status-approved-accept{background-color:#4caf50;border-color:#4caf50;color:#fff}.accept-btn[class*=status-].status-approved-accept:hover:not(:disabled){background-color:#45a049;border-color:#45a049}.accept-btn[class*=status-].status-rejected-accept{background-color:#f5f5f5;border-color:transparent;color:#4a4a4a}.accept-btn[class*=status-].status-rejected-accept:hover:not(:disabled){background-color:#edf2f7}.accept-btn[class*=status-].status-pending-accept{background-color:#3b82f6;border-color:#3b82f6;color:#fff}.accept-btn[class*=status-].status-pending-accept:hover:not(:disabled){background-color:#2563eb;border-color:#2563eb}:host ::ng-deep .confirmation-dialog .p-dialog{border-radius:8px;box-shadow:0 4px 12px #00000026;border:none;overflow:hidden}:host ::ng-deep .confirmation-dialog .p-dialog-header{padding:1.25rem 1.5rem;background-color:#fff;border-bottom:none;border-top-right-radius:10px;border-top-left-radius:10px}:host ::ng-deep .confirmation-dialog .p-dialog-header .p-dialog-header-icon{display:none}:host ::ng-deep .confirmation-dialog .p-dialog-header .p-dialog-title{font-size:1.125rem;font-weight:600;color:#2d3748;margin:0}:host ::ng-deep .confirmation-dialog .p-dialog-content{padding:1.5rem;background-color:#fff}:host ::ng-deep .confirmation-dialog .p-dialog-footer{padding:1rem 1.5rem;background-color:#f7fafc;border-top:1px solid #e2e8f0;display:flex;gap:.75rem;justify-content:flex-end;border-bottom-right-radius:10px;border-bottom-left-radius:10px}.dialog-content .note-label{display:block;margin-bottom:.75rem;font-weight:500;font-size:.875rem;color:#2d3748}.dialog-content .note-textarea{width:100%;min-height:100px;padding:.75rem;border:1px solid #e2e8f0;border-radius:6px;font-family:inherit;font-size:.875rem;line-height:1.5;resize:vertical;background-color:#fff;color:#2d3748}.dialog-content .note-textarea::placeholder{color:#a0aec0}.dialog-content .note-textarea:focus{outline:none;border-color:#3182ce;box-shadow:0 0 0 3px #3182ce1a}.dialog-footer{display:flex;gap:.75rem;justify-content:flex-end}.dialog-footer button{min-width:80px;padding:.5rem 1rem;border-radius:6px;font-weight:500;font-size:.875rem;border:1px solid;cursor:pointer;transition:all .2s ease}.dialog-footer button.p-button-secondary{background-color:#f7fafc;border-color:#e2e8f0;color:#4a5568}.dialog-footer button.p-button-secondary:hover{background-color:#edf2f7;border-color:#cbd5e0}.dialog-footer button.p-button-success{background-color:#38a169;border-color:#38a169;color:#fff}.dialog-footer button.p-button-success:hover{background-color:#2f855a;border-color:#2f855a}.dialog-footer button.p-button-danger{background-color:#e53e3e;border-color:#e53e3e;color:#fff}.dialog-footer button.p-button-danger:hover{background-color:#c53030;border-color:#c53030}.no-actions-message{display:flex;align-items:center;justify-content:center;padding:.5rem;min-height:40px}.no-actions-message .no-actions-text{color:#6b7280;font-size:.875rem;font-style:italic;text-align:center}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i6.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }] });
|
|
9034
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentActionsComponent, isStandalone: false, selector: "document-actions", inputs: { document: "document", documentId: "documentId", currentStatus: "currentStatus", isLoading: "isLoading", isUploaded: "isUploaded", statusId: "statusId" }, outputs: { actionPerformed: "actionPerformed" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-actions-container\" *ngIf=\"document?.status !=='Pending' && !document?.isUploaded && document?.status === 'Reviewing'\">\r\n <div class=\"actions-card\" [ngClass]=\"cardClass\">\r\n <div class=\"actions-buttons\">\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn reject-btn\" [ngClass]=\"rejectButtonClass\"\r\n (click)=\"onRejectClick()\" [disabled]=\"areButtonsDisabled || isRejecting\">\r\n <i class=\"pi pi-times\" *ngIf=\"isDocumentRejected\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isRejecting\"></i>\r\n <span>{{ isDocumentRejected ? SHARED.BUTTON_LABEL_REJECTED :\r\n SHARED.BUTTON_LABEL_REJECT }}</span>\r\n </button>\r\n <button *ngIf=\"!document?.isUploaded\" class=\"action-btn accept-btn\" [ngClass]=\"acceptButtonClass\"\r\n (click)=\"onAcceptClick()\" [disabled]=\"areButtonsDisabled || isAccepting\">\r\n <i class=\"pi pi-check\" *ngIf=\"isDocumentApproved\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isAccepting\"></i>\r\n <span>{{ isDocumentApproved ? SHARED.BUTTON_LABEL_ACCEPTED : SHARED.BUTTON_LABEL_ACCEPT\r\n }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<p-dialog [(visible)]=\"showAcceptDialog\" [header]=\"SHARED.ACCEPT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"acceptNote\" class=\"note-label\">{{ SHARED.ACCEPT_NOTE_LABEL }}</label>\r\n <textarea id=\"acceptNote\" pInputTextarea [(ngModel)]=\"acceptNote\" [placeholder]=\"SHARED.ACCEPT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.ACCEPT_BUTTON_LABEL\" class=\"p-button-success\" (click)=\"onAcceptConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>\r\n\r\n<p-dialog [(visible)]=\"showRejectDialog\" [header]=\"SHARED.REJECT_CONFIRM_HEADER\" [modal]=\"true\" [draggable]=\"false\"\r\n [closable]=\"true\" [style]=\"{ width: '25rem', height: '25rem' }\" styleClass=\"confirmation-dialog\">\r\n <div class=\"dialog-content\">\r\n <label for=\"rejectNote\" class=\"note-label\">{{ SHARED.REJECT_NOTE_LABEL }}</label>\r\n <textarea id=\"rejectNote\" pInputTextarea [(ngModel)]=\"rejectNote\" [placeholder]=\"SHARED.REJECT_NOTE_PLACEHOLDER\"\r\n rows=\"6\" class=\"note-textarea\">\r\n </textarea>\r\n </div>\r\n <ng-template pTemplate=\"footer\">\r\n <div class=\"dialog-footer\">\r\n <button pButton [label]=\"SHARED.CANCEL_BUTTON_LABEL\" class=\"p-button-secondary\" (click)=\"onCancel()\">\r\n </button>\r\n <button pButton [label]=\"SHARED.REJECT_BUTTON_LABEL\" class=\"p-button-danger\" [disabled]=\"isRejectNoteEmpty\"\r\n (click)=\"onRejectConfirm()\">\r\n </button>\r\n </div>\r\n </ng-template>\r\n</p-dialog>", styles: [".document-actions-container{margin:0}.actions-card{border-radius:8px;padding:.75rem;box-shadow:0 2px 4px #0000001a;transition:all .3s ease;width:92%;margin-left:3%}.actions-card.pending-card{background-color:#f8f9fa;border:1px solid #e9ecef}.actions-card.accepted-card{background-color:#e8f5e9;border:1px solid #66bb6a}.actions-card.rejected-card{background-color:#feeaea;border:1px solid #e57373}.actions-card[class*=status-].status-approved-card{background-color:#e8f5e9;border:1px solid #66bb6a}.actions-card[class*=status-].status-rejected-card{background-color:#feeaea;border:1px solid #e57373}.actions-card[class*=status-].status-pending-card{background-color:#f8f9fa;border:1px solid #e9ecef}.actions-buttons{display:flex;gap:.5rem;align-items:center}.action-btn{padding:.5rem 1rem;border-radius:6px;border:1px solid;font-weight:500;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;gap:.5rem;min-width:48%;justify-content:center}.action-btn:disabled{opacity:.6;cursor:not-allowed}.action-btn i{font-size:.875rem}.reject-btn.default-reject{background-color:#fff;border-color:#ef4444;color:#ef4444}.reject-btn.default-reject:hover:not(:disabled){background-color:#fef2f2;border-color:#dc2626}.reject-btn.secondary-reject{background-color:#f5f5f5;border-color:transparent;color:#4a4a4a}.reject-btn.secondary-reject:hover:not(:disabled){background-color:#edf2f7}.reject-btn.primary-reject{background-color:#feeaea;border-color:#e57373;color:#e57373}.reject-btn.primary-reject:hover:not(:disabled){background-color:#fed7d7;border-color:#fc8181}.reject-btn[class*=status-].status-approved-reject{background-color:#f5f5f5;border-color:transparent;color:#4a4a4a}.reject-btn[class*=status-].status-approved-reject:hover:not(:disabled){background-color:#edf2f7}.reject-btn[class*=status-].status-rejected-reject{background-color:#feeaea;border-color:#e57373;color:#e57373}.reject-btn[class*=status-].status-rejected-reject:hover:not(:disabled){background-color:#fed7d7;border-color:#fc8181}.reject-btn[class*=status-].status-pending-reject{background-color:#fff;border-color:#ef4444;color:#ef4444}.reject-btn[class*=status-].status-pending-reject:hover:not(:disabled){background-color:#fef2f2;border-color:#dc2626}.accept-btn.default-accept{background-color:#3b82f6;border-color:#3b82f6;color:#fff}.accept-btn.default-accept:hover:not(:disabled){background-color:#2563eb;border-color:#2563eb}.accept-btn.secondary-accept{background-color:#f5f5f5;border-color:transparent;color:#4a4a4a}.accept-btn.secondary-accept:hover:not(:disabled){background-color:#edf2f7}.accept-btn.primary-accept{background-color:#4caf50;border-color:#4caf50;color:#fff}.accept-btn.primary-accept:hover:not(:disabled){background-color:#45a049;border-color:#45a049}.accept-btn[class*=status-].status-approved-accept{background-color:#4caf50;border-color:#4caf50;color:#fff}.accept-btn[class*=status-].status-approved-accept:hover:not(:disabled){background-color:#45a049;border-color:#45a049}.accept-btn[class*=status-].status-rejected-accept{background-color:#f5f5f5;border-color:transparent;color:#4a4a4a}.accept-btn[class*=status-].status-rejected-accept:hover:not(:disabled){background-color:#edf2f7}.accept-btn[class*=status-].status-pending-accept{background-color:#3b82f6;border-color:#3b82f6;color:#fff}.accept-btn[class*=status-].status-pending-accept:hover:not(:disabled){background-color:#2563eb;border-color:#2563eb}:host ::ng-deep .confirmation-dialog .p-dialog{border-radius:8px;box-shadow:0 4px 12px #00000026;border:none;overflow:hidden}:host ::ng-deep .confirmation-dialog .p-dialog-header{padding:1.25rem 1.5rem;background-color:#fff;border-bottom:none;border-top-right-radius:10px;border-top-left-radius:10px}:host ::ng-deep .confirmation-dialog .p-dialog-header .p-dialog-header-icon{display:none}:host ::ng-deep .confirmation-dialog .p-dialog-header .p-dialog-title{font-size:1.125rem;font-weight:600;color:#2d3748;margin:0}:host ::ng-deep .confirmation-dialog .p-dialog-content{padding:1.5rem;background-color:#fff}:host ::ng-deep .confirmation-dialog .p-dialog-footer{padding:1rem 1.5rem;background-color:#f7fafc;border-top:1px solid #e2e8f0;display:flex;gap:.75rem;justify-content:flex-end;border-bottom-right-radius:10px;border-bottom-left-radius:10px}.dialog-content .note-label{display:block;margin-bottom:.75rem;font-weight:500;font-size:.875rem;color:#2d3748}.dialog-content .note-textarea{width:100%;min-height:100px;padding:.75rem;border:1px solid #e2e8f0;border-radius:6px;font-family:inherit;font-size:.875rem;line-height:1.5;resize:vertical;background-color:#fff;color:#2d3748}.dialog-content .note-textarea::placeholder{color:#a0aec0}.dialog-content .note-textarea:focus{outline:none;border-color:#3182ce;box-shadow:0 0 0 3px #3182ce1a}.dialog-footer{display:flex;gap:.75rem;justify-content:flex-end}.dialog-footer button{min-width:80px;padding:.5rem 1rem;border-radius:6px;font-weight:500;font-size:.875rem;border:1px solid;cursor:pointer;transition:all .2s ease}.dialog-footer button.p-button-secondary{background-color:#f7fafc;border-color:#e2e8f0;color:#4a5568}.dialog-footer button.p-button-secondary:hover{background-color:#edf2f7;border-color:#cbd5e0}.dialog-footer button.p-button-success{background-color:#38a169;border-color:#38a169;color:#fff}.dialog-footer button.p-button-success:hover{background-color:#2f855a;border-color:#2f855a}.dialog-footer button.p-button-danger{background-color:#e53e3e;border-color:#e53e3e;color:#fff}.dialog-footer button.p-button-danger:hover{background-color:#c53030;border-color:#c53030}.no-actions-message{display:flex;align-items:center;justify-content:center;padding:.5rem;min-height:40px}.no-actions-message .no-actions-text{color:#6b7280;font-size:.875rem;font-style:italic;text-align:center}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i6.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }] });
|
|
9035
9035
|
}
|
|
9036
9036
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentActionsComponent, decorators: [{
|
|
9037
9037
|
type: Component,
|
|
@@ -9259,7 +9259,7 @@ class DocumentViewerComponent {
|
|
|
9259
9259
|
this.documentStore.clearDocumentViewerState();
|
|
9260
9260
|
}
|
|
9261
9261
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentViewerComponent, deps: [{ token: DocumentHttpService }, { token: DocumentHelperService }, { token: i3.MessageService }, { token: DocumentViewerService }, { token: DocumentStore }], target: i0.ɵɵFactoryTarget.Component });
|
|
9262
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DocumentViewerComponent, isStandalone: false, selector: "document-viewer", inputs: { selectedDocument: "selectedDocument", documentList: "documentList", contextId: "contextId", isFormHide: "isFormHide" }, outputs: { documentStatusUpdated: "documentStatusUpdated", deleteError: "deleteError", deleteSuccess: "deleteSuccess", viewerDestroyed: "viewerDestroyed" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-viewer-container grid p-formgrid\">\r\n <div class=\"main-content col-12 md:col-12\">\r\n @if(messages.length > 0) {\r\n <p-messages [(value)]=\"messages\" [enableService]=\"false\"></p-messages>\r\n }\r\n \r\n <div class=\"content-grid col-12 md:col-12\">\r\n @if(selectedDocument){\r\n <div class=\"document-preview p-0 col-12 md:col-9\">\r\n <document-content-viewer\r\n [documentUrl]=\"selectedDocument?.documentUrl\"\r\n [contentType]=\"selectedDocument?.contentType\"\r\n [documentName]=\"selectedDocument?.fileName || selectedDocument?.docName\"\r\n [selectedDocument]=\"selectedDocument\"\r\n [contextId]=\"contextId\"\r\n [isFormHide]=\"isFormHide\"\r\n (documentNameUpdated)=\"onDocumentNameUpdated()\"\r\n ></document-content-viewer>\r\n </div>\r\n }\r\n\r\n <div class=\"sidebar col-12 md:col-3 pt-0\">\r\n <div class=\"sidebar card\">\r\n <document-history \r\n [historyData]=\"currentState.documentHistory\" \r\n [showHistory]=\"currentState.showDocumentHistory\"\r\n [contextId]=\"contextId\"\r\n [selectedDocument]=\"selectedDocument\"\r\n (deleteTaskRequested)=\"onDeleteTaskRequested()\"\r\n (documentSelected)=\"onDocumentSelected($event)\">\r\n \r\n <!-- Document Actions Component inside the history component -->\r\n <div actions-component *ngIf=\"selectedDocument?.status !=='Pending' && !selectedDocument?.isUploaded && selectedDocument?.status === 'Reviewing'\">\r\n <document-actions\r\n [document]=\"selectedDocument\"\r\n [documentId]=\"selectedDocument?._id\"\r\n [currentStatus]=\"currentState.documentStatus\"\r\n [isLoading]=\"currentState.isActionLoading\"\r\n [isUploaded]=\"currentState.documentIsUploaded\"\r\n [statusId]=\"selectedDocument?.statusId\"\r\n (actionPerformed)=\"handleDocumentAction($event)\">\r\n </document-actions>\r\n </div>\r\n <ng-content [select]=\"'action-launcher'\"></ng-content>\r\n </document-history>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;height:100%;width:100%;overflow:hidden;position:relative}.document-viewer-container{height:100%;width:100%;position:relative;z-index:1;overflow:hidden;display:flex;flex-direction:column}.document-viewer-container .main-content{height:100%;display:flex;flex-direction:column;overflow:hidden;min-height:0}.document-viewer-container .main-content .p-messages{margin-bottom:.5rem;flex-shrink:0}.document-viewer-container .main-content .content-grid{display:grid;grid-template-columns:1fr 400px;gap:1rem;height:0;min-height:0;overflow:hidden;flex:1}.document-viewer-container .main-content .content-grid .document-preview{background:transparent;height:100%;width:100%;min-width:0;overflow:auto;border-radius:10px;scrollbar-width:none;-ms-overflow-style:none}.document-viewer-container .main-content .content-grid .document-preview::-webkit-scrollbar{display:none}.document-viewer-container .main-content .content-grid .sidebar{display:flex;flex-direction:column;gap:.75rem;height:100%;overflow-y:auto;min-width:0;width:100%;scrollbar-width:none;-ms-overflow-style:none}.document-viewer-container .main-content .content-grid .sidebar::-webkit-scrollbar{display:none}.document-viewer-container .main-content .content-grid .sidebar ::ng-deep .document-actions-container{margin:0}.document-viewer-container .main-content .content-grid .sidebar ::ng-deep .document-history-container{padding:.75rem;max-height:none;scrollbar-width:none;-ms-overflow-style:none}.document-viewer-container .main-content .content-grid .sidebar ::ng-deep .document-history-container::-webkit-scrollbar{display:none}::ng-deep .p-dialog-content{overflow:hidden!important;height:100%!important}::ng-deep .p-dialog{overflow:hidden!important}@media (max-width: 1200px){.document-viewer-container .main-content .content-grid{grid-template-columns:1fr 380px;gap:.75rem}}@media (max-width: 768px){.document-viewer-container .main-content .content-grid{grid-template-columns:1fr;gap:.5rem}.document-viewer-container .main-content .content-grid .sidebar{order:-1}}.alert-card{background-color:#fb392d1a}.success-alert{border-radius:10px;border:1px solid rgba(251,57,45,.1);background:linear-gradient(0deg,#dedede 0% 100%),#fff}.p-timeline-event-opposite{display:none}.decription{color:#676b89}.textAreaControl textarea{width:100%;resize:vertical;max-width:100%}.document-btn-wrapper .p-button-outlined{color:#f57c00}.document-viewer{position:relative;z-index:1}.document-viewer .p-dialog{width:100%;height:100%;max-height:100%!important;box-shadow:none!important;z-index:9999!important}.document-viewer .p-dialog-header-close-icon{height:20px;width:20px}.document-viewer .p-dialog-header{background-color:#fff;border-radius:0;padding:.5rem}.document-viewer .p-dialog-content{background-color:#fff;border-radius:0;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5
|
|
9262
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: DocumentViewerComponent, isStandalone: false, selector: "document-viewer", inputs: { selectedDocument: "selectedDocument", documentList: "documentList", contextId: "contextId", isFormHide: "isFormHide" }, outputs: { documentStatusUpdated: "documentStatusUpdated", deleteError: "deleteError", deleteSuccess: "deleteSuccess", viewerDestroyed: "viewerDestroyed" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-viewer-container grid p-formgrid\">\r\n <div class=\"main-content col-12 md:col-12\">\r\n @if(messages.length > 0) {\r\n <p-messages [(value)]=\"messages\" [enableService]=\"false\"></p-messages>\r\n }\r\n \r\n <div class=\"content-grid col-12 md:col-12\">\r\n @if(selectedDocument){\r\n <div class=\"document-preview p-0 col-12 md:col-9\">\r\n <document-content-viewer\r\n [documentUrl]=\"selectedDocument?.documentUrl\"\r\n [contentType]=\"selectedDocument?.contentType\"\r\n [documentName]=\"selectedDocument?.fileName || selectedDocument?.docName\"\r\n [selectedDocument]=\"selectedDocument\"\r\n [contextId]=\"contextId\"\r\n [isFormHide]=\"isFormHide\"\r\n (documentNameUpdated)=\"onDocumentNameUpdated()\"\r\n ></document-content-viewer>\r\n </div>\r\n }\r\n\r\n <div class=\"sidebar col-12 md:col-3 pt-0\">\r\n <div class=\"sidebar card\">\r\n <document-history \r\n [historyData]=\"currentState.documentHistory\" \r\n [showHistory]=\"currentState.showDocumentHistory\"\r\n [contextId]=\"contextId\"\r\n [selectedDocument]=\"selectedDocument\"\r\n (deleteTaskRequested)=\"onDeleteTaskRequested()\"\r\n (documentSelected)=\"onDocumentSelected($event)\">\r\n \r\n <!-- Document Actions Component inside the history component -->\r\n <div actions-component *ngIf=\"selectedDocument?.status !=='Pending' && !selectedDocument?.isUploaded && selectedDocument?.status === 'Reviewing'\">\r\n <document-actions\r\n [document]=\"selectedDocument\"\r\n [documentId]=\"selectedDocument?._id\"\r\n [currentStatus]=\"currentState.documentStatus\"\r\n [isLoading]=\"currentState.isActionLoading\"\r\n [isUploaded]=\"currentState.documentIsUploaded\"\r\n [statusId]=\"selectedDocument?.statusId\"\r\n (actionPerformed)=\"handleDocumentAction($event)\">\r\n </document-actions>\r\n </div>\r\n <ng-content [select]=\"'action-launcher'\"></ng-content>\r\n </document-history>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;height:100%;width:100%;overflow:hidden;position:relative}.document-viewer-container{height:100%;width:100%;position:relative;z-index:1;overflow:hidden;display:flex;flex-direction:column}.document-viewer-container .main-content{height:100%;display:flex;flex-direction:column;overflow:hidden;min-height:0}.document-viewer-container .main-content .p-messages{margin-bottom:.5rem;flex-shrink:0}.document-viewer-container .main-content .content-grid{display:grid;grid-template-columns:1fr 400px;gap:1rem;height:0;min-height:0;overflow:hidden;flex:1}.document-viewer-container .main-content .content-grid .document-preview{background:transparent;height:100%;width:100%;min-width:0;overflow:auto;border-radius:10px;scrollbar-width:none;-ms-overflow-style:none}.document-viewer-container .main-content .content-grid .document-preview::-webkit-scrollbar{display:none}.document-viewer-container .main-content .content-grid .sidebar{display:flex;flex-direction:column;gap:.75rem;height:100%;overflow-y:auto;min-width:0;width:100%;scrollbar-width:none;-ms-overflow-style:none}.document-viewer-container .main-content .content-grid .sidebar::-webkit-scrollbar{display:none}.document-viewer-container .main-content .content-grid .sidebar ::ng-deep .document-actions-container{margin:0}.document-viewer-container .main-content .content-grid .sidebar ::ng-deep .document-history-container{padding:.75rem;max-height:none;scrollbar-width:none;-ms-overflow-style:none}.document-viewer-container .main-content .content-grid .sidebar ::ng-deep .document-history-container::-webkit-scrollbar{display:none}::ng-deep .p-dialog-content{overflow:hidden!important;height:100%!important}::ng-deep .p-dialog{overflow:hidden!important}@media (max-width: 1200px){.document-viewer-container .main-content .content-grid{grid-template-columns:1fr 380px;gap:.75rem}}@media (max-width: 768px){.document-viewer-container .main-content .content-grid{grid-template-columns:1fr;gap:.5rem}.document-viewer-container .main-content .content-grid .sidebar{order:-1}}.alert-card{background-color:#fb392d1a}.success-alert{border-radius:10px;border:1px solid rgba(251,57,45,.1);background:linear-gradient(0deg,#dedede 0% 100%),#fff}.p-timeline-event-opposite{display:none}.decription{color:#676b89}.textAreaControl textarea{width:100%;resize:vertical;max-width:100%}.document-btn-wrapper .p-button-outlined{color:#f57c00}.document-viewer{position:relative;z-index:1}.document-viewer .p-dialog{width:100%;height:100%;max-height:100%!important;box-shadow:none!important;z-index:9999!important}.document-viewer .p-dialog-header-close-icon{height:20px;width:20px}.document-viewer .p-dialog-header{background-color:#fff;border-radius:0;padding:.5rem}.document-viewer .p-dialog-content{background-color:#fff;border-radius:0;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "component", type: DocumentHistoryComponent, selector: "document-history", inputs: ["historyData", "showHistory", "contextId", "selectedDocument", "isDocumentIntelligence"], outputs: ["deleteTaskRequested", "documentSelected"] }, { kind: "component", type: DocumentContentViewerComponent, selector: "document-content-viewer", inputs: ["documentUrl", "contentType", "documentName", "selectedDocument", "contextId", "isFormHide"] }, { kind: "component", type: DocumentActionsComponent, selector: "document-actions", inputs: ["document", "documentId", "currentStatus", "isLoading", "isUploaded", "statusId"], outputs: ["actionPerformed"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
9263
9263
|
}
|
|
9264
9264
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentViewerComponent, decorators: [{
|
|
9265
9265
|
type: Component,
|
|
@@ -9834,7 +9834,7 @@ class DocumentListComponent {
|
|
|
9834
9834
|
}
|
|
9835
9835
|
}
|
|
9836
9836
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentListComponent, deps: [{ token: DocumentListService }, { token: DocumentHttpService }, { token: DocumentMenuService }, { token: DocumentStore }, { token: DocumentScrollService }], target: i0.ɵɵFactoryTarget.Component });
|
|
9837
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentListComponent, isStandalone: false, selector: "lib-document-list", inputs: { contextId: "contextId", documentListResponse: "documentListResponse", selectedMenuItemId: "selectedMenuItemId", navigationInfo: "navigationInfo", documentList: "documentList" }, outputs: { handleSelectedDocumentInNewTab: "handleSelectedDocumentInNewTab", handleSelectedDocument: "handleSelectedDocument" }, viewQueries: [{ propertyName: "documentCategoriesContainer", first: true, predicate: ["documentCategoriesContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"document-viewer\">\r\n <p-dialog [(visible)]=\"isdialogVisible\" [modal]=\"true\" appendTo=\"body\" [style]=\"{ width: '100vw', height: '100vh', minHeight: '100vh' }\"\r\n class=\"w-full h-full document-dailog-wrapper\" [draggable]=\"false\" [closable]=\"true\" (onHide)=\"handleCloseModal()\">\r\n <p-messages [(value)]=\"deleteMessage\" [enableService]=\"false\" [closable]=\"false\" />\r\n \r\n <document-viewer [selectedDocument]=\"selectedDocument\" [documentList]=\"documentList\" [contextId]=\"contextId\" \r\n (documentStatusUpdated)=\"handleDocumentStatusUpdate($event)\"\r\n (viewerDestroyed)=\"handleViewerDestroyed()\"\r\n (deleteError)=\"handleDeleteError($event)\"\r\n (deleteSuccess)=\"handleDeleteSuccess()\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"w-full flex align-items-center justify-content-between\">\r\n <input type=\"text\" class=\"w-full border-none bg-white h-3rem file-input-wrapper\" pInputText\r\n [(ngModel)]=\"fileName\" />\r\n\r\n </div>\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </document-viewer>\r\n </p-dialog>\r\n</div>\r\n\r\n<div class=\"document-categories-container\" #documentCategoriesContainer>\r\n <div class=\"category\" *ngFor=\"let category of documentCategories; let i = index\"\r\n [id]=\"categoryIds[i]\">\r\n <div class=\"category-header\" *ngIf=\"documentCategories[i]?.list?.length\">\r\n <div class=\"category-title\" *ngIf=\"formattedCategoryLabels[i] || category.categoryDescription\">\r\n <h3 *ngIf=\"formattedCategoryLabels[i]\">{{ formattedCategoryLabels[i] }}</h3>\r\n <p class=\"category-description\" *ngIf=\"category.categoryDescription\">{{ category.categoryDescription }}</p>\r\n </div>\r\n <div class=\"completion-status\">\r\n <p-badge \r\n [severity]=\"categorySeverities[i]\" \r\n [value]=\"(((categoryCompletionCounts && categoryCompletionCounts[i]) || 0) + ' Complete')\"\r\n class=\"completion-badge\">\r\n </p-badge>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-container\">\r\n <lib-table-primary [tableData]=\"categoryTables[i]\" [tableStyle]=\"{ 'min-width': '100%' }\"\r\n (rowClick)=\"handleTableRowClick($event)\" (deleteAction)=\"handleDeleteAction($event)\" (rowCtrlClick)=\"handleTableRowCtrlClick($event)\" >\r\n </lib-table-primary>\r\n </div>\r\n </div>\r\n</div>", styles: [".document-list-wrapper .p-accordion-header-link{padding:.5rem}.document-list-wrapper .p-sidebar-right{width:35%}.error-message-wrapper{color:#dc3545}.right-sidebar{width:35%}.document-title-wrapper{font-size:20px;font-weight:700;color:var(--text-color)}.document-input-field{display:flex;flex-direction:column}.document-input-field input{width:100%;height:46px;padding:10px 15px;gap:10px;border-radius:10px;outline:none;border:1px solid rgba(76,98,146,.1019607843);font-size:15px}label{color:#0f1729;font-weight:600}.document-list-dropDown .p-element{padding:10px 0 10px 15px}.document-list-dropDown .p-dropdown{border-radius:10px!important}.side-bar-con{display:flex;flex-direction:column}.save-btn-con{width:100%;border-top:1px solid rgba(76,98,146,.2);background:#4c629214;padding:13px 40px}.save-btn-wrapper{padding:10px 4px}.save-btn .p-button{height:45px!important;width:140px;border-radius:10px}.p-sidebar-footer{padding:0}.file-input-wrapper.p-inputtext:enabled:focus{box-shadow:0 0 0 .2rem #a6d5fa!important}.clickable-doc-name{cursor:pointer;transition:all .2s ease;padding:4px 8px;border-radius:4px}.clickable-doc-name:hover{background-color:#4c62921a;color:var(--primary-color, #4C6292)}.clickable-doc-name:active{background-color:#4c629233;transform:scale(.98)}.clickable-doc-name .edit-icon{font-size:.8em;margin-left:8px;opacity:.6;transition:opacity .2s ease}.clickable-doc-name:hover .edit-icon{opacity:1}.document-name-display{display:flex;flex-direction:column;align-items:flex-start;gap:4px;cursor:pointer;transition:all .2s ease;padding:4px 8px;border-radius:4px;width:100%}.document-name-display:hover{background-color:#4c62921a}.document-name-display:hover .alias-name{color:var(--primary-color, #4C6292)}.document-name-display:active{background-color:#4c629233;transform:scale(.98)}.document-name-display .alias-name{font-size:1.5rem;font-weight:700;color:var(--text-color, #2c3e50);line-height:1.2;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;max-width:none;transition:color .2s ease;display:flex;align-items:center;justify-content:flex-start;gap:8px}.document-name-display .alias-name .edit-icon-small{font-size:.7em;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;margin-left:6px}.document-name-display:hover .edit-icon-small{opacity:1;visibility:visible}.document-name-display .document-name{font-size:.875rem;color:var(--text-color-secondary, #6c757d);font-weight:400;line-height:1.2;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;max-width:none;opacity:.8}.file-input-wrapper{transition:all .2s ease;min-width:300px!important;width:auto!important;max-width:80vw!important}.file-input-wrapper:focus{border-color:var(--primary-color, #4C6292)!important;box-shadow:0 0 0 .2rem #4c629240!important;outline:none!important}.document-name-input{min-width:400px!important;width:auto!important;max-width:70vw!important;padding:8px 12px!important;font-size:1.1rem!important;font-weight:500!important;border:2px solid var(--primary-color, #4C6292)!important;border-radius:6px!important;background-color:#fff!important}.document-name-input:focus{outline:none!important;border-color:var(--primary-color, #4C6292)!important;box-shadow:0 0 0 .2rem #4c629240!important}.document-edit-container{display:flex;flex-direction:column;align-items:flex-start;gap:6px;width:100%;max-width:70vw}.document-name-subline{font-size:.85rem;color:var(--text-color-secondary, #6c757d);line-height:1.2;padding-left:4px;opacity:.8}.document-viewer{position:relative;z-index:1}.document-viewer ::ng-deep .p-dialog{z-index:9999!important}.document-viewer ::ng-deep .p-dialog-mask{z-index:9998!important}.document-viewer ::ng-deep .p-dialog{width:100vw!important;height:100vh!important;max-width:none!important;max-height:none!important;margin:0!important;top:0!important;left:0!important;transform:none!important}.document-viewer ::ng-deep .p-dialog-content{height:calc(100vh - 60px)!important;max-height:none!important}.document-categories-container{padding:1rem;min-height:auto}.document-categories-container .category{background:#fff;border-radius:8px;margin-bottom:2rem;overflow:hidden;transition:all .3s ease}.document-categories-container .category .category-header{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding-top:.6rem;padding-bottom:1rem}.document-categories-container .category .category-header .category-title{flex:1;min-width:0}.document-categories-container .category .category-header .category-title h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#2c3e50}.document-categories-container .category .category-header .category-title .category-description{margin:0;color:#6c757d;font-size:.875rem;line-height:1.4}.document-categories-container .category .category-header .completion-status{display:flex;align-items:center;justify-content:center;min-width:fit-content}.document-categories-container .category .category-header .completion-status .status-badge{background-color:#fbbf24;color:#92400e;padding:.375rem .75rem;border-radius:6px;font-size:.75rem;font-weight:500;display:inline-block}.document-categories-container .category .category-header .completion-status .completion-badge{display:flex;align-items:center;justify-content:center}.document-categories-container .category .category-header .completion-status .completion-badge .p-badge{font-size:.75rem;font-weight:500;padding:.375rem .75rem;border-radius:6px;display:flex;align-items:center;justify-content:center;min-width:fit-content;white-space:nowrap}.document-categories-container .category .category-header .completion-status .completion-badge .p-badge.p-badge-success{background-color:#d1fae5;color:#065f46;font-family:inherit;font-size:12px;padding:15px;font-weight:400}.document-categories-container .category .category-header .completion-status .completion-badge .p-badge.p-badge-info{background-color:#e5e7eb;color:#000;font-family:inherit;font-size:12px;font-weight:400;padding:15px;font-style:inherit}.document-categories-container .category .category-header .completion-status .completion-badge .p-badge.p-badge-warning{background-color:#fef3c7;color:#d97706;font-family:inherit;padding:15px;font-size:12px;font-weight:400;font-style:inherit}.document-categories-container .category .category-header .completion-status .completion-badge .p-badge.p-badge-danger{background-color:#fee2e2;color:#dc2626;font-family:inherit;font-size:12px;padding:15px;font-weight:400;font-style:inherit}.document-categories-container .category .table-container{padding:0}@keyframes highlightPulse{0%{transform:scale(1.02);box-shadow:0 4px 20px #3b82f64d}50%{transform:scale(1.03);box-shadow:0 6px 25px #3b82f680}to{transform:scale(1.02);box-shadow:0 4px 20px #3b82f64d}}.document-sections-container{padding:1rem;background-color:#f8f9fa;min-height:100vh}.document-sections-container .section{background:#fff;border-radius:8px;margin-bottom:2rem;box-shadow:0 2px 4px #0000001a;overflow:hidden}.document-sections-container .section .section-header{display:flex;justify-content:space-between;align-items:flex-start;padding:1.5rem 1.5rem 1rem;border-bottom:1px solid #e9ecef}.document-sections-container .section .section-header .section-title h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#2c3e50}.document-sections-container .section .section-header .section-title .section-description{margin:0;color:#6c757d;font-size:.875rem;line-height:1.4}.document-sections-container .section .section-header .completion-status .status-badge{background-color:#fbbf24;color:#92400e;padding:.375rem .75rem;border-radius:6px;font-size:.75rem;font-weight:500;display:inline-block}.document-sections-container .section .section-header .completion-status .completion-badge .p-badge{font-size:.75rem;font-weight:500;padding:.375rem .75rem;border-radius:6px}.document-sections-container .section .section-header .completion-status .completion-badge .p-badge.p-badge-success{background-color:#10b981;color:#fff}.document-sections-container .section .section-header .completion-status .completion-badge .p-badge.p-badge-info{background-color:#3b82f6;color:#fff}.document-sections-container .section .section-header .completion-status .completion-badge .p-badge.p-badge-warning{background-color:#f59e0b;color:#fff}.document-sections-container .section .section-header .completion-status .completion-badge .p-badge.p-badge-danger{background-color:#ef4444;color:#fff}.document-sections-container .section .table-container{padding:0}@media (max-width: 768px){.document-categories-container,.document-sections-container{padding:.5rem}.document-categories-container .category .category-header,.document-categories-container .category .section-header,.document-categories-container .section .category-header,.document-categories-container .section .section-header,.document-sections-container .category .category-header,.document-sections-container .category .section-header,.document-sections-container .section .category-header,.document-sections-container .section .section-header{flex-direction:column;gap:1rem;align-items:stretch}.document-categories-container .category .category-header .completion-status,.document-categories-container .category .section-header .completion-status,.document-categories-container .section .category-header .completion-status,.document-categories-container .section .section-header .completion-status,.document-sections-container .category .category-header .completion-status,.document-sections-container .category .section-header .completion-status,.document-sections-container .section .category-header .completion-status,.document-sections-container .section .section-header .completion-status{align-self:center;width:100%;justify-content:center}}\n"], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5$1.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "component", type: i9$2.Badge, selector: "p-badge", inputs: ["styleClass", "style", "badgeSize", "severity", "value", "badgeDisabled", "size"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i6$1.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: TablePrimaryComponent, selector: "lib-table-primary", inputs: ["tableData", "showHeader", "tableStyle"], outputs: ["rowClick", "rowCtrlClick"] }, { kind: "component", type: DocumentViewerComponent, selector: "document-viewer", inputs: ["selectedDocument", "documentList", "contextId", "isFormHide"], outputs: ["documentStatusUpdated", "deleteError", "deleteSuccess", "viewerDestroyed"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
9837
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentListComponent, isStandalone: false, selector: "lib-document-list", inputs: { contextId: "contextId", documentListResponse: "documentListResponse", selectedMenuItemId: "selectedMenuItemId", navigationInfo: "navigationInfo", documentList: "documentList" }, outputs: { handleSelectedDocumentInNewTab: "handleSelectedDocumentInNewTab", handleSelectedDocument: "handleSelectedDocument" }, viewQueries: [{ propertyName: "documentCategoriesContainer", first: true, predicate: ["documentCategoriesContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"document-viewer\">\r\n <p-dialog [(visible)]=\"isdialogVisible\" [modal]=\"true\" appendTo=\"body\" [style]=\"{ width: '100vw', height: '100vh', minHeight: '100vh' }\"\r\n class=\"w-full h-full document-dailog-wrapper\" [draggable]=\"false\" [closable]=\"true\" (onHide)=\"handleCloseModal()\">\r\n <p-messages [(value)]=\"deleteMessage\" [enableService]=\"false\" [closable]=\"false\" />\r\n \r\n <document-viewer [selectedDocument]=\"selectedDocument\" [documentList]=\"documentList\" [contextId]=\"contextId\" \r\n (documentStatusUpdated)=\"handleDocumentStatusUpdate($event)\"\r\n (viewerDestroyed)=\"handleViewerDestroyed()\"\r\n (deleteError)=\"handleDeleteError($event)\"\r\n (deleteSuccess)=\"handleDeleteSuccess()\">\r\n <ng-template pTemplate=\"header\">\r\n <div class=\"w-full flex align-items-center justify-content-between\">\r\n <input type=\"text\" class=\"w-full border-none bg-white h-3rem file-input-wrapper\" pInputText\r\n [(ngModel)]=\"fileName\" />\r\n\r\n </div>\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </document-viewer>\r\n </p-dialog>\r\n</div>\r\n\r\n<div class=\"document-categories-container\" #documentCategoriesContainer>\r\n <div class=\"category\" *ngFor=\"let category of documentCategories; let i = index\"\r\n [id]=\"categoryIds[i]\">\r\n <div class=\"category-header\" *ngIf=\"documentCategories[i]?.list?.length\">\r\n <div class=\"category-title\" *ngIf=\"formattedCategoryLabels[i] || category.categoryDescription\">\r\n <h3 *ngIf=\"formattedCategoryLabels[i]\">{{ formattedCategoryLabels[i] }}</h3>\r\n <p class=\"category-description\" *ngIf=\"category.categoryDescription\">{{ category.categoryDescription }}</p>\r\n </div>\r\n <div class=\"completion-status\">\r\n <p-badge \r\n [severity]=\"categorySeverities[i]\" \r\n [value]=\"(((categoryCompletionCounts && categoryCompletionCounts[i]) || 0) + ' Complete')\"\r\n class=\"completion-badge\">\r\n </p-badge>\r\n </div>\r\n </div>\r\n\r\n <div class=\"table-container\">\r\n <lib-table-primary [tableData]=\"categoryTables[i]\" [tableStyle]=\"{ 'min-width': '100%' }\"\r\n (rowClick)=\"handleTableRowClick($event)\" (deleteAction)=\"handleDeleteAction($event)\" (rowCtrlClick)=\"handleTableRowCtrlClick($event)\" >\r\n </lib-table-primary>\r\n </div>\r\n </div>\r\n</div>", styles: [".document-list-wrapper .p-accordion-header-link{padding:.5rem}.document-list-wrapper .p-sidebar-right{width:35%}.error-message-wrapper{color:#dc3545}.right-sidebar{width:35%}.document-title-wrapper{font-size:20px;font-weight:700;color:var(--text-color)}.document-input-field{display:flex;flex-direction:column}.document-input-field input{width:100%;height:46px;padding:10px 15px;gap:10px;border-radius:10px;outline:none;border:1px solid rgba(76,98,146,.1019607843);font-size:15px}label{color:#0f1729;font-weight:600}.document-list-dropDown .p-element{padding:10px 0 10px 15px}.document-list-dropDown .p-dropdown{border-radius:10px!important}.side-bar-con{display:flex;flex-direction:column}.save-btn-con{width:100%;border-top:1px solid rgba(76,98,146,.2);background:#4c629214;padding:13px 40px}.save-btn-wrapper{padding:10px 4px}.save-btn .p-button{height:45px!important;width:140px;border-radius:10px}.p-sidebar-footer{padding:0}.file-input-wrapper.p-inputtext:enabled:focus{box-shadow:0 0 0 .2rem #a6d5fa!important}.clickable-doc-name{cursor:pointer;transition:all .2s ease;padding:4px 8px;border-radius:4px}.clickable-doc-name:hover{background-color:#4c62921a;color:var(--primary-color, #4C6292)}.clickable-doc-name:active{background-color:#4c629233;transform:scale(.98)}.clickable-doc-name .edit-icon{font-size:.8em;margin-left:8px;opacity:.6;transition:opacity .2s ease}.clickable-doc-name:hover .edit-icon{opacity:1}.document-name-display{display:flex;flex-direction:column;align-items:flex-start;gap:4px;cursor:pointer;transition:all .2s ease;padding:4px 8px;border-radius:4px;width:100%}.document-name-display:hover{background-color:#4c62921a}.document-name-display:hover .alias-name{color:var(--primary-color, #4C6292)}.document-name-display:active{background-color:#4c629233;transform:scale(.98)}.document-name-display .alias-name{font-size:1.5rem;font-weight:700;color:var(--text-color, #2c3e50);line-height:1.2;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;max-width:none;transition:color .2s ease;display:flex;align-items:center;justify-content:flex-start;gap:8px}.document-name-display .alias-name .edit-icon-small{font-size:.7em;opacity:0;visibility:hidden;transition:opacity .2s ease,visibility .2s ease;margin-left:6px}.document-name-display:hover .edit-icon-small{opacity:1;visibility:visible}.document-name-display .document-name{font-size:.875rem;color:var(--text-color-secondary, #6c757d);font-weight:400;line-height:1.2;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;max-width:none;opacity:.8}.file-input-wrapper{transition:all .2s ease;min-width:300px!important;width:auto!important;max-width:80vw!important}.file-input-wrapper:focus{border-color:var(--primary-color, #4C6292)!important;box-shadow:0 0 0 .2rem #4c629240!important;outline:none!important}.document-name-input{min-width:400px!important;width:auto!important;max-width:70vw!important;padding:8px 12px!important;font-size:1.1rem!important;font-weight:500!important;border:2px solid var(--primary-color, #4C6292)!important;border-radius:6px!important;background-color:#fff!important}.document-name-input:focus{outline:none!important;border-color:var(--primary-color, #4C6292)!important;box-shadow:0 0 0 .2rem #4c629240!important}.document-edit-container{display:flex;flex-direction:column;align-items:flex-start;gap:6px;width:100%;max-width:70vw}.document-name-subline{font-size:.85rem;color:var(--text-color-secondary, #6c757d);line-height:1.2;padding-left:4px;opacity:.8}.document-viewer{position:relative;z-index:1}.document-viewer ::ng-deep .p-dialog{z-index:9999!important}.document-viewer ::ng-deep .p-dialog-mask{z-index:9998!important}.document-viewer ::ng-deep .p-dialog{width:100vw!important;height:100vh!important;max-width:none!important;max-height:none!important;margin:0!important;top:0!important;left:0!important;transform:none!important}.document-viewer ::ng-deep .p-dialog-content{height:calc(100vh - 60px)!important;max-height:none!important}.document-categories-container{padding:1rem;min-height:auto}.document-categories-container .category{background:#fff;border-radius:8px;margin-bottom:2rem;overflow:hidden;transition:all .3s ease}.document-categories-container .category .category-header{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding-top:.6rem;padding-bottom:1rem}.document-categories-container .category .category-header .category-title{flex:1;min-width:0}.document-categories-container .category .category-header .category-title h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#2c3e50}.document-categories-container .category .category-header .category-title .category-description{margin:0;color:#6c757d;font-size:.875rem;line-height:1.4}.document-categories-container .category .category-header .completion-status{display:flex;align-items:center;justify-content:center;min-width:fit-content}.document-categories-container .category .category-header .completion-status .status-badge{background-color:#fbbf24;color:#92400e;padding:.375rem .75rem;border-radius:6px;font-size:.75rem;font-weight:500;display:inline-block}.document-categories-container .category .category-header .completion-status .completion-badge{display:flex;align-items:center;justify-content:center}.document-categories-container .category .category-header .completion-status .completion-badge .p-badge{font-size:.75rem;font-weight:500;padding:.375rem .75rem;border-radius:6px;display:flex;align-items:center;justify-content:center;min-width:fit-content;white-space:nowrap}.document-categories-container .category .category-header .completion-status .completion-badge .p-badge.p-badge-success{background-color:#d1fae5;color:#065f46;font-family:inherit;font-size:12px;padding:15px;font-weight:400}.document-categories-container .category .category-header .completion-status .completion-badge .p-badge.p-badge-info{background-color:#e5e7eb;color:#000;font-family:inherit;font-size:12px;font-weight:400;padding:15px;font-style:inherit}.document-categories-container .category .category-header .completion-status .completion-badge .p-badge.p-badge-warning{background-color:#fef3c7;color:#d97706;font-family:inherit;padding:15px;font-size:12px;font-weight:400;font-style:inherit}.document-categories-container .category .category-header .completion-status .completion-badge .p-badge.p-badge-danger{background-color:#fee2e2;color:#dc2626;font-family:inherit;font-size:12px;padding:15px;font-weight:400;font-style:inherit}.document-categories-container .category .table-container{padding:0}@keyframes highlightPulse{0%{transform:scale(1.02);box-shadow:0 4px 20px #3b82f64d}50%{transform:scale(1.03);box-shadow:0 6px 25px #3b82f680}to{transform:scale(1.02);box-shadow:0 4px 20px #3b82f64d}}.document-sections-container{padding:1rem;background-color:#f8f9fa;min-height:100vh}.document-sections-container .section{background:#fff;border-radius:8px;margin-bottom:2rem;box-shadow:0 2px 4px #0000001a;overflow:hidden}.document-sections-container .section .section-header{display:flex;justify-content:space-between;align-items:flex-start;padding:1.5rem 1.5rem 1rem;border-bottom:1px solid #e9ecef}.document-sections-container .section .section-header .section-title h3{margin:0 0 .5rem;font-size:1.25rem;font-weight:600;color:#2c3e50}.document-sections-container .section .section-header .section-title .section-description{margin:0;color:#6c757d;font-size:.875rem;line-height:1.4}.document-sections-container .section .section-header .completion-status .status-badge{background-color:#fbbf24;color:#92400e;padding:.375rem .75rem;border-radius:6px;font-size:.75rem;font-weight:500;display:inline-block}.document-sections-container .section .section-header .completion-status .completion-badge .p-badge{font-size:.75rem;font-weight:500;padding:.375rem .75rem;border-radius:6px}.document-sections-container .section .section-header .completion-status .completion-badge .p-badge.p-badge-success{background-color:#10b981;color:#fff}.document-sections-container .section .section-header .completion-status .completion-badge .p-badge.p-badge-info{background-color:#3b82f6;color:#fff}.document-sections-container .section .section-header .completion-status .completion-badge .p-badge.p-badge-warning{background-color:#f59e0b;color:#fff}.document-sections-container .section .section-header .completion-status .completion-badge .p-badge.p-badge-danger{background-color:#ef4444;color:#fff}.document-sections-container .section .table-container{padding:0}@media (max-width: 768px){.document-categories-container,.document-sections-container{padding:.5rem}.document-categories-container .category .category-header,.document-categories-container .category .section-header,.document-categories-container .section .category-header,.document-categories-container .section .section-header,.document-sections-container .category .category-header,.document-sections-container .category .section-header,.document-sections-container .section .category-header,.document-sections-container .section .section-header{flex-direction:column;gap:1rem;align-items:stretch}.document-categories-container .category .category-header .completion-status,.document-categories-container .category .section-header .completion-status,.document-categories-container .section .category-header .completion-status,.document-categories-container .section .section-header .completion-status,.document-sections-container .category .category-header .completion-status,.document-sections-container .category .section-header .completion-status,.document-sections-container .section .category-header .completion-status,.document-sections-container .section .section-header .completion-status{align-self:center;width:100%;justify-content:center}}\n"], dependencies: [{ kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "component", type: i9$2.Badge, selector: "p-badge", inputs: ["styleClass", "style", "badgeSize", "severity", "value", "badgeDisabled", "size"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "directive", type: i6$1.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: TablePrimaryComponent, selector: "lib-table-primary", inputs: ["tableData", "showHeader", "tableStyle"], outputs: ["rowClick", "rowCtrlClick"] }, { kind: "component", type: DocumentViewerComponent, selector: "document-viewer", inputs: ["selectedDocument", "documentList", "contextId", "isFormHide"], outputs: ["documentStatusUpdated", "deleteError", "deleteSuccess", "viewerDestroyed"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
9838
9838
|
}
|
|
9839
9839
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentListComponent, decorators: [{
|
|
9840
9840
|
type: Component,
|
|
@@ -12074,7 +12074,7 @@ class EmlParserService {
|
|
|
12074
12074
|
}));
|
|
12075
12075
|
}
|
|
12076
12076
|
}
|
|
12077
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EmlParserService, deps: [{ token: i5$
|
|
12077
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EmlParserService, deps: [{ token: i5$1.DomSanitizer }, { token: i2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
12078
12078
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EmlParserService, providedIn: 'root' });
|
|
12079
12079
|
}
|
|
12080
12080
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: EmlParserService, decorators: [{
|
|
@@ -12082,7 +12082,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
12082
12082
|
args: [{
|
|
12083
12083
|
providedIn: 'root'
|
|
12084
12084
|
}]
|
|
12085
|
-
}], ctorParameters: () => [{ type: i5$
|
|
12085
|
+
}], ctorParameters: () => [{ type: i5$1.DomSanitizer }, { type: i2.HttpClient }] });
|
|
12086
12086
|
|
|
12087
12087
|
/*
|
|
12088
12088
|
* Public API Surface of cat-document-lib
|