cat-documents-ng 1.0.31 → 1.0.34

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.
@@ -641,6 +641,8 @@ class SHARED {
641
641
  static ERROR_PARSING_EMAIL_FILE = 'Error parsing email file';
642
642
  static ERROR_LOADING_EMAIL_FILE = 'Error loading email file';
643
643
  static SMOOTH_SCROLL = 'smooth';
644
+ static SUMMARY_PROMPT = 'Give me a clear, bullet-point summary of the key information in this document.';
645
+ static INSIGHTS_PROMPT = 'What are the key insights and takeaways from this document? Provide a concise summary of the main points and any important details.';
644
646
  }
645
647
  /**
646
648
  * `DUMMYDOCUMENTLIST` is a mock list of document objects used for testing and development purposes.
@@ -981,8 +983,6 @@ class ERRORS {
981
983
  static ERROR_CALLING_API_WITH_SELECTION = 'Error calling API with selection:';
982
984
  static ERROR_FILE_NAME_INVALID_CHARACTERS = 'File name contains invalid characters (< > : " / \\ | ? *)';
983
985
  static ERROR_FILE_NAME_EMPTY = 'File name cannot be empty';
984
- static ERROR_SUMMARY_GENERATION = 'Summary cannot be generated.';
985
- static ERROR_INSIGHTS_GENERATION = 'Insights cannot be generated.';
986
986
  static ERROR_QUESTION_GENERATION = 'Question cannot be generated.';
987
987
  }
988
988
 
@@ -1111,9 +1111,7 @@ class URLS {
1111
1111
  static CONVERT_TO_PDF = "documents/convert-email-to-pdf";
1112
1112
  static BROKER_DOCUMENT_CATAGORIES = "documentTypes/getAllCategoriesForBrokerBySource/";
1113
1113
  static BROKER_DOCUMENT_TYPES = "documentTypes/getAllDocumentTypesForBrokerByCategoryId/";
1114
- static AI_SUMMARY = "summarize/";
1115
- static AI_INSIGHTS = "getInsights/";
1116
- static AI_QUESTION = "questions/";
1114
+ static AI_QUESTION = "question/";
1117
1115
  }
1118
1116
 
1119
1117
  /**
@@ -1435,34 +1433,9 @@ class DocumentHttpService {
1435
1433
  get documentIntelligenceApiUrl() {
1436
1434
  return this.appConfigService.documentIntelligenceApiUrl;
1437
1435
  }
1438
- /**
1439
- * Calls AI summary endpoint for a document.
1440
- * @param {string} documentId - The document ID to summarize.
1441
- * @returns {Observable<AiSummaryResponse>} AI summary response.
1442
- */
1443
- getAiSummary(documentId) {
1444
- if (!documentId || !this.documentIntelligenceApiUrl) {
1445
- return throwError(() => new Error(ERRORS.ERROR_SUMMARY_GENERATION));
1446
- }
1447
- return this.http.post(`${this.documentIntelligenceApiUrl}${URLS.AI_SUMMARY}${documentId}`, '').pipe(catchError((error) => {
1448
- return throwError(() => new Error(error));
1449
- }));
1450
- }
1451
- /**
1452
- * Calls AI insights endpoint for a document.
1453
- * @param {string} documentId - The document ID to generate insights for.
1454
- * @returns {Observable<AiInsightsResponse>} AI insights response.
1455
- */
1456
- getAiInsights(documentId) {
1457
- if (!documentId || !this.documentIntelligenceApiUrl) {
1458
- return throwError(() => new Error(ERRORS.ERROR_INSIGHTS_GENERATION));
1459
- }
1460
- return this.http.post(`${this.documentIntelligenceApiUrl}${URLS.AI_INSIGHTS}${documentId}`, '').pipe(catchError((error) => {
1461
- return throwError(() => new Error(error));
1462
- }));
1463
- }
1464
1436
  /**
1465
1437
  * Calls AI question endpoint for chat answers.
1438
+ * Uses same HttpClient as getDocumentHistoryByDocumentId; host app interceptor supplies Authorization Bearer.
1466
1439
  * @param {string} documentId - The document ID used for context.
1467
1440
  * @param {string} question - The question asked by the user.
1468
1441
  * @returns {Observable<AiQuestionResponse>} AI question answer response.
@@ -6660,7 +6633,7 @@ class DocumentHistoryAiService {
6660
6633
  state = {
6661
6634
  showAiMenu: false,
6662
6635
  showAiSidebar: false,
6663
- aiSidebarHeader: 'Summary',
6636
+ aiSidebarHeader: 'Query',
6664
6637
  aiContent: '',
6665
6638
  aiContentHtml: '',
6666
6639
  aiLoading: false,
@@ -6689,17 +6662,13 @@ class DocumentHistoryAiService {
6689
6662
  this.state.showAiMenu = false;
6690
6663
  }
6691
6664
  /**
6692
- * Opens AI sidebar and loads selected section data.
6693
- * @param {'Summary' | 'Query' | 'Insights'} section - Selected AI section.
6665
+ * Opens AI sidebar for Query panel.
6666
+ * @param {'Query'} section - AI section (Query only).
6694
6667
  * @param {any} selectedDocument - Selected document object.
6695
6668
  */
6696
6669
  openAiPanel(section, selectedDocument) {
6697
- this.initializePanel(section);
6698
- if (section === 'Query') {
6699
- this.resetQueryState();
6700
- return;
6701
- }
6702
- this.loadAiContent(section, selectedDocument);
6670
+ this.initializePanel();
6671
+ this.resetQueryState();
6703
6672
  }
6704
6673
  /**
6705
6674
  * Sends query using current query text in state.
@@ -6716,6 +6685,38 @@ class DocumentHistoryAiService {
6716
6685
  error: this.handleQuestionRequestError.bind(this)
6717
6686
  });
6718
6687
  }
6688
+ /**
6689
+ * Sends a fixed "Document Summary" prompt for the current document.
6690
+ * @param {any} selectedDocument - Selected document object.
6691
+ */
6692
+ sendSummaryPrompt(selectedDocument) {
6693
+ const prompt = SHARED.SUMMARY_PROMPT;
6694
+ if (this.state.queryLoading) {
6695
+ return;
6696
+ }
6697
+ this.state.aiError = '';
6698
+ this.pushUserQuestion(prompt);
6699
+ this.askQuestionForDocument(selectedDocument, prompt).subscribe({
6700
+ next: this.handleQuestionResult.bind(this),
6701
+ error: this.handleQuestionRequestError.bind(this)
6702
+ });
6703
+ }
6704
+ /**
6705
+ * Sends a fixed "Document Insights" prompt for the current document.
6706
+ * @param {any} selectedDocument - Selected document object.
6707
+ */
6708
+ sendInsightsPrompt(selectedDocument) {
6709
+ const prompt = SHARED.INSIGHTS_PROMPT;
6710
+ if (this.state.queryLoading) {
6711
+ return;
6712
+ }
6713
+ this.state.aiError = '';
6714
+ this.pushUserQuestion(prompt);
6715
+ this.askQuestionForDocument(selectedDocument, prompt).subscribe({
6716
+ next: this.handleQuestionResult.bind(this),
6717
+ error: this.handleQuestionRequestError.bind(this)
6718
+ });
6719
+ }
6719
6720
  /**
6720
6721
  * Handles Enter key for query submission.
6721
6722
  * @param {KeyboardEvent} event - Keyboard event from query textarea.
@@ -6735,33 +6736,6 @@ class DocumentHistoryAiService {
6735
6736
  getCurrentDocumentId(selectedDocument) {
6736
6737
  return selectedDocument?._id;
6737
6738
  }
6738
- /**
6739
- * Fetches AI content for summary or insights.
6740
- * @param {'Summary' | 'Insights'} section - AI section to load.
6741
- * @param {string} documentId - Document identifier.
6742
- * @returns {Observable<string>} Resolved AI content text.
6743
- */
6744
- fetchAiContent(section, documentId) {
6745
- if (!documentId) {
6746
- return throwError(() => new Error('Document ID is missing.'));
6747
- }
6748
- return section === 'Summary'
6749
- ? this.fetchSummary(documentId)
6750
- : this.fetchInsights(documentId);
6751
- }
6752
- /**
6753
- * Fetches section content and returns text + formatted html.
6754
- * @param {'Summary' | 'Insights'} section - AI section to load.
6755
- * @param {any} selectedDocument - Selected document object.
6756
- * @returns {Observable<{ content: string; html: string }>} Content payload.
6757
- */
6758
- getAiContentForSection(section, selectedDocument) {
6759
- const documentId = this.getCurrentDocumentId(selectedDocument);
6760
- if (!documentId) {
6761
- return throwError(() => new Error(ERRORS.NO_VALUE_FOUND));
6762
- }
6763
- return this.fetchAiContent(section, documentId).pipe(map(this.toContentResult.bind(this)), catchError$1(this.handleSectionError(section)));
6764
- }
6765
6739
  /**
6766
6740
  * Sends question against a document.
6767
6741
  * @param {string} documentId - Document identifier.
@@ -6787,16 +6761,6 @@ class DocumentHistoryAiService {
6787
6761
  }
6788
6762
  return this.askQuestion(documentId, question).pipe(map(this.toAnswerResult.bind(this)), catchError$1(this.handleQuestionGenerationError));
6789
6763
  }
6790
- /**
6791
- * Returns section-specific generation error.
6792
- * @param {'Summary' | 'Insights'} section - Section name.
6793
- * @returns {string} Error message.
6794
- */
6795
- getSectionError(section) {
6796
- return section === 'Summary'
6797
- ? ERRORS.ERROR_SUMMARY_GENERATION
6798
- : ERRORS.ERROR_INSIGHTS_GENERATION;
6799
- }
6800
6764
  /**
6801
6765
  * Converts markdown-like output to presentable HTML.
6802
6766
  * @param {string} content - Raw AI response content.
@@ -6806,44 +6770,6 @@ class DocumentHistoryAiService {
6806
6770
  const escaped = this.escapeHtml(content || '');
6807
6771
  return this.renderMarkdownLines(escaped.split('\n'));
6808
6772
  }
6809
- /**
6810
- * Fetches summary text by document id.
6811
- * @param {string} documentId - Document identifier.
6812
- * @returns {Observable<string>} Summary text.
6813
- */
6814
- fetchSummary(documentId) {
6815
- return this.documentHttpService.getAiSummary(documentId).pipe(map(this.extractSummaryContent), catchError$1(this.handleSummaryError));
6816
- }
6817
- /**
6818
- * Fetches insights text by document id.
6819
- * @param {string} documentId - Document identifier.
6820
- * @returns {Observable<string>} Insights text.
6821
- */
6822
- fetchInsights(documentId) {
6823
- return this.documentHttpService.getAiInsights(documentId).pipe(map(this.extractInsightsContent), catchError$1(this.handleInsightsError));
6824
- }
6825
- /**
6826
- * Extracts summary text from API response.
6827
- * @param {any} response - Summary API response.
6828
- * @returns {string} Summary text.
6829
- */
6830
- extractSummaryContent(response) {
6831
- if (!response?.success) {
6832
- throw new Error(ERRORS.ERROR_SUMMARY_GENERATION);
6833
- }
6834
- return response.documentSummary || 'No summary found.';
6835
- }
6836
- /**
6837
- * Extracts insights text from API response.
6838
- * @param {any} response - Insights API response.
6839
- * @returns {string} Insights text.
6840
- */
6841
- extractInsightsContent(response) {
6842
- if (!response?.success) {
6843
- throw new Error(ERRORS.ERROR_INSIGHTS_GENERATION);
6844
- }
6845
- return response.documentInsight || 'No insights found.';
6846
- }
6847
6773
  /**
6848
6774
  * Extracts answer text from question API response.
6849
6775
  * @param {any} response - Question API response.
@@ -6855,14 +6781,6 @@ class DocumentHistoryAiService {
6855
6781
  }
6856
6782
  return response.answer || 'No answer found.';
6857
6783
  }
6858
- /**
6859
- * Maps content text to content payload.
6860
- * @param {string} content - Plain content text.
6861
- * @returns {{ content: string; html: string }} Content payload.
6862
- */
6863
- toContentResult(content) {
6864
- return { content, html: this.formatAiContent(content) };
6865
- }
6866
6784
  /**
6867
6785
  * Maps answer text to answer payload.
6868
6786
  * @param {string} answer - Plain answer text.
@@ -6872,29 +6790,16 @@ class DocumentHistoryAiService {
6872
6790
  return { answer, html: this.formatAiContent(answer) };
6873
6791
  }
6874
6792
  /**
6875
- * Initializes panel state for a selected section.
6876
- * @param {'Summary' | 'Query' | 'Insights'} section - Selected section.
6793
+ * Initializes panel state for Query.
6877
6794
  */
