cat-documents-ng 0.3.20 → 0.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Shared/constant/SHARED.d.ts +13 -0
- package/fesm2022/cat-documents-ng.mjs +515 -137
- package/fesm2022/cat-documents-ng.mjs.map +1 -1
- package/lib/document/components/document-content-viewer/document-content-viewer.component.d.ts +68 -8
- package/lib/document/services/csv-parser.service.d.ts +88 -0
- package/lib/document/services/document-http.service.d.ts +15 -0
- package/package.json +1 -1
|
@@ -4,11 +4,11 @@ import * as i2$1 from '@angular/common';
|
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import { firstValueFrom, EMPTY, tap, catchError, throwError, of, combineLatest, Subject, Observable, takeUntil, Subscription, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1 } from 'rxjs';
|
|
6
6
|
import * as i2 from '@angular/common/http';
|
|
7
|
-
import {
|
|
7
|
+
import { HttpParams, HttpHeaders, 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 } from 'rxjs/operators';
|
|
11
|
-
import * as i6$
|
|
11
|
+
import * as i6$2 from 'primeng/confirmdialog';
|
|
12
12
|
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|
13
13
|
import { trigger, state, transition, style, animate } from '@angular/animations';
|
|
14
14
|
import * as i3 from 'primeng/api';
|
|
@@ -40,12 +40,12 @@ import { TableModule } from 'primeng/table';
|
|
|
40
40
|
import * as i3$2 from 'primeng/accordion';
|
|
41
41
|
import { AccordionModule } from 'primeng/accordion';
|
|
42
42
|
import * as XLSX from 'xlsx';
|
|
43
|
-
import * as
|
|
43
|
+
import * as i6 from 'ng2-pdf-viewer';
|
|
44
44
|
import { PdfViewerModule } from 'ng2-pdf-viewer';
|
|
45
|
-
import * as
|
|
45
|
+
import * as i7 from 'ngx-doc-viewer';
|
|
46
46
|
import { NgxDocViewerModule } from 'ngx-doc-viewer';
|
|
47
47
|
import * as i1 from '@angular/router';
|
|
48
|
-
import * as i6 from 'primeng/inputtextarea';
|
|
48
|
+
import * as i6$1 from 'primeng/inputtextarea';
|
|
49
49
|
import { InputTextareaModule } from 'primeng/inputtextarea';
|
|
50
50
|
import * as i9$1 from 'primeng/tooltip';
|
|
51
51
|
import { TooltipModule } from 'primeng/tooltip';
|
|
@@ -324,6 +324,19 @@ class SHARED {
|
|
|
324
324
|
static INITIAL_REQUEST = 'Initial Request';
|
|
325
325
|
static ERROR_PARSING_SHEET_DATA = 'Error parsing sheet data';
|
|
326
326
|
static REFRESH_TRIGGER = 'refreshTrigger';
|
|
327
|
+
static PDF_TYPE = 'application/pdf';
|
|
328
|
+
static ICON_FILE_WORD = 'pi pi-file-word';
|
|
329
|
+
static ICON_ENVELOPE = 'pi pi-envelope';
|
|
330
|
+
static PDF_DOCUMENT = 'PDF Document';
|
|
331
|
+
static IMAGE = 'Image';
|
|
332
|
+
static EXCEL_SPREADSHEET = 'Excel Spreadsheet';
|
|
333
|
+
static WORD_DOCUMENT = 'Word Document';
|
|
334
|
+
static CSV_FILE = 'CSV File';
|
|
335
|
+
static EMAIL_MESSAGE = 'Email Message';
|
|
336
|
+
static OPEN_DOCUMENT = 'OpenDocument';
|
|
337
|
+
static NO_DATA_AVAILABLE = 'No data available';
|
|
338
|
+
static ERROR_PARSING_EXCEL_FILE = 'Unable to parse Excel file';
|
|
339
|
+
static ERROR_PARSING_EXCEL_FILE_STRUCTURE = 'Unable to parse Excel file structure';
|
|
327
340
|
static Menu = [
|
|
328
341
|
{
|
|
329
342
|
label: 'Applicant',
|
|
@@ -1302,6 +1315,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
1302
1315
|
|
|
1303
1316
|
/**
|
|
1304
1317
|
* Service for making HTTP requests related to documents.
|
|
1318
|
+
* Authentication is handled automatically by the HTTP interceptor in the main project.
|
|
1305
1319
|
* @class DocumentHttpService
|
|
1306
1320
|
* @typedef {DocumentHttpService}
|
|
1307
1321
|
*/
|
|
@@ -1350,9 +1364,8 @@ class DocumentHttpService {
|
|
|
1350
1364
|
* @returns {Observable<any>} Observable that emits the transformed data for dropdown options.
|
|
1351
1365
|
*/
|
|
1352
1366
|
getDocumentCatagories(contextId) {
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
// Store only the categories array, not the entire response
|
|
1367
|
+
return this.http.get(`${this.apiUrl}${URLS.DOCUMENTS_CATAGORIES}/${contextId}`)
|
|
1368
|
+
.pipe(tap((response) => {
|
|
1356
1369
|
if (response && response.categories) {
|
|
1357
1370
|
this.documentStore.setDocumentCategories(response.categories);
|
|
1358
1371
|
}
|
|
@@ -1409,8 +1422,7 @@ class DocumentHttpService {
|
|
|
1409
1422
|
* @returns {Observable<DocumentModel>} An observable that emits the updated DocumentModel.
|
|
1410
1423
|
*/
|
|
1411
1424
|
updateDocumentName(documentId, payload) {
|
|
1412
|
-
|
|
1413
|
-
return this.http.put(`${this.apiUrl}${URLS.ALIAS_NAME}${documentId}`, payload, { headers }).pipe(catchError((error) => {
|
|
1425
|
+
return this.http.put(`${this.apiUrl}${URLS.ALIAS_NAME}${documentId}`, payload).pipe(catchError((error) => {
|
|
1414
1426
|
return throwError(() => new Error(error));
|
|
1415
1427
|
}));
|
|
1416
1428
|
}
|
|
@@ -1420,10 +1432,9 @@ class DocumentHttpService {
|
|
|
1420
1432
|
* @returns {Observable<UserListModel[]>} Observable that emits the user list data.
|
|
1421
1433
|
*/
|
|
1422
1434
|
getUserListByContextId(contextId) {
|
|
1423
|
-
let headers = new HttpHeaders().set('Authorization', `Bearer 3cfa4bbb-f612-4098-aef2-d01842d1dac8`);
|
|
1424
1435
|
if (!contextId)
|
|
1425
1436
|
return EMPTY;
|
|
1426
|
-
return this.http.get(`${this.apiUrl}${URLS.USERLIST}${contextId}
|
|
1437
|
+
return this.http.get(`${this.apiUrl}${URLS.USERLIST}${contextId}`).pipe(tap((userList) => {
|
|
1427
1438
|
this.documentStore.setUserList(userList);
|
|
1428
1439
|
}), catchError((error) => {
|
|
1429
1440
|
return throwError(() => new Error(error));
|
|
@@ -1439,7 +1450,6 @@ class DocumentHttpService {
|
|
|
1439
1450
|
getStatusDocumentCount(applicationId, contextId = null, categoryId = null) {
|
|
1440
1451
|
if (!applicationId)
|
|
1441
1452
|
return EMPTY;
|
|
1442
|
-
let headers = new HttpHeaders().set('Authorization', `Bearer 3cfa4bbb-f612-4098-aef2-d01842d1dac8`);
|
|
1443
1453
|
let url = `${this.apiUrl}${URLS.STATUS_DOCUMENT_COUNT}${applicationId}`;
|
|
1444
1454
|
let params = new HttpParams();
|
|
1445
1455
|
const contextParam = contextId || null;
|
|
@@ -1449,7 +1459,7 @@ class DocumentHttpService {
|
|
|
1449
1459
|
if (categoryId) {
|
|
1450
1460
|
params = params.set(SHARED.CATEGORY, categoryId);
|
|
1451
1461
|
}
|
|
1452
|
-
return this.http.get(url, { params
|
|
1462
|
+
return this.http.get(url, { params }).pipe(tap((statusData) => {
|
|
1453
1463
|
this.documentStore.setStatusData(statusData);
|
|
1454
1464
|
}), catchError((error) => {
|
|
1455
1465
|
return throwError(() => new Error(error));
|
|
@@ -1468,7 +1478,6 @@ class DocumentHttpService {
|
|
|
1468
1478
|
*/
|
|
1469
1479
|
getDocumentsBySelection(contextId, menuItem, userId, status, searchKey = null) {
|
|
1470
1480
|
let params = new HttpParams();
|
|
1471
|
-
let headers = new HttpHeaders().set('Authorization', `Bearer 3cfa4bbb-f612-4098-aef2-d01842d1dac8`);
|
|
1472
1481
|
if (userId) {
|
|
1473
1482
|
params = params.set(SHARED.CONTEXT_ID, userId);
|
|
1474
1483
|
}
|
|
@@ -1478,7 +1487,7 @@ class DocumentHttpService {
|
|
|
1478
1487
|
if (searchKey) {
|
|
1479
1488
|
params = params.set(SHARED.SEARCH_KEY, searchKey);
|
|
1480
1489
|
}
|
|
1481
|
-
return this.http.get(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params
|
|
1490
|
+
return this.http.get(`${this.apiUrl}${URLS.GETALL}/${contextId}`, { params }).pipe(tap((response) => {
|
|
1482
1491
|
if (response.documents) {
|
|
1483
1492
|
this.documentStore.setDocumentList(response.documents);
|
|
1484
1493
|
}
|
|
@@ -1490,8 +1499,7 @@ class DocumentHttpService {
|
|
|
1490
1499
|
if (!documentId) {
|
|
1491
1500
|
return of([]);
|
|
1492
1501
|
}
|
|
1493
|
-
|
|
1494
|
-
return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`, { headers }).pipe(catchError((error) => {
|
|
1502
|
+
return this.http.get(`${this.apiUrl}${URLS.DOCUMENT_HISTORY}${documentId}`).pipe(catchError((error) => {
|
|
1495
1503
|
return throwError(() => new Error(error));
|
|
1496
1504
|
}));
|
|
1497
1505
|
}
|
|
@@ -1503,8 +1511,7 @@ class DocumentHttpService {
|
|
|
1503
1511
|
getCategoriesBySource(source) {
|
|
1504
1512
|
if (!source)
|
|
1505
1513
|
return EMPTY;
|
|
1506
|
-
|
|
1507
|
-
return this.http.get(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`, { headers }).pipe(catchError((error) => {
|
|
1514
|
+
return this.http.get(`${this.apiUrl}${URLS.GET_CATEGORIES_BY_SOURCE}${source}`).pipe(catchError((error) => {
|
|
1508
1515
|
return throwError(() => new Error(error));
|
|
1509
1516
|
}));
|
|
1510
1517
|
}
|
|
@@ -1516,8 +1523,7 @@ class DocumentHttpService {
|
|
|
1516
1523
|
getDocumentTypesByCategory(categoryId) {
|
|
1517
1524
|
if (!categoryId)
|
|
1518
1525
|
return EMPTY;
|
|
1519
|
-
|
|
1520
|
-
return this.http.get(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`, { headers }).pipe(catchError((error) => {
|
|
1526
|
+
return this.http.get(`${this.apiUrl}${URLS.GET_DOCUMENT_TYPES_BY_CATEGORY}${categoryId}`).pipe(catchError((error) => {
|
|
1521
1527
|
return throwError(() => new Error(error));
|
|
1522
1528
|
}));
|
|
1523
1529
|
}
|
|
@@ -1527,8 +1533,7 @@ class DocumentHttpService {
|
|
|
1527
1533
|
* @returns {Observable<any>} Observable that emits the upload response.
|
|
1528
1534
|
*/
|
|
1529
1535
|
uploadFile(formData) {
|
|
1530
|
-
|
|
1531
|
-
return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData, { headers }).pipe(catchError((error) => {
|
|
1536
|
+
return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, formData).pipe(catchError((error) => {
|
|
1532
1537
|
return throwError(() => new Error(error));
|
|
1533
1538
|
}));
|
|
1534
1539
|
}
|
|
@@ -1538,8 +1543,7 @@ class DocumentHttpService {
|
|
|
1538
1543
|
* @returns {Observable<any>} Observable that emits the save response.
|
|
1539
1544
|
*/
|
|
1540
1545
|
saveDocumentUpload(payload) {
|
|
1541
|
-
|
|
1542
|
-
return this.http.post(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload, { headers }).pipe(catchError((error) => {
|
|
1546
|
+
return this.http.post(`${this.apiUrl}${URLS.SAVE_DOCUMENT_UPLOAD}`, payload).pipe(catchError((error) => {
|
|
1543
1547
|
return throwError(() => new Error(error));
|
|
1544
1548
|
}));
|
|
1545
1549
|
}
|
|
@@ -1554,8 +1558,7 @@ class DocumentHttpService {
|
|
|
1554
1558
|
const payload = {
|
|
1555
1559
|
statusUpdateDescription: statusUpdateDescription
|
|
1556
1560
|
};
|
|
1557
|
-
|
|
1558
|
-
return this.http.put(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload, { headers }).pipe(tap((response) => {
|
|
1561
|
+
return this.http.put(`${this.apiUrl}${URLS.UPDATE_DOCUMENT_STATUS}${documentId}/${status}`, payload).pipe(tap((response) => {
|
|
1559
1562
|
if (response && response.status) {
|
|
1560
1563
|
const normalizedStatus = this.normalizeStatus(response.status);
|
|
1561
1564
|
response.normalizedStatus = normalizedStatus;
|
|
@@ -1588,8 +1591,7 @@ class DocumentHttpService {
|
|
|
1588
1591
|
* @returns {Observable<any>} Observable that emits the delete response
|
|
1589
1592
|
*/
|
|
1590
1593
|
deleteDocument(documentId, contextId) {
|
|
1591
|
-
|
|
1592
|
-
return this.http.delete(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`, { headers }).pipe(tap(() => {
|
|
1594
|
+
return this.http.delete(`${this.apiUrl}${URLS.DELETE_DOCUMENT}${documentId}`).pipe(tap(() => {
|
|
1593
1595
|
this.getDocumentCatagories(contextId).subscribe();
|
|
1594
1596
|
this.getUserListByContextId(contextId).subscribe();
|
|
1595
1597
|
this.getStatusDocumentCount(contextId).subscribe();
|
|
@@ -1598,6 +1600,32 @@ class DocumentHttpService {
|
|
|
1598
1600
|
return throwError(() => new Error(error));
|
|
1599
1601
|
}));
|
|
1600
1602
|
}
|
|
1603
|
+
/**
|
|
1604
|
+
* Downloads an Excel file with proper authentication headers
|
|
1605
|
+
* Authentication is handled automatically by the HTTP interceptor
|
|
1606
|
+
* @param {string} documentUrl - The URL of the Excel file to download
|
|
1607
|
+
* @returns {Observable<ArrayBuffer>} Observable that emits the file data as ArrayBuffer
|
|
1608
|
+
*/
|
|
1609
|
+
downloadExcelFile(documentUrl) {
|
|
1610
|
+
return this.http.get(documentUrl, {
|
|
1611
|
+
responseType: 'arraybuffer'
|
|
1612
|
+
}).pipe(catchError((error) => {
|
|
1613
|
+
return throwError(() => new Error(error));
|
|
1614
|
+
}));
|
|
1615
|
+
}
|
|
1616
|
+
/**
|
|
1617
|
+
* Downloads a CSV file with proper authentication headers
|
|
1618
|
+
* Authentication is handled automatically by the HTTP interceptor
|
|
1619
|
+
* @param {string} documentUrl - The URL of the CSV file to download
|
|
1620
|
+
* @returns {Observable<string>} Observable that emits the file data as string
|
|
1621
|
+
*/
|
|
1622
|
+
downloadCsvFile(documentUrl) {
|
|
1623
|
+
return this.http.get(documentUrl, {
|
|
1624
|
+
responseType: 'text'
|
|
1625
|
+
}).pipe(catchError((error) => {
|
|
1626
|
+
return throwError(() => new Error(error));
|
|
1627
|
+
}));
|
|
1628
|
+
}
|
|
1601
1629
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentHttpService, deps: [{ token: DocumentStore }, { token: i2.HttpClient }, { token: AppConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1602
1630
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentHttpService, providedIn: 'root' });
|
|
1603
1631
|
}
|
|
@@ -2388,8 +2416,8 @@ class DocumentService {
|
|
|
2388
2416
|
* @returns {Observable<any>} Observable that emits the newly created document.
|
|
2389
2417
|
*/
|
|
2390
2418
|
create(entity) {
|
|
2391
|
-
|
|
2392
|
-
return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, entity, { headers }).pipe(tap((newEntity) => this.documentStore.add(newEntity)));
|
|
2419
|
+
let header = new HttpHeaders({ Authorization: `Bearer 7ead1d99-f8f8-445f-9889-2fe120f0b63e` });
|
|
2420
|
+
return this.http.post(`${this.apiUrl}${URLS.DOCUMENT_UPLOAD_FILE}`, entity, { headers: header }).pipe(tap((newEntity) => this.documentStore.add(newEntity)));
|
|
2393
2421
|
}
|
|
2394
2422
|
/**
|
|
2395
2423
|
* Fetches all documents from the backend.
|
|
@@ -6002,6 +6030,257 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
6002
6030
|
}]
|
|
6003
6031
|
}] });
|
|
6004
6032
|
|
|
6033
|
+
class CsvParserService {
|
|
6034
|
+
constructor() { }
|
|
6035
|
+
/**
|
|
6036
|
+
* Parses CSV data from a string
|
|
6037
|
+
* @param csvContent - The CSV content as a string
|
|
6038
|
+
* @param options - Parsing options
|
|
6039
|
+
* @returns Parsed CSV data
|
|
6040
|
+
*/
|
|
6041
|
+
parseCsvData(csvContent, options = {}) {
|
|
6042
|
+
const { delimiter = ',', hasHeaders = true, maxRows = 1000 } = options;
|
|
6043
|
+
try {
|
|
6044
|
+
// Split content into lines and filter out empty lines
|
|
6045
|
+
const lines = csvContent
|
|
6046
|
+
.split('\n')
|
|
6047
|
+
.map(line => line.trim())
|
|
6048
|
+
.filter(line => line.length > 0);
|
|
6049
|
+
if (lines.length === 0) {
|
|
6050
|
+
return this.createEmptyCsvData();
|
|
6051
|
+
}
|
|
6052
|
+
// Parse each line
|
|
6053
|
+
const parsedRows = [];
|
|
6054
|
+
let headers = [];
|
|
6055
|
+
lines.forEach((line, index) => {
|
|
6056
|
+
if (index >= maxRows)
|
|
6057
|
+
return;
|
|
6058
|
+
const row = this.parseCsvLine(line, delimiter);
|
|
6059
|
+
if (row.length > 0) {
|
|
6060
|
+
parsedRows.push(row);
|
|
6061
|
+
}
|
|
6062
|
+
});
|
|
6063
|
+
// Extract headers if specified
|
|
6064
|
+
if (hasHeaders && parsedRows.length > 0) {
|
|
6065
|
+
headers = parsedRows[0];
|
|
6066
|
+
parsedRows.splice(0, 1); // Remove header row from data
|
|
6067
|
+
}
|
|
6068
|
+
else if (parsedRows.length > 0) {
|
|
6069
|
+
// Generate default headers if none provided
|
|
6070
|
+
headers = parsedRows[0].map((_, index) => `Column ${index + 1}`);
|
|
6071
|
+
}
|
|
6072
|
+
// Create styled data for display
|
|
6073
|
+
const styledData = this.createStyledData(headers, parsedRows, hasHeaders);
|
|
6074
|
+
return {
|
|
6075
|
+
headers,
|
|
6076
|
+
rows: parsedRows,
|
|
6077
|
+
styledData,
|
|
6078
|
+
totalRows: parsedRows.length,
|
|
6079
|
+
totalColumns: headers.length,
|
|
6080
|
+
hasHeaders
|
|
6081
|
+
};
|
|
6082
|
+
}
|
|
6083
|
+
catch (error) {
|
|
6084
|
+
console.error('Error parsing CSV data:', error);
|
|
6085
|
+
return this.createEmptyCsvData();
|
|
6086
|
+
}
|
|
6087
|
+
}
|
|
6088
|
+
/**
|
|
6089
|
+
* Parses a single CSV line with proper handling of quoted fields
|
|
6090
|
+
* @param line - Single CSV line
|
|
6091
|
+
* @param delimiter - Field delimiter
|
|
6092
|
+
* @returns Array of field values
|
|
6093
|
+
*/
|
|
6094
|
+
parseCsvLine(line, delimiter) {
|
|
6095
|
+
const result = [];
|
|
6096
|
+
let current = '';
|
|
6097
|
+
let inQuotes = false;
|
|
6098
|
+
let i = 0;
|
|
6099
|
+
while (i < line.length) {
|
|
6100
|
+
const char = line[i];
|
|
6101
|
+
if (char === '"') {
|
|
6102
|
+
if (inQuotes && line[i + 1] === '"') {
|
|
6103
|
+
// Escaped quote
|
|
6104
|
+
current += '"';
|
|
6105
|
+
i += 2;
|
|
6106
|
+
}
|
|
6107
|
+
else {
|
|
6108
|
+
// Toggle quote state
|
|
6109
|
+
inQuotes = !inQuotes;
|
|
6110
|
+
i++;
|
|
6111
|
+
}
|
|
6112
|
+
}
|
|
6113
|
+
else if (char === delimiter && !inQuotes) {
|
|
6114
|
+
// End of field
|
|
6115
|
+
result.push(current.trim());
|
|
6116
|
+
current = '';
|
|
6117
|
+
i++;
|
|
6118
|
+
}
|
|
6119
|
+
else {
|
|
6120
|
+
current += char;
|
|
6121
|
+
i++;
|
|
6122
|
+
}
|
|
6123
|
+
}
|
|
6124
|
+
// Add the last field
|
|
6125
|
+
result.push(current.trim());
|
|
6126
|
+
return result;
|
|
6127
|
+
}
|
|
6128
|
+
/**
|
|
6129
|
+
* Creates styled data for display in tables
|
|
6130
|
+
* @param headers - Column headers
|
|
6131
|
+
* @param rows - Data rows
|
|
6132
|
+
* @param hasHeaders - Whether the data has headers
|
|
6133
|
+
* @returns Styled data array
|
|
6134
|
+
*/
|
|
6135
|
+
createStyledData(headers, rows, hasHeaders) {
|
|
6136
|
+
const styledData = [];
|
|
6137
|
+
// Add header row if headers exist
|
|
6138
|
+
if (hasHeaders && headers.length > 0) {
|
|
6139
|
+
styledData.push({
|
|
6140
|
+
cells: headers.map(header => ({
|
|
6141
|
+
value: header,
|
|
6142
|
+
isHeader: true,
|
|
6143
|
+
style: { fontWeight: 'bold', backgroundColor: '#f8f9fa' }
|
|
6144
|
+
}))
|
|
6145
|
+
});
|
|
6146
|
+
}
|
|
6147
|
+
// Add data rows
|
|
6148
|
+
rows.forEach(row => {
|
|
6149
|
+
styledData.push({
|
|
6150
|
+
cells: row.map((cell, index) => ({
|
|
6151
|
+
value: cell || '',
|
|
6152
|
+
isHeader: false,
|
|
6153
|
+
style: {}
|
|
6154
|
+
}))
|
|
6155
|
+
});
|
|
6156
|
+
});
|
|
6157
|
+
return styledData;
|
|
6158
|
+
}
|
|
6159
|
+
/**
|
|
6160
|
+
* Creates empty CSV data structure
|
|
6161
|
+
* @returns Empty CSV data
|
|
6162
|
+
*/
|
|
6163
|
+
createEmptyCsvData() {
|
|
6164
|
+
return {
|
|
6165
|
+
headers: [],
|
|
6166
|
+
rows: [],
|
|
6167
|
+
styledData: [],
|
|
6168
|
+
totalRows: 0,
|
|
6169
|
+
totalColumns: 0,
|
|
6170
|
+
hasHeaders: false
|
|
6171
|
+
};
|
|
6172
|
+
}
|
|
6173
|
+
/**
|
|
6174
|
+
* Validates CSV content
|
|
6175
|
+
* @param csvContent - CSV content to validate
|
|
6176
|
+
* @returns Validation result
|
|
6177
|
+
*/
|
|
6178
|
+
validateCsvContent(csvContent) {
|
|
6179
|
+
const errors = [];
|
|
6180
|
+
if (!csvContent || csvContent.trim().length === 0) {
|
|
6181
|
+
errors.push('CSV content is empty');
|
|
6182
|
+
return { isValid: false, errors };
|
|
6183
|
+
}
|
|
6184
|
+
const lines = csvContent.split('\n').filter(line => line.trim().length > 0);
|
|
6185
|
+
if (lines.length === 0) {
|
|
6186
|
+
errors.push('No valid lines found in CSV');
|
|
6187
|
+
return { isValid: false, errors };
|
|
6188
|
+
}
|
|
6189
|
+
// Check for consistent column count
|
|
6190
|
+
const columnCounts = lines.map(line => this.countColumns(line));
|
|
6191
|
+
const firstColumnCount = columnCounts[0];
|
|
6192
|
+
for (let i = 1; i < columnCounts.length; i++) {
|
|
6193
|
+
if (columnCounts[i] !== firstColumnCount) {
|
|
6194
|
+
errors.push(`Line ${i + 1} has ${columnCounts[i]} columns, expected ${firstColumnCount}`);
|
|
6195
|
+
}
|
|
6196
|
+
}
|
|
6197
|
+
return {
|
|
6198
|
+
isValid: errors.length === 0,
|
|
6199
|
+
errors
|
|
6200
|
+
};
|
|
6201
|
+
}
|
|
6202
|
+
/**
|
|
6203
|
+
* Counts columns in a CSV line
|
|
6204
|
+
* @param line - CSV line
|
|
6205
|
+
* @returns Number of columns
|
|
6206
|
+
*/
|
|
6207
|
+
countColumns(line) {
|
|
6208
|
+
let count = 0;
|
|
6209
|
+
let inQuotes = false;
|
|
6210
|
+
let i = 0;
|
|
6211
|
+
while (i < line.length) {
|
|
6212
|
+
const char = line[i];
|
|
6213
|
+
if (char === '"') {
|
|
6214
|
+
if (inQuotes && line[i + 1] === '"') {
|
|
6215
|
+
i += 2;
|
|
6216
|
+
}
|
|
6217
|
+
else {
|
|
6218
|
+
inQuotes = !inQuotes;
|
|
6219
|
+
i++;
|
|
6220
|
+
}
|
|
6221
|
+
}
|
|
6222
|
+
else if (char === ',' && !inQuotes) {
|
|
6223
|
+
count++;
|
|
6224
|
+
i++;
|
|
6225
|
+
}
|
|
6226
|
+
else {
|
|
6227
|
+
i++;
|
|
6228
|
+
}
|
|
6229
|
+
}
|
|
6230
|
+
return count + 1; // +1 because we count delimiters, not fields
|
|
6231
|
+
}
|
|
6232
|
+
/**
|
|
6233
|
+
* Exports data to CSV format
|
|
6234
|
+
* @param data - Data to export
|
|
6235
|
+
* @param headers - Column headers
|
|
6236
|
+
* @param delimiter - Field delimiter
|
|
6237
|
+
* @returns CSV string
|
|
6238
|
+
*/
|
|
6239
|
+
exportToCsv(data, headers, delimiter = ',') {
|
|
6240
|
+
const csvLines = [];
|
|
6241
|
+
// Add headers if provided
|
|
6242
|
+
if (headers && headers.length > 0) {
|
|
6243
|
+
csvLines.push(this.escapeCsvField(headers.join(delimiter)));
|
|
6244
|
+
}
|
|
6245
|
+
// Add data rows
|
|
6246
|
+
data.forEach(row => {
|
|
6247
|
+
const escapedRow = row.map(field => this.escapeCsvField(field));
|
|
6248
|
+
csvLines.push(escapedRow.join(delimiter));
|
|
6249
|
+
});
|
|
6250
|
+
return csvLines.join('\n');
|
|
6251
|
+
}
|
|
6252
|
+
/**
|
|
6253
|
+
* Escapes a CSV field value
|
|
6254
|
+
* @param field - Field value to escape
|
|
6255
|
+
* @returns Escaped field value
|
|
6256
|
+
*/
|
|
6257
|
+
escapeCsvField(field) {
|
|
6258
|
+
if (field.includes(',') || field.includes('"') || field.includes('\n') || field.includes('\r')) {
|
|
6259
|
+
return `"${field.replace(/"/g, '""')}"`;
|
|
6260
|
+
}
|
|
6261
|
+
return field;
|
|
6262
|
+
}
|
|
6263
|
+
/**
|
|
6264
|
+
* Gets CSV preview (first few rows)
|
|
6265
|
+
* @param csvContent - Full CSV content
|
|
6266
|
+
* @param maxRows - Maximum number of rows to preview
|
|
6267
|
+
* @returns Preview data
|
|
6268
|
+
*/
|
|
6269
|
+
getCsvPreview(csvContent, maxRows = 10) {
|
|
6270
|
+
const lines = csvContent.split('\n').filter(line => line.trim().length > 0);
|
|
6271
|
+
const previewContent = lines.slice(0, maxRows + 1).join('\n'); // +1 for header
|
|
6272
|
+
return this.parseCsvData(previewContent, { maxRows });
|
|
6273
|
+
}
|
|
6274
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CsvParserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
6275
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CsvParserService, providedIn: 'root' });
|
|
6276
|
+
}
|
|
6277
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CsvParserService, decorators: [{
|
|
6278
|
+
type: Injectable,
|
|
6279
|
+
args: [{
|
|
6280
|
+
providedIn: 'root'
|
|
6281
|
+
}]
|
|
6282
|
+
}], ctorParameters: () => [] });
|
|
6283
|
+
|
|
6005
6284
|
/**
|
|
6006
6285
|
* Component for viewing different types of document content.
|
|
6007
6286
|
* Supports PDF, images, and other document formats.
|
|
@@ -6009,8 +6288,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
6009
6288
|
* @typedef {DocumentContentViewerComponent}
|
|
6010
6289
|
*/
|
|
6011
6290
|
class DocumentContentViewerComponent {
|
|
6012
|
-
http;
|
|
6013
6291
|
excelParserService;
|
|
6292
|
+
csvParserService;
|
|
6293
|
+
documentHttpService;
|
|
6014
6294
|
/**
|
|
6015
6295
|
* The document URL to display
|
|
6016
6296
|
* @type {string}
|
|
@@ -6035,22 +6315,22 @@ class DocumentContentViewerComponent {
|
|
|
6035
6315
|
* Parsed Excel data as table rows
|
|
6036
6316
|
* @type {any[][]}
|
|
6037
6317
|
*/
|
|
6038
|
-
excelTableData =
|
|
6318
|
+
excelTableData = SHARED.EMPTY_ARRAY;
|
|
6039
6319
|
/**
|
|
6040
6320
|
* Enhanced Excel data with styling information
|
|
6041
6321
|
* @type {ExcelRowData[]}
|
|
6042
6322
|
*/
|
|
6043
|
-
excelStyledData =
|
|
6323
|
+
excelStyledData = SHARED.EMPTY_ARRAY;
|
|
6044
6324
|
/**
|
|
6045
6325
|
* Excel sheet names
|
|
6046
6326
|
* @type {string[]}
|
|
6047
6327
|
*/
|
|
6048
|
-
excelSheets =
|
|
6328
|
+
excelSheets = SHARED.EMPTY_ARRAY;
|
|
6049
6329
|
/**
|
|
6050
6330
|
* Current active sheet
|
|
6051
6331
|
* @type {string}
|
|
6052
6332
|
*/
|
|
6053
|
-
currentSheet =
|
|
6333
|
+
currentSheet = SHARED.EMPTY;
|
|
6054
6334
|
/**
|
|
6055
6335
|
* Loading state for Excel files
|
|
6056
6336
|
* @type {boolean}
|
|
@@ -6061,6 +6341,36 @@ class DocumentContentViewerComponent {
|
|
|
6061
6341
|
* @type {string | null}
|
|
6062
6342
|
*/
|
|
6063
6343
|
excelError = null;
|
|
6344
|
+
/**
|
|
6345
|
+
* Loading state specifically for Word documents
|
|
6346
|
+
* @type {boolean}
|
|
6347
|
+
*/
|
|
6348
|
+
isLoadingWordDocument = false;
|
|
6349
|
+
/**
|
|
6350
|
+
* CSV data for display
|
|
6351
|
+
* @type {any}
|
|
6352
|
+
*/
|
|
6353
|
+
csvData = null;
|
|
6354
|
+
/**
|
|
6355
|
+
* Parsed CSV data as table rows
|
|
6356
|
+
* @type {any[][]}
|
|
6357
|
+
*/
|
|
6358
|
+
csvTableData = SHARED.EMPTY_ARRAY;
|
|
6359
|
+
/**
|
|
6360
|
+
* Enhanced CSV data with styling information
|
|
6361
|
+
* @type {CsvRowData[]}
|
|
6362
|
+
*/
|
|
6363
|
+
csvStyledData = SHARED.EMPTY_ARRAY;
|
|
6364
|
+
/**
|
|
6365
|
+
* Loading state for CSV files
|
|
6366
|
+
* @type {boolean}
|
|
6367
|
+
*/
|
|
6368
|
+
isLoadingCsv = false;
|
|
6369
|
+
/**
|
|
6370
|
+
* Error state for CSV files
|
|
6371
|
+
* @type {string | null}
|
|
6372
|
+
*/
|
|
6373
|
+
csvError = null;
|
|
6064
6374
|
/**
|
|
6065
6375
|
* Configuration for the document viewer
|
|
6066
6376
|
* @type {any}
|
|
@@ -6071,6 +6381,16 @@ class DocumentContentViewerComponent {
|
|
|
6071
6381
|
minZoom: 25,
|
|
6072
6382
|
maxZoom: 400
|
|
6073
6383
|
};
|
|
6384
|
+
/**
|
|
6385
|
+
* Constructor
|
|
6386
|
+
* @param {ExcelParserService} excelParserService - Service for parsing Excel files
|
|
6387
|
+
* @param {DocumentHttpService} documentHttpService - Service for making HTTP requests with authentication
|
|
6388
|
+
*/
|
|
6389
|
+
constructor(excelParserService, csvParserService, documentHttpService) {
|
|
6390
|
+
this.excelParserService = excelParserService;
|
|
6391
|
+
this.csvParserService = csvParserService;
|
|
6392
|
+
this.documentHttpService = documentHttpService;
|
|
6393
|
+
}
|
|
6074
6394
|
/**
|
|
6075
6395
|
* Computed property to determine if the document is an image
|
|
6076
6396
|
* @type {boolean}
|
|
@@ -6083,7 +6403,7 @@ class DocumentContentViewerComponent {
|
|
|
6083
6403
|
* @type {boolean}
|
|
6084
6404
|
*/
|
|
6085
6405
|
get isPdf() {
|
|
6086
|
-
return this.contentType ===
|
|
6406
|
+
return this.contentType === SHARED.PDF_TYPE;
|
|
6087
6407
|
}
|
|
6088
6408
|
/**
|
|
6089
6409
|
* Computed property to determine if the document is an Excel file
|
|
@@ -6137,20 +6457,20 @@ class DocumentContentViewerComponent {
|
|
|
6137
6457
|
*/
|
|
6138
6458
|
get documentIcon() {
|
|
6139
6459
|
if (this.isPdf)
|
|
6140
|
-
return
|
|
6460
|
+
return SHARED.ICON_FILE_PDF;
|
|
6141
6461
|
if (this.isImage)
|
|
6142
|
-
return
|
|
6462
|
+
return SHARED.ICON_IMAGE;
|
|
6143
6463
|
if (this.isExcel)
|
|
6144
|
-
return
|
|
6464
|
+
return SHARED.ICON_FILE_EXCEL;
|
|
6145
6465
|
if (this.isWord)
|
|
6146
|
-
return
|
|
6466
|
+
return SHARED.ICON_FILE_WORD;
|
|
6147
6467
|
if (this.isCsv)
|
|
6148
|
-
return
|
|
6468
|
+
return SHARED.ICON_FILE;
|
|
6149
6469
|
if (this.isEmail)
|
|
6150
|
-
return
|
|
6470
|
+
return SHARED.ICON_ENVELOPE;
|
|
6151
6471
|
if (this.isOpenDocument)
|
|
6152
|
-
return
|
|
6153
|
-
return
|
|
6472
|
+
return SHARED.ICON_FILE;
|
|
6473
|
+
return SHARED.ICON_FILE;
|
|
6154
6474
|
}
|
|
6155
6475
|
/**
|
|
6156
6476
|
* Computed property to get the display text for the document type
|
|
@@ -6158,20 +6478,20 @@ class DocumentContentViewerComponent {
|
|
|
6158
6478
|
*/
|
|
6159
6479
|
get documentTypeText() {
|
|
6160
6480
|
if (this.isPdf)
|
|
6161
|
-
return
|
|
6481
|
+
return SHARED.PDF_DOCUMENT;
|
|
6162
6482
|
if (this.isImage)
|
|
6163
|
-
return
|
|
6483
|
+
return SHARED.IMAGE;
|
|
6164
6484
|
if (this.isExcel)
|
|
6165
|
-
return
|
|
6485
|
+
return SHARED.EXCEL_SPREADSHEET;
|
|
6166
6486
|
if (this.isWord)
|
|
6167
|
-
return
|
|
6487
|
+
return SHARED.WORD_DOCUMENT;
|
|
6168
6488
|
if (this.isCsv)
|
|
6169
|
-
return
|
|
6489
|
+
return SHARED.CSV_FILE;
|
|
6170
6490
|
if (this.isEmail)
|
|
6171
|
-
return
|
|
6491
|
+
return SHARED.EMAIL_MESSAGE;
|
|
6172
6492
|
if (this.isOpenDocument)
|
|
6173
|
-
return
|
|
6174
|
-
return
|
|
6493
|
+
return SHARED.OPEN_DOCUMENT;
|
|
6494
|
+
return SHARED.DOCUMENT;
|
|
6175
6495
|
}
|
|
6176
6496
|
/**
|
|
6177
6497
|
* Safely gets the styled Excel data for display
|
|
@@ -6179,17 +6499,49 @@ class DocumentContentViewerComponent {
|
|
|
6179
6499
|
*/
|
|
6180
6500
|
get safeExcelStyledData() {
|
|
6181
6501
|
if (!this.excelStyledData || this.excelStyledData.length === 0) {
|
|
6182
|
-
return [{ cells: [{ value:
|
|
6502
|
+
return [{ cells: [{ value: SHARED.NO_DATA_AVAILABLE }] }];
|
|
6183
6503
|
}
|
|
6184
6504
|
return this.excelStyledData;
|
|
6185
6505
|
}
|
|
6506
|
+
/**
|
|
6507
|
+
* Safely gets the styled CSV data for display
|
|
6508
|
+
* @type {CsvRowData[]}
|
|
6509
|
+
*/
|
|
6510
|
+
get safeCsvStyledData() {
|
|
6511
|
+
if (!this.isCsvDataValid()) {
|
|
6512
|
+
return [{
|
|
6513
|
+
cells: [{
|
|
6514
|
+
value: SHARED.NO_DATA_AVAILABLE,
|
|
6515
|
+
isHeader: false,
|
|
6516
|
+
style: {}
|
|
6517
|
+
}]
|
|
6518
|
+
}];
|
|
6519
|
+
}
|
|
6520
|
+
// Ensure each row has the correct structure
|
|
6521
|
+
return this.csvStyledData.map(row => {
|
|
6522
|
+
if (!row || !row.cells || !Array.isArray(row.cells)) {
|
|
6523
|
+
return {
|
|
6524
|
+
cells: [{
|
|
6525
|
+
value: SHARED.NO_DATA_AVAILABLE,
|
|
6526
|
+
isHeader: false,
|
|
6527
|
+
style: {}
|
|
6528
|
+
}]
|
|
6529
|
+
};
|
|
6530
|
+
}
|
|
6531
|
+
return row;
|
|
6532
|
+
});
|
|
6533
|
+
}
|
|
6186
6534
|
/**
|
|
6187
6535
|
* Handles changes to input properties
|
|
6188
6536
|
* @param {SimpleChanges} changes - The changes object
|
|
6189
6537
|
*/
|
|
6190
6538
|
ngOnChanges(changes) {
|
|
6191
6539
|
if (changes['documentUrl'] || changes['contentType']) {
|
|
6540
|
+
if (this.isWord && this.documentUrl) {
|
|
6541
|
+
this.isLoadingWordDocument = true;
|
|
6542
|
+
}
|
|
6192
6543
|
this.loadExcelData();
|
|
6544
|
+
this.loadCsvData();
|
|
6193
6545
|
}
|
|
6194
6546
|
}
|
|
6195
6547
|
/**
|
|
@@ -6197,6 +6549,7 @@ class DocumentContentViewerComponent {
|
|
|
6197
6549
|
*/
|
|
6198
6550
|
ngOnInit() {
|
|
6199
6551
|
this.loadExcelData();
|
|
6552
|
+
this.loadCsvData();
|
|
6200
6553
|
}
|
|
6201
6554
|
/**
|
|
6202
6555
|
* Downloads the document
|
|
@@ -6227,24 +6580,19 @@ class DocumentContentViewerComponent {
|
|
|
6227
6580
|
if (this.isExcel && this.documentUrl) {
|
|
6228
6581
|
this.isLoadingExcel = true;
|
|
6229
6582
|
this.excelError = null;
|
|
6230
|
-
this.
|
|
6231
|
-
responseType: 'arraybuffer',
|
|
6232
|
-
headers: {
|
|
6233
|
-
'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,*/*'
|
|
6234
|
-
}
|
|
6235
|
-
})
|
|
6583
|
+
this.documentHttpService.downloadExcelFile(this.documentUrl)
|
|
6236
6584
|
.subscribe({
|
|
6237
6585
|
next: (data) => {
|
|
6238
6586
|
try {
|
|
6239
6587
|
this.parseExcelData(data);
|
|
6240
6588
|
}
|
|
6241
6589
|
catch (error) {
|
|
6242
|
-
this.excelError =
|
|
6590
|
+
this.excelError = SHARED.ERROR_PARSING_EXCEL_FILE;
|
|
6243
6591
|
}
|
|
6244
6592
|
this.isLoadingExcel = false;
|
|
6245
6593
|
},
|
|
6246
6594
|
error: (error) => {
|
|
6247
|
-
|
|
6595
|
+
console.log(error);
|
|
6248
6596
|
this.isLoadingExcel = false;
|
|
6249
6597
|
}
|
|
6250
6598
|
});
|
|
@@ -6277,7 +6625,7 @@ class DocumentContentViewerComponent {
|
|
|
6277
6625
|
};
|
|
6278
6626
|
}
|
|
6279
6627
|
else {
|
|
6280
|
-
this.excelError =
|
|
6628
|
+
this.excelError = SHARED.ERROR_PARSING_EXCEL_FILE_STRUCTURE;
|
|
6281
6629
|
}
|
|
6282
6630
|
}
|
|
6283
6631
|
/**
|
|
@@ -6292,91 +6640,121 @@ class DocumentContentViewerComponent {
|
|
|
6292
6640
|
this.excelTableData = this.excelParserService.convertToLegacyFormat(this.excelStyledData);
|
|
6293
6641
|
}
|
|
6294
6642
|
}
|
|
6295
|
-
// /**
|
|
6296
|
-
// * Gets the formatted and sanitized HTML content for display
|
|
6297
|
-
// * @returns {string} The formatted HTML content
|
|
6298
|
-
// */
|
|
6299
|
-
// /**
|
|
6300
|
-
// * Gets the safe HTML content for display
|
|
6301
|
-
// * @returns {SafeHtml} The safe HTML content
|
|
6302
|
-
// */
|
|
6303
|
-
// get safeDocxHtml(): SafeHtml {
|
|
6304
|
-
// if (!this.formattedDocxHtml) return '';
|
|
6305
|
-
// return this.sanitizer.bypassSecurityTrustHtml(this.formattedDocxHtml);
|
|
6306
|
-
// }
|
|
6307
|
-
// /**
|
|
6308
|
-
// * Gets the number of paragraphs in the DOCX content
|
|
6309
|
-
// * @returns {number} The number of paragraphs
|
|
6310
|
-
// */
|
|
6311
|
-
// get docxParagraphCount(): number {
|
|
6312
|
-
// if (!this.docxContent?.text) return 0;
|
|
6313
|
-
// return this.docxContent.text.split('\n').filter(line => line.trim().length > 0).length;
|
|
6314
|
-
// }
|
|
6315
|
-
// /**
|
|
6316
|
-
// * Gets the document title safely
|
|
6317
|
-
// * @returns {string | undefined} The document title or undefined
|
|
6318
|
-
// */
|
|
6319
|
-
// get docxTitle(): string | undefined {
|
|
6320
|
-
// return this.docxContent?.metadata?.title;
|
|
6321
|
-
// }
|
|
6322
|
-
// /**
|
|
6323
|
-
// * Gets the document author safely
|
|
6324
|
-
// * @returns {string | undefined} The document author or undefined
|
|
6325
|
-
// */
|
|
6326
|
-
// get docxAuthor(): string | undefined {
|
|
6327
|
-
// return this.docxContent?.metadata?.author;
|
|
6328
|
-
// }
|
|
6329
|
-
// /**
|
|
6330
|
-
// * Gets whether the document has images
|
|
6331
|
-
// * @returns {boolean} True if the document has images
|
|
6332
|
-
// */
|
|
6333
|
-
// get docxHasImages(): boolean {
|
|
6334
|
-
// return this.docxContent?.hasImages || false;
|
|
6335
|
-
// }
|
|
6336
|
-
// /**
|
|
6337
|
-
// * Gets whether the document has tables
|
|
6338
|
-
// * @returns {boolean} True if the document has tables
|
|
6339
|
-
// */
|
|
6340
|
-
// get docxHasTables(): boolean {
|
|
6341
|
-
// return this.docxContent?.hasTables || false;
|
|
6342
|
-
// }
|
|
6343
|
-
// /**
|
|
6344
|
-
// * Gets whether the document has lists
|
|
6345
|
-
// * @returns {boolean} True if the document has lists
|
|
6346
|
-
// */
|
|
6347
|
-
// get docxHasLists(): boolean {
|
|
6348
|
-
// return this.docxContent?.hasLists || false;
|
|
6349
|
-
// }
|
|
6350
6643
|
/**
|
|
6351
6644
|
* Resets Excel data to initial state
|
|
6352
6645
|
*/
|
|
6353
6646
|
resetExcelData() {
|
|
6354
6647
|
this.excelData = null;
|
|
6355
|
-
this.excelTableData =
|
|
6356
|
-
this.excelStyledData =
|
|
6357
|
-
this.excelSheets =
|
|
6358
|
-
this.currentSheet =
|
|
6648
|
+
this.excelTableData = SHARED.EMPTY_ARRAY;
|
|
6649
|
+
this.excelStyledData = SHARED.EMPTY_ARRAY;
|
|
6650
|
+
this.excelSheets = SHARED.EMPTY_ARRAY;
|
|
6651
|
+
this.currentSheet = SHARED.EMPTY;
|
|
6359
6652
|
this.isLoadingExcel = false;
|
|
6360
6653
|
this.excelError = null;
|
|
6361
6654
|
}
|
|
6362
6655
|
/**
|
|
6363
|
-
*
|
|
6364
|
-
* @param {HttpClient} http - HTTP client for fetching Excel data
|
|
6365
|
-
* @param {ExcelParserService} excelParserService - Service for parsing Excel files
|
|
6366
|
-
* @param {DocxParserService} docxParserService - Service for parsing DOCX files
|
|
6367
|
-
* @param {DomSanitizer} sanitizer - Service for sanitizing HTML content
|
|
6656
|
+
* Loads CSV data for display
|
|
6368
6657
|
*/
|
|
6369
|
-
|
|
6370
|
-
this.
|
|
6371
|
-
|
|
6658
|
+
loadCsvData() {
|
|
6659
|
+
if (this.isCsv && this.documentUrl) {
|
|
6660
|
+
this.isLoadingCsv = true;
|
|
6661
|
+
this.csvError = null;
|
|
6662
|
+
this.documentHttpService.downloadCsvFile(this.documentUrl)
|
|
6663
|
+
.subscribe({
|
|
6664
|
+
next: (data) => {
|
|
6665
|
+
try {
|
|
6666
|
+
this.parseCsvData(data);
|
|
6667
|
+
}
|
|
6668
|
+
catch (error) {
|
|
6669
|
+
console.error('Error parsing CSV file:', error);
|
|
6670
|
+
this.csvError = 'Error parsing CSV file';
|
|
6671
|
+
this.resetCsvData();
|
|
6672
|
+
}
|
|
6673
|
+
this.isLoadingCsv = false;
|
|
6674
|
+
},
|
|
6675
|
+
error: (error) => {
|
|
6676
|
+
console.error('Error loading CSV file:', error);
|
|
6677
|
+
this.csvError = 'Error loading CSV file';
|
|
6678
|
+
this.resetCsvData();
|
|
6679
|
+
this.isLoadingCsv = false;
|
|
6680
|
+
}
|
|
6681
|
+
});
|
|
6682
|
+
}
|
|
6683
|
+
else {
|
|
6684
|
+
this.resetCsvData();
|
|
6685
|
+
}
|
|
6686
|
+
}
|
|
6687
|
+
/**
|
|
6688
|
+
* Parses CSV data using the service
|
|
6689
|
+
* @param {string} data - CSV file data
|
|
6690
|
+
*/
|
|
6691
|
+
parseCsvData(data) {
|
|
6692
|
+
try {
|
|
6693
|
+
const parsedData = this.csvParserService.parseCsvData(data, {
|
|
6694
|
+
delimiter: ',',
|
|
6695
|
+
hasHeaders: true,
|
|
6696
|
+
maxRows: 1000
|
|
6697
|
+
});
|
|
6698
|
+
if (parsedData && parsedData.styledData && parsedData.styledData.length > 0) {
|
|
6699
|
+
this.csvStyledData = parsedData.styledData;
|
|
6700
|
+
this.csvTableData = parsedData.rows;
|
|
6701
|
+
this.csvData = {
|
|
6702
|
+
type: 'csv',
|
|
6703
|
+
headers: parsedData.headers,
|
|
6704
|
+
rows: parsedData.rows,
|
|
6705
|
+
tableData: parsedData.rows,
|
|
6706
|
+
styledData: parsedData.styledData,
|
|
6707
|
+
totalRows: parsedData.totalRows,
|
|
6708
|
+
totalColumns: parsedData.totalColumns,
|
|
6709
|
+
hasHeaders: parsedData.hasHeaders
|
|
6710
|
+
};
|
|
6711
|
+
}
|
|
6712
|
+
else {
|
|
6713
|
+
this.csvError = 'Error parsing CSV file structure';
|
|
6714
|
+
this.resetCsvData();
|
|
6715
|
+
}
|
|
6716
|
+
}
|
|
6717
|
+
catch (error) {
|
|
6718
|
+
console.error('Error parsing CSV data:', error);
|
|
6719
|
+
this.csvError = 'Error parsing CSV file';
|
|
6720
|
+
this.resetCsvData();
|
|
6721
|
+
}
|
|
6722
|
+
}
|
|
6723
|
+
/**
|
|
6724
|
+
* Resets CSV data to initial state
|
|
6725
|
+
*/
|
|
6726
|
+
resetCsvData() {
|
|
6727
|
+
this.csvData = null;
|
|
6728
|
+
this.csvTableData = SHARED.EMPTY_ARRAY;
|
|
6729
|
+
this.csvStyledData = SHARED.EMPTY_ARRAY;
|
|
6730
|
+
this.isLoadingCsv = false;
|
|
6731
|
+
this.csvError = null;
|
|
6732
|
+
}
|
|
6733
|
+
/**
|
|
6734
|
+
* TrackBy function for CSV cells to improve performance
|
|
6735
|
+
* @param index - Cell index
|
|
6736
|
+
* @param cell - Cell object
|
|
6737
|
+
* @returns Unique identifier for the cell
|
|
6738
|
+
*/
|
|
6739
|
+
trackByCell(index, cell) {
|
|
6740
|
+
return `${index}-${cell.value}`;
|
|
6741
|
+
}
|
|
6742
|
+
/**
|
|
6743
|
+
* Checks if CSV data is valid and ready for display
|
|
6744
|
+
* @returns {boolean} True if CSV data is valid
|
|
6745
|
+
*/
|
|
6746
|
+
isCsvDataValid() {
|
|
6747
|
+
return this.csvStyledData &&
|
|
6748
|
+
this.csvStyledData.length > 0 &&
|
|
6749
|
+
this.csvStyledData.every(row => row && row.cells && Array.isArray(row.cells));
|
|
6372
6750
|
}
|
|
6373
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentContentViewerComponent, deps: [{ token:
|
|
6374
|
-
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" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-content-viewer-container\">\r\n @if(documentUrl && contentType){\r\n <!-- PDF Viewer -->\r\n @if(isPdf){\r\n <div class=\"pdf-container\">\r\n <pdf-viewer\r\n [src]=\"documentUrl\"\r\n [rotation]=\"0\"\r\n [original-size]=\"false\"\r\n [show-all]=\"true\"\r\n [fit-to-page]=\"false\"\r\n [zoom]=\"0.7\"\r\n [zoom-scale]=\"'page-width'\"\r\n [stick-to-page]=\"false\"\r\n [render-text]=\"true\"\r\n [external-link-target]=\"'blank'\"\r\n [autoresize]=\"true\"\r\n [show-borders]=\"false\"\r\n style=\"width: 100%; height: 100%\"\r\n ></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\r\n [src]=\"documentUrl\"\r\n [alt]=\"documentName || 'Document Image'\"\r\n class=\"document-image\"\r\n />\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 \r\n type=\"button\" \r\n class=\"p-button p-button-primary p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\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 }@else if(excelData){\r\n <div class=\"excel-viewer\">\r\n <div class=\"excel-header\">\r\n <div class=\"excel-info\">\r\n <i [class]=\"documentIcon\"></i>\r\n <div class=\"excel-details\">\r\n <h4>{{ documentName || 'Excel Document' }}</h4>\r\n <p>{{ documentTypeText }}</p>\r\n </div>\r\n </div>\r\n <div class=\"excel-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\r\n <i class=\"pi pi-external-link\"></i>\r\n Open\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"excel-content\">\r\n <!-- Sheet Navigation -->\r\n @if(excelSheets.length > 1){\r\n <div class=\"sheet-navigation\">\r\n <span class=\"sheet-label\">Sheets:</span>\r\n @for(sheet of excelSheets; track sheet){\r\n <button \r\n type=\"button\" \r\n class=\"sheet-tab\"\r\n [class.active]=\"sheet === currentSheet\"\r\n (click)=\"changeSheet(sheet)\"\r\n >\r\n {{ sheet }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n \r\n <!-- Excel Table -->\r\n <div class=\"excel-table-container\">\r\n <table class=\"excel-table\">\r\n <thead>\r\n <tr>\r\n @for(cell of safeExcelStyledData[0]?.cells; track $index){\r\n <th>{{ cell?.value || 'Column ' + ($index + 1) }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for(row of safeExcelStyledData.slice(1); track $index){\r\n <tr>\r\n @for(cell of row.cells; track $index){\r\n <td \r\n [class.empty-cell]=\"!cell.value\"\r\n [style.background-color]=\"cell.style?.backgroundColor\"\r\n [style.color]=\"cell.style?.fontColor\"\r\n [style.font-weight]=\"cell.style?.bold ? 'bold' : 'normal'\"\r\n [style.font-style]=\"cell.style?.italic ? 'italic' : 'normal'\"\r\n [style.border-top]=\"cell.style?.border?.top ? '1px solid ' + cell.style?.border?.top : ''\"\r\n [style.border-bottom]=\"cell.style?.border?.bottom ? '1px solid ' + cell.style?.border?.bottom : ''\"\r\n [style.border-left]=\"cell.style?.border?.left ? '1px solid ' + cell.style?.border?.left : ''\"\r\n [style.border-right]=\"cell.style?.border?.right ? '1px solid ' + cell.style?.border?.right : ''\"\r\n >\r\n {{ cell.value || '' }}\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n \r\n <!-- Excel Info -->\r\n <div class=\"excel-info-bar\">\r\n <span class=\"info-item\">\r\n <i class=\"pi pi-table\"></i>\r\n {{ safeExcelStyledData.length - 1 }} rows\r\n </span>\r\n <span class=\"info-item\">\r\n <i class=\"pi pi-columns\"></i>\r\n {{ safeExcelStyledData[0]?.cells?.length || 0 }} columns\r\n </span>\r\n <span class=\"info-item\">\r\n <i class=\"pi pi-file-excel\"></i>\r\n {{ currentSheet }}\r\n </span>\r\n <span class=\"info-item\" *ngIf=\"excelData?.hasStyling !== undefined\">\r\n <i class=\"pi pi-palette\"></i>\r\n {{ excelData?.hasStyling ? 'Styling detected' : 'No styling found' }}\r\n </span>\r\n </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=\"docx-header\">\r\n <div class=\"docx-info\">\r\n <i [class]=\"documentIcon\"></i>\r\n <div class=\"docx-details\">\r\n <h4>{{ documentName || 'Word Document' }}</h4>\r\n <p>{{ documentTypeText }}</p>\r\n </div>\r\n </div>\r\n <div class=\"docx-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\r\n <i class=\"pi pi-external-link\"></i>\r\n Open\r\n </button>\r\n </div>\r\n </div> -->\r\n \r\n <div class=\"docx-content\">\r\n <ngx-doc-viewer\r\n [url]=\"documentUrl\"\r\n viewer=\"google\"\r\n style=\"width:100%;height:93vh;\"\r\n ></ngx-doc-viewer>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- CSV Files -->\r\n @else if(isCsv){\r\n <div class=\"office-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>{{ documentTypeText }}</h4>\r\n <p>{{ documentName || 'CSV File' }}</p>\r\n <p class=\"document-note\">CSV files cannot be previewed directly. Please download to view.</p>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-primary p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\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 <!-- Email Files -->\r\n @else if(isEmail){\r\n <div class=\"office-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>{{ documentTypeText }}</h4>\r\n <p>{{ documentName || 'Email Message' }}</p>\r\n <p class=\"document-note\">Email files cannot be previewed directly. Please download to view.</p>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-primary p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\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 <!-- OpenDocument Files -->\r\n @else if(isOpenDocument){\r\n <div class=\"office-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>{{ documentTypeText }}</h4>\r\n <p>{{ documentName || 'OpenDocument' }}</p>\r\n <p class=\"document-note\">OpenDocument files cannot be previewed directly. Please download to view.</p>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-primary p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\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 <!-- 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 }}) is not supported for preview. Please download to view.</p>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-primary p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\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 Selected</h4>\r\n <p>Please select a document to view its content.</p>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n\r\n", styles: [".document-content-viewer-container{height:100%;width:100%;display:flex;flex-direction:column;background:#f8f9fa;border-radius:8px;overflow:hidden}.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 .image-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:1rem}.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}.document-content-viewer-container .excel-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;border-radius:8px;overflow:hidden}.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;border-radius:8px;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}\n"], dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$1.PdfViewerComponent, selector: "pdf-viewer", inputs: ["src", "c-maps-url", "page", "render-text", "render-text-mode", "original-size", "show-all", "stick-to-page", "zoom", "zoom-scale", "rotation", "external-link-target", "autoresize", "fit-to-page", "show-borders"], outputs: ["after-load-complete", "page-rendered", "pages-initialized", "text-layer-rendered", "error", "on-progress", "pageChange"] }, { kind: "component", type: i5$1.NgxDocViewerComponent, selector: "ngx-doc-viewer", inputs: ["url", "queryParams", "viewerUrl", "googleCheckInterval", "googleMaxChecks", "disableContent", "googleCheckContentLoaded", "viewer", "overrideLocalhost"], outputs: ["loaded"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
6751
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentContentViewerComponent, deps: [{ token: ExcelParserService }, { token: CsvParserService }, { token: DocumentHttpService }], target: i0.ɵɵFactoryTarget.Component });
|
|
6752
|
+
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" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-content-viewer-container\">\n @if(documentUrl && contentType){\n <!-- PDF Viewer -->\n @if(isPdf){\n <div class=\"pdf-container\">\n <pdf-viewer\n [src]=\"documentUrl\"\n [rotation]=\"0\"\n [original-size]=\"false\"\n [show-all]=\"true\"\n [fit-to-page]=\"false\"\n [zoom]=\"0.7\"\n [zoom-scale]=\"'page-width'\"\n [stick-to-page]=\"false\"\n [render-text]=\"true\"\n [external-link-target]=\"'blank'\"\n [autoresize]=\"true\"\n [show-borders]=\"false\"\n style=\"width: 100%; height: 100%\"\n ></pdf-viewer>\n </div>\n }\n\n <!-- Image Viewer -->\n @else if(isImage){\n <div class=\"image-container\">\n <img\n [src]=\"documentUrl\"\n [alt]=\"documentName || 'Document Image'\"\n class=\"document-image\"\n />\n </div>\n }\n\n <!-- Excel Files -->\n @else if(isExcel){\n <div class=\"excel-container\">\n @if(isLoadingExcel){\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem; color: #3b82f6;\"></i>\n <p>Loading Excel file...</p>\n </div>\n </div>\n }@else if(excelError){\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"pi pi-exclamation-triangle\" style=\"font-size: 3rem; color: #ef4444;\"></i>\n <h4>Error Loading Excel File</h4>\n <p>{{ excelError }}</p>\n <div class=\"error-actions\">\n <button \n type=\"button\" \n class=\"p-button p-button-primary p-button-sm\"\n (click)=\"downloadDocument()\"\n >\n <i class=\"pi pi-download\"></i>\n Download Instead\n </button>\n </div>\n </div>\n </div>\n }\n @else if(excelData){\n <div class=\"docx-container\">\n <div class=\"docx-content\">\n <ngx-doc-viewer\n [url]=\"documentUrl\"\n viewer=\"office\"\n style=\"width:100%;height:85vh;\"\n ></ngx-doc-viewer>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Word Files -->\n @else if(isWord){\n <div class=\"docx-container\">\n <div class=\"docx-content\">\n <ngx-doc-viewer\n [url]=\"documentUrl\"\n viewer=\"office\"\n style=\"width:100%;height:85vh;\"\n ></ngx-doc-viewer>\n </div>\n </div>\n }\n\n <!-- CSV Files -->\n @else if(isCsv){\n <div class=\"csv-container\">\n @if(isLoadingCsv){\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem; color: #3b82f6;\"></i>\n <p>Loading CSV file...</p>\n </div>\n </div>\n }@else if(csvError){\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"pi pi-exclamation-triangle\" style=\"font-size: 3rem; color: #ef4444;\"></i>\n <h4>Error Loading CSV File</h4>\n <p>{{ csvError }}</p>\n <div class=\"error-actions\">\n <button \n type=\"button\" \n class=\"p-button p-button-primary p-button-sm\"\n (click)=\"downloadDocument()\"\n >\n <i class=\"pi pi-download\"></i>\n Download Instead\n </button>\n </div>\n </div>\n </div>\n }\n @else if(csvData){\n <div class=\"csv-content\">\n <div class=\"csv-header\">\n <div class=\"csv-info\">\n <p>{{ documentName || 'CSV File' }}</p>\n <span class=\"csv-stats\">\n {{ csvData.totalRows }} rows \u00D7 {{ csvData.totalColumns }} columns\n </span>\n </div>\n </div>\n \n <div class=\"csv-table-container\">\n <p-table \n [value]=\"safeCsvStyledData\" \n [tableStyle]=\"{'min-width': '100%'}\"\n [scrollable]=\"true\"\n scrollHeight=\"67vh\"\n class=\"csv-table\"\n >\n <ng-template pTemplate=\"body\" let-row>\n <tr>\n <ng-container *ngFor=\"let cell of row.cells; trackBy: trackByCell\">\n <td [ngClass]=\"{'csv-header-cell': cell.isHeader}\">\n {{ cell.value }}\n </td>\n </ng-container>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Email Files -->\n @else if(isEmail){\n <div class=\"office-document-container\">\n <div class=\"document-preview\">\n <div class=\"document-icon\">\n <i [class]=\"documentIcon\"></i>\n </div>\n <div class=\"document-info\">\n <h4>{{ documentTypeText }}</h4>\n <p>{{ documentName || 'Email Message' }}</p>\n <p class=\"document-note\">Email files cannot be previewed directly. Please download to view.</p>\n </div>\n <div class=\"document-actions\">\n <button \n type=\"button\" \n class=\"p-button p-button-primary p-button-sm\"\n (click)=\"downloadDocument()\"\n >\n <i class=\"pi pi-download\"></i>\n Download\n </button>\n <button \n type=\"button\" \n class=\"p-button p-button-outlined p-button-sm\"\n (click)=\"openInNewTab()\"\n >\n <i class=\"pi pi-external-link\"></i>\n Open\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- OpenDocument Files -->\n @else if(isOpenDocument){\n <div class=\"office-document-container\">\n <div class=\"document-preview\">\n <div class=\"document-icon\">\n <i [class]=\"documentIcon\"></i>\n </div>\n <div class=\"document-info\">\n <h4>{{ documentTypeText }}</h4>\n <p>{{ documentName || 'OpenDocument' }}</p>\n <p class=\"document-note\">OpenDocument files cannot be previewed directly. Please download to view.</p>\n </div>\n <div class=\"document-actions\">\n <button \n type=\"button\" \n class=\"p-button p-button-primary p-button-sm\"\n (click)=\"downloadDocument()\"\n >\n <i class=\"pi pi-download\"></i>\n Download\n </button>\n <button \n type=\"button\" \n class=\"p-button p-button-outlined p-button-sm\"\n (click)=\"openInNewTab()\"\n >\n <i class=\"pi pi-external-link\"></i>\n Open\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Unsupported Files -->\n @else if(isUnsupported){\n <div class=\"unsupported-document-container\">\n <div class=\"document-preview\">\n <div class=\"document-icon\">\n <i [class]=\"documentIcon\"></i>\n </div>\n <div class=\"document-info\">\n <h4>Unsupported Document Type</h4>\n <p>{{ documentName || 'Document' }}</p>\n <p class=\"document-note\">This document type ({{ contentType }}) is not supported for preview. Please download to view.</p>\n </div>\n <div class=\"document-actions\">\n <button \n type=\"button\" \n class=\"p-button p-button-primary p-button-sm\"\n (click)=\"downloadDocument()\"\n >\n <i class=\"pi pi-download\"></i>\n Download\n </button>\n <button \n type=\"button\" \n class=\"p-button p-button-outlined p-button-sm\"\n (click)=\"openInNewTab()\"\n >\n <i class=\"pi pi-external-link\"></i>\n Open\n </button>\n </div>\n </div>\n </div>\n }\n }\n @else {\n <div class=\"no-document-container\">\n <div class=\"no-document-content\">\n <i class=\"pi pi-file-o\" style=\"font-size: 3rem; color: #6b7280;\"></i>\n <h4>No Document Selected</h4>\n <p>Please select a document to view its content.</p>\n </div>\n </div>\n }\n</div>\n\n", styles: [".document-content-viewer-container{height:100%;width:100%;display:flex;flex-direction:column;background:#f8f9fa;border-radius:8px;overflow:hidden}.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 .image-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:1rem}.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}.document-content-viewer-container .excel-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;border-radius:8px;overflow:hidden}.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;border-radius:8px;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}.docx-container .docx-content{height:100%;min-height:inherit;position:relative}ngx-doc-viewer{display:block;width:100%;height:100%}.csv-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;border-radius:8px;overflow:hidden}.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:hidden;border-radius:6px;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}\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: i6.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: i7.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"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
6375
6753
|
}
|
|
6376
6754
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentContentViewerComponent, decorators: [{
|
|
6377
6755
|
type: Component,
|
|
6378
|
-
args: [{ selector: 'document-content-viewer', standalone: false, encapsulation: ViewEncapsulation.None, template: "<div class=\"document-content-viewer-container\">\r\n @if(documentUrl && contentType){\r\n <!-- PDF Viewer -->\r\n @if(isPdf){\r\n <div class=\"pdf-container\">\r\n <pdf-viewer\r\n [src]=\"documentUrl\"\r\n [rotation]=\"0\"\r\n [original-size]=\"false\"\r\n [show-all]=\"true\"\r\n [fit-to-page]=\"false\"\r\n [zoom]=\"0.7\"\r\n [zoom-scale]=\"'page-width'\"\r\n [stick-to-page]=\"false\"\r\n [render-text]=\"true\"\r\n [external-link-target]=\"'blank'\"\r\n [autoresize]=\"true\"\r\n [show-borders]=\"false\"\r\n style=\"width: 100%; height: 100%\"\r\n ></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\r\n [src]=\"documentUrl\"\r\n [alt]=\"documentName || 'Document Image'\"\r\n class=\"document-image\"\r\n />\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 \r\n type=\"button\" \r\n class=\"p-button p-button-primary p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\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 }@else if(excelData){\r\n <div class=\"excel-viewer\">\r\n <div class=\"excel-header\">\r\n <div class=\"excel-info\">\r\n <i [class]=\"documentIcon\"></i>\r\n <div class=\"excel-details\">\r\n <h4>{{ documentName || 'Excel Document' }}</h4>\r\n <p>{{ documentTypeText }}</p>\r\n </div>\r\n </div>\r\n <div class=\"excel-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\r\n <i class=\"pi pi-external-link\"></i>\r\n Open\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"excel-content\">\r\n <!-- Sheet Navigation -->\r\n @if(excelSheets.length > 1){\r\n <div class=\"sheet-navigation\">\r\n <span class=\"sheet-label\">Sheets:</span>\r\n @for(sheet of excelSheets; track sheet){\r\n <button \r\n type=\"button\" \r\n class=\"sheet-tab\"\r\n [class.active]=\"sheet === currentSheet\"\r\n (click)=\"changeSheet(sheet)\"\r\n >\r\n {{ sheet }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n \r\n <!-- Excel Table -->\r\n <div class=\"excel-table-container\">\r\n <table class=\"excel-table\">\r\n <thead>\r\n <tr>\r\n @for(cell of safeExcelStyledData[0]?.cells; track $index){\r\n <th>{{ cell?.value || 'Column ' + ($index + 1) }}</th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for(row of safeExcelStyledData.slice(1); track $index){\r\n <tr>\r\n @for(cell of row.cells; track $index){\r\n <td \r\n [class.empty-cell]=\"!cell.value\"\r\n [style.background-color]=\"cell.style?.backgroundColor\"\r\n [style.color]=\"cell.style?.fontColor\"\r\n [style.font-weight]=\"cell.style?.bold ? 'bold' : 'normal'\"\r\n [style.font-style]=\"cell.style?.italic ? 'italic' : 'normal'\"\r\n [style.border-top]=\"cell.style?.border?.top ? '1px solid ' + cell.style?.border?.top : ''\"\r\n [style.border-bottom]=\"cell.style?.border?.bottom ? '1px solid ' + cell.style?.border?.bottom : ''\"\r\n [style.border-left]=\"cell.style?.border?.left ? '1px solid ' + cell.style?.border?.left : ''\"\r\n [style.border-right]=\"cell.style?.border?.right ? '1px solid ' + cell.style?.border?.right : ''\"\r\n >\r\n {{ cell.value || '' }}\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n \r\n <!-- Excel Info -->\r\n <div class=\"excel-info-bar\">\r\n <span class=\"info-item\">\r\n <i class=\"pi pi-table\"></i>\r\n {{ safeExcelStyledData.length - 1 }} rows\r\n </span>\r\n <span class=\"info-item\">\r\n <i class=\"pi pi-columns\"></i>\r\n {{ safeExcelStyledData[0]?.cells?.length || 0 }} columns\r\n </span>\r\n <span class=\"info-item\">\r\n <i class=\"pi pi-file-excel\"></i>\r\n {{ currentSheet }}\r\n </span>\r\n <span class=\"info-item\" *ngIf=\"excelData?.hasStyling !== undefined\">\r\n <i class=\"pi pi-palette\"></i>\r\n {{ excelData?.hasStyling ? 'Styling detected' : 'No styling found' }}\r\n </span>\r\n </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=\"docx-header\">\r\n <div class=\"docx-info\">\r\n <i [class]=\"documentIcon\"></i>\r\n <div class=\"docx-details\">\r\n <h4>{{ documentName || 'Word Document' }}</h4>\r\n <p>{{ documentTypeText }}</p>\r\n </div>\r\n </div>\r\n <div class=\"docx-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\r\n <i class=\"pi pi-external-link\"></i>\r\n Open\r\n </button>\r\n </div>\r\n </div> -->\r\n \r\n <div class=\"docx-content\">\r\n <ngx-doc-viewer\r\n [url]=\"documentUrl\"\r\n viewer=\"google\"\r\n style=\"width:100%;height:93vh;\"\r\n ></ngx-doc-viewer>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- CSV Files -->\r\n @else if(isCsv){\r\n <div class=\"office-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>{{ documentTypeText }}</h4>\r\n <p>{{ documentName || 'CSV File' }}</p>\r\n <p class=\"document-note\">CSV files cannot be previewed directly. Please download to view.</p>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-primary p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\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 <!-- Email Files -->\r\n @else if(isEmail){\r\n <div class=\"office-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>{{ documentTypeText }}</h4>\r\n <p>{{ documentName || 'Email Message' }}</p>\r\n <p class=\"document-note\">Email files cannot be previewed directly. Please download to view.</p>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-primary p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\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 <!-- OpenDocument Files -->\r\n @else if(isOpenDocument){\r\n <div class=\"office-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>{{ documentTypeText }}</h4>\r\n <p>{{ documentName || 'OpenDocument' }}</p>\r\n <p class=\"document-note\">OpenDocument files cannot be previewed directly. Please download to view.</p>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-primary p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\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 <!-- 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 }}) is not supported for preview. Please download to view.</p>\r\n </div>\r\n <div class=\"document-actions\">\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-primary p-button-sm\"\r\n (click)=\"downloadDocument()\"\r\n >\r\n <i class=\"pi pi-download\"></i>\r\n Download\r\n </button>\r\n <button \r\n type=\"button\" \r\n class=\"p-button p-button-outlined p-button-sm\"\r\n (click)=\"openInNewTab()\"\r\n >\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 Selected</h4>\r\n <p>Please select a document to view its content.</p>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n\r\n", styles: [".document-content-viewer-container{height:100%;width:100%;display:flex;flex-direction:column;background:#f8f9fa;border-radius:8px;overflow:hidden}.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 .image-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:1rem}.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}.document-content-viewer-container .excel-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;border-radius:8px;overflow:hidden}.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;border-radius:8px;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}\n"] }]
|
|
6379
|
-
}], ctorParameters: () => [{ type:
|
|
6756
|
+
args: [{ selector: 'document-content-viewer', standalone: false, encapsulation: ViewEncapsulation.None, template: "<div class=\"document-content-viewer-container\">\n @if(documentUrl && contentType){\n <!-- PDF Viewer -->\n @if(isPdf){\n <div class=\"pdf-container\">\n <pdf-viewer\n [src]=\"documentUrl\"\n [rotation]=\"0\"\n [original-size]=\"false\"\n [show-all]=\"true\"\n [fit-to-page]=\"false\"\n [zoom]=\"0.7\"\n [zoom-scale]=\"'page-width'\"\n [stick-to-page]=\"false\"\n [render-text]=\"true\"\n [external-link-target]=\"'blank'\"\n [autoresize]=\"true\"\n [show-borders]=\"false\"\n style=\"width: 100%; height: 100%\"\n ></pdf-viewer>\n </div>\n }\n\n <!-- Image Viewer -->\n @else if(isImage){\n <div class=\"image-container\">\n <img\n [src]=\"documentUrl\"\n [alt]=\"documentName || 'Document Image'\"\n class=\"document-image\"\n />\n </div>\n }\n\n <!-- Excel Files -->\n @else if(isExcel){\n <div class=\"excel-container\">\n @if(isLoadingExcel){\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem; color: #3b82f6;\"></i>\n <p>Loading Excel file...</p>\n </div>\n </div>\n }@else if(excelError){\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"pi pi-exclamation-triangle\" style=\"font-size: 3rem; color: #ef4444;\"></i>\n <h4>Error Loading Excel File</h4>\n <p>{{ excelError }}</p>\n <div class=\"error-actions\">\n <button \n type=\"button\" \n class=\"p-button p-button-primary p-button-sm\"\n (click)=\"downloadDocument()\"\n >\n <i class=\"pi pi-download\"></i>\n Download Instead\n </button>\n </div>\n </div>\n </div>\n }\n @else if(excelData){\n <div class=\"docx-container\">\n <div class=\"docx-content\">\n <ngx-doc-viewer\n [url]=\"documentUrl\"\n viewer=\"office\"\n style=\"width:100%;height:85vh;\"\n ></ngx-doc-viewer>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Word Files -->\n @else if(isWord){\n <div class=\"docx-container\">\n <div class=\"docx-content\">\n <ngx-doc-viewer\n [url]=\"documentUrl\"\n viewer=\"office\"\n style=\"width:100%;height:85vh;\"\n ></ngx-doc-viewer>\n </div>\n </div>\n }\n\n <!-- CSV Files -->\n @else if(isCsv){\n <div class=\"csv-container\">\n @if(isLoadingCsv){\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <i class=\"pi pi-spin pi-spinner\" style=\"font-size: 2rem; color: #3b82f6;\"></i>\n <p>Loading CSV file...</p>\n </div>\n </div>\n }@else if(csvError){\n <div class=\"error-container\">\n <div class=\"error-content\">\n <i class=\"pi pi-exclamation-triangle\" style=\"font-size: 3rem; color: #ef4444;\"></i>\n <h4>Error Loading CSV File</h4>\n <p>{{ csvError }}</p>\n <div class=\"error-actions\">\n <button \n type=\"button\" \n class=\"p-button p-button-primary p-button-sm\"\n (click)=\"downloadDocument()\"\n >\n <i class=\"pi pi-download\"></i>\n Download Instead\n </button>\n </div>\n </div>\n </div>\n }\n @else if(csvData){\n <div class=\"csv-content\">\n <div class=\"csv-header\">\n <div class=\"csv-info\">\n <p>{{ documentName || 'CSV File' }}</p>\n <span class=\"csv-stats\">\n {{ csvData.totalRows }} rows \u00D7 {{ csvData.totalColumns }} columns\n </span>\n </div>\n </div>\n \n <div class=\"csv-table-container\">\n <p-table \n [value]=\"safeCsvStyledData\" \n [tableStyle]=\"{'min-width': '100%'}\"\n [scrollable]=\"true\"\n scrollHeight=\"67vh\"\n class=\"csv-table\"\n >\n <ng-template pTemplate=\"body\" let-row>\n <tr>\n <ng-container *ngFor=\"let cell of row.cells; trackBy: trackByCell\">\n <td [ngClass]=\"{'csv-header-cell': cell.isHeader}\">\n {{ cell.value }}\n </td>\n </ng-container>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Email Files -->\n @else if(isEmail){\n <div class=\"office-document-container\">\n <div class=\"document-preview\">\n <div class=\"document-icon\">\n <i [class]=\"documentIcon\"></i>\n </div>\n <div class=\"document-info\">\n <h4>{{ documentTypeText }}</h4>\n <p>{{ documentName || 'Email Message' }}</p>\n <p class=\"document-note\">Email files cannot be previewed directly. Please download to view.</p>\n </div>\n <div class=\"document-actions\">\n <button \n type=\"button\" \n class=\"p-button p-button-primary p-button-sm\"\n (click)=\"downloadDocument()\"\n >\n <i class=\"pi pi-download\"></i>\n Download\n </button>\n <button \n type=\"button\" \n class=\"p-button p-button-outlined p-button-sm\"\n (click)=\"openInNewTab()\"\n >\n <i class=\"pi pi-external-link\"></i>\n Open\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- OpenDocument Files -->\n @else if(isOpenDocument){\n <div class=\"office-document-container\">\n <div class=\"document-preview\">\n <div class=\"document-icon\">\n <i [class]=\"documentIcon\"></i>\n </div>\n <div class=\"document-info\">\n <h4>{{ documentTypeText }}</h4>\n <p>{{ documentName || 'OpenDocument' }}</p>\n <p class=\"document-note\">OpenDocument files cannot be previewed directly. Please download to view.</p>\n </div>\n <div class=\"document-actions\">\n <button \n type=\"button\" \n class=\"p-button p-button-primary p-button-sm\"\n (click)=\"downloadDocument()\"\n >\n <i class=\"pi pi-download\"></i>\n Download\n </button>\n <button \n type=\"button\" \n class=\"p-button p-button-outlined p-button-sm\"\n (click)=\"openInNewTab()\"\n >\n <i class=\"pi pi-external-link\"></i>\n Open\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Unsupported Files -->\n @else if(isUnsupported){\n <div class=\"unsupported-document-container\">\n <div class=\"document-preview\">\n <div class=\"document-icon\">\n <i [class]=\"documentIcon\"></i>\n </div>\n <div class=\"document-info\">\n <h4>Unsupported Document Type</h4>\n <p>{{ documentName || 'Document' }}</p>\n <p class=\"document-note\">This document type ({{ contentType }}) is not supported for preview. Please download to view.</p>\n </div>\n <div class=\"document-actions\">\n <button \n type=\"button\" \n class=\"p-button p-button-primary p-button-sm\"\n (click)=\"downloadDocument()\"\n >\n <i class=\"pi pi-download\"></i>\n Download\n </button>\n <button \n type=\"button\" \n class=\"p-button p-button-outlined p-button-sm\"\n (click)=\"openInNewTab()\"\n >\n <i class=\"pi pi-external-link\"></i>\n Open\n </button>\n </div>\n </div>\n </div>\n }\n }\n @else {\n <div class=\"no-document-container\">\n <div class=\"no-document-content\">\n <i class=\"pi pi-file-o\" style=\"font-size: 3rem; color: #6b7280;\"></i>\n <h4>No Document Selected</h4>\n <p>Please select a document to view its content.</p>\n </div>\n </div>\n }\n</div>\n\n", styles: [".document-content-viewer-container{height:100%;width:100%;display:flex;flex-direction:column;background:#f8f9fa;border-radius:8px;overflow:hidden}.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 .image-container{width:100%;height:100%;display:flex;align-items:center;justify-content:center;padding:1rem}.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}.document-content-viewer-container .excel-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;border-radius:8px;overflow:hidden}.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;border-radius:8px;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}.docx-container .docx-content{height:100%;min-height:inherit;position:relative}ngx-doc-viewer{display:block;width:100%;height:100%}.csv-container{width:100%;height:100%;display:flex;flex-direction:column;background:#fff;border-radius:8px;overflow:hidden}.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:hidden;border-radius:6px;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}\n"] }]
|
|
6757
|
+
}], ctorParameters: () => [{ type: ExcelParserService }, { type: CsvParserService }, { type: DocumentHttpService }], propDecorators: { documentUrl: [{
|
|
6380
6758
|
type: Input
|
|
6381
6759
|
}], contentType: [{
|
|
6382
6760
|
type: Input
|
|
@@ -6747,7 +7125,7 @@ class DocumentActionsComponent {
|
|
|
6747
7125
|
this.rejectNote = SHARED.EMPTY;
|
|
6748
7126
|
}
|
|
6749
7127
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentActionsComponent, deps: [{ token: DocumentActionsService }, { token: SessionService }, { token: i3.ConfirmationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
6750
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.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]=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE || isRejecting\">\r\n <i class=\"pi pi-times\" *ngIf=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isRejecting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_REJECTED_LOWERCASE ? 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]=\"currentStatus === SHARED.STATUS_ACCEPTED || isAccepting\">\r\n <i class=\"pi pi-check\" *ngIf=\"currentStatus === SHARED.STATUS_ACCEPTED\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isAccepting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_ACCEPTED ? 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@if(document?.isUploaded){\r\n<div class=\"actions-card\">\r\n <div class=\"actions-buttons\">\r\n <button class=\"action-btn delete-btn\" (click)=\"onDeleteClick()\" [disabled]=\"isLoading\"\r\n [permission]=\"'documents-deleteDocumentByDocumentId'\" pTooltip=\"Delete Document\" tooltipPosition=\"top\">\r\n <i class=\"pi pi-trash\"></i>\r\n </button>\r\n </div>\r\n</div>\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-card:has(.delete-btn){width:auto;margin-left:0;background-color:#fff;border:1px solid #e2e8f0;padding:.5rem}.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:80px;justify-content:center}.action-btn:disabled{opacity:.6;cursor:not-allowed}.action-btn i{font-size:.875rem}.reject-btn.default-reject{background-color:#feeaea;border-color:#e57373;color:#4a4a4a}.reject-btn.default-reject:hover:not(:disabled){background-color:#fed7d7;border-color:#fc8181}.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:#feeaea;border-color:#e57373;color:#4a4a4a}.reject-btn[class*=status-].status-pending-reject:hover:not(:disabled){background-color:#fed7d7;border-color:#fc8181}.accept-btn.default-accept{background-color:#e8f5e9;border-color:#66bb6a;color:#4a4a4a}.accept-btn.default-accept:hover:not(:disabled){background-color:#c6f6d5;border-color:#68d391}.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:#e8f5e9;border-color:#66bb6a;color:#4a4a4a}.accept-btn[class*=status-].status-pending-accept:hover:not(:disabled){background-color:#c6f6d5;border-color:#68d391}.delete-btn{background-color:#f5f5f5;border-color:#e57373;color:#e57373;padding:.5rem;min-width:auto;width:40px;height:40px;border-radius:6px}.delete-btn:hover:not(:disabled){background-color:#fed7d7;border-color:#fc8181;color:#c53030}.delete-btn i{font-size:1rem}: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: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.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: i9$1.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: HasPermissionDirective, selector: "[permission]", inputs: ["permission"] }] });
|
|
7128
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.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]=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE || isRejecting\">\r\n <i class=\"pi pi-times\" *ngIf=\"currentStatus === SHARED.STATUS_REJECTED_LOWERCASE\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isRejecting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_REJECTED_LOWERCASE ? 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]=\"currentStatus === SHARED.STATUS_ACCEPTED || isAccepting\">\r\n <i class=\"pi pi-check\" *ngIf=\"currentStatus === SHARED.STATUS_ACCEPTED\"></i>\r\n <i class=\"pi pi-spin pi-spinner\" *ngIf=\"isAccepting\"></i>\r\n <span>{{ currentStatus === SHARED.STATUS_ACCEPTED ? 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@if(document?.isUploaded){\r\n<div class=\"actions-card\">\r\n <div class=\"actions-buttons\">\r\n <button class=\"action-btn delete-btn\" (click)=\"onDeleteClick()\" [disabled]=\"isLoading\"\r\n [permission]=\"'documents-deleteDocumentByDocumentId'\" pTooltip=\"Delete Document\" tooltipPosition=\"top\">\r\n <i class=\"pi pi-trash\"></i>\r\n </button>\r\n </div>\r\n</div>\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-card:has(.delete-btn){width:auto;margin-left:0;background-color:#fff;border:1px solid #e2e8f0;padding:.5rem}.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:80px;justify-content:center}.action-btn:disabled{opacity:.6;cursor:not-allowed}.action-btn i{font-size:.875rem}.reject-btn.default-reject{background-color:#feeaea;border-color:#e57373;color:#4a4a4a}.reject-btn.default-reject:hover:not(:disabled){background-color:#fed7d7;border-color:#fc8181}.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:#feeaea;border-color:#e57373;color:#4a4a4a}.reject-btn[class*=status-].status-pending-reject:hover:not(:disabled){background-color:#fed7d7;border-color:#fc8181}.accept-btn.default-accept{background-color:#e8f5e9;border-color:#66bb6a;color:#4a4a4a}.accept-btn.default-accept:hover:not(:disabled){background-color:#c6f6d5;border-color:#68d391}.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:#e8f5e9;border-color:#66bb6a;color:#4a4a4a}.accept-btn[class*=status-].status-pending-accept:hover:not(:disabled){background-color:#c6f6d5;border-color:#68d391}.delete-btn{background-color:#f5f5f5;border-color:#e57373;color:#e57373;padding:.5rem;min-width:auto;width:40px;height:40px;border-radius:6px}.delete-btn:hover:not(:disabled){background-color:#fed7d7;border-color:#fc8181;color:#c53030}.delete-btn i{font-size:1rem}: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$1.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.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: i9$1.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: HasPermissionDirective, selector: "[permission]", inputs: ["permission"] }] });
|
|
6751
7129
|
}
|
|
6752
7130
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentActionsComponent, decorators: [{
|
|
6753
7131
|
type: Component,
|
|
@@ -7961,7 +8339,7 @@ class DocumentContainerComponent {
|
|
|
7961
8339
|
this.clearAllState();
|
|
7962
8340
|
}
|
|
7963
8341
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentContainerComponent, deps: [{ token: DocumentHttpService }, { token: DocumentHelperService }, { token: DocumentQuery }, { token: DocumentStore }, { token: DocumentMenuService }], target: i0.ɵɵFactoryTarget.Component });
|
|
7964
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentContainerComponent, isStandalone: false, selector: "lib-document-container", inputs: { refreshTrigger: "refreshTrigger", contextId: "contextId" }, outputs: { selectedDocument: "selectedDocument" }, viewQueries: [{ propertyName: "contentScrollContainer", first: true, predicate: ["contentScrollContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"grid m-0 flex document-container-layout\">\r\n <!-- Fixed Left Menu -->\r\n <div class=\"menu-panel col-12 md:col-2\">\r\n <lib-documents-menu \r\n [catagories]=\"catagories\" \r\n [applicationNumber]=\"applicationNumber\" \r\n [contextId]=\"contextId\"\r\n (menuItemSelected)=\"onMenuItemSelected($event)\">\r\n </lib-documents-menu>\r\n </div>\r\n \r\n <!-- Scrollable Right Content -->\r\n <div class=\"content-panel col-12 md:col-10\" #contentScrollContainer>\r\n <div class=\"card content-card\">\r\n <lib-folder-container [contextId]=\"contextId\" [userList]=\"userList\" [statusData]=\"statusData\" [categories]=\"catagories\"></lib-folder-container>\r\n </div>\r\n <div>\r\n <lib-document-list \r\n [contextId]=\"contextId\" \r\n [documentListResponse]=\"documentListResponse\"\r\n [selectedMenuItemId]=\"selectedMenuItemId\"\r\n [navigationInfo]=\"navigationInfo\"\r\n\r\n (handleSelectedDocument)=\"onDocumentSelected($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n <p-confirmDialog \r\n [style]=\"{width: '25vw'}\" \r\n acceptLabel=\"Yes\"\r\n rejectLabel=\"No\"\r\n appendTo=\"body\"\r\n acceptIcon=\"pi pi-check\"\r\n rejectIcon=\"pi pi-times\">\r\n </p-confirmDialog>\r\n</div>\r\n", styles: [".document-container-layout{display:grid;grid-template-columns:1fr;height:98vh;overflow:auto;position:relative}@media (min-width: 768px){.document-container-layout{grid-template-columns:16.6667% 1fr}}.menu-panel{background-color:#fff;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;-ms-overflow-style:none}@media (min-width: 768px){.menu-panel{position:fixed;left:0;top:0;bottom:0;width:16.6667%}}.menu-panel::-webkit-scrollbar{display:none}.content-panel{display:flex;flex-direction:column;height:98vh;overflow-y:auto;overflow-x:hidden;padding:0;position:relative;z-index:10;scrollbar-width:none;-ms-overflow-style:none}@media (min-width: 768px){.content-panel{margin-left:16.6667%}}.content-panel::-webkit-scrollbar{display:none}@media (max-width: 1024px){.menu-panel{width:240px}.content-panel{margin-left:240px}}@media (max-width: 768px){.document-container-layout{grid-template-columns:1fr}.menu-panel{position:relative;width:100%;height:200px;border-right:none;border-bottom:1px solid #e5e7eb;z-index:auto}.content-panel{margin-left:0;flex:1}}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}*{scrollbar-width:thin}body,html{height:100%}::ng-deep .p-card{overflow:visible!important}::ng-deep .p-card-body{overflow:visible!important}::ng-deep .p-dialog{z-index:9999!important}::ng-deep .p-dialog-mask{z-index:9998!important}::ng-deep .content-panel .p-card{overflow:visible!important}\n"], dependencies: [{ kind: "component", type: i6$
|
|
8342
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentContainerComponent, isStandalone: false, selector: "lib-document-container", inputs: { refreshTrigger: "refreshTrigger", contextId: "contextId" }, outputs: { selectedDocument: "selectedDocument" }, viewQueries: [{ propertyName: "contentScrollContainer", first: true, predicate: ["contentScrollContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"grid m-0 flex document-container-layout\">\r\n <!-- Fixed Left Menu -->\r\n <div class=\"menu-panel col-12 md:col-2\">\r\n <lib-documents-menu \r\n [catagories]=\"catagories\" \r\n [applicationNumber]=\"applicationNumber\" \r\n [contextId]=\"contextId\"\r\n (menuItemSelected)=\"onMenuItemSelected($event)\">\r\n </lib-documents-menu>\r\n </div>\r\n \r\n <!-- Scrollable Right Content -->\r\n <div class=\"content-panel col-12 md:col-10\" #contentScrollContainer>\r\n <div class=\"card content-card\">\r\n <lib-folder-container [contextId]=\"contextId\" [userList]=\"userList\" [statusData]=\"statusData\" [categories]=\"catagories\"></lib-folder-container>\r\n </div>\r\n <div>\r\n <lib-document-list \r\n [contextId]=\"contextId\" \r\n [documentListResponse]=\"documentListResponse\"\r\n [selectedMenuItemId]=\"selectedMenuItemId\"\r\n [navigationInfo]=\"navigationInfo\"\r\n\r\n (handleSelectedDocument)=\"onDocumentSelected($event)\"\r\n >\r\n <ng-content></ng-content>\r\n </lib-document-list>\r\n </div>\r\n </div>\r\n <p-confirmDialog \r\n [style]=\"{width: '25vw'}\" \r\n acceptLabel=\"Yes\"\r\n rejectLabel=\"No\"\r\n appendTo=\"body\"\r\n acceptIcon=\"pi pi-check\"\r\n rejectIcon=\"pi pi-times\">\r\n </p-confirmDialog>\r\n</div>\r\n", styles: [".document-container-layout{display:grid;grid-template-columns:1fr;height:98vh;overflow:auto;position:relative}@media (min-width: 768px){.document-container-layout{grid-template-columns:16.6667% 1fr}}.menu-panel{background-color:#fff;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;-ms-overflow-style:none}@media (min-width: 768px){.menu-panel{position:fixed;left:0;top:0;bottom:0;width:16.6667%}}.menu-panel::-webkit-scrollbar{display:none}.content-panel{display:flex;flex-direction:column;height:98vh;overflow-y:auto;overflow-x:hidden;padding:0;position:relative;z-index:10;scrollbar-width:none;-ms-overflow-style:none}@media (min-width: 768px){.content-panel{margin-left:16.6667%}}.content-panel::-webkit-scrollbar{display:none}@media (max-width: 1024px){.menu-panel{width:240px}.content-panel{margin-left:240px}}@media (max-width: 768px){.document-container-layout{grid-template-columns:1fr}.menu-panel{position:relative;width:100%;height:200px;border-right:none;border-bottom:1px solid #e5e7eb;z-index:auto}.content-panel{margin-left:0;flex:1}}.custom-scroll{overflow-y:hidden;scrollbar-gutter:stable}.custom-scroll:hover{overflow-y:auto}*{scrollbar-width:thin}body,html{height:100%}::ng-deep .p-card{overflow:visible!important}::ng-deep .p-card-body{overflow:visible!important}::ng-deep .p-dialog{z-index:9999!important}::ng-deep .p-dialog-mask{z-index:9998!important}::ng-deep .content-panel .p-card{overflow:visible!important}\n"], dependencies: [{ kind: "component", type: i6$2.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "component", type: FolderContainerComponent, selector: "lib-folder-container", inputs: ["documentList", "folderList", "contextId", "userList", "statusData", "categories"] }, { kind: "component", type: DocumentListComponent, selector: "lib-document-list", inputs: ["contextId", "documentListResponse", "selectedMenuItemId", "navigationInfo", "documentList"], outputs: ["handleSelectedDocument"] }, { kind: "component", type: DocumentsMenuComponent, selector: "lib-documents-menu", inputs: ["catagories", "applicationNumber", "contextId"], outputs: ["menuItemSelected"] }] });
|
|
7965
8343
|
}
|
|
7966
8344
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentContainerComponent, decorators: [{
|
|
7967
8345
|
type: Component,
|