@memberjunction/ng-conversations 2.104.0 → 2.106.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/components/collection/collection-view.component.d.ts +5 -1
- package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
- package/dist/lib/components/collection/collection-view.component.js +53 -11
- package/dist/lib/components/collection/collection-view.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +53 -13
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +455 -289
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts +9 -1
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-list.component.js +258 -71
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.d.ts +6 -0
- package/dist/lib/components/mention/mention-dropdown.component.d.ts.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.js +35 -13
- package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +49 -12
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +579 -221
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +16 -5
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +136 -64
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +11 -5
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +48 -9
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.js +24 -9
- package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
- package/dist/lib/components/task/tasks-full-view.component.d.ts +47 -0
- package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -0
- package/dist/lib/components/task/tasks-full-view.component.js +368 -0
- package/dist/lib/components/task/tasks-full-view.component.js.map +1 -0
- package/dist/lib/components/tasks/task-widget.component.d.ts +29 -0
- package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -0
- package/dist/lib/components/tasks/task-widget.component.js +385 -0
- package/dist/lib/components/tasks/task-widget.component.js.map +1 -0
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +22 -8
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
- package/dist/lib/components/tasks/tasks-dropdown.component.js +195 -99
- package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
- package/dist/lib/components/thread/thread-panel.component.d.ts +3 -1
- package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
- package/dist/lib/components/thread/thread-panel.component.js +14 -14
- package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +43 -4
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +288 -46
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +40 -46
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +28 -42
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/models/conversation-state.model.d.ts +29 -1
- package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.d.ts +6 -5
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
- package/dist/lib/services/conversation-agent.service.js +18 -19
- package/dist/lib/services/conversation-agent.service.js.map +1 -1
- package/dist/lib/services/data-cache.service.d.ts +96 -0
- package/dist/lib/services/data-cache.service.d.ts.map +1 -0
- package/dist/lib/services/data-cache.service.js +203 -0
- package/dist/lib/services/data-cache.service.js.map +1 -0
- package/dist/public-api.d.ts +3 -6
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -6
- package/dist/public-api.js.map +1 -1
- package/package.json +12 -10
- package/dist/lib/components/artifact/artifact-panel.component.d.ts +0 -22
- package/dist/lib/components/artifact/artifact-panel.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/artifact-panel.component.js +0 -237
- package/dist/lib/components/artifact/artifact-panel.component.js.map +0 -1
- package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts +0 -39
- package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/artifact-upload-modal.component.js +0 -384
- package/dist/lib/components/artifact/artifact-upload-modal.component.js.map +0 -1
- package/dist/lib/components/artifact/artifact-version-history.component.d.ts +0 -28
- package/dist/lib/components/artifact/artifact-version-history.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/artifact-version-history.component.js +0 -280
- package/dist/lib/components/artifact/artifact-version-history.component.js.map +0 -1
- package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts +0 -22
- package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/artifact-viewer-panel.component.js +0 -182
- package/dist/lib/components/artifact/artifact-viewer-panel.component.js.map +0 -1
- package/dist/lib/components/artifact/artifact-viewer.component.d.ts +0 -27
- package/dist/lib/components/artifact/artifact-viewer.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/artifact-viewer.component.js +0 -266
- package/dist/lib/components/artifact/artifact-viewer.component.js.map +0 -1
- package/dist/lib/components/artifact/inline-artifact.component.d.ts +0 -46
- package/dist/lib/components/artifact/inline-artifact.component.d.ts.map +0 -1
- package/dist/lib/components/artifact/inline-artifact.component.js +0 -447
- package/dist/lib/components/artifact/inline-artifact.component.js.map +0 -1
- package/dist/lib/components/task/task-form-modal.component.d.ts +0 -42
- package/dist/lib/components/task/task-form-modal.component.d.ts.map +0 -1
- package/dist/lib/components/task/task-form-modal.component.js +0 -329
- package/dist/lib/components/task/task-form-modal.component.js.map +0 -1
- package/dist/lib/components/task/task-item.component.d.ts +0 -22
- package/dist/lib/components/task/task-item.component.d.ts.map +0 -1
- package/dist/lib/components/task/task-item.component.js +0 -234
- package/dist/lib/components/task/task-item.component.js.map +0 -1
- package/dist/lib/components/task/task-list.component.d.ts +0 -32
- package/dist/lib/components/task/task-list.component.d.ts.map +0 -1
- package/dist/lib/components/task/task-list.component.js +0 -290
- package/dist/lib/components/task/task-list.component.js.map +0 -1
|
@@ -2,26 +2,27 @@ import { Component, Input, Output, EventEmitter, HostListener } from '@angular/c
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "@angular/common";
|
|
4
4
|
function MentionDropdownComponent_div_0_div_1_div_1_i_2_Template(rf, ctx) { if (rf & 1) {
|
|
5
|
-
i0.ɵɵelement(0, "i");
|
|
5
|
+
i0.ɵɵelement(0, "i", 15);
|
|
6
6
|
} if (rf & 2) {
|
|
7
7
|
const suggestion_r2 = i0.ɵɵnextContext().$implicit;
|
|
8
|
-
i0.ɵɵ
|
|
8
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
9
|
+
i0.ɵɵproperty("ngClass", ctx_r2.getIconClasses(suggestion_r2.icon));
|
|
9
10
|
} }
|
|
10
11
|
function MentionDropdownComponent_div_0_div_1_div_1_i_3_Template(rf, ctx) { if (rf & 1) {
|
|
11
|
-
i0.ɵɵelement(0, "i",
|
|
12
|
+
i0.ɵɵelement(0, "i", 16);
|
|
12
13
|
} }
|
|
13
14
|
function MentionDropdownComponent_div_0_div_1_div_1_span_6_Template(rf, ctx) { if (rf & 1) {
|
|
14
|
-
i0.ɵɵelementStart(0, "span",
|
|
15
|
+
i0.ɵɵelementStart(0, "span", 17);
|
|
15
16
|
i0.ɵɵtext(1, "Agent");
|
|
16
17
|
i0.ɵɵelementEnd();
|
|
17
18
|
} }
|
|
18
19
|
function MentionDropdownComponent_div_0_div_1_div_1_span_7_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
-
i0.ɵɵelementStart(0, "span",
|
|
20
|
+
i0.ɵɵelementStart(0, "span", 18);
|
|
20
21
|
i0.ɵɵtext(1, "User");
|
|
21
22
|
i0.ɵɵelementEnd();
|
|
22
23
|
} }
|
|
23
24
|
function MentionDropdownComponent_div_0_div_1_div_1_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
-
i0.ɵɵelementStart(0, "div",
|
|
25
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
25
26
|
i0.ɵɵtext(1);
|
|
26
27
|
i0.ɵɵelementEnd();
|
|
27
28
|
} if (rf & 2) {
|
|
@@ -34,7 +35,7 @@ function MentionDropdownComponent_div_0_div_1_div_1_Template(rf, ctx) { if (rf &
|
|
|
34
35
|
i0.ɵɵelementStart(0, "div", 6);
|
|
35
36
|
i0.ɵɵlistener("click", function MentionDropdownComponent_div_0_div_1_div_1_Template_div_click_0_listener() { const suggestion_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.selectSuggestion(suggestion_r2)); })("mouseenter", function MentionDropdownComponent_div_0_div_1_div_1_Template_div_mouseenter_0_listener() { const i_r4 = i0.ɵɵrestoreView(_r1).index; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.selectedIndex = i_r4); });
|
|
36
37
|
i0.ɵɵelementStart(1, "div", 7);
|
|
37
|
-
i0.ɵɵtemplate(2, MentionDropdownComponent_div_0_div_1_div_1_i_2_Template, 1,
|
|
38
|
+
i0.ɵɵtemplate(2, MentionDropdownComponent_div_0_div_1_div_1_i_2_Template, 1, 1, "i", 8)(3, MentionDropdownComponent_div_0_div_1_div_1_i_3_Template, 1, 0, "i", 9);
|
|
38
39
|
i0.ɵɵelementEnd();
|
|
39
40
|
i0.ɵɵelementStart(4, "div", 10)(5, "div", 11);
|
|
40
41
|
i0.ɵɵtemplate(6, MentionDropdownComponent_div_0_div_1_div_1_span_6_Template, 2, 0, "span", 12)(7, MentionDropdownComponent_div_0_div_1_div_1_span_7_Template, 2, 0, "span", 13);
|
|
@@ -70,8 +71,8 @@ function MentionDropdownComponent_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
|
70
71
|
i0.ɵɵproperty("ngForOf", ctx_r2.suggestions)("ngForTrackBy", ctx_r2.trackBySuggestion);
|
|
71
72
|
} }
|
|
72
73
|
function MentionDropdownComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
73
|
-
i0.ɵɵelementStart(0, "div",
|
|
74
|
-
i0.ɵɵelement(1, "i",
|
|
74
|
+
i0.ɵɵelementStart(0, "div", 20);
|
|
75
|
+
i0.ɵɵelement(1, "i", 21);
|
|
75
76
|
i0.ɵɵelementStart(2, "p");
|
|
76
77
|
i0.ɵɵtext(3, "No agents or users available");
|
|
77
78
|
i0.ɵɵelementEnd()();
|
|
@@ -162,18 +163,39 @@ export class MentionDropdownComponent {
|
|
|
162
163
|
trackBySuggestion(index, item) {
|
|
163
164
|
return item.id;
|
|
164
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Get icon classes - supports both Font Awesome and custom CSS classes
|
|
168
|
+
* Font Awesome icons start with 'fa-' (e.g., 'fa-solid fa-robot')
|
|
169
|
+
* Custom icons use their own prefix (e.g., 'mj-icon-skip', 'acme-icon-custom')
|
|
170
|
+
*/
|
|
171
|
+
getIconClasses(iconClass) {
|
|
172
|
+
if (!iconClass) {
|
|
173
|
+
return 'fa-solid fa-robot'; // Default fallback
|
|
174
|
+
}
|
|
175
|
+
// If it's a Font Awesome icon (contains 'fa-'), add fa-solid if not present
|
|
176
|
+
if (iconClass.includes('fa-')) {
|
|
177
|
+
// If it already has fa-solid, fa-regular, etc., use as-is
|
|
178
|
+
if (iconClass.match(/\b(fa-solid|fa-regular|fa-light|fa-brands)\b/)) {
|
|
179
|
+
return iconClass;
|
|
180
|
+
}
|
|
181
|
+
// Otherwise add fa-solid prefix
|
|
182
|
+
return `fa-solid ${iconClass}`;
|
|
183
|
+
}
|
|
184
|
+
// For custom icons (mj-icon-*, acme-icon-*, etc.), use as-is
|
|
185
|
+
return iconClass;
|
|
186
|
+
}
|
|
165
187
|
static ɵfac = function MentionDropdownComponent_Factory(t) { return new (t || MentionDropdownComponent)(); };
|
|
166
188
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MentionDropdownComponent, selectors: [["mj-mention-dropdown"]], hostBindings: function MentionDropdownComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
167
189
|
i0.ɵɵlistener("keydown", function MentionDropdownComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyDown($event); }, false, i0.ɵɵresolveDocument);
|
|
168
|
-
} }, inputs: { suggestions: "suggestions", position: "position", visible: "visible", showAbove: "showAbove" }, outputs: { suggestionSelected: "suggestionSelected", closed: "closed" }, decls: 1, vars: 1, consts: [["class", "mention-dropdown", 3, "show-above", "top", "left", 4, "ngIf"], [1, "mention-dropdown"], ["class", "mention-suggestions", 4, "ngIf"], ["class", "mention-empty-state", 4, "ngIf"], [1, "mention-suggestions"], ["class", "mention-suggestion", 3, "selected", "click", "mouseenter", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "mention-suggestion", 3, "click", "mouseenter"], [1, "suggestion-icon"], [3, "
|
|
190
|
+
} }, inputs: { suggestions: "suggestions", position: "position", visible: "visible", showAbove: "showAbove" }, outputs: { suggestionSelected: "suggestionSelected", closed: "closed" }, decls: 1, vars: 1, consts: [["class", "mention-dropdown", 3, "show-above", "top", "left", 4, "ngIf"], [1, "mention-dropdown"], ["class", "mention-suggestions", 4, "ngIf"], ["class", "mention-empty-state", 4, "ngIf"], [1, "mention-suggestions"], ["class", "mention-suggestion", 3, "selected", "click", "mouseenter", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "mention-suggestion", 3, "click", "mouseenter"], [1, "suggestion-icon"], [3, "ngClass", 4, "ngIf"], ["class", "fa-solid fa-user", 4, "ngIf"], [1, "suggestion-content"], [1, "suggestion-name"], ["class", "suggestion-type-badge", 4, "ngIf"], ["class", "suggestion-type-badge user", 4, "ngIf"], ["class", "suggestion-description", 4, "ngIf"], [3, "ngClass"], [1, "fa-solid", "fa-user"], [1, "suggestion-type-badge"], [1, "suggestion-type-badge", "user"], [1, "suggestion-description"], [1, "mention-empty-state"], [1, "fa-solid", "fa-robot"]], template: function MentionDropdownComponent_Template(rf, ctx) { if (rf & 1) {
|
|
169
191
|
i0.ɵɵtemplate(0, MentionDropdownComponent_div_0_Template, 3, 8, "div", 0);
|
|
170
192
|
} if (rf & 2) {
|
|
171
193
|
i0.ɵɵproperty("ngIf", ctx.visible);
|
|
172
|
-
} }, dependencies: [i1.NgForOf, i1.NgIf], styles: [".mention-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n z-index: 10000;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 280px;\n max-width: 400px;\n max-height: 300px;\n overflow-y: auto;\n transform-origin: top left; \n\n}\n\n.mention-dropdown.show-above[_ngcontent-%COMP%] {\n transform: translateY(-100%); \n\n transform-origin: bottom left; \n\n}\n\n.mention-suggestions[_ngcontent-%COMP%] {\n padding: 4px 0;\n}\n\n.mention-suggestion[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.mention-suggestion[_ngcontent-%COMP%]:hover, \n.mention-suggestion.selected[_ngcontent-%COMP%] {\n background-color: #f5f5f5;\n}\n\n.suggestion-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n border-radius: 6px;\n color: white;\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.suggestion-icon[_ngcontent-%COMP%] i.fa-user[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.suggestion-name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 14px;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.suggestion-type-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 6px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 3px;\n}\n\n.suggestion-type-badge.user[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #666;\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n}\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 8px;\n}\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 8px;\n}\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n}\n\n\n\n.mention-empty-state[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: #9CA3AF;\n}\n\n.mention-empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n.mention-empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n font-weight: 500;\n}"] });
|
|
194
|
+
} }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf], styles: [".mention-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n z-index: 10000;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 280px;\n max-width: 400px;\n max-height: 300px;\n overflow-y: auto;\n transform-origin: top left; \n\n}\n\n.mention-dropdown.show-above[_ngcontent-%COMP%] {\n transform: translateY(-100%); \n\n transform-origin: bottom left; \n\n}\n\n.mention-suggestions[_ngcontent-%COMP%] {\n padding: 4px 0;\n}\n\n.mention-suggestion[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.mention-suggestion[_ngcontent-%COMP%]:hover, \n.mention-suggestion.selected[_ngcontent-%COMP%] {\n background-color: #f5f5f5;\n}\n\n.suggestion-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n border-radius: 6px;\n color: white;\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.suggestion-icon[_ngcontent-%COMP%] i.fa-user[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.suggestion-name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 14px;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.suggestion-type-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 6px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 3px;\n}\n\n.suggestion-type-badge.user[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #666;\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n}\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 8px;\n}\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 8px;\n}\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n}\n\n\n\n.mention-empty-state[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: #9CA3AF;\n}\n\n.mention-empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n.mention-empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n font-weight: 500;\n}", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n[class^=\"mj-icon-\"][_ngcontent-%COMP%], \n[class*=\" mj-icon-\"][_ngcontent-%COMP%] {\n font-style: normal;\n font-variant: normal;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n display: inline-block;\n font-size: inherit;\n line-height: 1;\n}\n\n\n\n\n\n\n\n\n\n\n\n.mj-icon-skip[_ngcontent-%COMP%] {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n \n\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 101.89918457031249 96.83947368421053'%3E%3Cg transform='translate(-0.1288232421875,-0.0)'%3E%3Cpath d='M93.85,41.56c-.84,0-1.62.2-2.37.55-3-4.35-7.49-8.12-13.04-11.04l.04-7.18v-14.44h-10.24v17.6c-1.52-.43-3.07-.8-4.67-1.11V0h-10.24v24.72s-.09,0-.14,0h-4.38s-.1,0-.14,0V7.3h-10.24v18.62c-1.6.32-3.15.69-4.67,1.11v-11.67h-10.24v6.09l.04,9.6c-5.55,2.92-10.04,6.7-13.04,11.04-.75-.35-1.53-.55-2.37-.55-4.5,0-8.14,5.61-8.14,12.51s3.64,12.53,8.14,12.53c.58,0,1.14-.12,1.67-.29,4.1,6.62,11.54,12.06,20.98,15.28l.79.13v7.05c0,2.97,1.45,5.58,3.87,6.99,1.18.69,2.5,1.04,3.85,1.03,1.4,0,2.83-.37,4.15-1.12l7.54-4.29,7.56,4.3c1.31.74,2.73,1.12,4.13,1.12s2.67-.35,3.85-1.04c2.42-1.41,3.86-4.02,3.86-6.98v-7.05l.79-.13c9.44-3.22,16.89-8.66,20.98-15.28.54.17,1.09.29,1.68.29,4.5,0,8.14-5.61,8.14-12.53s-3.63-12.51-8.14-12.51' fill='%23AAAAAA'/%3E%3Cpath d='M86.69,50.87c0-12.22-13.6-19.1-28.94-20.66-4.48-.47-9.19-.54-13.52,0-15.34,1.53-28.93,8.41-28.93,20.66,0,8.55,5.7,15.55,12.68,15.55h7.94c3.05,2.5,6.93,4.1,11.08,4.71,2.65.4,5.44.46,8.01,0,4.15-.6,8.05-2.2,11.1-4.71h7.92c6.97,0,12.68-7,12.68-15.55' fill='white' opacity='0.9'/%3E%3Cpath d='M57.83,55.82c-1.19,2.58-3.8,4.35-6.84,4.35s-5.65-1.77-6.84-4.35h13.68Z' fill='%23AAAAAA'/%3E%3Cpath d='M32.52,41.14c1.74,0,3.18,2.13,3.18,4.76s-1.44,4.74-3.18,4.74-3.16-2.13-3.16-4.74,1.41-4.76,3.16-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M69.46,41.14c1.74,0,3.16,2.13,3.16,4.76s-1.41,4.74-3.16,4.74-3.18-2.13-3.18-4.74,1.41-4.76,3.18-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M63.91,76.15c-.82-.48-1.84-.43-2.8.12l-10.13,5.75-10.11-5.75c-.96-.55-1.98-.59-2.8-.12-.82.47-1.29,1.38-1.29,2.49v10.12c0,1.11.47,2.02,1.28,2.49.38.22.8.33,1.24.33.51,0,1.05-.15,1.57-.44l10.12-5.75,10.11,5.75c.52.29,1.05.44,1.56.44.44,0,.86-.11,1.24-.33.81-.48,1.28-1.38,1.28-2.49v-10.12c0-1.11-.47-2.02-1.28-2.49' fill='white' opacity='0.9'/%3E%3C/g%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n\n\n\n\n\n.mj-icon-skip-lightning[_ngcontent-%COMP%]::before {\n content: \"\u26A1\";\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n font-size: 1.1em;\n}\n\n\n\n\n\n\n.mj-icon-skip-brain[_ngcontent-%COMP%]::before {\n content: \"\uD83E\uDDE0\";\n font-size: 1.2em;\n}\n\n\n\n\n\n\n\n\n\n\n.mj-icon-data-analyst[_ngcontent-%COMP%]::before {\n content: \"\uD83D\uDCCA\";\n font-size: 1.1em;\n}\n\n\n\n\n\n.mj-icon-api[_ngcontent-%COMP%]::before {\n content: \"\uD83D\uDD0C\";\n font-size: 1.1em;\n}\n\n\n\n\n\n.mj-icon-processing[_ngcontent-%COMP%]::before {\n content: \"\u2699\uFE0F\";\n display: inline-block;\n animation: _ngcontent-%COMP%_rotate-icon 2s linear infinite;\n}\n\n@keyframes _ngcontent-%COMP%_rotate-icon {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n\n\n\n\n\n.mj-icon-monogram-s[_ngcontent-%COMP%]::before {\n content: \"S\";\n font-weight: 800;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 1.1em;\n color: #667eea;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"] });
|
|
173
195
|
}
|
|
174
196
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MentionDropdownComponent, [{
|
|
175
197
|
type: Component,
|
|
176
|
-
args: [{ selector: 'mj-mention-dropdown', template: "<div\n *ngIf=\"visible\"\n class=\"mention-dropdown\"\n [class.show-above]=\"showAbove\"\n [style.top.px]=\"position.top\"\n [style.left.px]=\"position.left\"\n>\n <!-- Suggestions List -->\n <div class=\"mention-suggestions\" *ngIf=\"suggestions.length > 0\">\n <div\n *ngFor=\"let suggestion of suggestions; let i = index; trackBy: trackBySuggestion\"\n class=\"mention-suggestion\"\n [class.selected]=\"i === selectedIndex\"\n (click)=\"selectSuggestion(suggestion)\"\n (mouseenter)=\"selectedIndex = i\"\n >\n <div class=\"suggestion-icon\">\n <i\n *ngIf=\"suggestion.type === 'agent' && suggestion.icon\"\n class=\"fa-solid {{ suggestion.icon }}\"\n ></i>\n <i\n *ngIf=\"suggestion.type === 'user'\"\n class=\"fa-solid fa-user\"\n ></i>\n </div>\n <div class=\"suggestion-content\">\n <div class=\"suggestion-name\">\n <span class=\"suggestion-type-badge\" *ngIf=\"suggestion.type === 'agent'\">Agent</span>\n <span class=\"suggestion-type-badge user\" *ngIf=\"suggestion.type === 'user'\">User</span>\n {{ suggestion.displayName }}\n </div>\n <div class=\"suggestion-description\" *ngIf=\"suggestion.description\">\n {{ suggestion.description }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Empty State -->\n <div class=\"mention-empty-state\" *ngIf=\"suggestions.length === 0\">\n <i class=\"fa-solid fa-robot\"></i>\n <p>No agents or users available</p>\n </div>\n</div>\n", styles: [".mention-dropdown {\n position: absolute;\n z-index: 10000;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 280px;\n max-width: 400px;\n max-height: 300px;\n overflow-y: auto;\n transform-origin: top left; /* Default: grows downward from top-left */\n}\n\n.mention-dropdown.show-above {\n transform: translateY(-100%); /* Shift entire dropdown up by its own height */\n transform-origin: bottom left; /* Grows upward from bottom-left */\n}\n\n.mention-suggestions {\n padding: 4px 0;\n}\n\n.mention-suggestion {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.mention-suggestion:hover,\n.mention-suggestion.selected {\n background-color: #f5f5f5;\n}\n\n.suggestion-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n border-radius: 6px;\n color: white;\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.suggestion-icon i.fa-user {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-content {\n flex: 1;\n min-width: 0;\n}\n\n.suggestion-name {\n font-weight: 500;\n font-size: 14px;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.suggestion-type-badge {\n display: inline-block;\n padding: 2px 6px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 3px;\n}\n\n.suggestion-type-badge.user {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-description {\n font-size: 12px;\n color: #666;\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Scrollbar styling */\n.mention-dropdown::-webkit-scrollbar {\n width: 8px;\n}\n\n.mention-dropdown::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 8px;\n}\n\n.mention-dropdown::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 8px;\n}\n\n.mention-dropdown::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n}\n\n/* Empty State */\n.mention-empty-state {\n padding: 24px;\n text-align: center;\n color: #9CA3AF;\n}\n\n.mention-empty-state i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n.mention-empty-state p {\n margin: 0;\n font-size: 13px;\n font-weight: 500;\n}\n"] }]
|
|
198
|
+
args: [{ selector: 'mj-mention-dropdown', template: "<div\n *ngIf=\"visible\"\n class=\"mention-dropdown\"\n [class.show-above]=\"showAbove\"\n [style.top.px]=\"position.top\"\n [style.left.px]=\"position.left\"\n>\n <!-- Suggestions List -->\n <div class=\"mention-suggestions\" *ngIf=\"suggestions.length > 0\">\n <div\n *ngFor=\"let suggestion of suggestions; let i = index; trackBy: trackBySuggestion\"\n class=\"mention-suggestion\"\n [class.selected]=\"i === selectedIndex\"\n (click)=\"selectSuggestion(suggestion)\"\n (mouseenter)=\"selectedIndex = i\"\n >\n <div class=\"suggestion-icon\">\n <i\n *ngIf=\"suggestion.type === 'agent' && suggestion.icon\"\n [ngClass]=\"getIconClasses(suggestion.icon)\"\n ></i>\n <i\n *ngIf=\"suggestion.type === 'user'\"\n class=\"fa-solid fa-user\"\n ></i>\n </div>\n <div class=\"suggestion-content\">\n <div class=\"suggestion-name\">\n <span class=\"suggestion-type-badge\" *ngIf=\"suggestion.type === 'agent'\">Agent</span>\n <span class=\"suggestion-type-badge user\" *ngIf=\"suggestion.type === 'user'\">User</span>\n {{ suggestion.displayName }}\n </div>\n <div class=\"suggestion-description\" *ngIf=\"suggestion.description\">\n {{ suggestion.description }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Empty State -->\n <div class=\"mention-empty-state\" *ngIf=\"suggestions.length === 0\">\n <i class=\"fa-solid fa-robot\"></i>\n <p>No agents or users available</p>\n </div>\n</div>\n", styles: [".mention-dropdown {\n position: absolute;\n z-index: 10000;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 280px;\n max-width: 400px;\n max-height: 300px;\n overflow-y: auto;\n transform-origin: top left; /* Default: grows downward from top-left */\n}\n\n.mention-dropdown.show-above {\n transform: translateY(-100%); /* Shift entire dropdown up by its own height */\n transform-origin: bottom left; /* Grows upward from bottom-left */\n}\n\n.mention-suggestions {\n padding: 4px 0;\n}\n\n.mention-suggestion {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.mention-suggestion:hover,\n.mention-suggestion.selected {\n background-color: #f5f5f5;\n}\n\n.suggestion-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n border-radius: 6px;\n color: white;\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.suggestion-icon i.fa-user {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-content {\n flex: 1;\n min-width: 0;\n}\n\n.suggestion-name {\n font-weight: 500;\n font-size: 14px;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.suggestion-type-badge {\n display: inline-block;\n padding: 2px 6px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 3px;\n}\n\n.suggestion-type-badge.user {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-description {\n font-size: 12px;\n color: #666;\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Scrollbar styling */\n.mention-dropdown::-webkit-scrollbar {\n width: 8px;\n}\n\n.mention-dropdown::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 8px;\n}\n\n.mention-dropdown::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 8px;\n}\n\n.mention-dropdown::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n}\n\n/* Empty State */\n.mention-empty-state {\n padding: 24px;\n text-align: center;\n color: #9CA3AF;\n}\n\n.mention-empty-state i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n.mention-empty-state p {\n margin: 0;\n font-size: 13px;\n font-weight: 500;\n}\n", "/**\n * Custom Agent Icons for MemberJunction\n *\n * This file contains custom icon definitions for agents that need unique branding\n * beyond Font Awesome icons. Icons can be CSS-based (emoji, Unicode, SVG data URIs)\n * or reference external image files.\n *\n * USAGE IN AGENT METADATA:\n * \"IconClass\": \"mj-icon-skip\" (references .mj-icon-skip class below)\n *\n * EXTENSIBILITY FOR 3RD PARTY DEVELOPERS:\n * Third-party developers have TWO options:\n *\n * 1. CSS CLASS APPROACH (Recommended for developers):\n * - Add your own global CSS with custom icon classes\n * - Reference your class in agent metadata: \"IconClass\": \"your-custom-class\"\n * - Works with any CSS available to the application\n * - Example: If you have a global stylesheet with .acme-icon-analyzer { ... }\n * then use \"IconClass\": \"acme-icon-analyzer\"\n *\n * 2. LOGO URL APPROACH (Recommended for end users):\n * - Use the LogoURL field in agent metadata\n * - Provide a URL or data URI: \"LogoURL\": \"https://example.com/logo.png\"\n * - Supports: HTTP URLs, data URIs (data:image/png;base64,...)\n * - LogoURL takes precedence over IconClass in the UI\n * - Perfect for non-technical users or external/uploaded images\n *\n * BEST PRACTICES:\n * - Use mj-icon-* prefix for MJ core icons\n * - Use your own prefix for 3rd party icons (e.g., acme-icon-*)\n * - Keep icons simple and recognizable at 16-36px sizes\n * - Test in both light and dark themes\n * - Prefer CSS classes over LogoURL for version-controlled icons\n */\n\n/* ============================================\n BASE STYLES FOR CUSTOM ICONS\n ============================================ */\n\n/* Base styling for all custom MJ icons */\n[class^=\"mj-icon-\"],\n[class*=\" mj-icon-\"] {\n font-style: normal;\n font-variant: normal;\n text-rendering: auto;\n -webkit-font-smoothing: antialiased;\n display: inline-block;\n font-size: inherit;\n line-height: 1;\n}\n\n/* ============================================\n MJ CORE ICONS\n ============================================ */\n\n/**\n * Skip Brain Icon - Analytics/Intelligence Agent\n * Official Skip logo from Skip SaaS branding\n */\n.mj-icon-skip {\n width: 1.4em;\n height: 1.4em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n /* Official Skip logo SVG */\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 101.89918457031249 96.83947368421053'%3E%3Cg transform='translate(-0.1288232421875,-0.0)'%3E%3Cpath d='M93.85,41.56c-.84,0-1.62.2-2.37.55-3-4.35-7.49-8.12-13.04-11.04l.04-7.18v-14.44h-10.24v17.6c-1.52-.43-3.07-.8-4.67-1.11V0h-10.24v24.72s-.09,0-.14,0h-4.38s-.1,0-.14,0V7.3h-10.24v18.62c-1.6.32-3.15.69-4.67,1.11v-11.67h-10.24v6.09l.04,9.6c-5.55,2.92-10.04,6.7-13.04,11.04-.75-.35-1.53-.55-2.37-.55-4.5,0-8.14,5.61-8.14,12.51s3.64,12.53,8.14,12.53c.58,0,1.14-.12,1.67-.29,4.1,6.62,11.54,12.06,20.98,15.28l.79.13v7.05c0,2.97,1.45,5.58,3.87,6.99,1.18.69,2.5,1.04,3.85,1.03,1.4,0,2.83-.37,4.15-1.12l7.54-4.29,7.56,4.3c1.31.74,2.73,1.12,4.13,1.12s2.67-.35,3.85-1.04c2.42-1.41,3.86-4.02,3.86-6.98v-7.05l.79-.13c9.44-3.22,16.89-8.66,20.98-15.28.54.17,1.09.29,1.68.29,4.5,0,8.14-5.61,8.14-12.53s-3.63-12.51-8.14-12.51' fill='%23AAAAAA'/%3E%3Cpath d='M86.69,50.87c0-12.22-13.6-19.1-28.94-20.66-4.48-.47-9.19-.54-13.52,0-15.34,1.53-28.93,8.41-28.93,20.66,0,8.55,5.7,15.55,12.68,15.55h7.94c3.05,2.5,6.93,4.1,11.08,4.71,2.65.4,5.44.46,8.01,0,4.15-.6,8.05-2.2,11.1-4.71h7.92c6.97,0,12.68-7,12.68-15.55' fill='white' opacity='0.9'/%3E%3Cpath d='M57.83,55.82c-1.19,2.58-3.8,4.35-6.84,4.35s-5.65-1.77-6.84-4.35h13.68Z' fill='%23AAAAAA'/%3E%3Cpath d='M32.52,41.14c1.74,0,3.18,2.13,3.18,4.76s-1.44,4.74-3.18,4.74-3.16-2.13-3.16-4.74,1.41-4.76,3.16-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M69.46,41.14c1.74,0,3.16,2.13,3.16,4.76s-1.41,4.74-3.16,4.74-3.18-2.13-3.18-4.74,1.41-4.76,3.18-4.76' fill='%23AAAAAA'/%3E%3Cpath d='M63.91,76.15c-.82-.48-1.84-.43-2.8.12l-10.13,5.75-10.11-5.75c-.96-.55-1.98-.59-2.8-.12-.82.47-1.29,1.38-1.29,2.49v10.12c0,1.11.47,2.02,1.28,2.49.38.22.8.33,1.24.33.51,0,1.05-.15,1.57-.44l10.12-5.75,10.11,5.75c.52.29,1.05.44,1.56.44.44,0,.86-.11,1.24-.33.81-.48,1.28-1.38,1.28-2.49v-10.12c0-1.11-.47-2.02-1.28-2.49' fill='white' opacity='0.9'/%3E%3C/g%3E%3C/svg%3E\");\n vertical-align: middle;\n}\n\n/**\n * Alternative Skip Icon - Lightning Bolt\n * Simple emoji-based icon for quick setup\n */\n.mj-icon-skip-lightning::before {\n content: \"\u26A1\";\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n font-size: 1.1em;\n}\n\n/**\n * Skip Icon - Brain Emoji\n * Fallback emoji option\n */\n.mj-icon-skip-brain::before {\n content: \"\uD83E\uDDE0\";\n font-size: 1.2em;\n}\n\n/* ============================================\n EXAMPLE CUSTOM ICONS FOR OTHER AGENTS\n ============================================ */\n\n/**\n * Data Analysis Icon - Chart emoji\n */\n.mj-icon-data-analyst::before {\n content: \"\uD83D\uDCCA\";\n font-size: 1.1em;\n}\n\n/**\n * API/Integration Icon - Plug emoji\n */\n.mj-icon-api::before {\n content: \"\uD83D\uDD0C\";\n font-size: 1.1em;\n}\n\n/**\n * Processing/Workflow Icon - Gear emoji with animation\n */\n.mj-icon-processing::before {\n content: \"\u2699\uFE0F\";\n display: inline-block;\n animation: rotate-icon 2s linear infinite;\n}\n\n@keyframes rotate-icon {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/**\n * Text/Letter-based Icon\n * Simple monogram icon\n */\n.mj-icon-monogram-s::before {\n content: \"S\";\n font-weight: 800;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 1.1em;\n color: #667eea;\n}\n\n/* ============================================\n TEMPLATE FOR NEW ICONS\n ============================================ */\n\n/*\n// EMOJI-BASED ICON (Simplest)\n.mj-icon-my-agent::before {\n content: \"\uD83C\uDFAF\"; // Use any emoji\n font-size: 1.2em;\n}\n\n// UNICODE SYMBOL ICON\n.mj-icon-my-agent::before {\n content: \"\\2022\"; // Unicode character\n font-size: 1.2em;\n color: #667eea;\n}\n\n// TEXT/LETTER ICON\n.mj-icon-my-agent::before {\n content: \"MA\"; // Initials/text\n font-weight: 800;\n font-size: 0.9em;\n color: #667eea;\n}\n\n// SVG DATA URI ICON (Most Control)\n.mj-icon-my-agent {\n width: 1em;\n height: 1em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url('data:image/svg+xml;utf8,<svg>...</svg>');\n vertical-align: middle;\n}\n\n// EXTERNAL IMAGE FILE (For existing assets)\n.mj-icon-my-agent {\n width: 1em;\n height: 1em;\n display: inline-block;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n background-image: url('/assets/icons/my-agent.svg');\n vertical-align: middle;\n}\n\n// GRADIENT TEXT ICON\n.mj-icon-my-agent::before {\n content: \"\u26A1\";\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n}\n*/\n\n/* ============================================\n 3RD PARTY EXAMPLES\n These would typically be in EXTERNAL CSS files\n ============================================ */\n\n/*\n// Example: Acme Corp custom agent icons\n// This would be in acme-corp-styles.css loaded by the application\n\n.acme-icon-analyzer {\n width: 1em;\n height: 1em;\n display: inline-block;\n background-size: contain;\n background-image: url('https://acme.com/icons/analyzer.svg');\n}\n\n.acme-icon-reporter::before {\n content: \"A\";\n font-weight: 800;\n color: #FF6B35;\n}\n*/\n"] }]
|
|
177
199
|
}], () => [], { suggestions: [{
|
|
178
200
|
type: Input
|
|
179
201
|
}], position: [{
|
|
@@ -190,5 +212,5 @@ export class MentionDropdownComponent {
|
|
|
190
212
|
type: HostListener,
|
|
191
213
|
args: ['document:keydown', ['$event']]
|
|
192
214
|
}] }); })();
|
|
193
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MentionDropdownComponent, { className: "MentionDropdownComponent", filePath: "src/lib/components/mention/mention-dropdown.component.ts", lineNumber:
|
|
215
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MentionDropdownComponent, { className: "MentionDropdownComponent", filePath: "src/lib/components/mention/mention-dropdown.component.ts", lineNumber: 23 }); })();
|
|
194
216
|
//# sourceMappingURL=mention-dropdown.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mention-dropdown.component.js","sourceRoot":"","sources":["../../../../src/lib/components/mention/mention-dropdown.component.ts","../../../../src/lib/components/mention/mention-dropdown.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,YAAY,EAGZ,YAAY,EACb,MAAM,eAAe,CAAC;;;;ICSf,
|
|
1
|
+
{"version":3,"file":"mention-dropdown.component.js","sourceRoot":"","sources":["../../../../src/lib/components/mention/mention-dropdown.component.ts","../../../../src/lib/components/mention/mention-dropdown.component.html"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
|
-
import { EventEmitter, ElementRef, OnInit } from '@angular/core';
|
|
1
|
+
import { EventEmitter, ElementRef, OnInit, OnDestroy } from '@angular/core';
|
|
2
2
|
import { UserInfo } from '@memberjunction/core';
|
|
3
3
|
import { ConversationDetailEntity, AIAgentEntityExtended } from '@memberjunction/core-entities';
|
|
4
4
|
import { DialogService } from '../../services/dialog.service';
|
|
5
5
|
import { ToastService } from '../../services/toast.service';
|
|
6
6
|
import { ConversationAgentService } from '../../services/conversation-agent.service';
|
|
7
7
|
import { ConversationStateService } from '../../services/conversation-state.service';
|
|
8
|
+
import { DataCacheService } from '../../services/data-cache.service';
|
|
8
9
|
import { ActiveTasksService } from '../../services/active-tasks.service';
|
|
9
10
|
import { MentionAutocompleteService, MentionSuggestion } from '../../services/mention-autocomplete.service';
|
|
10
11
|
import { MentionParserService } from '../../services/mention-parser.service';
|
|
11
12
|
import * as i0 from "@angular/core";
|
|
12
|
-
export declare class MessageInputComponent implements OnInit {
|
|
13
|
+
export declare class MessageInputComponent implements OnInit, OnDestroy {
|
|
13
14
|
private dialogService;
|
|
14
15
|
private toastService;
|
|
15
16
|
private agentService;
|
|
16
17
|
private conversationState;
|
|
18
|
+
private dataCache;
|
|
17
19
|
private activeTasks;
|
|
18
20
|
private mentionAutocomplete;
|
|
19
21
|
private mentionParser;
|
|
22
|
+
private readonly JSON_ARTIFACT_TYPE_ID;
|
|
20
23
|
conversationId: string;
|
|
21
24
|
currentUser: UserInfo;
|
|
22
25
|
disabled: boolean;
|
|
@@ -35,6 +38,7 @@ export declare class MessageInputComponent implements OnInit {
|
|
|
35
38
|
artifactCreated: EventEmitter<{
|
|
36
39
|
artifactId: string;
|
|
37
40
|
versionId: string;
|
|
41
|
+
versionNumber: number;
|
|
38
42
|
conversationDetailId: string;
|
|
39
43
|
name: string;
|
|
40
44
|
}>;
|
|
@@ -57,8 +61,23 @@ export declare class MessageInputComponent implements OnInit {
|
|
|
57
61
|
mentionDropdownShowAbove: boolean;
|
|
58
62
|
private mentionStartIndex;
|
|
59
63
|
private mentionQuery;
|
|
60
|
-
|
|
64
|
+
private pushStatusSubscription?;
|
|
65
|
+
private activeTaskExecutionMessageIds;
|
|
66
|
+
constructor(dialogService: DialogService, toastService: ToastService, agentService: ConversationAgentService, conversationState: ConversationStateService, dataCache: DataCacheService, activeTasks: ActiveTasksService, mentionAutocomplete: MentionAutocompleteService, mentionParser: MentionParserService);
|
|
61
67
|
ngOnInit(): Promise<void>;
|
|
68
|
+
ngOnDestroy(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Subscribe to PubSub for real-time task orchestration progress updates
|
|
71
|
+
*/
|
|
72
|
+
private subscribeToPushStatus;
|
|
73
|
+
/**
|
|
74
|
+
* Handle task progress updates from PubSub
|
|
75
|
+
*/
|
|
76
|
+
private handleTaskProgress;
|
|
77
|
+
/**
|
|
78
|
+
* Update task execution messages in real-time based on progress updates
|
|
79
|
+
*/
|
|
80
|
+
private updateTaskExecutionMessages;
|
|
62
81
|
get canSend(): boolean;
|
|
63
82
|
/**
|
|
64
83
|
* Handle input events to detect @ mentions
|
|
@@ -85,6 +104,14 @@ export declare class MessageInputComponent implements OnInit {
|
|
|
85
104
|
*/
|
|
86
105
|
closeMentionDropdown(): void;
|
|
87
106
|
onSend(): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Safe save for ConversationDetail - prevents overwrites of completed/errored messages
|
|
109
|
+
* Use this ONLY in progress update paths to prevent race conditions
|
|
110
|
+
* @param detail The conversation detail to save
|
|
111
|
+
* @param context Description of who is saving (for logging)
|
|
112
|
+
* @returns true if saved, false if blocked
|
|
113
|
+
*/
|
|
114
|
+
private safeSaveConversationDetail;
|
|
88
115
|
/**
|
|
89
116
|
* Create a progress callback for agent execution
|
|
90
117
|
* This callback updates both the active task and the ConversationDetail message
|
|
@@ -92,39 +119,49 @@ export declare class MessageInputComponent implements OnInit {
|
|
|
92
119
|
*/
|
|
93
120
|
private createProgressCallback;
|
|
94
121
|
/**
|
|
95
|
-
* Process the message through agents (multi-stage:
|
|
122
|
+
* Process the message through agents (multi-stage: Sage -> possible sub-agent)
|
|
96
123
|
* Only called when there's no @mention and no implicit agent context
|
|
97
124
|
*/
|
|
98
125
|
private processMessageThroughAgent;
|
|
99
126
|
/**
|
|
100
|
-
* Handle
|
|
127
|
+
* Handle task graph execution based on Sage's payload
|
|
128
|
+
* Creates tasks and orchestrates their execution
|
|
129
|
+
*/
|
|
130
|
+
private handleTaskGraphExecution;
|
|
131
|
+
protected updateConversationDetail(convoDetail: ConversationDetailEntity, message: string, status: 'In-Progress' | 'Complete' | 'Error'): Promise<void>;
|
|
132
|
+
/**
|
|
133
|
+
* Handle single task execution from task graph using direct agent execution
|
|
134
|
+
* Uses the existing agent execution pattern with PubSub support
|
|
135
|
+
*/
|
|
136
|
+
private handleSingleTaskExecution;
|
|
137
|
+
/**
|
|
138
|
+
* Handle sub-agent invocation based on Sage's payload
|
|
101
139
|
* Reuses the existing conversationManagerMessage to avoid creating multiple records
|
|
102
140
|
*/
|
|
103
141
|
private handleSubAgentInvocation;
|
|
104
142
|
/**
|
|
105
|
-
* Handle silent observation - when
|
|
143
|
+
* Handle silent observation - when Sage stays silent,
|
|
106
144
|
* check if we should continue with the last agent for iterative refinement
|
|
107
145
|
*/
|
|
108
146
|
private handleSilentObservation;
|
|
109
|
-
/**
|
|
110
|
-
* Handle agent response - create AI message from agent result
|
|
111
|
-
*/
|
|
112
|
-
private handleAgentResponse;
|
|
113
147
|
/**
|
|
114
148
|
* Invoke an agent directly when mentioned with @ symbol
|
|
115
|
-
* Bypasses
|
|
149
|
+
* Bypasses Sage completely - no status messages
|
|
116
150
|
*/
|
|
117
151
|
private invokeAgentDirectly;
|
|
118
152
|
/**
|
|
119
153
|
* Continue with the same agent from previous message (implicit continuation)
|
|
120
|
-
* Bypasses
|
|
154
|
+
* Bypasses Sage - no status messages
|
|
121
155
|
*/
|
|
122
156
|
private continueWithAgent;
|
|
123
157
|
/**
|
|
124
158
|
* Creates an artifact from an agent's payload and links it to the conversation detail
|
|
159
|
+
* If previousArtifactInfo is provided, creates a new version of the existing artifact
|
|
160
|
+
* Otherwise, creates a new artifact with version 1
|
|
125
161
|
* @param payload The agent's payload object
|
|
126
162
|
* @param message The conversation detail message to link to
|
|
127
163
|
* @param agentId The ID of the agent that produced the payload
|
|
164
|
+
* @param previousArtifactInfo Optional info about previous artifact to create new version
|
|
128
165
|
*/
|
|
129
166
|
private createArtifactFromPayload;
|
|
130
167
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-input.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/message/message-input.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,UAAU,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"message-input.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/message/message-input.component.ts"],"names":[],"mappings":"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"}
|