6878
- initializePanel(section) {
6879
- this.state.aiSidebarHeader = section;
6795
+ initializePanel() {
6796
+ this.state.aiSidebarHeader = 'Query';
6880
6797
  this.state.showAiSidebar = true;
6881
6798
  this.state.showAiMenu = false;
6882
6799
  this.state.aiError = '';
6883
6800
  this.state.aiContent = '';
6884
6801
  this.state.aiContentHtml = '';
6885
6802
  }
6886
- /**
6887
- * Loads summary/insights content into UI state.
6888
- * @param {'Summary' | 'Insights'} section - Content section to load.
6889
- * @param {any} selectedDocument - Selected document object.
6890
- */
6891
- loadAiContent(section, selectedDocument) {
6892
- this.state.aiLoading = true;
6893
- this.getAiContentForSection(section, selectedDocument).subscribe({
6894
- next: this.handleAiContentResult.bind(this),
6895
- error: this.handleAiContentRequestError.bind(this)
6896
- });
6897
- }
6898
6803
  /**
6899
6804
  * Resets query-specific UI state.
6900
6805
  */
@@ -6913,25 +6818,6 @@ class DocumentHistoryAiService {
6913
6818
  this.state.queryText = '';
6914
6819
  this.state.queryLoading = true;
6915
6820
  }
6916
- /**
6917
- * Handles successful summary/insights response and updates state.
6918
- * @param {{ content: string; html: string }} result - Formatted content result.
6919
- * @param {string} result.content - Raw AI content text.
6920
- * @param {string} result.html - Formatted AI HTML.
6921
- */
6922
- handleAiContentResult(result) {
6923
- this.state.aiLoading = false;
6924
- this.state.aiContent = result.content;
6925
- this.state.aiContentHtml = result.html;
6926
- }
6927
- /**
6928
- * Handles summary/insights request errors.
6929
- * @param {Error} error - Error object.
6930
- */
6931
- handleAiContentRequestError(error) {
6932
- this.state.aiLoading = false;
6933
- this.state.aiError = error?.message || this.getSectionError(this.state.aiSidebarHeader);
6934
- }
6935
6821
  /**
6936
6822
  * Handles successful question response and updates state.
6937
6823
  * @param {{ answer: string; html: string }} result - Formatted answer result.
@@ -6954,28 +6840,6 @@ class DocumentHistoryAiService {
6954
6840
  this.state.queryLoading = false;
6955
6841
  this.state.aiError = error?.message || ERRORS.ERROR_QUESTION_GENERATION;
6956
6842
  }
6957
- /**
6958
- * Produces section-specific catchError handler.
6959
- * @param {'Summary' | 'Insights'} section - AI section.
6960
- * @returns {(error: any) => Observable<never>} Error handler.
6961
- */
6962
- handleSectionError(section) {
6963
- return () => throwError(() => new Error(this.getSectionError(section)));
6964
- }
6965
- /**
6966
- * Converts summary request errors.
6967
- * @returns {Observable<never>} Error observable.
6968
- */
6969
- handleSummaryError() {
6970
- return throwError(() => new Error(ERRORS.ERROR_SUMMARY_GENERATION));
6971
- }
6972
- /**
6973
- * Converts insights request errors.
6974
- * @returns {Observable<never>} Error observable.
6975
- */
6976
- handleInsightsError() {
6977
- return throwError(() => new Error(ERRORS.ERROR_INSIGHTS_GENERATION));
6978
- }
6979
6843
  /**
6980
6844
  * Converts ask-question request errors.
6981
6845
  * @returns {Observable<never>} Error observable.
@@ -7159,6 +7023,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
7159
7023
  type: Input
7160
7024
  }] } });
7161
7025
 
7026
+ class DocumentAiChatComponent {
7027
+ documentHistoryAiService;
7028
+ /**
7029
+ * The selected document for context in AI queries.
7030
+ */
7031
+ selectedDocument;
7032
+ constructor(documentHistoryAiService) {
7033
+ this.documentHistoryAiService = documentHistoryAiService;
7034
+ }
7035
+ handleSummaryPrompt() {
7036
+ this.documentHistoryAiService.sendSummaryPrompt(this.selectedDocument);
7037
+ }
7038
+ handleInsightsPrompt() {
7039
+ this.documentHistoryAiService.sendInsightsPrompt(this.selectedDocument);
7040
+ }
7041
+ handleEnter(event) {
7042
+ this.documentHistoryAiService.onQueryEnter(event, this.selectedDocument);
7043
+ }
7044
+ handleSend() {
7045
+ this.documentHistoryAiService.sendQuery(this.selectedDocument);
7046
+ }
7047
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentAiChatComponent, deps: [{ token: DocumentHistoryAiService }], target: i0.ɵɵFactoryTarget.Component });
7048
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentAiChatComponent, isStandalone: false, selector: "document-ai-chat", inputs: { selectedDocument: "selectedDocument" }, ngImport: i0, template: "<div class=\"chat-panel document-ai-chat-panel\">\n <div class=\"chat-header\">\n <div class=\"chat-header-content\">\n <div class=\"chat-header-brand\">\n <span class=\"chat-header-icon\"><i class=\"ri-sparkling-2-fill\"></i></span>\n <div class=\"chat-header-text\">\n <h2 class=\"chat-title\">Catura Document AI</h2>\n </div>\n </div>\n </div>\n <span class=\"chat-header-menu\" style=\"cursor: pointer;\" (click)=\"documentHistoryAiService.state.showAiSidebar = false\">\n <i class=\"ri-close-line\" style=\"font-size: 1.4rem;\"></i>\n </span>\n </div>\n\n <div class=\"chat-messages\">\n <div class=\"chat-welcome\" *ngIf=\"documentHistoryAiService.state.queryMessages.length === 0 && !documentHistoryAiService.state.queryLoading\">\n <div class=\"welcome-illustration\">\n <i class=\"ri-bubble-chart-line\"></i>\n </div>\n <h3 class=\"welcome-title\">Catura Document AI</h3>\n <p class=\"welcome-subtitle\">\n We're here to help. Ask your questions below.\n Your conversation is private and secure.\n </p>\n <div class=\"suggested-prompts\">\n <button\n type=\"button\"\n class=\"prompt-chip\"\n (click)=\"handleSummaryPrompt()\"\n >\n <i class=\"ri-sparkling-2-line\"></i>\n <span>Summarise this document</span>\n </button>\n <button\n type=\"button\"\n class=\"prompt-chip\"\n (click)=\"handleInsightsPrompt()\"\n >\n <i class=\"ri-sparkling-2-line\"></i>\n <span>Provide Insights about this document</span>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"documentHistoryAiService.state.queryMessages.length > 0\">\n <div\n class=\"message\"\n *ngFor=\"let msg of documentHistoryAiService.state.queryMessages\"\n [ngClass]=\"{ 'message-user': msg.role === 'user', 'message-assistant': msg.role === 'assistant' }\"\n >\n <span class=\"message-avatar\">\n <i [ngClass]=\"msg.role === 'user' ? 'ri-user-3-fill' : 'ri-robot-2-line'\"></i>\n </span>\n <div class=\"message-bubble\">\n <ng-container *ngIf=\"msg.role === 'user'\">\n {{ msg.content }}\n </ng-container>\n <ng-container *ngIf=\"msg.role === 'assistant'\">\n <div class=\"message-content ai-markdown\" [innerHTML]=\"msg.htmlContent\"></div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div class=\"message message-assistant\" *ngIf=\"documentHistoryAiService.state.queryLoading\">\n <span class=\"message-avatar\">\n <i class=\"ri-robot-2-line\"></i>\n </span>\n <div class=\"message-bubble\">\n <span class=\"loading-dots\">\n <span></span><span></span><span></span>\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"chat-input-area\">\n <div class=\"chat-input-wrapper\">\n <textarea\n class=\"chat-input\"\n [(ngModel)]=\"documentHistoryAiService.state.queryText\"\n [placeholder]=\"'Start Message...'\"\n [disabled]=\"documentHistoryAiService.state.queryLoading\"\n rows=\"1\"\n (keydown)=\"handleEnter($event)\"\n ></textarea>\n </div>\n <button\n type=\"button\"\n class=\"p-button p-button-primary send-btn\"\n (click)=\"handleSend()\"\n [disabled]=\"\n documentHistoryAiService.state.queryLoading ||\n !documentHistoryAiService.state.queryText?.trim()\n \"\n aria-label=\"Send\"\n >\n <i class=\"ri-send-plane-fill\"></i>\n </button>\n </div>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column;flex:1;width:100%;height:100%;min-height:0}.document-ai-chat-panel{flex:1;width:100%;max-width:100%;min-height:0;max-height:none;background:#fff;display:flex;flex-direction:column;overflow:hidden}.chat-header{padding:.75rem 1rem;background:#fff;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;gap:.75rem}.chat-header-content,.chat-header-brand{display:flex;align-items:center;gap:.6rem}.chat-header-icon{width:28px;height:28px;border-radius:999px;background:#e6f3ff;display:flex;align-items:center;justify-content:center}.chat-header-icon i{font-size:1.1rem;color:#0f8bfd}.chat-header-text{display:flex;flex-direction:column}.chat-title{font-weight:600;font-size:.9rem;color:#1f2937;margin:0}.chat-header-menu{color:#676b89;font-size:1.1rem}.chat-messages{flex:1;overflow-y:auto;padding:1.5rem 1.25rem 1rem;display:flex;flex-direction:column;gap:.75rem;background:#fff}.chat-welcome{display:flex;flex-direction:column;align-items:center;text-align:center;padding:0 0 1.5rem}.welcome-illustration{width:56px;height:56px;border-radius:999px;background:linear-gradient(135deg,#e6f3ff,#0f8bfd14);display:flex;align-items:center;justify-content:center;margin-bottom:1rem}.welcome-illustration i{font-size:1.75rem;color:#0f8bfd}.welcome-title{font-size:.95rem;font-weight:600;color:#1f2937;margin:0 0 .25rem}.welcome-subtitle{font-size:.8rem;color:#676b89;margin:0 0 1.25rem}.suggested-prompts{display:flex;flex-direction:column;gap:.5rem;width:100%;max-width:260px}.prompt-chip{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.6rem 1.2rem;border-radius:999px;border:1px solid #bfdbfe;background:#eff6ff;color:#026fd4;font-size:.8rem;font-weight:500;cursor:pointer;transition:all .2s ease}.prompt-chip i{font-size:1rem}.prompt-chip:hover{background:#dbeafe;border-color:#0f8bfd}.message{display:flex;align-items:flex-end;gap:.4rem;margin-bottom:1.5rem}.message:last-child{margin-bottom:0}.message.message-user{flex-direction:row-reverse}.message.message-assistant{flex-direction:row}.message-avatar{width:28px;height:28px;border-radius:999px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.95rem}.message-user .message-avatar{background:linear-gradient(135deg,#0f8bfd,#026fd4);color:#fff}.message-assistant .message-avatar{background:#e6f3ff;color:#0f8bfd}.message-bubble{max-width:82%;padding:.6rem .9rem;border-radius:14px;font-size:.85rem;line-height:1.5;white-space:pre-wrap;word-break:break-word}.message-user .message-bubble{background:linear-gradient(135deg,#0f8bfd,#026fd4);color:#fff;border-bottom-right-radius:6px}.message-assistant .message-bubble{background:#f3f4f6;color:#1f2937;border-bottom-left-radius:6px;border:1px solid #e5e7eb}.loading-dots{display:inline-flex;gap:5px;align-items:center}.loading-dots span{width:6px;height:6px;border-radius:50%;background:#026fd4;opacity:.6;animation:loading-bounce 1.2s ease-in-out infinite both}.loading-dots span:nth-child(1){animation-delay:-.24s}.loading-dots span:nth-child(2){animation-delay:-.12s}@keyframes loading-bounce{0%,80%,to{transform:scale(.7);opacity:.5}40%{transform:scale(1);opacity:1}}.chat-input-area{padding:.75rem 1rem 1rem;background:#fff;border-top:1px solid #e5e7eb;display:flex;gap:.5rem;align-items:center}.chat-input-wrapper{flex:1;display:flex;align-items:center;min-height:40px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:999px;padding:.25rem .85rem}.chat-input{flex:1;border:none;background:transparent;font-size:.85rem;line-height:1.5;outline:none}.chat-input::placeholder{color:#676b89}.send-btn{width:36px;height:36px;border-radius:999px;display:flex;align-items:center;justify-content:center;background:#0f8bfd;border:none;color:#fff}.send-btn i{font-size:1rem}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9$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: i9$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
7049
+ }
7050
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentAiChatComponent, decorators: [{
7051
+ type: Component,
7052
+ args: [{ selector: 'document-ai-chat', standalone: false, template: "<div class=\"chat-panel document-ai-chat-panel\">\n <div class=\"chat-header\">\n <div class=\"chat-header-content\">\n <div class=\"chat-header-brand\">\n <span class=\"chat-header-icon\"><i class=\"ri-sparkling-2-fill\"></i></span>\n <div class=\"chat-header-text\">\n <h2 class=\"chat-title\">Catura Document AI</h2>\n </div>\n </div>\n </div>\n <span class=\"chat-header-menu\" style=\"cursor: pointer;\" (click)=\"documentHistoryAiService.state.showAiSidebar = false\">\n <i class=\"ri-close-line\" style=\"font-size: 1.4rem;\"></i>\n </span>\n </div>\n\n <div class=\"chat-messages\">\n <div class=\"chat-welcome\" *ngIf=\"documentHistoryAiService.state.queryMessages.length === 0 && !documentHistoryAiService.state.queryLoading\">\n <div class=\"welcome-illustration\">\n <i class=\"ri-bubble-chart-line\"></i>\n </div>\n <h3 class=\"welcome-title\">Catura Document AI</h3>\n <p class=\"welcome-subtitle\">\n We're here to help. Ask your questions below.\n Your conversation is private and secure.\n </p>\n <div class=\"suggested-prompts\">\n <button\n type=\"button\"\n class=\"prompt-chip\"\n (click)=\"handleSummaryPrompt()\"\n >\n <i class=\"ri-sparkling-2-line\"></i>\n <span>Summarise this document</span>\n </button>\n <button\n type=\"button\"\n class=\"prompt-chip\"\n (click)=\"handleInsightsPrompt()\"\n >\n <i class=\"ri-sparkling-2-line\"></i>\n <span>Provide Insights about this document</span>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"documentHistoryAiService.state.queryMessages.length > 0\">\n <div\n class=\"message\"\n *ngFor=\"let msg of documentHistoryAiService.state.queryMessages\"\n [ngClass]=\"{ 'message-user': msg.role === 'user', 'message-assistant': msg.role === 'assistant' }\"\n >\n <span class=\"message-avatar\">\n <i [ngClass]=\"msg.role === 'user' ? 'ri-user-3-fill' : 'ri-robot-2-line'\"></i>\n </span>\n <div class=\"message-bubble\">\n <ng-container *ngIf=\"msg.role === 'user'\">\n {{ msg.content }}\n </ng-container>\n <ng-container *ngIf=\"msg.role === 'assistant'\">\n <div class=\"message-content ai-markdown\" [innerHTML]=\"msg.htmlContent\"></div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div class=\"message message-assistant\" *ngIf=\"documentHistoryAiService.state.queryLoading\">\n <span class=\"message-avatar\">\n <i class=\"ri-robot-2-line\"></i>\n </span>\n <div class=\"message-bubble\">\n <span class=\"loading-dots\">\n <span></span><span></span><span></span>\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"chat-input-area\">\n <div class=\"chat-input-wrapper\">\n <textarea\n class=\"chat-input\"\n [(ngModel)]=\"documentHistoryAiService.state.queryText\"\n [placeholder]=\"'Start Message...'\"\n [disabled]=\"documentHistoryAiService.state.queryLoading\"\n rows=\"1\"\n (keydown)=\"handleEnter($event)\"\n ></textarea>\n </div>\n <button\n type=\"button\"\n class=\"p-button p-button-primary send-btn\"\n (click)=\"handleSend()\"\n [disabled]=\"\n documentHistoryAiService.state.queryLoading ||\n !documentHistoryAiService.state.queryText?.trim()\n \"\n aria-label=\"Send\"\n >\n <i class=\"ri-send-plane-fill\"></i>\n </button>\n </div>\n</div>\n\n", styles: [":host{display:flex;flex-direction:column;flex:1;width:100%;height:100%;min-height:0}.document-ai-chat-panel{flex:1;width:100%;max-width:100%;min-height:0;max-height:none;background:#fff;display:flex;flex-direction:column;overflow:hidden}.chat-header{padding:.75rem 1rem;background:#fff;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;gap:.75rem}.chat-header-content,.chat-header-brand{display:flex;align-items:center;gap:.6rem}.chat-header-icon{width:28px;height:28px;border-radius:999px;background:#e6f3ff;display:flex;align-items:center;justify-content:center}.chat-header-icon i{font-size:1.1rem;color:#0f8bfd}.chat-header-text{display:flex;flex-direction:column}.chat-title{font-weight:600;font-size:.9rem;color:#1f2937;margin:0}.chat-header-menu{color:#676b89;font-size:1.1rem}.chat-messages{flex:1;overflow-y:auto;padding:1.5rem 1.25rem 1rem;display:flex;flex-direction:column;gap:.75rem;background:#fff}.chat-welcome{display:flex;flex-direction:column;align-items:center;text-align:center;padding:0 0 1.5rem}.welcome-illustration{width:56px;height:56px;border-radius:999px;background:linear-gradient(135deg,#e6f3ff,#0f8bfd14);display:flex;align-items:center;justify-content:center;margin-bottom:1rem}.welcome-illustration i{font-size:1.75rem;color:#0f8bfd}.welcome-title{font-size:.95rem;font-weight:600;color:#1f2937;margin:0 0 .25rem}.welcome-subtitle{font-size:.8rem;color:#676b89;margin:0 0 1.25rem}.suggested-prompts{display:flex;flex-direction:column;gap:.5rem;width:100%;max-width:260px}.prompt-chip{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.6rem 1.2rem;border-radius:999px;border:1px solid #bfdbfe;background:#eff6ff;color:#026fd4;font-size:.8rem;font-weight:500;cursor:pointer;transition:all .2s ease}.prompt-chip i{font-size:1rem}.prompt-chip:hover{background:#dbeafe;border-color:#0f8bfd}.message{display:flex;align-items:flex-end;gap:.4rem;margin-bottom:1.5rem}.message:last-child{margin-bottom:0}.message.message-user{flex-direction:row-reverse}.message.message-assistant{flex-direction:row}.message-avatar{width:28px;height:28px;border-radius:999px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:.95rem}.message-user .message-avatar{background:linear-gradient(135deg,#0f8bfd,#026fd4);color:#fff}.message-assistant .message-avatar{background:#e6f3ff;color:#0f8bfd}.message-bubble{max-width:82%;padding:.6rem .9rem;border-radius:14px;font-size:.85rem;line-height:1.5;white-space:pre-wrap;word-break:break-word}.message-user .message-bubble{background:linear-gradient(135deg,#0f8bfd,#026fd4);color:#fff;border-bottom-right-radius:6px}.message-assistant .message-bubble{background:#f3f4f6;color:#1f2937;border-bottom-left-radius:6px;border:1px solid #e5e7eb}.loading-dots{display:inline-flex;gap:5px;align-items:center}.loading-dots span{width:6px;height:6px;border-radius:50%;background:#026fd4;opacity:.6;animation:loading-bounce 1.2s ease-in-out infinite both}.loading-dots span:nth-child(1){animation-delay:-.24s}.loading-dots span:nth-child(2){animation-delay:-.12s}@keyframes loading-bounce{0%,80%,to{transform:scale(.7);opacity:.5}40%{transform:scale(1);opacity:1}}.chat-input-area{padding:.75rem 1rem 1rem;background:#fff;border-top:1px solid #e5e7eb;display:flex;gap:.5rem;align-items:center}.chat-input-wrapper{flex:1;display:flex;align-items:center;min-height:40px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:999px;padding:.25rem .85rem}.chat-input{flex:1;border:none;background:transparent;font-size:.85rem;line-height:1.5;outline:none}.chat-input::placeholder{color:#676b89}.send-btn{width:36px;height:36px;border-radius:999px;display:flex;align-items:center;justify-content:center;background:#0f8bfd;border:none;color:#fff}.send-btn i{font-size:1rem}\n"] }]
7053
+ }], ctorParameters: () => [{ type: DocumentHistoryAiService }], propDecorators: { selectedDocument: [{
7054
+ type: Input
7055
+ }] } });
7056
+
7162
7057
  /**
7163
7058
  * Component for displaying document history in a timeline format.
7164
7059
  */
