@memberjunction/ng-conversations 3.0.0 → 3.1.1

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.
Files changed (65) hide show
  1. package/dist/lib/components/active-tasks/active-tasks-panel.component.js +1 -1
  2. package/dist/lib/components/agent/active-agent-indicator.component.js +1 -1
  3. package/dist/lib/components/agent/agent-process-panel.component.js +1 -1
  4. package/dist/lib/components/artifact/artifact-share-modal.component.js +1 -1
  5. package/dist/lib/components/attachment/image-viewer.component.js +1 -1
  6. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +1 -1
  7. package/dist/lib/components/collection/artifact-create-modal.component.js +1 -1
  8. package/dist/lib/components/collection/collection-artifact-card.component.js +1 -1
  9. package/dist/lib/components/collection/collection-form-modal.component.js +1 -1
  10. package/dist/lib/components/collection/collection-share-modal.component.js +1 -1
  11. package/dist/lib/components/collection/collection-tree.component.js +1 -1
  12. package/dist/lib/components/collection/collection-view.component.js +1 -1
  13. package/dist/lib/components/collection/collections-full-view.component.js +1 -1
  14. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +1 -0
  15. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  16. package/dist/lib/components/conversation/conversation-chat-area.component.js +9 -1
  17. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  18. package/dist/lib/components/conversation/conversation-empty-state.component.js +1 -1
  19. package/dist/lib/components/conversation/conversation-list.component.js +1 -1
  20. package/dist/lib/components/dialogs/input-dialog.component.js +1 -1
  21. package/dist/lib/components/export/export-modal.component.js +1 -1
  22. package/dist/lib/components/global-tasks/global-tasks-panel.component.js +1 -1
  23. package/dist/lib/components/library/library-full-view.component.js +1 -1
  24. package/dist/lib/components/members/members-modal.component.js +1 -1
  25. package/dist/lib/components/mention/mention-dropdown.component.js +1 -1
  26. package/dist/lib/components/mention/mention-editor.component.js +1 -1
  27. package/dist/lib/components/message/actionable-commands.component.js +1 -1
  28. package/dist/lib/components/message/agent-response-form.component.js +1 -1
  29. package/dist/lib/components/message/conversation-message-rating.component.js +1 -1
  30. package/dist/lib/components/message/form-question.component.js +1 -1
  31. package/dist/lib/components/message/message-input-box.component.js +1 -1
  32. package/dist/lib/components/message/message-input.component.js +1 -1
  33. package/dist/lib/components/message/message-item.component.js +1 -1
  34. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  35. package/dist/lib/components/message/message-list.component.js +7 -1
  36. package/dist/lib/components/message/message-list.component.js.map +1 -1
  37. package/dist/lib/components/message/suggested-responses.component.js +1 -1
  38. package/dist/lib/components/navigation/conversation-navigation.component.js +1 -1
  39. package/dist/lib/components/notification/activity-indicator.component.js +1 -1
  40. package/dist/lib/components/notification/notification-badge.component.js +1 -1
  41. package/dist/lib/components/project/project-form-modal.component.js +1 -1
  42. package/dist/lib/components/project/project-selector.component.js +1 -1
  43. package/dist/lib/components/search/search-panel.component.js +1 -1
  44. package/dist/lib/components/share/share-modal.component.js +1 -1
  45. package/dist/lib/components/shared/user-picker.component.js +1 -1
  46. package/dist/lib/components/sidebar/conversation-sidebar.component.js +1 -1
  47. package/dist/lib/components/task/tasks-full-view.component.js +1 -1
  48. package/dist/lib/components/tasks/task-widget.component.js +1 -1
  49. package/dist/lib/components/tasks/tasks-dropdown.component.js +1 -1
  50. package/dist/lib/components/thread/thread-panel.component.js +1 -1
  51. package/dist/lib/components/toast/toast.component.js +1 -1
  52. package/dist/lib/components/workspace/conversation-workspace.component.js +1 -1
  53. package/package.json +17 -17
  54. package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts +0 -48
  55. package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts.map +0 -1
  56. package/dist/lib/components/artifact/artifact-viewer-panel.component.js +0 -457
  57. package/dist/lib/components/artifact/artifact-viewer-panel.component.js.map +0 -1
  58. package/dist/lib/components/delete-confirm/delete-confirm-modal.component.d.ts +0 -52
  59. package/dist/lib/components/delete-confirm/delete-confirm-modal.component.d.ts.map +0 -1
  60. package/dist/lib/components/delete-confirm/delete-confirm-modal.component.js +0 -276
  61. package/dist/lib/components/delete-confirm/delete-confirm-modal.component.js.map +0 -1
  62. package/dist/lib/services/conversation-state.service.d.ts +0 -160
  63. package/dist/lib/services/conversation-state.service.d.ts.map +0 -1
  64. package/dist/lib/services/conversation-state.service.js +0 -334
  65. package/dist/lib/services/conversation-state.service.js.map +0 -1