@@ -7189,7 +7084,7 @@ class DocumentHistoryComponent {
7189
7084
  * When true, shows AI dropdown (Summary / Query / Insights) and sidebar.
7190
7085
  * Set false to hide document intelligence UI (default off until enabled).
7191
7086
  */
7192
- isDocumentIntelligence = false;
7087
+ isDocumentIntelligence = true;
7193
7088
  /**
7194
7089
  * Event emitted when delete task is requested
7195
7090
  */
@@ -7350,7 +7245,7 @@ class DocumentHistoryComponent {
7350
7245
  }
7351
7246
  /**
7352
7247
  * Open AI sidebar with selected section
7353
- * @param {'Summary' | 'Query' | 'Insights'} section - AI section selected from menu.
7248
+ * @param {'Query'} section - AI section (Query only).
7354
7249
  */
7355
7250
  openAiPanel(section) {
7356
7251
  if (!this.isDocumentIntelligence)
@@ -7535,11 +7430,11 @@ class DocumentHistoryComponent {
7535
7430
  }
7536
7431
  }
7537
7432
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentHistoryComponent, deps: [{ token: DocumentHistoryService }, { token: DocumentViewerService }, { token: DocumentActionsService }, { token: i3.ConfirmationService }, { token: DocumentHttpService }, { token: DocumentHistoryAiService }], target: i0.ɵɵFactoryTarget.Component });
7538
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentHistoryComponent, isStandalone: false, selector: "document-history", inputs: { historyData: "historyData", showHistory: "showHistory", contextId: "contextId", selectedDocument: "selectedDocument", isDocumentIntelligence: "isDocumentIntelligence" }, outputs: { deleteTaskRequested: "deleteTaskRequested", documentSelected: "documentSelected" }, host: { listeners: { "document:click": "onDocumentClickOutside($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-review-container\" *ngIf=\"showHistory && historyData.length > 0\">\n <!-- Header Section -->\n <div class=\"review-header\">\n <div class=\"review-title-section\">\n <h2 class=\"review-title\">Document Review</h2>\n <div class=\"ai-menu\" *ngIf=\"isDocumentIntelligence\">\n <button class=\"ai-btn\" (click)=\"documentHistoryAiService.toggleAiMenu()\" [class.active]=\"documentHistoryAiService.state.showAiMenu\">\n <i class=\"pi pi-sparkles\"></i>\n <span>AI</span>\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"documentHistoryAiService.state.showAiMenu\"></i>\n </button>\n <div class=\"ai-dropdown\" *ngIf=\"documentHistoryAiService.state.showAiMenu\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"ai-dropdown-item\" (click)=\"openAiPanel('Summary')\">Summary</button>\n <button type=\"button\" class=\"ai-dropdown-item\" (click)=\"openAiPanel('Query')\">Query</button>\n <button type=\"button\" class=\"ai-dropdown-item\" (click)=\"openAiPanel('Insights')\">Insights</button>\n </div>\n </div>\n </div>\n <!-- <div class=\"actions-menu\" *ngIf=\"selectedDocument?.isUploaded || selectedDocument?.status == 'Approved'\"> -->\n <!-- <div class=\"actions-menu\" *ngIf=\"(selectedDocument?.isUploaded || selectedDocument?.status == 'Approved') && !selectedDocument?.isSystemDocument\"> -->\n <div class=\"actions-menu\" *ngIf=\"(selectedDocument?.status !== 'Approved') && (!selectedDocument?.isSystemDocument)\">\n <button class=\"actions-btn\" (click)=\"toggleActionsMenu()\" [class.active]=\"showActionsMenu\">\n Actions\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"showActionsMenu\"></i>\n </button>\n\n <!-- Actions Dropdown Menu -->\n <div class=\"actions-dropdown\" *ngIf=\"showActionsMenu\" (click)=\"$event.stopPropagation()\">\n <div class=\"dropdown-item\" *ngIf=\"selectedDocument?.status == 'Approved' || selectedDocument?.isUploaded || selectedDocument?.status == 'Uploaded'\">\n <ng-content [select]=\"'action-launcher'\"></ng-content>\n </div>\n <div *ngIf=\"selectedDocument?.status == 'Uploaded' || selectedDocument?.status === 'Rejected' || selectedDocument?.status === 'Reviewing' || selectedDocument?.status === 'Pending'\" [permission]=\"'documents-deleteDocumentByDocumentId'\" class=\"dropdown-item\" (click)=\"onDeleteTask()\">\n <span>Delete Document</span>\n </div>\n </div>\n \n </div>\n </div>\n\n <!-- Document Actions Component - Below Header -->\n <div class=\"document-actions-section\">\n <ng-content select=\"[actions-component]\"></ng-content>\n </div>\n\n\n <!-- Alerts Section -->\n <!-- <div class=\"alerts-section\">\n <div class=\"alert-card\">\n <div class=\"alert-header\">\n <i class=\"pi pi-exclamation-triangle alert-icon\"></i>\n <span class=\"alert-text\">Alerts</span>\n <div class=\"alert-badge\">\n <span class=\"alert-count\">{{ getAlertCount() }}</span>\n <i class=\"pi pi-chevron-right\"></i>\n </div>\n </div>\n </div>\n </div> -->\n\n <!-- Timeline Section -->\n <div class=\"timeline-section\">\n <h3 class=\"timeline-title\">Timeline</h3>\n <div class=\"timeline-container\">\n <div class=\"timeline-item\" *ngFor=\"let section of processedHistoryData\">\n <ng-container *ngFor=\"let item of section.list; let i = index\">\n <div class=\"timeline-event mb-2\" *ngIf=\"!item.shouldHide\">\n <div class=\"event-card\" [ngClass]=\"item.eventCardClass\">\n <!-- Event Header -->\n <div class=\"event-header\">\n <div class=\"event-info\">\n <i [class]=\"item.eventIcon\"></i>\n <span class=\"event-label\">{{ item.label }}</span>\n </div>\n <div class=\"event-timestamp\">{{ item.dateTime }}</div>\n </div>\n <!-- User Information -->\n <div class=\"event-user mb-2\">\n <span class=\"user-name\">{{ item.userName }}</span>\n <span class=\"user-role\">({{ item.userRole }})</span>\n </div>\n <!-- Event Description -->\n <div class=\"event-description\" *ngIf=\"item.requestDescription\">\n <ul class=\"event-description-list\" *ngIf=\"item.label.toLowerCase().includes('requested')\">\n <li class=\"event-description-item\">{{ item.requestDescription }}</li>\n </ul>\n <p *ngIf=\"!item.label.toLowerCase().includes('requested')\">{{ item.requestDescription }}</p>\n </div>\n\n <!-- Document Upload Cards -->\n <div class=\"document-uploads\" *ngIf=\"item.documentList && item.documentList.length > 0\">\n <div class=\"uploaded-documents\">\n <div class=\"document-card\" *ngFor=\"let doc of item.documentList\" (click)=\"onDocumentClick(doc)\">\n <div class=\"document-icon\">\n <i class=\"pi pi-file\"></i>\n </div>\n <span class=\"document-name\">{{ doc.docName }}</span>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- <ng-content [select]=\"'actions-component'\"></ng-content> -->\n</div>\n\n<p-sidebar\n *ngIf=\"isDocumentIntelligence\"\n [(visible)]=\"documentHistoryAiService.state.showAiSidebar\"\n position=\"right\"\n [style]=\"{ width: '420px' }\"\n [dismissible]=\"true\"\n [showCloseIcon]=\"true\"\n [appendTo]=\"'body'\"\n>\n <ng-template pTemplate=\"header\">\n <h3 class=\"ai-sidebar-title\">{{ documentHistoryAiService.state.aiSidebarHeader }}</h3>\n </ng-template>\n\n <div class=\"ai-sidebar-content\">\n <ng-container *ngIf=\"documentHistoryAiService.state.aiSidebarHeader !== 'Query'\">\n <p class=\"ai-sidebar-text\" *ngIf=\"documentHistoryAiService.state.aiLoading\">Loading {{ documentHistoryAiService.state.aiSidebarHeader.toLowerCase() }}...</p>\n <p class=\"ai-sidebar-error\" *ngIf=\"!documentHistoryAiService.state.aiLoading && documentHistoryAiService.state.aiError\">{{ documentHistoryAiService.state.aiError }}</p>\n <div class=\"ai-sidebar-text ai-markdown\" *ngIf=\"!documentHistoryAiService.state.aiLoading && !documentHistoryAiService.state.aiError\" [innerHTML]=\"documentHistoryAiService.state.aiContentHtml\"></div>\n </ng-container>\n\n <ng-container *ngIf=\"documentHistoryAiService.state.aiSidebarHeader === 'Query'\">\n <p class=\"ai-sidebar-error\" *ngIf=\"documentHistoryAiService.state.aiError\">{{ documentHistoryAiService.state.aiError }}</p>\n\n <div class=\"query-chat-messages\">\n <div class=\"query-chat-empty\" *ngIf=\"documentHistoryAiService.state.queryMessages.length === 0 && !documentHistoryAiService.state.queryLoading\">\n Ask anything about this document.\n </div>\n\n <div *ngFor=\"let message of documentHistoryAiService.state.queryMessages\" class=\"query-chat-message\" [ngClass]=\"message.role\">\n <div class=\"query-chat-bubble\">\n <span *ngIf=\"message.role === 'user'\">{{ message.content }}</span>\n <div *ngIf=\"message.role === 'assistant'\" class=\"ai-markdown\" [innerHTML]=\"message.htmlContent\"></div>\n </div>\n </div>\n\n <div class=\"query-chat-message assistant\" *ngIf=\"documentHistoryAiService.state.queryLoading\">\n <div class=\"query-chat-bubble\">Thinking...</div>\n </div>\n </div>\n\n <div class=\"query-chat-input-wrap\">\n <textarea\n [(ngModel)]=\"documentHistoryAiService.state.queryText\"\n (keydown)=\"onQueryEnter($event)\"\n class=\"query-chat-input\"\n rows=\"3\"\n placeholder=\"Type your question\"\n ></textarea>\n <button type=\"button\" class=\"query-send-btn\" [disabled]=\"documentHistoryAiService.state.queryLoading || !documentHistoryAiService.state.queryText.trim()\" (click)=\"sendQuery()\">\n Send\n </button>\n </div>\n </ng-container>\n </div>\n</p-sidebar>", styles: [".document-review-container{border-radius:8px;max-height:100%;overflow-y:auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.document-review-container .review-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.document-review-container .review-header .review-title-section{display:flex;align-items:center;gap:.75rem}.document-review-container .review-header .review-title{font-size:1.5rem;font-weight:600;color:#1f2937;margin:0}.document-review-container .review-header .ai-menu{position:relative}.document-review-container .review-header .ai-menu .ai-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:0 .85rem;color:#374151;font-size:.875rem;height:40px;line-height:1;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .ai-menu .ai-btn:hover{background:#f9fafb}.document-review-container .review-header .ai-menu .ai-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .ai-menu .ai-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .ai-menu .ai-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .ai-menu .ai-dropdown{position:absolute;top:100%;left:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:160px;margin-top:.25rem;padding:.25rem 0}.document-review-container .review-header .ai-menu .ai-dropdown .ai-dropdown-item{width:100%;text-align:left;border:none;background:transparent;padding:.625rem .875rem;cursor:pointer;color:#374151;font-size:.875rem}.document-review-container .review-header .ai-menu .ai-dropdown .ai-dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu{position:relative}.document-review-container .review-header .actions-menu .actions-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:0 1rem;height:40px;line-height:1;color:#374151;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .actions-menu .actions-btn:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .actions-menu .actions-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .actions-menu .actions-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .actions-menu .actions-dropdown{position:absolute;top:100%;right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:180px;margin-top:.25rem}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item{padding:.75rem 1rem;cursor:pointer;color:#374151;font-size:.875rem;border-bottom:1px solid #f3f4f6;transition:background-color .2s}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:first-child{border-radius:8px 8px 0 0}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item span{display:block}.document-review-container ::ng-deep document-actions{margin-bottom:1.5rem}.document-review-container ::ng-deep document-actions .actions-card{margin:0;width:100%}.document-review-container .document-actions-section{padding:1rem 0}.document-review-container .alerts-section{margin-bottom:2rem}.document-review-container .alerts-section .alert-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1rem}.document-review-container .alerts-section .alert-card .alert-header{display:flex;align-items:center;gap:.75rem}.document-review-container .alerts-section .alert-card .alert-header .alert-icon{color:#ef4444;font-size:1.25rem}.document-review-container .alerts-section .alert-card .alert-header .alert-text{font-weight:500;color:#1f2937;font-size:1rem}.document-review-container .alerts-section .alert-card .alert-header .alert-badge{margin-left:auto;display:flex;align-items:center;gap:.5rem;background:#ef4444;color:#fff;border-radius:50%;width:24px;height:24px;justify-content:center;position:relative}.document-review-container .alerts-section .alert-card .alert-header .alert-badge .alert-count{font-size:.75rem;font-weight:600}.document-review-container .alerts-section .alert-card .alert-header .alert-badge i{position:absolute;right:-8px;font-size:.75rem;color:#ef4444;background:#fff;border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center}.document-review-container .timeline-section .timeline-title{font-size:1.25rem;font-weight:600;color:#1f2937;margin:0 0 1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item{margin-bottom:1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1.25rem;position:relative}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info{display:flex;align-items:center;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon{width:25px;height:25px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon i{font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-requested{background:#3b82f6}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-accepted{background:#10b981}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-rejected{background:#ef4444}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-default{background:#6b7280}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-label{font-weight:600;color:#1f2937;font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{color:#6b7280;font-size:.875rem;font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description p{color:#374151;line-height:1.5;margin:0;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents{display:flex;flex-direction:column;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:.5rem;display:flex;align-items:center;gap:.75rem;cursor:pointer;transition:all .2s ease}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:hover{background:#e2e8f0;border-color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:active{transform:translateY(0);box-shadow:0 1px 2px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-icon{color:#3b82f6;font-size:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-name{color:#1f2937;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user{font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-name{color:rgb(75,85,99,var(--tw-text-opacity, 1));font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-role{color:#6b7280;margin-left:.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-requested{background:#dbeafe;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-accepted{background:#dcfce7;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-rejected{background:#fee2e2;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-default{border-left:4px solid #6b7280}@media (max-width: 768px){.document-review-container{padding:1rem}.document-review-container .review-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-review-container .review-header .actions-menu{align-self:flex-end}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{flex-direction:column;align-items:flex-start;gap:.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{align-self:flex-end}}.ai-sidebar-title{margin:0;font-size:1.1rem;font-weight:600;color:#111827}.ai-sidebar-content{padding:1rem .5rem}.ai-sidebar-text{margin:0;color:#4b5563;font-size:.95rem;line-height:1.5;white-space:pre-wrap}.ai-markdown p{margin:0 0 .5rem}.ai-markdown :last-child{margin-bottom:0}.ai-markdown strong{color:#111827;font-weight:700}.ai-markdown .ai-markdown-list{margin:0 0 .5rem 1.1rem;padding:0}.ai-markdown li{margin-bottom:.35rem}.ai-sidebar-error{margin:0;color:#dc2626;font-size:.9rem}.query-chat-messages{max-height:calc(100vh - 260px);overflow-y:auto;padding:.25rem .1rem .5rem;margin-bottom:.75rem}.query-chat-empty{color:#6b7280;font-size:.9rem;text-align:center;padding:.75rem .5rem}.query-chat-message{display:flex;margin-bottom:.6rem}.query-chat-message.user{justify-content:flex-end}.query-chat-message.assistant{justify-content:flex-start}.query-chat-bubble{max-width:85%;padding:.6rem .75rem;border-radius:12px;font-size:.9rem;line-height:1.45;border:1px solid #e5e7eb;background:#f9fafb;color:#1f2937}.query-chat-message.user .query-chat-bubble{background:#dbeafe;border-color:#bfdbfe}.query-chat-input-wrap{display:flex;flex-direction:column;gap:.5rem}.query-chat-input{width:100%;border:1px solid #d1d5db;border-radius:8px;padding:.6rem .7rem;font-size:.9rem;resize:vertical;min-height:70px}.query-chat-input:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 2px #60a5fa33}.query-send-btn{align-self:flex-end;border:1px solid #2563eb;background:#2563eb;color:#fff;border-radius:8px;padding:.45rem .9rem;font-size:.85rem;cursor:pointer}.query-send-btn:hover:not(:disabled){background:#1d4ed8}.query-send-btn:disabled{cursor:not-allowed;opacity:.6}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i9$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: i9$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: HasPermissionDirective, selector: "[permission]", inputs: ["permission"] }] });
7433
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DocumentHistoryComponent, isStandalone: false, selector: "document-history", inputs: { historyData: "historyData", showHistory: "showHistory", contextId: "contextId", selectedDocument: "selectedDocument", isDocumentIntelligence: "isDocumentIntelligence" }, outputs: { deleteTaskRequested: "deleteTaskRequested", documentSelected: "documentSelected" }, host: { listeners: { "document:click": "onDocumentClickOutside($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"document-review-container\" *ngIf=\"showHistory && historyData.length > 0\">\n <!-- Header Section -->\n <div class=\"review-header\">\n <div class=\"review-title-section\">\n <h2 class=\"review-title\">Document Review</h2>\n <div class=\"ai-menu\" *ngIf=\"isDocumentIntelligence\">\n <button class=\"ai-btn\" (click)=\"documentHistoryAiService.toggleAiMenu()\" [class.active]=\"documentHistoryAiService.state.showAiMenu\">\n <i class=\"pi pi-sparkles\"></i>\n <span>AI</span>\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"documentHistoryAiService.state.showAiMenu\"></i>\n </button>\n <div class=\"ai-dropdown\" *ngIf=\"documentHistoryAiService.state.showAiMenu\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"ai-dropdown-item\" (click)=\"openAiPanel('Query')\">Query</button>\n </div>\n </div>\n </div>\n <!-- <div class=\"actions-menu\" *ngIf=\"selectedDocument?.isUploaded || selectedDocument?.status == 'Approved'\"> -->\n <!-- <div class=\"actions-menu\" *ngIf=\"(selectedDocument?.isUploaded || selectedDocument?.status == 'Approved') && !selectedDocument?.isSystemDocument\"> -->\n <div class=\"actions-menu\" *ngIf=\"(selectedDocument?.status !== 'Approved') && (!selectedDocument?.isSystemDocument)\">\n <button class=\"actions-btn\" (click)=\"toggleActionsMenu()\" [class.active]=\"showActionsMenu\">\n Actions\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"showActionsMenu\"></i>\n </button>\n\n <!-- Actions Dropdown Menu -->\n <div class=\"actions-dropdown\" *ngIf=\"showActionsMenu\" (click)=\"$event.stopPropagation()\">\n <div class=\"dropdown-item\" *ngIf=\"selectedDocument?.status == 'Approved' || selectedDocument?.isUploaded || selectedDocument?.status == 'Uploaded'\">\n <ng-content [select]=\"'action-launcher'\"></ng-content>\n </div>\n <div *ngIf=\"selectedDocument?.status == 'Uploaded' || selectedDocument?.status === 'Rejected' || selectedDocument?.status === 'Reviewing' || selectedDocument?.status === 'Pending'\" [permission]=\"'documents-deleteDocumentByDocumentId'\" class=\"dropdown-item\" (click)=\"onDeleteTask()\">\n <span>Delete Document</span>\n </div>\n </div>\n\n </div>\n </div>\n\n <!-- Document Actions Component - Below Header -->\n <div class=\"document-actions-section\">\n <ng-content select=\"[actions-component]\"></ng-content>\n </div>\n\n\n <!-- Alerts Section -->\n <!-- <div class=\"alerts-section\">\n <div class=\"alert-card\">\n <div class=\"alert-header\">\n <i class=\"pi pi-exclamation-triangle alert-icon\"></i>\n <span class=\"alert-text\">Alerts</span>\n <div class=\"alert-badge\">\n <span class=\"alert-count\">{{ getAlertCount() }}</span>\n <i class=\"pi pi-chevron-right\"></i>\n </div>\n </div>\n </div>\n </div> -->\n\n <!-- Timeline Section -->\n <div class=\"timeline-section\">\n <h3 class=\"timeline-title\">Timeline</h3>\n <div class=\"timeline-container\">\n <div class=\"timeline-item\" *ngFor=\"let section of processedHistoryData\">\n <ng-container *ngFor=\"let item of section.list; let i = index\">\n <div class=\"timeline-event mb-2\" *ngIf=\"!item.shouldHide\">\n <div class=\"event-card\" [ngClass]=\"item.eventCardClass\">\n <!-- Event Header -->\n <div class=\"event-header\">\n <div class=\"event-info\">\n <i [class]=\"item.eventIcon\"></i>\n <span class=\"event-label\">{{ item.label }}</span>\n </div>\n <div class=\"event-timestamp\">{{ item.dateTime }}</div>\n </div>\n <!-- User Information -->\n <div class=\"event-user mb-2\">\n <span class=\"user-name\">{{ item.userName }}</span>\n <span class=\"user-role\">({{ item.userRole }})</span>\n </div>\n <!-- Event Description -->\n <div class=\"event-description\" *ngIf=\"item.requestDescription\">\n <ul class=\"event-description-list\" *ngIf=\"item.label.toLowerCase().includes('requested')\">\n <li class=\"event-description-item\">{{ item.requestDescription }}</li>\n </ul>\n <p *ngIf=\"!item.label.toLowerCase().includes('requested')\">{{ item.requestDescription }}</p>\n </div>\n\n <!-- Document Upload Cards -->\n <div class=\"document-uploads\" *ngIf=\"item.documentList && item.documentList.length > 0\">\n <div class=\"uploaded-documents\">\n <div class=\"document-card\" *ngFor=\"let doc of item.documentList\" (click)=\"onDocumentClick(doc)\">\n <div class=\"document-icon\">\n <i class=\"pi pi-file\"></i>\n </div>\n <span class=\"document-name\">{{ doc.docName }}</span>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- <ng-content [select]=\"'actions-component'\"></ng-content> -->\n</div>\n\n<p-sidebar *ngIf=\"isDocumentIntelligence\" [(visible)]=\"documentHistoryAiService.state.showAiSidebar\" position=\"right\"\n [style]=\"{ width: '420px' }\" styleClass=\"ai-chat-sidebar\" [dismissible]=\"true\" [showCloseIcon]=\"false\"\n [showHeader]=\"false\" [appendTo]=\"'body'\">\n\n <div class=\"ai-sidebar-content\">\n <document-ai-chat [selectedDocument]=\"selectedDocument\"></document-ai-chat>\n </div>\n</p-sidebar>", styles: [".document-review-container{border-radius:8px;max-height:100%;overflow-y:auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.document-review-container .review-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.document-review-container .review-header .review-title-section{display:flex;align-items:center;gap:.75rem}.document-review-container .review-header .review-title{font-size:1.5rem;font-weight:600;color:#1f2937;margin:0}.document-review-container .review-header .ai-menu{position:relative}.document-review-container .review-header .ai-menu .ai-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:0 .85rem;color:#374151;font-size:.875rem;height:40px;line-height:1;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .ai-menu .ai-btn:hover{background:#f9fafb}.document-review-container .review-header .ai-menu .ai-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .ai-menu .ai-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .ai-menu .ai-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .ai-menu .ai-dropdown{position:absolute;top:100%;left:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:160px;margin-top:.25rem;padding:.25rem 0}.document-review-container .review-header .ai-menu .ai-dropdown .ai-dropdown-item{width:100%;text-align:left;border:none;background:transparent;padding:.625rem .875rem;cursor:pointer;color:#374151;font-size:.875rem}.document-review-container .review-header .ai-menu .ai-dropdown .ai-dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu{position:relative}.document-review-container .review-header .actions-menu .actions-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:0 1rem;height:40px;line-height:1;color:#374151;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .actions-menu .actions-btn:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .actions-menu .actions-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .actions-menu .actions-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .actions-menu .actions-dropdown{position:absolute;top:100%;right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:180px;margin-top:.25rem}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item{padding:.75rem 1rem;cursor:pointer;color:#374151;font-size:.875rem;border-bottom:1px solid #f3f4f6;transition:background-color .2s}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:first-child{border-radius:8px 8px 0 0}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item span{display:block}.document-review-container ::ng-deep document-actions{margin-bottom:1.5rem}.document-review-container ::ng-deep document-actions .actions-card{margin:0;width:100%}.document-review-container .document-actions-section{padding:1rem 0}.document-review-container .alerts-section{margin-bottom:2rem}.document-review-container .alerts-section .alert-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1rem}.document-review-container .alerts-section .alert-card .alert-header{display:flex;align-items:center;gap:.75rem}.document-review-container .alerts-section .alert-card .alert-header .alert-icon{color:#ef4444;font-size:1.25rem}.document-review-container .alerts-section .alert-card .alert-header .alert-text{font-weight:500;color:#1f2937;font-size:1rem}.document-review-container .alerts-section .alert-card .alert-header .alert-badge{margin-left:auto;display:flex;align-items:center;gap:.5rem;background:#ef4444;color:#fff;border-radius:50%;width:24px;height:24px;justify-content:center;position:relative}.document-review-container .alerts-section .alert-card .alert-header .alert-badge .alert-count{font-size:.75rem;font-weight:600}.document-review-container .alerts-section .alert-card .alert-header .alert-badge i{position:absolute;right:-8px;font-size:.75rem;color:#ef4444;background:#fff;border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center}.document-review-container .timeline-section .timeline-title{font-size:1.25rem;font-weight:600;color:#1f2937;margin:0 0 1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item{margin-bottom:1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1.25rem;position:relative}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info{display:flex;align-items:center;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon{width:25px;height:25px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon i{font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-requested{background:#3b82f6}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-accepted{background:#10b981}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-rejected{background:#ef4444}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-default{background:#6b7280}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-label{font-weight:600;color:#1f2937;font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{color:#6b7280;font-size:.875rem;font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description p{color:#374151;line-height:1.5;margin:0;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents{display:flex;flex-direction:column;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:.5rem;display:flex;align-items:center;gap:.75rem;cursor:pointer;transition:all .2s ease}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:hover{background:#e2e8f0;border-color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:active{transform:translateY(0);box-shadow:0 1px 2px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-icon{color:#3b82f6;font-size:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-name{color:#1f2937;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user{font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-name{color:rgb(75,85,99,var(--tw-text-opacity, 1));font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-role{color:#6b7280;margin-left:.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-requested{background:#dbeafe;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-accepted{background:#dcfce7;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-rejected{background:#fee2e2;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-default{border-left:4px solid #6b7280}@media (max-width: 768px){.document-review-container{padding:1rem}.document-review-container .review-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-review-container .review-header .actions-menu{align-self:flex-end}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{flex-direction:column;align-items:flex-start;gap:.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{align-self:flex-end}}.ai-sidebar-title{margin:0;font-size:1.1rem;font-weight:600;color:#111827}.ai-sidebar-content{flex:1;display:flex;flex-direction:column;height:100%;padding:0}::ng-deep .ai-chat-sidebar .p-sidebar-header{display:none!important;padding:0!important}::ng-deep .ai-chat-sidebar .p-sidebar-content{padding:0!important;display:flex;flex-direction:column}.ai-sidebar-text{margin:0;color:#4b5563;font-size:.95rem;line-height:1.5;white-space:pre-wrap}.ai-markdown p{margin:0 0 .5rem}.ai-markdown :last-child{margin-bottom:0}.ai-markdown strong{color:#111827;font-weight:700}.ai-markdown .ai-markdown-list{margin:0 0 .5rem 1.1rem;padding:0}.ai-markdown li{margin-bottom:.35rem}.ai-sidebar-error{margin:0;color:#dc2626;font-size:.9rem}.query-chat-messages{max-height:calc(100vh - 260px);overflow-y:auto;padding:.25rem .1rem .5rem;margin-bottom:.75rem}.query-chat-empty{color:#6b7280;font-size:.9rem;text-align:center;padding:.75rem .5rem}.query-chat-message{display:flex;margin-bottom:.6rem}.query-chat-message.user{justify-content:flex-end}.query-chat-message.assistant{justify-content:flex-start}.query-chat-bubble{max-width:85%;padding:.6rem .75rem;border-radius:12px;font-size:.9rem;line-height:1.45;border:1px solid #e5e7eb;background:#f9fafb;color:#1f2937}.query-chat-message.user .query-chat-bubble{background:#dbeafe;border-color:#bfdbfe}.query-chat-input-wrap{display:flex;flex-direction:column;gap:.5rem}.query-chat-input{width:100%;border:1px solid #d1d5db;border-radius:8px;padding:.6rem .7rem;font-size:.9rem;resize:vertical;min-height:70px}.query-chat-input:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 2px #60a5fa33}.query-send-btn{align-self:flex-end;border:1px solid #2563eb;background:#2563eb;color:#fff;border-radius:8px;padding:.45rem .9rem;font-size:.85rem;cursor:pointer}.query-send-btn:hover:not(:disabled){background:#1d4ed8}.query-send-btn:disabled{cursor:not-allowed;opacity:.6}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: HasPermissionDirective, selector: "[permission]", inputs: ["permission"] }, { kind: "component", type: DocumentAiChatComponent, selector: "document-ai-chat", inputs: ["selectedDocument"] }] });
7539
7434
  }
7540
7435
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentHistoryComponent, decorators: [{
7541
7436
  type: Component,
7542
- args: [{ selector: 'document-history', standalone: false, template: "<div class=\"document-review-container\" *ngIf=\"showHistory && historyData.length > 0\">\n <!-- Header Section -->\n <div class=\"review-header\">\n <div class=\"review-title-section\">\n <h2 class=\"review-title\">Document Review</h2>\n <div class=\"ai-menu\" *ngIf=\"isDocumentIntelligence\">\n <button class=\"ai-btn\" (click)=\"documentHistoryAiService.toggleAiMenu()\" [class.active]=\"documentHistoryAiService.state.showAiMenu\">\n <i class=\"pi pi-sparkles\"></i>\n <span>AI</span>\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"documentHistoryAiService.state.showAiMenu\"></i>\n </button>\n <div class=\"ai-dropdown\" *ngIf=\"documentHistoryAiService.state.showAiMenu\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"ai-dropdown-item\" (click)=\"openAiPanel('Summary')\">Summary</button>\n <button type=\"button\" class=\"ai-dropdown-item\" (click)=\"openAiPanel('Query')\">Query</button>\n <button type=\"button\" class=\"ai-dropdown-item\" (click)=\"openAiPanel('Insights')\">Insights</button>\n </div>\n </div>\n </div>\n <!-- <div class=\"actions-menu\" *ngIf=\"selectedDocument?.isUploaded || selectedDocument?.status == 'Approved'\"> -->\n <!-- <div class=\"actions-menu\" *ngIf=\"(selectedDocument?.isUploaded || selectedDocument?.status == 'Approved') && !selectedDocument?.isSystemDocument\"> -->\n <div class=\"actions-menu\" *ngIf=\"(selectedDocument?.status !== 'Approved') && (!selectedDocument?.isSystemDocument)\">\n <button class=\"actions-btn\" (click)=\"toggleActionsMenu()\" [class.active]=\"showActionsMenu\">\n Actions\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"showActionsMenu\"></i>\n </button>\n\n <!-- Actions Dropdown Menu -->\n <div class=\"actions-dropdown\" *ngIf=\"showActionsMenu\" (click)=\"$event.stopPropagation()\">\n <div class=\"dropdown-item\" *ngIf=\"selectedDocument?.status == 'Approved' || selectedDocument?.isUploaded || selectedDocument?.status == 'Uploaded'\">\n <ng-content [select]=\"'action-launcher'\"></ng-content>\n </div>\n <div *ngIf=\"selectedDocument?.status == 'Uploaded' || selectedDocument?.status === 'Rejected' || selectedDocument?.status === 'Reviewing' || selectedDocument?.status === 'Pending'\" [permission]=\"'documents-deleteDocumentByDocumentId'\" class=\"dropdown-item\" (click)=\"onDeleteTask()\">\n <span>Delete Document</span>\n </div>\n </div>\n \n </div>\n </div>\n\n <!-- Document Actions Component - Below Header -->\n <div class=\"document-actions-section\">\n <ng-content select=\"[actions-component]\"></ng-content>\n </div>\n\n\n <!-- Alerts Section -->\n <!-- <div class=\"alerts-section\">\n <div class=\"alert-card\">\n <div class=\"alert-header\">\n <i class=\"pi pi-exclamation-triangle alert-icon\"></i>\n <span class=\"alert-text\">Alerts</span>\n <div class=\"alert-badge\">\n <span class=\"alert-count\">{{ getAlertCount() }}</span>\n <i class=\"pi pi-chevron-right\"></i>\n </div>\n </div>\n </div>\n </div> -->\n\n <!-- Timeline Section -->\n <div class=\"timeline-section\">\n <h3 class=\"timeline-title\">Timeline</h3>\n <div class=\"timeline-container\">\n <div class=\"timeline-item\" *ngFor=\"let section of processedHistoryData\">\n <ng-container *ngFor=\"let item of section.list; let i = index\">\n <div class=\"timeline-event mb-2\" *ngIf=\"!item.shouldHide\">\n <div class=\"event-card\" [ngClass]=\"item.eventCardClass\">\n <!-- Event Header -->\n <div class=\"event-header\">\n <div class=\"event-info\">\n <i [class]=\"item.eventIcon\"></i>\n <span class=\"event-label\">{{ item.label }}</span>\n </div>\n <div class=\"event-timestamp\">{{ item.dateTime }}</div>\n </div>\n <!-- User Information -->\n <div class=\"event-user mb-2\">\n <span class=\"user-name\">{{ item.userName }}</span>\n <span class=\"user-role\">({{ item.userRole }})</span>\n </div>\n <!-- Event Description -->\n <div class=\"event-description\" *ngIf=\"item.requestDescription\">\n <ul class=\"event-description-list\" *ngIf=\"item.label.toLowerCase().includes('requested')\">\n <li class=\"event-description-item\">{{ item.requestDescription }}</li>\n </ul>\n <p *ngIf=\"!item.label.toLowerCase().includes('requested')\">{{ item.requestDescription }}</p>\n </div>\n\n <!-- Document Upload Cards -->\n <div class=\"document-uploads\" *ngIf=\"item.documentList && item.documentList.length > 0\">\n <div class=\"uploaded-documents\">\n <div class=\"document-card\" *ngFor=\"let doc of item.documentList\" (click)=\"onDocumentClick(doc)\">\n <div class=\"document-icon\">\n <i class=\"pi pi-file\"></i>\n </div>\n <span class=\"document-name\">{{ doc.docName }}</span>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- <ng-content [select]=\"'actions-component'\"></ng-content> -->\n</div>\n\n<p-sidebar\n *ngIf=\"isDocumentIntelligence\"\n [(visible)]=\"documentHistoryAiService.state.showAiSidebar\"\n position=\"right\"\n [style]=\"{ width: '420px' }\"\n [dismissible]=\"true\"\n [showCloseIcon]=\"true\"\n [appendTo]=\"'body'\"\n>\n <ng-template pTemplate=\"header\">\n <h3 class=\"ai-sidebar-title\">{{ documentHistoryAiService.state.aiSidebarHeader }}</h3>\n </ng-template>\n\n <div class=\"ai-sidebar-content\">\n <ng-container *ngIf=\"documentHistoryAiService.state.aiSidebarHeader !== 'Query'\">\n <p class=\"ai-sidebar-text\" *ngIf=\"documentHistoryAiService.state.aiLoading\">Loading {{ documentHistoryAiService.state.aiSidebarHeader.toLowerCase() }}...</p>\n <p class=\"ai-sidebar-error\" *ngIf=\"!documentHistoryAiService.state.aiLoading && documentHistoryAiService.state.aiError\">{{ documentHistoryAiService.state.aiError }}</p>\n <div class=\"ai-sidebar-text ai-markdown\" *ngIf=\"!documentHistoryAiService.state.aiLoading && !documentHistoryAiService.state.aiError\" [innerHTML]=\"documentHistoryAiService.state.aiContentHtml\"></div>\n </ng-container>\n\n <ng-container *ngIf=\"documentHistoryAiService.state.aiSidebarHeader === 'Query'\">\n <p class=\"ai-sidebar-error\" *ngIf=\"documentHistoryAiService.state.aiError\">{{ documentHistoryAiService.state.aiError }}</p>\n\n <div class=\"query-chat-messages\">\n <div class=\"query-chat-empty\" *ngIf=\"documentHistoryAiService.state.queryMessages.length === 0 && !documentHistoryAiService.state.queryLoading\">\n Ask anything about this document.\n </div>\n\n <div *ngFor=\"let message of documentHistoryAiService.state.queryMessages\" class=\"query-chat-message\" [ngClass]=\"message.role\">\n <div class=\"query-chat-bubble\">\n <span *ngIf=\"message.role === 'user'\">{{ message.content }}</span>\n <div *ngIf=\"message.role === 'assistant'\" class=\"ai-markdown\" [innerHTML]=\"message.htmlContent\"></div>\n </div>\n </div>\n\n <div class=\"query-chat-message assistant\" *ngIf=\"documentHistoryAiService.state.queryLoading\">\n <div class=\"query-chat-bubble\">Thinking...</div>\n </div>\n </div>\n\n <div class=\"query-chat-input-wrap\">\n <textarea\n [(ngModel)]=\"documentHistoryAiService.state.queryText\"\n (keydown)=\"onQueryEnter($event)\"\n class=\"query-chat-input\"\n rows=\"3\"\n placeholder=\"Type your question\"\n ></textarea>\n <button type=\"button\" class=\"query-send-btn\" [disabled]=\"documentHistoryAiService.state.queryLoading || !documentHistoryAiService.state.queryText.trim()\" (click)=\"sendQuery()\">\n Send\n </button>\n </div>\n </ng-container>\n </div>\n</p-sidebar>", styles: [".document-review-container{border-radius:8px;max-height:100%;overflow-y:auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.document-review-container .review-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.document-review-container .review-header .review-title-section{display:flex;align-items:center;gap:.75rem}.document-review-container .review-header .review-title{font-size:1.5rem;font-weight:600;color:#1f2937;margin:0}.document-review-container .review-header .ai-menu{position:relative}.document-review-container .review-header .ai-menu .ai-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:0 .85rem;color:#374151;font-size:.875rem;height:40px;line-height:1;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .ai-menu .ai-btn:hover{background:#f9fafb}.document-review-container .review-header .ai-menu .ai-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .ai-menu .ai-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .ai-menu .ai-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .ai-menu .ai-dropdown{position:absolute;top:100%;left:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:160px;margin-top:.25rem;padding:.25rem 0}.document-review-container .review-header .ai-menu .ai-dropdown .ai-dropdown-item{width:100%;text-align:left;border:none;background:transparent;padding:.625rem .875rem;cursor:pointer;color:#374151;font-size:.875rem}.document-review-container .review-header .ai-menu .ai-dropdown .ai-dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu{position:relative}.document-review-container .review-header .actions-menu .actions-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:0 1rem;height:40px;line-height:1;color:#374151;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .actions-menu .actions-btn:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .actions-menu .actions-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .actions-menu .actions-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .actions-menu .actions-dropdown{position:absolute;top:100%;right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:180px;margin-top:.25rem}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item{padding:.75rem 1rem;cursor:pointer;color:#374151;font-size:.875rem;border-bottom:1px solid #f3f4f6;transition:background-color .2s}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:first-child{border-radius:8px 8px 0 0}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item span{display:block}.document-review-container ::ng-deep document-actions{margin-bottom:1.5rem}.document-review-container ::ng-deep document-actions .actions-card{margin:0;width:100%}.document-review-container .document-actions-section{padding:1rem 0}.document-review-container .alerts-section{margin-bottom:2rem}.document-review-container .alerts-section .alert-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1rem}.document-review-container .alerts-section .alert-card .alert-header{display:flex;align-items:center;gap:.75rem}.document-review-container .alerts-section .alert-card .alert-header .alert-icon{color:#ef4444;font-size:1.25rem}.document-review-container .alerts-section .alert-card .alert-header .alert-text{font-weight:500;color:#1f2937;font-size:1rem}.document-review-container .alerts-section .alert-card .alert-header .alert-badge{margin-left:auto;display:flex;align-items:center;gap:.5rem;background:#ef4444;color:#fff;border-radius:50%;width:24px;height:24px;justify-content:center;position:relative}.document-review-container .alerts-section .alert-card .alert-header .alert-badge .alert-count{font-size:.75rem;font-weight:600}.document-review-container .alerts-section .alert-card .alert-header .alert-badge i{position:absolute;right:-8px;font-size:.75rem;color:#ef4444;background:#fff;border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center}.document-review-container .timeline-section .timeline-title{font-size:1.25rem;font-weight:600;color:#1f2937;margin:0 0 1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item{margin-bottom:1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1.25rem;position:relative}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info{display:flex;align-items:center;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon{width:25px;height:25px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon i{font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-requested{background:#3b82f6}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-accepted{background:#10b981}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-rejected{background:#ef4444}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-default{background:#6b7280}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-label{font-weight:600;color:#1f2937;font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{color:#6b7280;font-size:.875rem;font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description p{color:#374151;line-height:1.5;margin:0;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents{display:flex;flex-direction:column;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:.5rem;display:flex;align-items:center;gap:.75rem;cursor:pointer;transition:all .2s ease}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:hover{background:#e2e8f0;border-color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:active{transform:translateY(0);box-shadow:0 1px 2px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-icon{color:#3b82f6;font-size:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-name{color:#1f2937;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user{font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-name{color:rgb(75,85,99,var(--tw-text-opacity, 1));font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-role{color:#6b7280;margin-left:.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-requested{background:#dbeafe;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-accepted{background:#dcfce7;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-rejected{background:#fee2e2;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-default{border-left:4px solid #6b7280}@media (max-width: 768px){.document-review-container{padding:1rem}.document-review-container .review-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-review-container .review-header .actions-menu{align-self:flex-end}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{flex-direction:column;align-items:flex-start;gap:.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{align-self:flex-end}}.ai-sidebar-title{margin:0;font-size:1.1rem;font-weight:600;color:#111827}.ai-sidebar-content{padding:1rem .5rem}.ai-sidebar-text{margin:0;color:#4b5563;font-size:.95rem;line-height:1.5;white-space:pre-wrap}.ai-markdown p{margin:0 0 .5rem}.ai-markdown :last-child{margin-bottom:0}.ai-markdown strong{color:#111827;font-weight:700}.ai-markdown .ai-markdown-list{margin:0 0 .5rem 1.1rem;padding:0}.ai-markdown li{margin-bottom:.35rem}.ai-sidebar-error{margin:0;color:#dc2626;font-size:.9rem}.query-chat-messages{max-height:calc(100vh - 260px);overflow-y:auto;padding:.25rem .1rem .5rem;margin-bottom:.75rem}.query-chat-empty{color:#6b7280;font-size:.9rem;text-align:center;padding:.75rem .5rem}.query-chat-message{display:flex;margin-bottom:.6rem}.query-chat-message.user{justify-content:flex-end}.query-chat-message.assistant{justify-content:flex-start}.query-chat-bubble{max-width:85%;padding:.6rem .75rem;border-radius:12px;font-size:.9rem;line-height:1.45;border:1px solid #e5e7eb;background:#f9fafb;color:#1f2937}.query-chat-message.user .query-chat-bubble{background:#dbeafe;border-color:#bfdbfe}.query-chat-input-wrap{display:flex;flex-direction:column;gap:.5rem}.query-chat-input{width:100%;border:1px solid #d1d5db;border-radius:8px;padding:.6rem .7rem;font-size:.9rem;resize:vertical;min-height:70px}.query-chat-input:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 2px #60a5fa33}.query-send-btn{align-self:flex-end;border:1px solid #2563eb;background:#2563eb;color:#fff;border-radius:8px;padding:.45rem .9rem;font-size:.85rem;cursor:pointer}.query-send-btn:hover:not(:disabled){background:#1d4ed8}.query-send-btn:disabled{cursor:not-allowed;opacity:.6}\n"] }]
7437
+ args: [{ selector: 'document-history', standalone: false, template: "<div class=\"document-review-container\" *ngIf=\"showHistory && historyData.length > 0\">\n <!-- Header Section -->\n <div class=\"review-header\">\n <div class=\"review-title-section\">\n <h2 class=\"review-title\">Document Review</h2>\n <div class=\"ai-menu\" *ngIf=\"isDocumentIntelligence\">\n <button class=\"ai-btn\" (click)=\"documentHistoryAiService.toggleAiMenu()\" [class.active]=\"documentHistoryAiService.state.showAiMenu\">\n <i class=\"pi pi-sparkles\"></i>\n <span>AI</span>\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"documentHistoryAiService.state.showAiMenu\"></i>\n </button>\n <div class=\"ai-dropdown\" *ngIf=\"documentHistoryAiService.state.showAiMenu\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"ai-dropdown-item\" (click)=\"openAiPanel('Query')\">Query</button>\n </div>\n </div>\n </div>\n <!-- <div class=\"actions-menu\" *ngIf=\"selectedDocument?.isUploaded || selectedDocument?.status == 'Approved'\"> -->\n <!-- <div class=\"actions-menu\" *ngIf=\"(selectedDocument?.isUploaded || selectedDocument?.status == 'Approved') && !selectedDocument?.isSystemDocument\"> -->\n <div class=\"actions-menu\" *ngIf=\"(selectedDocument?.status !== 'Approved') && (!selectedDocument?.isSystemDocument)\">\n <button class=\"actions-btn\" (click)=\"toggleActionsMenu()\" [class.active]=\"showActionsMenu\">\n Actions\n <i class=\"pi pi-chevron-down\" [class.rotated]=\"showActionsMenu\"></i>\n </button>\n\n <!-- Actions Dropdown Menu -->\n <div class=\"actions-dropdown\" *ngIf=\"showActionsMenu\" (click)=\"$event.stopPropagation()\">\n <div class=\"dropdown-item\" *ngIf=\"selectedDocument?.status == 'Approved' || selectedDocument?.isUploaded || selectedDocument?.status == 'Uploaded'\">\n <ng-content [select]=\"'action-launcher'\"></ng-content>\n </div>\n <div *ngIf=\"selectedDocument?.status == 'Uploaded' || selectedDocument?.status === 'Rejected' || selectedDocument?.status === 'Reviewing' || selectedDocument?.status === 'Pending'\" [permission]=\"'documents-deleteDocumentByDocumentId'\" class=\"dropdown-item\" (click)=\"onDeleteTask()\">\n <span>Delete Document</span>\n </div>\n </div>\n\n </div>\n </div>\n\n <!-- Document Actions Component - Below Header -->\n <div class=\"document-actions-section\">\n <ng-content select=\"[actions-component]\"></ng-content>\n </div>\n\n\n <!-- Alerts Section -->\n <!-- <div class=\"alerts-section\">\n <div class=\"alert-card\">\n <div class=\"alert-header\">\n <i class=\"pi pi-exclamation-triangle alert-icon\"></i>\n <span class=\"alert-text\">Alerts</span>\n <div class=\"alert-badge\">\n <span class=\"alert-count\">{{ getAlertCount() }}</span>\n <i class=\"pi pi-chevron-right\"></i>\n </div>\n </div>\n </div>\n </div> -->\n\n <!-- Timeline Section -->\n <div class=\"timeline-section\">\n <h3 class=\"timeline-title\">Timeline</h3>\n <div class=\"timeline-container\">\n <div class=\"timeline-item\" *ngFor=\"let section of processedHistoryData\">\n <ng-container *ngFor=\"let item of section.list; let i = index\">\n <div class=\"timeline-event mb-2\" *ngIf=\"!item.shouldHide\">\n <div class=\"event-card\" [ngClass]=\"item.eventCardClass\">\n <!-- Event Header -->\n <div class=\"event-header\">\n <div class=\"event-info\">\n <i [class]=\"item.eventIcon\"></i>\n <span class=\"event-label\">{{ item.label }}</span>\n </div>\n <div class=\"event-timestamp\">{{ item.dateTime }}</div>\n </div>\n <!-- User Information -->\n <div class=\"event-user mb-2\">\n <span class=\"user-name\">{{ item.userName }}</span>\n <span class=\"user-role\">({{ item.userRole }})</span>\n </div>\n <!-- Event Description -->\n <div class=\"event-description\" *ngIf=\"item.requestDescription\">\n <ul class=\"event-description-list\" *ngIf=\"item.label.toLowerCase().includes('requested')\">\n <li class=\"event-description-item\">{{ item.requestDescription }}</li>\n </ul>\n <p *ngIf=\"!item.label.toLowerCase().includes('requested')\">{{ item.requestDescription }}</p>\n </div>\n\n <!-- Document Upload Cards -->\n <div class=\"document-uploads\" *ngIf=\"item.documentList && item.documentList.length > 0\">\n <div class=\"uploaded-documents\">\n <div class=\"document-card\" *ngFor=\"let doc of item.documentList\" (click)=\"onDocumentClick(doc)\">\n <div class=\"document-icon\">\n <i class=\"pi pi-file\"></i>\n </div>\n <span class=\"document-name\">{{ doc.docName }}</span>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- <ng-content [select]=\"'actions-component'\"></ng-content> -->\n</div>\n\n<p-sidebar *ngIf=\"isDocumentIntelligence\" [(visible)]=\"documentHistoryAiService.state.showAiSidebar\" position=\"right\"\n [style]=\"{ width: '420px' }\" styleClass=\"ai-chat-sidebar\" [dismissible]=\"true\" [showCloseIcon]=\"false\"\n [showHeader]=\"false\" [appendTo]=\"'body'\">\n\n <div class=\"ai-sidebar-content\">\n <document-ai-chat [selectedDocument]=\"selectedDocument\"></document-ai-chat>\n </div>\n</p-sidebar>", styles: [".document-review-container{border-radius:8px;max-height:100%;overflow-y:auto;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.document-review-container .review-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.document-review-container .review-header .review-title-section{display:flex;align-items:center;gap:.75rem}.document-review-container .review-header .review-title{font-size:1.5rem;font-weight:600;color:#1f2937;margin:0}.document-review-container .review-header .ai-menu{position:relative}.document-review-container .review-header .ai-menu .ai-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:0 .85rem;color:#374151;font-size:.875rem;height:40px;line-height:1;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .ai-menu .ai-btn:hover{background:#f9fafb}.document-review-container .review-header .ai-menu .ai-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .ai-menu .ai-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .ai-menu .ai-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .ai-menu .ai-dropdown{position:absolute;top:100%;left:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:160px;margin-top:.25rem;padding:.25rem 0}.document-review-container .review-header .ai-menu .ai-dropdown .ai-dropdown-item{width:100%;text-align:left;border:none;background:transparent;padding:.625rem .875rem;cursor:pointer;color:#374151;font-size:.875rem}.document-review-container .review-header .ai-menu .ai-dropdown .ai-dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu{position:relative}.document-review-container .review-header .actions-menu .actions-btn{background:#fff;border:1px solid #d1d5db;border-radius:6px;padding:0 1rem;height:40px;line-height:1;color:#374151;font-size:.875rem;cursor:pointer;display:flex;align-items:center;gap:.5rem;transition:all .2s}.document-review-container .review-header .actions-menu .actions-btn:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-btn.active{background:#f3f4f6;border-color:#9ca3af}.document-review-container .review-header .actions-menu .actions-btn i{font-size:.75rem;transition:transform .2s}.document-review-container .review-header .actions-menu .actions-btn i.rotated{transform:rotate(180deg)}.document-review-container .review-header .actions-menu .actions-dropdown{position:absolute;top:100%;right:0;background:#fff;border:1px solid #d1d5db;border-radius:8px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;z-index:1000;min-width:180px;margin-top:.25rem}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item{padding:.75rem 1rem;cursor:pointer;color:#374151;font-size:.875rem;border-bottom:1px solid #f3f4f6;transition:background-color .2s}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:first-child{border-radius:8px 8px 0 0}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item:hover{background:#f9fafb}.document-review-container .review-header .actions-menu .actions-dropdown .dropdown-item span{display:block}.document-review-container ::ng-deep document-actions{margin-bottom:1.5rem}.document-review-container ::ng-deep document-actions .actions-card{margin:0;width:100%}.document-review-container .document-actions-section{padding:1rem 0}.document-review-container .alerts-section{margin-bottom:2rem}.document-review-container .alerts-section .alert-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1rem}.document-review-container .alerts-section .alert-card .alert-header{display:flex;align-items:center;gap:.75rem}.document-review-container .alerts-section .alert-card .alert-header .alert-icon{color:#ef4444;font-size:1.25rem}.document-review-container .alerts-section .alert-card .alert-header .alert-text{font-weight:500;color:#1f2937;font-size:1rem}.document-review-container .alerts-section .alert-card .alert-header .alert-badge{margin-left:auto;display:flex;align-items:center;gap:.5rem;background:#ef4444;color:#fff;border-radius:50%;width:24px;height:24px;justify-content:center;position:relative}.document-review-container .alerts-section .alert-card .alert-header .alert-badge .alert-count{font-size:.75rem;font-weight:600}.document-review-container .alerts-section .alert-card .alert-header .alert-badge i{position:absolute;right:-8px;font-size:.75rem;color:#ef4444;background:#fff;border-radius:50%;width:16px;height:16px;display:flex;align-items:center;justify-content:center}.document-review-container .timeline-section .timeline-title{font-size:1.25rem;font-weight:600;color:#1f2937;margin:0 0 1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item{margin-bottom:1.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:1.25rem;position:relative}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info{display:flex;align-items:center;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon{width:25px;height:25px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon i{font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-requested{background:#3b82f6}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-accepted{background:#10b981}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-rejected{background:#ef4444}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-icon.icon-default{background:#6b7280}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-info .event-label{font-weight:600;color:#1f2937;font-size:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{color:#6b7280;font-size:.875rem;font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-description p{color:#374151;line-height:1.5;margin:0;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads{margin-bottom:1rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents{display:flex;flex-direction:column;gap:.75rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:.5rem;display:flex;align-items:center;gap:.75rem;cursor:pointer;transition:all .2s ease}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:hover{background:#e2e8f0;border-color:#3b82f6;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card:active{transform:translateY(0);box-shadow:0 1px 2px #0000001a}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-icon{color:#3b82f6;font-size:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .document-uploads .uploaded-documents .document-card .document-name{color:#1f2937;font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user{font-size:.875rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-name{color:rgb(75,85,99,var(--tw-text-opacity, 1));font-weight:500}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-user .user-role{color:#6b7280;margin-left:.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-requested{background:#dbeafe;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-accepted{background:#dcfce7;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-rejected{background:#fee2e2;border-radius:16px;font-size:.875rem;line-height:1.25rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card.event-default{border-left:4px solid #6b7280}@media (max-width: 768px){.document-review-container{padding:1rem}.document-review-container .review-header{flex-direction:column;gap:1rem;align-items:flex-start}.document-review-container .review-header .actions-menu{align-self:flex-end}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header{flex-direction:column;align-items:flex-start;gap:.5rem}.document-review-container .timeline-section .timeline-container .timeline-item .timeline-event .event-card .event-header .event-timestamp{align-self:flex-end}}.ai-sidebar-title{margin:0;font-size:1.1rem;font-weight:600;color:#111827}.ai-sidebar-content{flex:1;display:flex;flex-direction:column;height:100%;padding:0}::ng-deep .ai-chat-sidebar .p-sidebar-header{display:none!important;padding:0!important}::ng-deep .ai-chat-sidebar .p-sidebar-content{padding:0!important;display:flex;flex-direction:column}.ai-sidebar-text{margin:0;color:#4b5563;font-size:.95rem;line-height:1.5;white-space:pre-wrap}.ai-markdown p{margin:0 0 .5rem}.ai-markdown :last-child{margin-bottom:0}.ai-markdown strong{color:#111827;font-weight:700}.ai-markdown .ai-markdown-list{margin:0 0 .5rem 1.1rem;padding:0}.ai-markdown li{margin-bottom:.35rem}.ai-sidebar-error{margin:0;color:#dc2626;font-size:.9rem}.query-chat-messages{max-height:calc(100vh - 260px);overflow-y:auto;padding:.25rem .1rem .5rem;margin-bottom:.75rem}.query-chat-empty{color:#6b7280;font-size:.9rem;text-align:center;padding:.75rem .5rem}.query-chat-message{display:flex;margin-bottom:.6rem}.query-chat-message.user{justify-content:flex-end}.query-chat-message.assistant{justify-content:flex-start}.query-chat-bubble{max-width:85%;padding:.6rem .75rem;border-radius:12px;font-size:.9rem;line-height:1.45;border:1px solid #e5e7eb;background:#f9fafb;color:#1f2937}.query-chat-message.user .query-chat-bubble{background:#dbeafe;border-color:#bfdbfe}.query-chat-input-wrap{display:flex;flex-direction:column;gap:.5rem}.query-chat-input{width:100%;border:1px solid #d1d5db;border-radius:8px;padding:.6rem .7rem;font-size:.9rem;resize:vertical;min-height:70px}.query-chat-input:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 2px #60a5fa33}.query-send-btn{align-self:flex-end;border:1px solid #2563eb;background:#2563eb;color:#fff;border-radius:8px;padding:.45rem .9rem;font-size:.85rem;cursor:pointer}.query-send-btn:hover:not(:disabled){background:#1d4ed8}.query-send-btn:disabled{cursor:not-allowed;opacity:.6}\n"] }]
7543
7438
  }], ctorParameters: () => [{ type: DocumentHistoryService }, { type: DocumentViewerService }, { type: DocumentActionsService }, { type: i3.ConfirmationService }, { type: DocumentHttpService }, { type: DocumentHistoryAiService }], propDecorators: { historyData: [{
7544
7439
  type: Input
7545
7440
  }], showHistory: [{
@@ -11172,7 +11067,8 @@ class DocumentModule {
11172
11067
  /**
11173
11068
  * A component to request a document (without upload), with description.
11174
11069
  */
11175
- RequestDocumentComponent], imports: [
11070
+ RequestDocumentComponent,
11071
+ DocumentAiChatComponent], imports: [
11176
11072
  /**
11177
11073
  * Angular's CommonModule is imported to access common directives like `ngIf` and `ngFor`.
11178
11074
  */
@@ -11301,7 +11197,8 @@ class DocumentModule {
11301
11197
  * A sidebar component for content projection.
11302
11198
  */
11303
11199
  SidebarComponent,
11304
- RequestDocumentComponent] });
11200
+ RequestDocumentComponent,
11201
+ DocumentAiChatComponent] });
11305
11202
  static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DocumentModule, providers: [
11306
11203
  /**
11307
11204
  * Provide the messageservice to be used in other components.
@@ -11503,6 +11400,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
11503
11400
  * A component to request a document (without upload), with description.
11504
11401
  */
11505
11402
  RequestDocumentComponent,
11403
+ DocumentAiChatComponent,
11506
11404
  ],
11507
11405
  imports: [
11508
11406
  /**
@@ -11636,6 +11534,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
11636
11534
  */
11637
11535
  SidebarComponent,
11638
11536
  RequestDocumentComponent,
11537
+ DocumentAiChatComponent,
11639
11538
  ],
11640
11539
  providers: [
11641
11540
  /**
@@ -12067,5 +11966,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
12067
11966
  * Generated bundle index. Do not edit.
12068
11967
  */
12069
11968
 
12070
- export { COUNTRIES, ConfirmationDialogComponent, CsvParserService, DOCUMENTTYPES, DUMMYDOCUMENTLIST, DUMMYSUMMARY, DUMMY_DOCUMENT_SECTIONS, DocumentActionsComponent, DocumentAlertList, DocumentContainerComponent, DocumentContentTypeService, DocumentContentViewerComponent, DocumentDirective, DocumentHistoryComponent, DocumentListComponent, DocumentModule, DocumentSearchComponent, DocumentTableBuilderService, DocumentUploadComponent, DocumentViewerComponent, DocumentZoomControlsComponent, DocumentZoomService, EmlParserService, ExcelParserService, HasPermissionDirective, OPEN_DOCUMENT_EXTENSIONS, RequestDocumentComponent, SAMPLE_STATUS_DATA, SHARED, SUPPORTED_IMAGE_TYPES, SharedModule, SidebarComponent, TablePrimaryComponent, USERLIST };
11969
+ export { COUNTRIES, ConfirmationDialogComponent, CsvParserService, DOCUMENTTYPES, DUMMYDOCUMENTLIST, DUMMYSUMMARY, DUMMY_DOCUMENT_SECTIONS, DocumentActionsComponent, DocumentAiChatComponent, DocumentAlertList, DocumentContainerComponent, DocumentContentTypeService, DocumentContentViewerComponent, DocumentDirective, DocumentHistoryComponent, DocumentListComponent, DocumentModule, DocumentSearchComponent, DocumentTableBuilderService, DocumentUploadComponent, DocumentViewerComponent, DocumentZoomControlsComponent, DocumentZoomService, EmlParserService, ExcelParserService, HasPermissionDirective, OPEN_DOCUMENT_EXTENSIONS, RequestDocumentComponent, SAMPLE_STATUS_DATA, SHARED, SUPPORTED_IMAGE_TYPES, SharedModule, SidebarComponent, TablePrimaryComponent, USERLIST };
12071
11970
  //# sourceMappingURL=cat-documents-ng.mjs.map