@@ -1,276 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "@angular/forms";
5
- import * as i3 from "@memberjunction/ng-shared-generic";
6
- const _forTrack0 = ($index, $item) => $item.ID;
7
- function DeleteConfirmModalComponent_Conditional_0_For_16_Template(rf, ctx) { if (rf & 1) {
8
- i0.ɵɵelementStart(0, "div", 10);
9
- i0.ɵɵelement(1, "i", 19);
10
- i0.ɵɵelementStart(2, "span", 20);
11
- i0.ɵɵtext(3);
12
- i0.ɵɵelementEnd()();
13
- } if (rf & 2) {
14
- const message_r3 = ctx.$implicit;
15
- const ctx_r1 = i0.ɵɵnextContext(2);
16
- i0.ɵɵadvance();
17
- i0.ɵɵproperty("ngClass", ctx_r1.getMessageIcon(message_r3));
18
- i0.ɵɵadvance(2);
19
- i0.ɵɵtextInterpolate(ctx_r1.truncateMessage(message_r3.Message));
20
- } }
21
- function DeleteConfirmModalComponent_Conditional_0_Conditional_17_Template(rf, ctx) { if (rf & 1) {
22
- const _r4 = i0.ɵɵgetCurrentView();
23
- i0.ɵɵelementStart(0, "div", 11)(1, "div", 21);
24
- i0.ɵɵelement(2, "i", 22);
25
- i0.ɵɵelementStart(3, "span");
26
- i0.ɵɵtext(4);
27
- i0.ɵɵelementEnd()();
28
- i0.ɵɵelementStart(5, "label", 23)(6, "input", 24);
29
- i0.ɵɵtwoWayListener("ngModelChange", function DeleteConfirmModalComponent_Conditional_0_Conditional_17_Template_input_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.keepArtifacts, $event) || (ctx_r1.keepArtifacts = $event); return i0.ɵɵresetView($event); });
30
- i0.ɵɵelementEnd();
31
- i0.ɵɵelementStart(7, "span");
32
- i0.ɵɵtext(8, "Keep artifacts (unlink from conversation)");
33
- i0.ɵɵelementEnd()()();
34
- } if (rf & 2) {
35
- const ctx_r1 = i0.ɵɵnextContext(2);
36
- i0.ɵɵadvance(4);
37
- i0.ɵɵtextInterpolate2("This will also delete ", ctx_r1.artifactsAffected.length, " ", ctx_r1.artifactsAffected.length === 1 ? "artifact" : "artifacts", "");
38
- i0.ɵɵadvance(2);
39
- i0.ɵɵtwoWayProperty("ngModel", ctx_r1.keepArtifacts);
40
- i0.ɵɵproperty("disabled", ctx_r1.isDeleting);
41
- } }
42
- function DeleteConfirmModalComponent_Conditional_0_Conditional_21_Template(rf, ctx) { if (rf & 1) {
43
- i0.ɵɵelementStart(0, "div", 14);
44
- i0.ɵɵelement(1, "mj-loading", 25);
45
- i0.ɵɵelementEnd();
46
- } }
47
- function DeleteConfirmModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
48
- const _r1 = i0.ɵɵgetCurrentView();
49
- i0.ɵɵelementStart(0, "div", 1);
50
- i0.ɵɵlistener("click", function DeleteConfirmModalComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
51
- i0.ɵɵelementStart(1, "div", 2);
52
- i0.ɵɵlistener("click", function DeleteConfirmModalComponent_Conditional_0_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
53
- i0.ɵɵelementStart(2, "div", 3)(3, "h3");
54
- i0.ɵɵelement(4, "i", 4);
55
- i0.ɵɵtext(5);
56
- i0.ɵɵelementEnd();
57
- i0.ɵɵelementStart(6, "button", 5);
58
- i0.ɵɵlistener("click", function DeleteConfirmModalComponent_Conditional_0_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
59
- i0.ɵɵelement(7, "i", 6);
60
- i0.ɵɵelementEnd()();
61
- i0.ɵɵelementStart(8, "div", 7)(9, "p", 8);
62
- i0.ɵɵtext(10, " You are about to delete ");
63
- i0.ɵɵelementStart(11, "strong");
64
- i0.ɵɵtext(12);
65
- i0.ɵɵelementEnd();
66
- i0.ɵɵtext(13);
67
- i0.ɵɵelementEnd();
68
- i0.ɵɵelementStart(14, "div", 9);
69
- i0.ɵɵrepeaterCreate(15, DeleteConfirmModalComponent_Conditional_0_For_16_Template, 4, 2, "div", 10, _forTrack0);
70
- i0.ɵɵelementEnd();
71
- i0.ɵɵtemplate(17, DeleteConfirmModalComponent_Conditional_0_Conditional_17_Template, 9, 4, "div", 11);
72
- i0.ɵɵelementStart(18, "div", 12);
73
- i0.ɵɵelement(19, "i", 13);
74
- i0.ɵɵtext(20, " This action cannot be undone. ");
75
- i0.ɵɵelementEnd();
76
- i0.ɵɵtemplate(21, DeleteConfirmModalComponent_Conditional_0_Conditional_21_Template, 2, 0, "div", 14);
77
- i0.ɵɵelementEnd();
78
- i0.ɵɵelementStart(22, "div", 15)(23, "button", 16);
79
- i0.ɵɵlistener("click", function DeleteConfirmModalComponent_Conditional_0_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
80
- i0.ɵɵtext(24, " Cancel ");
81
- i0.ɵɵelementEnd();
82
- i0.ɵɵelementStart(25, "button", 17);
83
- i0.ɵɵlistener("click", function DeleteConfirmModalComponent_Conditional_0_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onConfirm()); });
84
- i0.ɵɵelement(26, "i", 18);
85
- i0.ɵɵtext(27);
86
- i0.ɵɵelementEnd()()()();
87
- } if (rf & 2) {
88
- const ctx_r1 = i0.ɵɵnextContext();
89
- i0.ɵɵadvance(5);
90
- i0.ɵɵtextInterpolate1(" ", ctx_r1.dialogTitle, " ");
91
- i0.ɵɵadvance();
92
- i0.ɵɵproperty("disabled", ctx_r1.isDeleting);
93
- i0.ɵɵadvance(6);
94
- i0.ɵɵtextInterpolate(ctx_r1.messagesToDelete.length);
95
- i0.ɵɵadvance();
96
- i0.ɵɵtextInterpolate1(" ", ctx_r1.messagesToDelete.length === 1 ? "message" : "messages", ": ");
97
- i0.ɵɵadvance(2);
98
- i0.ɵɵrepeater(ctx_r1.messagesToDelete);
99
- i0.ɵɵadvance(2);
100
- i0.ɵɵconditional(ctx_r1.artifactsAffected.length > 0 ? 17 : -1);
101
- i0.ɵɵadvance(4);
102
- i0.ɵɵconditional(ctx_r1.isDeleting ? 21 : -1);
103
- i0.ɵɵadvance(2);
104
- i0.ɵɵproperty("disabled", ctx_r1.isDeleting);
105
- i0.ɵɵadvance(2);
106
- i0.ɵɵproperty("disabled", ctx_r1.isDeleting);
107
- i0.ɵɵadvance(2);
108
- i0.ɵɵtextInterpolate1(" Delete ", ctx_r1.messagesToDelete.length === 1 ? "Message" : "Messages", " ");
109
- } }
110
- /**
111
- * Confirmation modal for deleting conversation messages.
112
- * Shows a preview of messages to be deleted and affected artifacts.
113
- * Uses custom CSS modal pattern (not Kendo) to match conversation UI.
114
- */
115
- export class DeleteConfirmModalComponent {
116
- /** Whether the modal is visible */
117
- isVisible = false;
118
- /** Custom title for the dialog */
119
- title = 'Delete Messages';
120
- /** List of messages that will be deleted */
121
- messagesToDelete = [];
122
- /** List of artifacts affected by the deletion */
123
- artifactsAffected = [];
124
- /** Whether a delete operation is in progress */
125
- isDeleting = false;
126
- /** Emitted when user cancels the delete */
127
- cancelled = new EventEmitter();
128
- /** Emitted when user confirms the delete */
129
- confirmed = new EventEmitter();
130
- /** Whether to keep artifacts when deleting messages */
131
- keepArtifacts = false;
132
- /** Computed dialog title */
133
- get dialogTitle() {
134
- return this.title;
135
- }
136
- /**
137
- * Get icon class for a message based on sender type
138
- */
139
- getMessageIcon(message) {
140
- // Check if message is from user (Role lowercase === 'user')
141
- const isUser = message.Role?.trim().toLowerCase() === 'user';
142
- return isUser ? 'fa-user' : 'fa-robot';
143
- }
144
- /**
145
- * Truncate message text for preview
146
- */
147
- truncateMessage(text) {
148
- if (!text)
149
- return '(empty message)';
150
- const maxLength = 60;
151
- const cleaned = text.replace(/\n/g, ' ').trim();
152
- if (cleaned.length <= maxLength) {
153
- return `"${cleaned}"`;
154
- }
155
- return `"${cleaned.substring(0, maxLength)}..."`;
156
- }
157
- /**
158
- * Handle cancel button click
159
- */
160
- onCancel() {
161
- this.keepArtifacts = false;
162
- this.cancelled.emit();
163
- }
164
- /**
165
- * Handle confirm delete button click
166
- */
167
- onConfirm() {
168
- this.confirmed.emit({ keepArtifacts: this.keepArtifacts });
169
- }
170
- static ɵfac = function DeleteConfirmModalComponent_Factory(t) { return new (t || DeleteConfirmModalComponent)(); };
171
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DeleteConfirmModalComponent, selectors: [["mj-delete-confirm-modal"]], inputs: { isVisible: "isVisible", title: "title", messagesToDelete: "messagesToDelete", artifactsAffected: "artifactsAffected", isDeleting: "isDeleting" }, outputs: { cancelled: "cancelled", confirmed: "confirmed" }, decls: 1, vars: 1, consts: [[1, "modal-overlay"], [1, "modal-overlay", 3, "click"], [1, "modal-content", "delete-confirm-modal", 3, "click"], [1, "modal-header"], [1, "fas", "fa-exclamation-triangle", "warning-icon"], [1, "modal-close-btn", 3, "click", "disabled"], [1, "fas", "fa-times"], [1, "modal-body"], [1, "delete-summary"], [1, "message-preview-list"], [1, "message-preview-item"], [1, "artifacts-warning"], [1, "warning-message"], [1, "fa-solid", "fa-info-circle"], [1, "loading-indicator"], [1, "modal-footer"], [1, "btn", "btn-secondary", 3, "click", "disabled"], [1, "btn", "btn-danger", 3, "click", "disabled"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", 3, "ngClass"], [1, "message-text"], [1, "warning-header"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "keep-artifacts-checkbox"], ["type", "checkbox", 3, "ngModelChange", "ngModel", "disabled"], ["text", "Deleting messages...", "size", "small"]], template: function DeleteConfirmModalComponent_Template(rf, ctx) { if (rf & 1) {
172
- i0.ɵɵtemplate(0, DeleteConfirmModalComponent_Conditional_0_Template, 28, 9, "div", 0);
173
- } if (rf & 2) {
174
- i0.ɵɵconditional(ctx.isVisible ? 0 : -1);
175
- } }, dependencies: [i1.NgClass, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoadingComponent], styles: ["\n\n .modal-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.15s ease-out;\n }\n\n @keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n \n\n .modal-content.delete-confirm-modal[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n width: 500px;\n max-width: 90vw;\n max-height: 90vh;\n display: flex;\n flex-direction: column;\n animation: _ngcontent-%COMP%_slideIn 0.2s ease-out;\n }\n\n @keyframes _ngcontent-%COMP%_slideIn {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n \n\n .modal-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid #E5E7EB;\n }\n\n .modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #111827;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .modal-header[_ngcontent-%COMP%] .warning-icon[_ngcontent-%COMP%] {\n color: #F59E0B;\n }\n\n .modal-close-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: #6B7280;\n border-radius: 4px;\n transition: background 0.15s, color 0.15s;\n }\n\n .modal-close-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #F3F4F6;\n color: #111827;\n }\n\n .modal-close-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n \n\n .modal-body[_ngcontent-%COMP%] {\n padding: 20px;\n overflow-y: auto;\n }\n\n .delete-summary[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 14px;\n color: #374151;\n }\n\n .delete-summary[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: #DC2626;\n }\n\n \n\n .message-preview-list[_ngcontent-%COMP%] {\n max-height: 200px;\n overflow-y: auto;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n margin-bottom: 16px;\n }\n\n .message-preview-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-bottom: 1px solid #F3F4F6;\n font-size: 13px;\n }\n\n .message-preview-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n }\n\n .message-preview-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 20px;\n text-align: center;\n margin-top: 2px;\n }\n\n .message-preview-item[_ngcontent-%COMP%] i.fa-user[_ngcontent-%COMP%] {\n color: #6366F1;\n }\n\n .message-preview-item[_ngcontent-%COMP%] i.fa-robot[_ngcontent-%COMP%] {\n color: #10B981;\n }\n\n .message-text[_ngcontent-%COMP%] {\n color: #6B7280;\n line-height: 1.4;\n word-break: break-word;\n }\n\n \n\n .artifacts-warning[_ngcontent-%COMP%] {\n background: #FEF3C7;\n border: 1px solid #F59E0B;\n border-radius: 6px;\n padding: 12px;\n margin-bottom: 16px;\n }\n\n .warning-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 500;\n color: #92400E;\n margin-bottom: 10px;\n }\n\n .warning-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #F59E0B;\n }\n\n .keep-artifacts-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: #78350F;\n cursor: pointer;\n padding: 6px 8px;\n margin: -6px -8px;\n border-radius: 4px;\n transition: background 0.15s;\n }\n\n .keep-artifacts-checkbox[_ngcontent-%COMP%]:hover {\n background: rgba(245, 158, 11, 0.15);\n }\n\n .keep-artifacts-checkbox[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n cursor: pointer;\n width: 16px;\n height: 16px;\n }\n\n \n\n .warning-message[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: #6B7280;\n padding: 10px 12px;\n background: #F9FAFB;\n border-radius: 4px;\n }\n\n .warning-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #9CA3AF;\n }\n\n \n\n .loading-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 15px;\n padding: 12px;\n background: #f8f9fa;\n border-radius: 4px;\n color: #666;\n }\n\n \n\n .modal-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 16px 20px;\n border-top: 1px solid #E5E7EB;\n background: #F9FAFB;\n border-radius: 0 0 8px 8px;\n }\n\n \n\n .btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n\n .btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-secondary[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #D1D5DB;\n color: #374151;\n }\n\n .btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #F9FAFB;\n border-color: #9CA3AF;\n }\n\n .btn-danger[_ngcontent-%COMP%] {\n background: #DC2626;\n border: 1px solid #DC2626;\n color: white;\n }\n\n .btn-danger[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: #B91C1C;\n border-color: #B91C1C;\n }"] });
176
- }
177
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DeleteConfirmModalComponent, [{
178
- type: Component,
179
- args: [{ selector: 'mj-delete-confirm-modal', template: `
180
- @if (isVisible) {
181
- <div class="modal-overlay" (click)="onCancel()">
182
- <div class="modal-content delete-confirm-modal" (click)="$event.stopPropagation()">
183
- <!-- Header -->
184
- <div class="modal-header">
185
- <h3>
186
- <i class="fas fa-exclamation-triangle warning-icon"></i>
187
- {{ dialogTitle }}
188
- </h3>
189
- <button class="modal-close-btn" (click)="onCancel()" [disabled]="isDeleting">
190
- <i class="fas fa-times"></i>
191
- </button>
192
- </div>
193
-
194
- <!-- Body -->
195
- <div class="modal-body">
196
- <!-- Message count -->
197
- <p class="delete-summary">
198
- You are about to delete <strong>{{ messagesToDelete.length }}</strong>
199
- {{ messagesToDelete.length === 1 ? 'message' : 'messages' }}:
200
- </p>
201
-
202
- <!-- Message preview list -->
203
- <div class="message-preview-list">
204
- @for (message of messagesToDelete; track message.ID) {
205
- <div class="message-preview-item">
206
- <i class="fa-solid" [ngClass]="getMessageIcon(message)"></i>
207
- <span class="message-text">{{ truncateMessage(message.Message) }}</span>
208
- </div>
209
- }
210
- </div>
211
-
212
- <!-- Artifacts warning -->
213
- @if (artifactsAffected.length > 0) {
214
- <div class="artifacts-warning">
215
- <div class="warning-header">
216
- <i class="fa-solid fa-exclamation-triangle"></i>
217
- <span>This will also delete {{ artifactsAffected.length }} {{ artifactsAffected.length === 1 ? 'artifact' : 'artifacts' }}</span>
218
- </div>
219
-
220
- <label class="keep-artifacts-checkbox">
221
- <input
222
- type="checkbox"
223
- [(ngModel)]="keepArtifacts"
224
- [disabled]="isDeleting">
225
- <span>Keep artifacts (unlink from conversation)</span>
226
- </label>
227
- </div>
228
- }
229
-
230
- <!-- Warning message -->
231
- <div class="warning-message">
232
- <i class="fa-solid fa-info-circle"></i>
233
- This action cannot be undone.
234
- </div>
235
-
236
- <!-- Loading indicator -->
237
- @if (isDeleting) {
238
- <div class="loading-indicator">
239
- <mj-loading text="Deleting messages..." size="small"></mj-loading>
240
- </div>
241
- }
242
- </div>
243
-
244
- <!-- Footer -->
245
- <div class="modal-footer">
246
- <button class="btn btn-secondary" [disabled]="isDeleting" (click)="onCancel()">
247
- Cancel
248
- </button>
249
- <button class="btn btn-danger"
250
- [disabled]="isDeleting"
251
- (click)="onConfirm()">
252
- <i class="fa-solid fa-trash"></i>
253
- Delete {{ messagesToDelete.length === 1 ? 'Message' : 'Messages' }}
254
- </button>
255
- </div>
256
- </div>
257
- </div>
258
- }
259
- `, styles: ["\n /* Modal overlay - matches conversation-chat-area pattern */\n .modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n animation: fadeIn 0.15s ease-out;\n }\n\n @keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n }\n\n /* Modal content container */\n .modal-content.delete-confirm-modal {\n background: white;\n border-radius: 8px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n width: 500px;\n max-width: 90vw;\n max-height: 90vh;\n display: flex;\n flex-direction: column;\n animation: slideIn 0.2s ease-out;\n }\n\n @keyframes slideIn {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n /* Modal header */\n .modal-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid #E5E7EB;\n }\n\n .modal-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #111827;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .modal-header .warning-icon {\n color: #F59E0B;\n }\n\n .modal-close-btn {\n background: none;\n border: none;\n padding: 8px;\n cursor: pointer;\n color: #6B7280;\n border-radius: 4px;\n transition: background 0.15s, color 0.15s;\n }\n\n .modal-close-btn:hover:not(:disabled) {\n background: #F3F4F6;\n color: #111827;\n }\n\n .modal-close-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* Modal body */\n .modal-body {\n padding: 20px;\n overflow-y: auto;\n }\n\n .delete-summary {\n margin: 0 0 16px 0;\n font-size: 14px;\n color: #374151;\n }\n\n .delete-summary strong {\n color: #DC2626;\n }\n\n /* Message preview list */\n .message-preview-list {\n max-height: 200px;\n overflow-y: auto;\n border: 1px solid #E5E7EB;\n border-radius: 6px;\n margin-bottom: 16px;\n }\n\n .message-preview-item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-bottom: 1px solid #F3F4F6;\n font-size: 13px;\n }\n\n .message-preview-item:last-child {\n border-bottom: none;\n }\n\n .message-preview-item i {\n flex-shrink: 0;\n width: 20px;\n text-align: center;\n margin-top: 2px;\n }\n\n .message-preview-item i.fa-user {\n color: #6366F1;\n }\n\n .message-preview-item i.fa-robot {\n color: #10B981;\n }\n\n .message-text {\n color: #6B7280;\n line-height: 1.4;\n word-break: break-word;\n }\n\n /* Artifacts warning section */\n .artifacts-warning {\n background: #FEF3C7;\n border: 1px solid #F59E0B;\n border-radius: 6px;\n padding: 12px;\n margin-bottom: 16px;\n }\n\n .warning-header {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 500;\n color: #92400E;\n margin-bottom: 10px;\n }\n\n .warning-header i {\n color: #F59E0B;\n }\n\n .keep-artifacts-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: #78350F;\n cursor: pointer;\n padding: 6px 8px;\n margin: -6px -8px;\n border-radius: 4px;\n transition: background 0.15s;\n }\n\n .keep-artifacts-checkbox:hover {\n background: rgba(245, 158, 11, 0.15);\n }\n\n .keep-artifacts-checkbox input[type=\"checkbox\"] {\n cursor: pointer;\n width: 16px;\n height: 16px;\n }\n\n /* Warning message */\n .warning-message {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: #6B7280;\n padding: 10px 12px;\n background: #F9FAFB;\n border-radius: 4px;\n }\n\n .warning-message i {\n color: #9CA3AF;\n }\n\n /* Loading indicator */\n .loading-indicator {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 15px;\n padding: 12px;\n background: #f8f9fa;\n border-radius: 4px;\n color: #666;\n }\n\n /* Modal footer */\n .modal-footer {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n padding: 16px 20px;\n border-top: 1px solid #E5E7EB;\n background: #F9FAFB;\n border-radius: 0 0 8px 8px;\n }\n\n /* Button styles */\n .btn {\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background 0.15s, border-color 0.15s;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n }\n\n .btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n .btn-secondary {\n background: white;\n border: 1px solid #D1D5DB;\n color: #374151;\n }\n\n .btn-secondary:hover:not(:disabled) {\n background: #F9FAFB;\n border-color: #9CA3AF;\n }\n\n .btn-danger {\n background: #DC2626;\n border: 1px solid #DC2626;\n color: white;\n }\n\n .btn-danger:hover:not(:disabled) {\n background: #B91C1C;\n border-color: #B91C1C;\n }\n "] }]
260
- }], null, { isVisible: [{
261
- type: Input
262
- }], title: [{
263
- type: Input
264
- }], messagesToDelete: [{
265
- type: Input
266
- }], artifactsAffected: [{
267
- type: Input
268
- }], isDeleting: [{
269
- type: Input
270
- }], cancelled: [{
271
- type: Output
272
- }], confirmed: [{
273
- type: Output
274
- }] }); })();
275
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DeleteConfirmModalComponent, { className: "DeleteConfirmModalComponent" }); })();
276
- //# sourceMappingURL=delete-confirm-modal.component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete-confirm-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/delete-confirm/delete-confirm-modal.component.ts"],"names":[],"mappings":"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"}
@@ -1,160 +0,0 @@
1
- import { ConversationEntity } from '@memberjunction/core-entities';
2
- import { UserInfo } from '@memberjunction/core';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Simplified state management for conversations
6
- * Uses simple arrays with Angular change detection instead of complex observables
7
- * This prevents synchronization issues when updating conversation properties
8
- */
9
- export declare class ConversationStateService {
10
- conversations: ConversationEntity[];
11
- private _activeConversationId;
12
- searchQuery: string;
13
- isLoading: boolean;
14
- activeThreadId: string | null;
15
- private _activeConversationId$;
16
- readonly activeConversationId$: import("rxjs").Observable<string | null>;
17
- pendingMessageToSend: string | null;
18
- isNewUnsavedConversation: boolean;
19
- pendingArtifactId: string | null;
20
- pendingArtifactVersionNumber: number | null;
21
- constructor();
22
- /**
23
- * Gets the active conversation ID
24
- */
25
- get activeConversationId(): string | null;
26
- /**
27
- * Sets the active conversation ID and emits change event
28
- */
29
- set activeConversationId(value: string | null);
30
- /**
31
- * Gets the active conversation object
32
- */
33
- get activeConversation(): ConversationEntity | null;
34
- /**
35
- * Gets filtered conversations based on search query
36
- */
37
- get filteredConversations(): ConversationEntity[];
38
- /**
39
- * Gets pinned conversations
40
- */
41
- get pinnedConversations(): ConversationEntity[];
42
- /**
43
- * Sets the active conversation
44
- * @param id The conversation ID to activate (or null to clear)
45
- */
46
- setActiveConversation(id: string | null): void;
47
- /**
48
- * Initiates a new unsaved conversation (doesn't create DB record yet)
49
- * This shows the welcome screen and delays DB creation until first message
50
- */
51
- startNewConversation(): void;
52
- /**
53
- * Clears the new unsaved conversation state
54
- * Called when the conversation is actually created or cancelled
55
- */
56
- clearNewConversationState(): void;
57
- /**
58
- * Gets the current active conversation ID
59
- */
60
- getActiveConversationId(): string | null;
61
- /**
62
- * Adds a conversation to the list
63
- * @param conversation The conversation to add
64
- */
65
- addConversation(conversation: ConversationEntity): void;
66
- /**
67
- * Updates a conversation in the list by directly modifying the entity object
68
- * Angular change detection will pick up the changes automatically
69
- * @param id The conversation ID
70
- * @param updates The fields to update
71
- */
72
- updateConversationInPlace(id: string, updates: Partial<ConversationEntity>): void;
73
- /**
74
- * Removes a conversation from the list
75
- * @param id The conversation ID to remove
76
- */
77
- removeConversation(id: string): void;
78
- /**
79
- * Sets the search query
80
- * @param query The search query string
81
- */
82
- setSearchQuery(query: string): void;
83
- /**
84
- * Clears the search query
85
- */
86
- clearSearchQuery(): void;
87
- /**
88
- * Loads conversations from the database
89
- * @param environmentId The environment ID to filter by
90
- * @param currentUser The current user context
91
- */
92
- loadConversations(environmentId: string, currentUser: UserInfo): Promise<void>;
93
- /**
94
- * Creates a new conversation
95
- * @param name The conversation name
96
- * @param environmentId The environment ID
97
- * @param currentUser The current user context
98
- * @param description Optional description
99
- * @param projectId Optional project ID
100
- * @returns The created conversation entity
101
- */
102
- createConversation(name: string, environmentId: string, currentUser: UserInfo, description?: string, projectId?: string): Promise<ConversationEntity>;
103
- /**
104
- * Deletes a conversation
105
- * @param id The conversation ID
106
- * @param currentUser The current user context
107
- * @returns True if successful
108
- */
109
- deleteConversation(id: string, currentUser: UserInfo): Promise<boolean>;
110
- /**
111
- * Deletes multiple conversations in a batch operation
112
- * @param ids - Array of conversation IDs to delete
113
- * @param currentUser - Current user info
114
- * @returns Object with successful deletions and failed deletions with error info
115
- */
116
- deleteMultipleConversations(ids: string[], currentUser: UserInfo): Promise<{
117
- successful: string[];
118
- failed: Array<{
119
- id: string;
120
- name: string;
121
- error: string;
122
- }>;
123
- }>;
124
- /**
125
- * Updates a conversation - saves to database AND updates in-place in the array
126
- * @param id The conversation ID
127
- * @param updates The fields to update
128
- * @param currentUser The current user context
129
- * @returns True if successful
130
- */
131
- saveConversation(id: string, updates: Partial<ConversationEntity>, currentUser: UserInfo): Promise<boolean>;
132
- /**
133
- * Toggles the pinned status of a conversation
134
- * @param id The conversation ID
135
- * @param currentUser The current user context
136
- */
137
- togglePin(id: string, currentUser: UserInfo): Promise<void>;
138
- /**
139
- * Archives a conversation
140
- * @param id The conversation ID
141
- * @param currentUser The current user context
142
- */
143
- archiveConversation(id: string, currentUser: UserInfo): Promise<void>;
144
- /**
145
- * Opens a thread panel for a specific message
146
- * @param messageId The parent message ID
147
- */
148
- openThread(messageId: string): void;
149
- /**
150
- * Closes the currently open thread panel
151
- */
152
- closeThread(): void;
153
- /**
154
- * Gets the currently active thread ID
155
- */
156
- getActiveThreadId(): string | null;
157
- static ɵfac: i0.ɵɵFactoryDeclaration<ConversationStateService, never>;
158
- static ɵprov: i0.ɵɵInjectableDeclaration<ConversationStateService>;
159
- }
160
- //# sourceMappingURL=conversation-state.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"conversation-state.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/conversation-state.service.ts"],"names":[],"mappings":"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"}