@memberjunction/ng-conversations 5.47.0 → 5.49.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/README.md +37 -0
- package/dist/lib/components/composer/ai-composer.component.d.ts +8 -2
- package/dist/lib/components/composer/ai-composer.component.d.ts.map +1 -1
- package/dist/lib/components/composer/ai-composer.component.js +16 -3
- package/dist/lib/components/composer/ai-composer.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +90 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +322 -99
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +16 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-empty-state.component.js +62 -24
- package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
- package/dist/lib/components/message/message-input.component.d.ts +48 -1
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input.component.js +146 -6
- package/dist/lib/components/message/message-input.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts +13 -1
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +307 -235
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/message/message-list.component.d.ts +18 -1
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-list.component.js +48 -4
- package/dist/lib/components/message/message-list.component.js.map +1 -1
- package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js +2 -2
- package/dist/lib/components/realtime/evidence-playback/realtime-evidence-playback.component.js.map +1 -1
- package/dist/lib/components/realtime/media/realtime-media-surface.component.js +2 -2
- package/dist/lib/components/realtime/media/realtime-media-surface.component.js.map +1 -1
- package/dist/lib/services/composer-draft-store.d.ts +52 -0
- package/dist/lib/services/composer-draft-store.d.ts.map +1 -0
- package/dist/lib/services/composer-draft-store.js +123 -0
- package/dist/lib/services/composer-draft-store.js.map +1 -0
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.js +5 -1
- package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
- package/dist/lib/services/realtime-session.service.d.ts.map +1 -1
- package/dist/lib/services/realtime-session.service.js +2 -1
- package/dist/lib/services/realtime-session.service.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +29 -29
|
@@ -8,6 +8,8 @@ export declare class ConversationEmptyStateComponent {
|
|
|
8
8
|
showSidebarToggle: boolean;
|
|
9
9
|
enableAttachments: boolean;
|
|
10
10
|
enableMentions: boolean;
|
|
11
|
+
/** Show the built-in suggested-prompt chips. Hosts that don't want the default prompt vocabulary set false. */
|
|
12
|
+
showSuggestedPrompts: boolean;
|
|
11
13
|
maxAttachments: number;
|
|
12
14
|
maxAttachmentSizeBytes: number;
|
|
13
15
|
acceptedFileTypes: string;
|
|
@@ -18,6 +20,13 @@ export declare class ConversationEmptyStateComponent {
|
|
|
18
20
|
set overlayMode(value: boolean);
|
|
19
21
|
get overlayMode(): boolean;
|
|
20
22
|
private messageInput?;
|
|
23
|
+
/** Draft staged into the composer on mount (see MessageInputComponent.initialDraft). */
|
|
24
|
+
initialDraft: string | null;
|
|
25
|
+
initialDraftApplied: EventEmitter<void>;
|
|
26
|
+
/** Forwarded from the inner composer — serialized draft on every value change. */
|
|
27
|
+
DraftStateChanged: EventEmitter<string>;
|
|
28
|
+
/** Forwarded from the inner composer — persist-drafts save point. */
|
|
29
|
+
ComposerBlurred: EventEmitter<void>;
|
|
21
30
|
messageSent: EventEmitter<{
|
|
22
31
|
text: string;
|
|
23
32
|
attachments: PendingAttachment[];
|
|
@@ -39,6 +48,12 @@ export declare class ConversationEmptyStateComponent {
|
|
|
39
48
|
* Focus the message input programmatically.
|
|
40
49
|
* Called by parent when the user clicks "New Conversation" while already on the empty state.
|
|
41
50
|
*/
|
|
51
|
+
/**
|
|
52
|
+
* Pre-addresses the composer to an agent as a resolved mention pill (delegates to
|
|
53
|
+
* MessageInputComponent.InsertAgentMention). Returns false while the input isn't
|
|
54
|
+
* mounted — callers may retry.
|
|
55
|
+
*/
|
|
56
|
+
InsertAgentMention(agentName: string, focus?: boolean): Promise<boolean>;
|
|
42
57
|
FocusInput(): void;
|
|
43
58
|
onEmptyStateSubmit(event: {
|
|
44
59
|
text: string;
|
|
@@ -46,6 +61,6 @@ export declare class ConversationEmptyStateComponent {
|
|
|
46
61
|
}): void;
|
|
47
62
|
onSuggestedPromptClicked(prompt: string): void;
|
|
48
63
|
static ɵfac: i0.ɵɵFactoryDeclaration<ConversationEmptyStateComponent, never>;
|
|
49
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ConversationEmptyStateComponent, "mj-conversation-empty-state", never, { "currentUser": { "alias": "currentUser"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "showSidebarToggle": { "alias": "showSidebarToggle"; "required": false; }; "enableAttachments": { "alias": "enableAttachments"; "required": false; }; "enableMentions": { "alias": "enableMentions"; "required": false; }; "maxAttachments": { "alias": "maxAttachments"; "required": false; }; "maxAttachmentSizeBytes": { "alias": "maxAttachmentSizeBytes"; "required": false; }; "acceptedFileTypes": { "alias": "acceptedFileTypes"; "required": false; }; "greeting": { "alias": "greeting"; "required": false; }; "overlayMode": { "alias": "overlayMode"; "required": false; }; }, { "messageSent": "messageSent"; "sidebarToggleClicked": "sidebarToggleClicked"; }, never, never, false, never>;
|
|
64
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ConversationEmptyStateComponent, "mj-conversation-empty-state", never, { "currentUser": { "alias": "currentUser"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "showSidebarToggle": { "alias": "showSidebarToggle"; "required": false; }; "enableAttachments": { "alias": "enableAttachments"; "required": false; }; "enableMentions": { "alias": "enableMentions"; "required": false; }; "showSuggestedPrompts": { "alias": "showSuggestedPrompts"; "required": false; }; "maxAttachments": { "alias": "maxAttachments"; "required": false; }; "maxAttachmentSizeBytes": { "alias": "maxAttachmentSizeBytes"; "required": false; }; "acceptedFileTypes": { "alias": "acceptedFileTypes"; "required": false; }; "greeting": { "alias": "greeting"; "required": false; }; "overlayMode": { "alias": "overlayMode"; "required": false; }; "initialDraft": { "alias": "initialDraft"; "required": false; }; }, { "initialDraftApplied": "initialDraftApplied"; "DraftStateChanged": "DraftStateChanged"; "ComposerBlurred": "ComposerBlurred"; "messageSent": "messageSent"; "sidebarToggleClicked": "sidebarToggleClicked"; }, never, never, false, never>;
|
|
50
65
|
}
|
|
51
66
|
//# sourceMappingURL=conversation-empty-state.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-empty-state.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/conversation/conversation-empty-state.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;;AAGhE,qBAMa,+BAA+B;IACjC,WAAW,EAAG,QAAQ,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAS;IAC1B,iBAAiB,EAAE,OAAO,CAAS;IACnC,iBAAiB,EAAE,OAAO,CAAS;IACnC,cAAc,EAAE,OAAO,CAAQ;
|
|
1
|
+
{"version":3,"file":"conversation-empty-state.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/conversation/conversation-empty-state.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAa,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;;AAGhE,qBAMa,+BAA+B;IACjC,WAAW,EAAG,QAAQ,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAS;IAC1B,iBAAiB,EAAE,OAAO,CAAS;IACnC,iBAAiB,EAAE,OAAO,CAAS;IACnC,cAAc,EAAE,OAAO,CAAQ;IACxC,+GAA+G;IACtG,oBAAoB,EAAE,OAAO,CAAQ;IACrC,cAAc,EAAE,MAAM,CAAM;IAC5B,sBAAsB,EAAE,MAAM,CAAoB;IAClD,iBAAiB,EAAE,MAAM,CAAa;IAE/C,2FAA2F;IAClF,QAAQ,EAAE,MAAM,CAAyB;IAElD,8EAA8E;IAC9E,OAAO,CAAC,YAAY,CAAS;IAC7B,IACI,WAAW,CAAC,KAAK,EAAE,OAAO,EAK7B;IACD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAEiC,OAAO,CAAC,YAAY,CAAC,CAAwB;IAE/E,wFAAwF;IAC/E,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,mBAAmB,qBAA4B;IACzD,kFAAkF;IACxE,iBAAiB,uBAA8B;IACzD,qEAAqE;IAC3D,eAAe,qBAA4B;IAE3C,WAAW;cAA2B,MAAM;qBAAe,iBAAiB,EAAE;OAAK;IACnF,oBAAoB,qBAA4B;IAEnD,WAAW,EAAE,MAAM,CAAM;IAGhC,OAAO,CAAC,mBAAmB,CA0GzB;IAGK,gBAAgB,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAM;;IAOnF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;;OAGG;IACH;;;;OAIG;IACU,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAOpF,UAAU,IAAI,IAAI;IAQzB,kBAAkB,CAAC,KAAK,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,iBAAiB,EAAE,CAAA;KAAC,GAAG,IAAI;IAIjF,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;yCApMnC,+BAA+B;2CAA/B,+BAA+B;CAyM3C"}
|
|
@@ -61,29 +61,37 @@ function ConversationEmptyStateComponent_Conditional_5_Template(rf, ctx) { if (r
|
|
|
61
61
|
i0.ɵɵadvance(2);
|
|
62
62
|
i0.ɵɵtextInterpolate(ctx_r2.greeting);
|
|
63
63
|
} }
|
|
64
|
-
function
|
|
65
|
-
i0.ɵɵelementStart(0, "div",
|
|
66
|
-
i0.ɵɵelement(
|
|
67
|
-
i0.ɵɵelementStart(
|
|
68
|
-
i0.ɵɵtext(
|
|
69
|
-
i0.ɵɵelementStart(
|
|
70
|
-
i0.ɵɵtext(
|
|
64
|
+
function ConversationEmptyStateComponent_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
65
|
+
i0.ɵɵelementStart(0, "div", 22);
|
|
66
|
+
i0.ɵɵelement(1, "i", 24);
|
|
67
|
+
i0.ɵɵelementStart(2, "span");
|
|
68
|
+
i0.ɵɵtext(3, "Use ");
|
|
69
|
+
i0.ɵɵelementStart(4, "strong");
|
|
70
|
+
i0.ɵɵtext(5, "@AgentName");
|
|
71
71
|
i0.ɵɵelementEnd();
|
|
72
|
-
i0.ɵɵtext(
|
|
72
|
+
i0.ɵɵtext(6, " to directly invoke a specific agent");
|
|
73
73
|
i0.ɵɵelementEnd()();
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
i0.ɵɵelementStart(
|
|
77
|
-
i0.ɵɵ
|
|
78
|
-
i0.ɵɵelementStart(
|
|
79
|
-
i0.ɵɵ
|
|
74
|
+
} }
|
|
75
|
+
function ConversationEmptyStateComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
i0.ɵɵelementStart(0, "div", 8);
|
|
77
|
+
i0.ɵɵconditionalCreate(1, ConversationEmptyStateComponent_Conditional_8_Conditional_1_Template, 7, 0, "div", 22);
|
|
78
|
+
i0.ɵɵelementStart(2, "div", 22);
|
|
79
|
+
i0.ɵɵelement(3, "i", 23);
|
|
80
|
+
i0.ɵɵelementStart(4, "span");
|
|
81
|
+
i0.ɵɵtext(5, "Press ");
|
|
82
|
+
i0.ɵɵelementStart(6, "strong");
|
|
83
|
+
i0.ɵɵtext(7, "Enter");
|
|
80
84
|
i0.ɵɵelementEnd();
|
|
81
|
-
i0.ɵɵtext(
|
|
82
|
-
i0.ɵɵelementStart(
|
|
83
|
-
i0.ɵɵtext(
|
|
85
|
+
i0.ɵɵtext(8, " to send, ");
|
|
86
|
+
i0.ɵɵelementStart(9, "strong");
|
|
87
|
+
i0.ɵɵtext(10, "Shift+Enter");
|
|
84
88
|
i0.ɵɵelementEnd();
|
|
85
|
-
i0.ɵɵtext(
|
|
89
|
+
i0.ɵɵtext(11, " for new line");
|
|
86
90
|
i0.ɵɵelementEnd()()();
|
|
91
|
+
} if (rf & 2) {
|
|
92
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
93
|
+
i0.ɵɵadvance();
|
|
94
|
+
i0.ɵɵconditional(ctx_r2.enableMentions ? 1 : -1);
|
|
87
95
|
} }
|
|
88
96
|
export class ConversationEmptyStateComponent {
|
|
89
97
|
currentUser;
|
|
@@ -91,6 +99,8 @@ export class ConversationEmptyStateComponent {
|
|
|
91
99
|
showSidebarToggle = false;
|
|
92
100
|
enableAttachments = false;
|
|
93
101
|
enableMentions = true;
|
|
102
|
+
/** Show the built-in suggested-prompt chips. Hosts that don't want the default prompt vocabulary set false. */
|
|
103
|
+
showSuggestedPrompts = true;
|
|
94
104
|
maxAttachments = 10;
|
|
95
105
|
maxAttachmentSizeBytes = 20 * 1024 * 1024;
|
|
96
106
|
acceptedFileTypes = 'image/*';
|
|
@@ -108,6 +118,13 @@ export class ConversationEmptyStateComponent {
|
|
|
108
118
|
return this._overlayMode;
|
|
109
119
|
}
|
|
110
120
|
messageInput;
|
|
121
|
+
/** Draft staged into the composer on mount (see MessageInputComponent.initialDraft). */
|
|
122
|
+
initialDraft = null;
|
|
123
|
+
initialDraftApplied = new EventEmitter();
|
|
124
|
+
/** Forwarded from the inner composer — serialized draft on every value change. */
|
|
125
|
+
DraftStateChanged = new EventEmitter();
|
|
126
|
+
/** Forwarded from the inner composer — persist-drafts save point. */
|
|
127
|
+
ComposerBlurred = new EventEmitter();
|
|
111
128
|
messageSent = new EventEmitter();
|
|
112
129
|
sidebarToggleClicked = new EventEmitter();
|
|
113
130
|
messageText = '';
|
|
@@ -234,6 +251,17 @@ export class ConversationEmptyStateComponent {
|
|
|
234
251
|
* Focus the message input programmatically.
|
|
235
252
|
* Called by parent when the user clicks "New Conversation" while already on the empty state.
|
|
236
253
|
*/
|
|
254
|
+
/**
|
|
255
|
+
* Pre-addresses the composer to an agent as a resolved mention pill (delegates to
|
|
256
|
+
* MessageInputComponent.InsertAgentMention). Returns false while the input isn't
|
|
257
|
+
* mounted — callers may retry.
|
|
258
|
+
*/
|
|
259
|
+
async InsertAgentMention(agentName, focus = true) {
|
|
260
|
+
if (!this.messageInput) {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
return this.messageInput.InsertAgentMention(agentName, focus);
|
|
264
|
+
}
|
|
237
265
|
FocusInput() {
|
|
238
266
|
setTimeout(() => {
|
|
239
267
|
if (this.messageInput) {
|
|
@@ -255,7 +283,7 @@ export class ConversationEmptyStateComponent {
|
|
|
255
283
|
} if (rf & 2) {
|
|
256
284
|
let _t;
|
|
257
285
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.messageInput = _t.first);
|
|
258
|
-
} }, inputs: { currentUser: "currentUser", disabled: "disabled", showSidebarToggle: "showSidebarToggle", enableAttachments: "enableAttachments", enableMentions: "enableMentions", maxAttachments: "maxAttachments", maxAttachmentSizeBytes: "maxAttachmentSizeBytes", acceptedFileTypes: "acceptedFileTypes", greeting: "greeting", overlayMode: "overlayMode" }, outputs: { messageSent: "messageSent", sidebarToggleClicked: "sidebarToggleClicked" }, standalone: false, decls: 9, vars:
|
|
286
|
+
} }, inputs: { currentUser: "currentUser", disabled: "disabled", showSidebarToggle: "showSidebarToggle", enableAttachments: "enableAttachments", enableMentions: "enableMentions", showSuggestedPrompts: "showSuggestedPrompts", maxAttachments: "maxAttachments", maxAttachmentSizeBytes: "maxAttachmentSizeBytes", acceptedFileTypes: "acceptedFileTypes", greeting: "greeting", overlayMode: "overlayMode", initialDraft: "initialDraft" }, outputs: { initialDraftApplied: "initialDraftApplied", DraftStateChanged: "DraftStateChanged", ComposerBlurred: "ComposerBlurred", messageSent: "messageSent", sidebarToggleClicked: "sidebarToggleClicked" }, standalone: false, decls: 9, vars: 19, consts: [[1, "conversation-empty-state"], [1, "loading-overlay"], [1, "empty-state-container"], [1, "greeting-section"], [1, "suggested-prompts"], [1, "overlay-greeting"], [1, "message-input-wrapper"], [3, "initialDraftApplied", "DraftStateChanged", "ComposerBlurred", "emptyStateSubmit", "initialDraft", "placeholder", "disabled", "currentUser", "emptyStateMode", "enableMentions", "enableAttachments", "maxAttachments", "maxAttachmentSizeBytes", "acceptedFileTypes"], [1, "tips-section"], ["text", "Creating your conversation...", "size", "large"], [1, "greeting-icon"], [1, "fa-solid", "fa-comments", "fa-3x"], [1, "greeting-title"], [1, "greeting-subtitle"], [1, "prompt-grid"], [1, "prompt-card", 3, "disabled"], [1, "prompt-card", 3, "click"], [1, "prompt-icon"], [1, "prompt-content"], [1, "prompt-title"], [1, "prompt-text"], [1, "overlay-greeting-text"], [1, "tip-item"], [1, "fa-solid", "fa-keyboard"], [1, "fa-solid", "fa-at"]], template: function ConversationEmptyStateComponent_Template(rf, ctx) { if (rf & 1) {
|
|
259
287
|
i0.ɵɵelementStart(0, "div", 0);
|
|
260
288
|
i0.ɵɵconditionalCreate(1, ConversationEmptyStateComponent_Conditional_1_Template, 2, 0, "div", 1);
|
|
261
289
|
i0.ɵɵelementStart(2, "div", 2);
|
|
@@ -263,9 +291,9 @@ export class ConversationEmptyStateComponent {
|
|
|
263
291
|
i0.ɵɵconditionalCreate(4, ConversationEmptyStateComponent_Conditional_4_Template, 4, 0, "div", 4);
|
|
264
292
|
i0.ɵɵconditionalCreate(5, ConversationEmptyStateComponent_Conditional_5_Template, 3, 1, "div", 5);
|
|
265
293
|
i0.ɵɵelementStart(6, "div", 6)(7, "mj-message-input", 7);
|
|
266
|
-
i0.ɵɵlistener("emptyStateSubmit", function ConversationEmptyStateComponent_Template_mj_message_input_emptyStateSubmit_7_listener($event) { return ctx.onEmptyStateSubmit($event); });
|
|
294
|
+
i0.ɵɵlistener("initialDraftApplied", function ConversationEmptyStateComponent_Template_mj_message_input_initialDraftApplied_7_listener() { return ctx.initialDraftApplied.emit(); })("DraftStateChanged", function ConversationEmptyStateComponent_Template_mj_message_input_DraftStateChanged_7_listener($event) { return ctx.DraftStateChanged.emit($event); })("ComposerBlurred", function ConversationEmptyStateComponent_Template_mj_message_input_ComposerBlurred_7_listener() { return ctx.ComposerBlurred.emit(); })("emptyStateSubmit", function ConversationEmptyStateComponent_Template_mj_message_input_emptyStateSubmit_7_listener($event) { return ctx.onEmptyStateSubmit($event); });
|
|
267
295
|
i0.ɵɵelementEnd()();
|
|
268
|
-
i0.ɵɵconditionalCreate(8, ConversationEmptyStateComponent_Conditional_8_Template,
|
|
296
|
+
i0.ɵɵconditionalCreate(8, ConversationEmptyStateComponent_Conditional_8_Template, 12, 1, "div", 8);
|
|
269
297
|
i0.ɵɵelementEnd()();
|
|
270
298
|
} if (rf & 2) {
|
|
271
299
|
i0.ɵɵclassProp("overlay-mode", ctx.overlayMode);
|
|
@@ -276,18 +304,18 @@ export class ConversationEmptyStateComponent {
|
|
|
276
304
|
i0.ɵɵadvance();
|
|
277
305
|
i0.ɵɵconditional(!ctx.overlayMode ? 3 : -1);
|
|
278
306
|
i0.ɵɵadvance();
|
|
279
|
-
i0.ɵɵconditional(ctx.suggestedPrompts.length > 0 ? 4 : -1);
|
|
307
|
+
i0.ɵɵconditional(ctx.showSuggestedPrompts && ctx.suggestedPrompts.length > 0 ? 4 : -1);
|
|
280
308
|
i0.ɵɵadvance();
|
|
281
309
|
i0.ɵɵconditional(ctx.overlayMode ? 5 : -1);
|
|
282
310
|
i0.ɵɵadvance(2);
|
|
283
|
-
i0.ɵɵproperty("placeholder", ctx.overlayMode ? "Type a message..." : "Type your message to start a new conversation...")("disabled", ctx.disabled)("currentUser", ctx.currentUser)("emptyStateMode", true)("enableMentions", ctx.enableMentions)("enableAttachments", ctx.enableAttachments)("maxAttachments", ctx.maxAttachments)("maxAttachmentSizeBytes", ctx.maxAttachmentSizeBytes)("acceptedFileTypes", ctx.acceptedFileTypes);
|
|
311
|
+
i0.ɵɵproperty("initialDraft", ctx.initialDraft)("placeholder", ctx.overlayMode ? "Type a message..." : "Type your message to start a new conversation...")("disabled", ctx.disabled)("currentUser", ctx.currentUser)("emptyStateMode", true)("enableMentions", ctx.enableMentions)("enableAttachments", ctx.enableAttachments)("maxAttachments", ctx.maxAttachments)("maxAttachmentSizeBytes", ctx.maxAttachmentSizeBytes)("acceptedFileTypes", ctx.acceptedFileTypes);
|
|
284
312
|
i0.ɵɵadvance();
|
|
285
313
|
i0.ɵɵconditional(!ctx.overlayMode ? 8 : -1);
|
|
286
314
|
} }, dependencies: [i1.LoadingComponent, i2.MessageInputComponent], styles: ["[_nghost-%COMP%] {\n display: flex;\n flex: 1;\n height: 100%;\n min-height: 0;\n}\n\n.conversation-empty-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n width: 100%;\n padding: 2rem;\n overflow-y: auto;\n position: relative;\n}\n\n@media (max-width: 768px) {\n .conversation-empty-state[_ngcontent-%COMP%] {\n align-items: flex-start;\n padding: 1rem 0.75rem;\n }\n}\n\n.loading-overlay[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 95%, transparent);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease-in;\n}\n\n.loading-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1rem;\n padding: 2rem;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n box-shadow: 0 4px 20px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n}\n.loading-content[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.loading-message[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: var(--mj-text-primary);\n font-weight: 500;\n margin: 0;\n}\n\n.empty-state-container[_ngcontent-%COMP%] {\n max-width: 800px;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 1.25rem;\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-in;\n transition: opacity 0.2s ease;\n}\n.empty-state-container.loading[_ngcontent-%COMP%] {\n opacity: 0.4;\n pointer-events: none;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n.greeting-section[_ngcontent-%COMP%] {\n text-align: center;\n padding: 0.5rem 0;\n}\n\n.greeting-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n margin-bottom: 0.5rem;\n opacity: 0.8;\n}\n\n.greeting-title[_ngcontent-%COMP%] {\n font-size: 2rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-primary);\n}\n\n.greeting-subtitle[_ngcontent-%COMP%] {\n font-size: 1rem;\n color: var(--mj-text-secondary);\n margin: 0;\n line-height: 1.5;\n}\n\n\n\n.suggested-prompts[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.prompt-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 1rem;\n}\n\n.prompt-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 1rem;\n padding: 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.prompt-card[_ngcontent-%COMP%]:hover:not(.disabled) {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-brand-primary);\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n}\n.prompt-card.disabled[_ngcontent-%COMP%] {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.prompt-icon[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-radius: 8px;\n font-size: 1.2rem;\n}\n\n.prompt-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-title[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 0.95rem;\n color: var(--mj-text-primary);\n margin-bottom: 0.25rem;\n}\n\n.prompt-text[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n\n\n.message-input-wrapper[_ngcontent-%COMP%] {\n margin: 0;\n width: 100%;\n}\n\n\n\n.tips-section[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n padding: 0.75rem 0 0;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tip-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: var(--mj-text-secondary);\n}\n.tip-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 24px;\n text-align: center;\n color: var(--mj-brand-primary);\n opacity: 0.7;\n}\n.tip-item[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n\n\n.conversation-empty-state.overlay-mode[_ngcontent-%COMP%] {\n padding: 1rem;\n align-items: center;\n justify-content: center;\n}\n\n.overlay-mode[_ngcontent-%COMP%] .empty-state-container[_ngcontent-%COMP%] {\n gap: 0.75rem;\n max-width: 100%;\n justify-content: center;\n}\n\n.overlay-greeting[_ngcontent-%COMP%] {\n text-align: center;\n padding: 1rem 0 0;\n}\n\n.overlay-greeting-text[_ngcontent-%COMP%] {\n font-size: 1.1rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n.overlay-mode[_ngcontent-%COMP%] .message-input-wrapper[_ngcontent-%COMP%] {\n margin: 0.5rem 0;\n}\n\n\n\n\n@media (max-height: 820px) {\n .conversation-empty-state[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n .empty-state-container[_ngcontent-%COMP%] {\n gap: 0.75rem;\n }\n .greeting-section[_ngcontent-%COMP%] {\n padding: 0;\n }\n .greeting-icon[_ngcontent-%COMP%] {\n margin-bottom: 0.25rem;\n }\n .greeting-icon[_ngcontent-%COMP%] .fa-3x[_ngcontent-%COMP%] {\n font-size: 2em;\n }\n .greeting-title[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n }\n .tips-section[_ngcontent-%COMP%] {\n padding: 0.5rem 0 0;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .empty-state-container[_ngcontent-%COMP%] {\n gap: 0.75rem;\n }\n .greeting-section[_ngcontent-%COMP%] {\n padding: 0.25rem 0;\n }\n .greeting-icon[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n margin-bottom: 0.25rem;\n }\n .greeting-title[_ngcontent-%COMP%] {\n font-size: 1.1rem;\n }\n .greeting-subtitle[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n padding: 0 0.5rem;\n }\n .prompt-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n gap: 0.5rem;\n }\n .prompt-card[_ngcontent-%COMP%] {\n padding: 0.5rem;\n flex-direction: column;\n gap: 0.5rem;\n }\n .prompt-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 0.85rem;\n }\n .prompt-title[_ngcontent-%COMP%] {\n font-size: 0.75rem;\n }\n .prompt-text[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n -webkit-line-clamp: 1;\n }\n .message-input-wrapper[_ngcontent-%COMP%] {\n margin: 0.5rem 0;\n }\n .tips-section[_ngcontent-%COMP%] {\n display: none;\n }\n .loading-content[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n .loading-message[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n }\n}\n\n\n@media (max-width: 480px) {\n .empty-state-container[_ngcontent-%COMP%] {\n gap: 0.5rem;\n }\n .greeting-section[_ngcontent-%COMP%] {\n padding: 0.25rem 0;\n }\n .greeting-icon[_ngcontent-%COMP%] {\n font-size: 1.25rem;\n margin-bottom: 0.25rem;\n }\n .greeting-title[_ngcontent-%COMP%] {\n font-size: 1rem;\n }\n .greeting-subtitle[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n padding: 0 0.25rem;\n }\n .prompt-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n gap: 0.4rem;\n }\n .prompt-card[_ngcontent-%COMP%] {\n padding: 0.4rem;\n flex-direction: column;\n gap: 0.4rem;\n }\n .prompt-icon[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n font-size: 0.75rem;\n border-radius: 4px;\n }\n .prompt-title[_ngcontent-%COMP%] {\n font-size: 0.7rem;\n }\n .prompt-text[_ngcontent-%COMP%] {\n font-size: 0.65rem;\n -webkit-line-clamp: 1;\n }\n .message-input-wrapper[_ngcontent-%COMP%] {\n margin: 0.4rem 0;\n }\n .tips-section[_ngcontent-%COMP%] {\n display: none;\n }\n .loading-content[_ngcontent-%COMP%] {\n padding: 1rem;\n }\n .loading-message[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n }\n}"] });
|
|
287
315
|
}
|
|
288
316
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationEmptyStateComponent, [{
|
|
289
317
|
type: Component,
|
|
290
|
-
args: [{ standalone: false, selector: 'mj-conversation-empty-state', template: "<div class=\"conversation-empty-state\" [class.overlay-mode]=\"overlayMode\">\n <!-- Loading Overlay -->\n @if (disabled) {\n <div class=\"loading-overlay\">\n <mj-loading text=\"Creating your conversation...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <div class=\"empty-state-container\" [class.loading]=\"disabled\">\n <!-- Greeting Header (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"greeting-section\">\n <div class=\"greeting-icon\">\n <i class=\"fa-solid fa-comments fa-3x\"></i>\n </div>\n <h1 class=\"greeting-title\">Welcome to Conversations</h1>\n <p class=\"greeting-subtitle\">\n Start a new conversation by typing a message below, or choose a suggested prompt to get started.\n </p>\n </div>\n }\n\n <!-- Suggested Prompts (hidden in overlay mode) -->\n @if (suggestedPrompts.length > 0) {\n <div class=\"suggested-prompts\">\n <div class=\"prompt-grid\">\n @for (prompt of suggestedPrompts; track prompt) {\n <div\n class=\"prompt-card\"\n (click)=\"onSuggestedPromptClicked(prompt.prompt)\"\n [class.disabled]=\"disabled\"\n >\n <div class=\"prompt-icon\">\n <i class=\"{{prompt.icon}}\"></i>\n </div>\n <div class=\"prompt-content\">\n <div class=\"prompt-title\">{{prompt.title}}</div>\n <div class=\"prompt-text\">{{prompt.prompt}}</div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Compact greeting for overlay mode -->\n @if (overlayMode) {\n <div class=\"overlay-greeting\">\n <p class=\"overlay-greeting-text\">{{ greeting }}</p>\n </div>\n }\n\n <!-- Message Input (using full mj-message-input in empty state mode) -->\n <div class=\"message-input-wrapper\">\n <mj-message-input\n [placeholder]=\"overlayMode ? 'Type a message...' : 'Type your message to start a new conversation...'\"\n [disabled]=\"disabled\"\n [currentUser]=\"currentUser\"\n [emptyStateMode]=\"true\"\n [enableMentions]=\"enableMentions\"\n [enableAttachments]=\"enableAttachments\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n (emptyStateSubmit)=\"onEmptyStateSubmit($event)\">\n </mj-message-input>\n </div>\n\n <!-- Footer Tips (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"tips-section\">\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-at\"></i>\n <span>Use <strong>@AgentName</strong> to directly invoke a specific agent</span>\n </div>\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Press <strong>Enter</strong> to send, <strong>Shift+Enter</strong> for new line</span>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [":host {\n display: flex;\n flex: 1;\n height: 100%;\n min-height: 0;\n}\n\n.conversation-empty-state {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n width: 100%;\n padding: 2rem;\n overflow-y: auto;\n position: relative;\n}\n\n@media (max-width: 768px) {\n .conversation-empty-state {\n align-items: flex-start;\n padding: 1rem 0.75rem;\n }\n}\n\n.loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 95%, transparent);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n animation: fadeIn 0.2s ease-in;\n}\n\n.loading-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1rem;\n padding: 2rem;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n box-shadow: 0 4px 20px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n}\n.loading-content i {\n color: var(--mj-brand-primary);\n}\n\n.loading-message {\n font-size: 1rem;\n color: var(--mj-text-primary);\n font-weight: 500;\n margin: 0;\n}\n\n.empty-state-container {\n max-width: 800px;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 1.25rem;\n animation: fadeIn 0.3s ease-in;\n transition: opacity 0.2s ease;\n}\n.empty-state-container.loading {\n opacity: 0.4;\n pointer-events: none;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n/* Greeting Section */\n.greeting-section {\n text-align: center;\n padding: 0.5rem 0;\n}\n\n.greeting-icon {\n color: var(--mj-brand-primary);\n margin-bottom: 0.5rem;\n opacity: 0.8;\n}\n\n.greeting-title {\n font-size: 2rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-primary);\n}\n\n.greeting-subtitle {\n font-size: 1rem;\n color: var(--mj-text-secondary);\n margin: 0;\n line-height: 1.5;\n}\n\n/* Suggested Prompts */\n.suggested-prompts {\n margin: 0;\n}\n\n.prompt-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 1rem;\n}\n\n.prompt-card {\n display: flex;\n align-items: flex-start;\n gap: 1rem;\n padding: 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.prompt-card:hover:not(.disabled) {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-brand-primary);\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n}\n.prompt-card.disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.prompt-icon {\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-radius: 8px;\n font-size: 1.2rem;\n}\n\n.prompt-content {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-title {\n font-weight: 600;\n font-size: 0.95rem;\n color: var(--mj-text-primary);\n margin-bottom: 0.25rem;\n}\n\n.prompt-text {\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n/* Message Input Wrapper */\n.message-input-wrapper {\n margin: 0;\n width: 100%;\n}\n\n/* Tips Section */\n.tips-section {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n padding: 0.75rem 0 0;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tip-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: var(--mj-text-secondary);\n}\n.tip-item i {\n flex-shrink: 0;\n width: 24px;\n text-align: center;\n color: var(--mj-brand-primary);\n opacity: 0.7;\n}\n.tip-item strong {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n/* Overlay Mode \u2014 compact layout for floating chat widget */\n.conversation-empty-state.overlay-mode {\n padding: 1rem;\n align-items: center;\n justify-content: center;\n}\n\n.overlay-mode .empty-state-container {\n gap: 0.75rem;\n max-width: 100%;\n justify-content: center;\n}\n\n.overlay-greeting {\n text-align: center;\n padding: 1rem 0 0;\n}\n\n.overlay-greeting-text {\n font-size: 1.1rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n.overlay-mode .message-input-wrapper {\n margin: 0.5rem 0;\n}\n\n/* Short-viewport fallback \u2014 keep the welcome screen scroll-free when the\n available height is reduced (browser chrome, app header, smaller laptops). */\n@media (max-height: 820px) {\n .conversation-empty-state {\n padding: 1rem;\n }\n .empty-state-container {\n gap: 0.75rem;\n }\n .greeting-section {\n padding: 0;\n }\n .greeting-icon {\n margin-bottom: 0.25rem;\n }\n .greeting-icon .fa-3x {\n font-size: 2em;\n }\n .greeting-title {\n font-size: 1.5rem;\n }\n .tips-section {\n padding: 0.5rem 0 0;\n }\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .empty-state-container {\n gap: 0.75rem;\n }\n .greeting-section {\n padding: 0.25rem 0;\n }\n .greeting-icon {\n font-size: 1.5rem;\n margin-bottom: 0.25rem;\n }\n .greeting-title {\n font-size: 1.1rem;\n }\n .greeting-subtitle {\n font-size: 0.75rem;\n padding: 0 0.5rem;\n }\n .prompt-grid {\n grid-template-columns: repeat(2, 1fr);\n gap: 0.5rem;\n }\n .prompt-card {\n padding: 0.5rem;\n flex-direction: column;\n gap: 0.5rem;\n }\n .prompt-icon {\n width: 28px;\n height: 28px;\n font-size: 0.85rem;\n }\n .prompt-title {\n font-size: 0.75rem;\n }\n .prompt-text {\n font-size: 0.7rem;\n -webkit-line-clamp: 1;\n }\n .message-input-wrapper {\n margin: 0.5rem 0;\n }\n .tips-section {\n display: none;\n }\n .loading-content {\n padding: 1rem;\n }\n .loading-message {\n font-size: 0.85rem;\n }\n}\n/* Small Phone adjustments */\n@media (max-width: 480px) {\n .empty-state-container {\n gap: 0.5rem;\n }\n .greeting-section {\n padding: 0.25rem 0;\n }\n .greeting-icon {\n font-size: 1.25rem;\n margin-bottom: 0.25rem;\n }\n .greeting-title {\n font-size: 1rem;\n }\n .greeting-subtitle {\n font-size: 0.7rem;\n padding: 0 0.25rem;\n }\n .prompt-grid {\n grid-template-columns: repeat(2, 1fr);\n gap: 0.4rem;\n }\n .prompt-card {\n padding: 0.4rem;\n flex-direction: column;\n gap: 0.4rem;\n }\n .prompt-icon {\n width: 24px;\n height: 24px;\n font-size: 0.75rem;\n border-radius: 4px;\n }\n .prompt-title {\n font-size: 0.7rem;\n }\n .prompt-text {\n font-size: 0.65rem;\n -webkit-line-clamp: 1;\n }\n .message-input-wrapper {\n margin: 0.4rem 0;\n }\n .tips-section {\n display: none;\n }\n .loading-content {\n padding: 1rem;\n }\n .loading-message {\n font-size: 0.8rem;\n }\n}\n"] }]
|
|
318
|
+
args: [{ standalone: false, selector: 'mj-conversation-empty-state', template: "<div class=\"conversation-empty-state\" [class.overlay-mode]=\"overlayMode\">\n <!-- Loading Overlay -->\n @if (disabled) {\n <div class=\"loading-overlay\">\n <mj-loading text=\"Creating your conversation...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <div class=\"empty-state-container\" [class.loading]=\"disabled\">\n <!-- Greeting Header (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"greeting-section\">\n <div class=\"greeting-icon\">\n <i class=\"fa-solid fa-comments fa-3x\"></i>\n </div>\n <h1 class=\"greeting-title\">Welcome to Conversations</h1>\n <p class=\"greeting-subtitle\">\n Start a new conversation by typing a message below, or choose a suggested prompt to get started.\n </p>\n </div>\n }\n\n <!-- Suggested Prompts (hidden in overlay mode) -->\n @if (showSuggestedPrompts && suggestedPrompts.length > 0) {\n <div class=\"suggested-prompts\">\n <div class=\"prompt-grid\">\n @for (prompt of suggestedPrompts; track prompt) {\n <div\n class=\"prompt-card\"\n (click)=\"onSuggestedPromptClicked(prompt.prompt)\"\n [class.disabled]=\"disabled\"\n >\n <div class=\"prompt-icon\">\n <i class=\"{{prompt.icon}}\"></i>\n </div>\n <div class=\"prompt-content\">\n <div class=\"prompt-title\">{{prompt.title}}</div>\n <div class=\"prompt-text\">{{prompt.prompt}}</div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Compact greeting for overlay mode -->\n @if (overlayMode) {\n <div class=\"overlay-greeting\">\n <p class=\"overlay-greeting-text\">{{ greeting }}</p>\n </div>\n }\n\n <!-- Message Input (using full mj-message-input in empty state mode) -->\n <div class=\"message-input-wrapper\">\n <mj-message-input\n [initialDraft]=\"initialDraft\"\n (initialDraftApplied)=\"initialDraftApplied.emit()\"\n (DraftStateChanged)=\"DraftStateChanged.emit($event)\"\n (ComposerBlurred)=\"ComposerBlurred.emit()\"\n [placeholder]=\"overlayMode ? 'Type a message...' : 'Type your message to start a new conversation...'\"\n [disabled]=\"disabled\"\n [currentUser]=\"currentUser\"\n [emptyStateMode]=\"true\"\n [enableMentions]=\"enableMentions\"\n [enableAttachments]=\"enableAttachments\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n (emptyStateSubmit)=\"onEmptyStateSubmit($event)\">\n </mj-message-input>\n </div>\n\n <!-- Footer Tips (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"tips-section\">\n @if (enableMentions) {\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-at\"></i>\n <span>Use <strong>@AgentName</strong> to directly invoke a specific agent</span>\n </div>\n }\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Press <strong>Enter</strong> to send, <strong>Shift+Enter</strong> for new line</span>\n </div>\n </div>\n }\n </div>\n</div>\n", styles: [":host {\n display: flex;\n flex: 1;\n height: 100%;\n min-height: 0;\n}\n\n.conversation-empty-state {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n width: 100%;\n padding: 2rem;\n overflow-y: auto;\n position: relative;\n}\n\n@media (max-width: 768px) {\n .conversation-empty-state {\n align-items: flex-start;\n padding: 1rem 0.75rem;\n }\n}\n\n.loading-overlay {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: color-mix(in srgb, var(--mj-bg-surface-card) 95%, transparent);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n animation: fadeIn 0.2s ease-in;\n}\n\n.loading-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 1rem;\n padding: 2rem;\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n box-shadow: 0 4px 20px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n}\n.loading-content i {\n color: var(--mj-brand-primary);\n}\n\n.loading-message {\n font-size: 1rem;\n color: var(--mj-text-primary);\n font-weight: 500;\n margin: 0;\n}\n\n.empty-state-container {\n max-width: 800px;\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 1.25rem;\n animation: fadeIn 0.3s ease-in;\n transition: opacity 0.2s ease;\n}\n.empty-state-container.loading {\n opacity: 0.4;\n pointer-events: none;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n/* Greeting Section */\n.greeting-section {\n text-align: center;\n padding: 0.5rem 0;\n}\n\n.greeting-icon {\n color: var(--mj-brand-primary);\n margin-bottom: 0.5rem;\n opacity: 0.8;\n}\n\n.greeting-title {\n font-size: 2rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-primary);\n}\n\n.greeting-subtitle {\n font-size: 1rem;\n color: var(--mj-text-secondary);\n margin: 0;\n line-height: 1.5;\n}\n\n/* Suggested Prompts */\n.suggested-prompts {\n margin: 0;\n}\n\n.prompt-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 1rem;\n}\n\n.prompt-card {\n display: flex;\n align-items: flex-start;\n gap: 1rem;\n padding: 1.25rem;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n.prompt-card:hover:not(.disabled) {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-brand-primary);\n transform: translateY(-2px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-text-primary) 10%, transparent);\n}\n.prompt-card.disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n\n.prompt-icon {\n flex-shrink: 0;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-radius: 8px;\n font-size: 1.2rem;\n}\n\n.prompt-content {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-title {\n font-weight: 600;\n font-size: 0.95rem;\n color: var(--mj-text-primary);\n margin-bottom: 0.25rem;\n}\n\n.prompt-text {\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n line-height: 1.4;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n/* Message Input Wrapper */\n.message-input-wrapper {\n margin: 0;\n width: 100%;\n}\n\n/* Tips Section */\n.tips-section {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n padding: 0.75rem 0 0;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.tip-item {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-size: 0.875rem;\n color: var(--mj-text-secondary);\n}\n.tip-item i {\n flex-shrink: 0;\n width: 24px;\n text-align: center;\n color: var(--mj-brand-primary);\n opacity: 0.7;\n}\n.tip-item strong {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n/* Overlay Mode \u2014 compact layout for floating chat widget */\n.conversation-empty-state.overlay-mode {\n padding: 1rem;\n align-items: center;\n justify-content: center;\n}\n\n.overlay-mode .empty-state-container {\n gap: 0.75rem;\n max-width: 100%;\n justify-content: center;\n}\n\n.overlay-greeting {\n text-align: center;\n padding: 1rem 0 0;\n}\n\n.overlay-greeting-text {\n font-size: 1.1rem;\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n.overlay-mode .message-input-wrapper {\n margin: 0.5rem 0;\n}\n\n/* Short-viewport fallback \u2014 keep the welcome screen scroll-free when the\n available height is reduced (browser chrome, app header, smaller laptops). */\n@media (max-height: 820px) {\n .conversation-empty-state {\n padding: 1rem;\n }\n .empty-state-container {\n gap: 0.75rem;\n }\n .greeting-section {\n padding: 0;\n }\n .greeting-icon {\n margin-bottom: 0.25rem;\n }\n .greeting-icon .fa-3x {\n font-size: 2em;\n }\n .greeting-title {\n font-size: 1.5rem;\n }\n .tips-section {\n padding: 0.5rem 0 0;\n }\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .empty-state-container {\n gap: 0.75rem;\n }\n .greeting-section {\n padding: 0.25rem 0;\n }\n .greeting-icon {\n font-size: 1.5rem;\n margin-bottom: 0.25rem;\n }\n .greeting-title {\n font-size: 1.1rem;\n }\n .greeting-subtitle {\n font-size: 0.75rem;\n padding: 0 0.5rem;\n }\n .prompt-grid {\n grid-template-columns: repeat(2, 1fr);\n gap: 0.5rem;\n }\n .prompt-card {\n padding: 0.5rem;\n flex-direction: column;\n gap: 0.5rem;\n }\n .prompt-icon {\n width: 28px;\n height: 28px;\n font-size: 0.85rem;\n }\n .prompt-title {\n font-size: 0.75rem;\n }\n .prompt-text {\n font-size: 0.7rem;\n -webkit-line-clamp: 1;\n }\n .message-input-wrapper {\n margin: 0.5rem 0;\n }\n .tips-section {\n display: none;\n }\n .loading-content {\n padding: 1rem;\n }\n .loading-message {\n font-size: 0.85rem;\n }\n}\n/* Small Phone adjustments */\n@media (max-width: 480px) {\n .empty-state-container {\n gap: 0.5rem;\n }\n .greeting-section {\n padding: 0.25rem 0;\n }\n .greeting-icon {\n font-size: 1.25rem;\n margin-bottom: 0.25rem;\n }\n .greeting-title {\n font-size: 1rem;\n }\n .greeting-subtitle {\n font-size: 0.7rem;\n padding: 0 0.25rem;\n }\n .prompt-grid {\n grid-template-columns: repeat(2, 1fr);\n gap: 0.4rem;\n }\n .prompt-card {\n padding: 0.4rem;\n flex-direction: column;\n gap: 0.4rem;\n }\n .prompt-icon {\n width: 24px;\n height: 24px;\n font-size: 0.75rem;\n border-radius: 4px;\n }\n .prompt-title {\n font-size: 0.7rem;\n }\n .prompt-text {\n font-size: 0.65rem;\n -webkit-line-clamp: 1;\n }\n .message-input-wrapper {\n margin: 0.4rem 0;\n }\n .tips-section {\n display: none;\n }\n .loading-content {\n padding: 1rem;\n }\n .loading-message {\n font-size: 0.8rem;\n }\n}\n"] }]
|
|
291
319
|
}], () => [], { currentUser: [{
|
|
292
320
|
type: Input
|
|
293
321
|
}], disabled: [{
|
|
@@ -298,6 +326,8 @@ export class ConversationEmptyStateComponent {
|
|
|
298
326
|
type: Input
|
|
299
327
|
}], enableMentions: [{
|
|
300
328
|
type: Input
|
|
329
|
+
}], showSuggestedPrompts: [{
|
|
330
|
+
type: Input
|
|
301
331
|
}], maxAttachments: [{
|
|
302
332
|
type: Input
|
|
303
333
|
}], maxAttachmentSizeBytes: [{
|
|
@@ -311,6 +341,14 @@ export class ConversationEmptyStateComponent {
|
|
|
311
341
|
}], messageInput: [{
|
|
312
342
|
type: ViewChild,
|
|
313
343
|
args: [MessageInputComponent]
|
|
344
|
+
}], initialDraft: [{
|
|
345
|
+
type: Input
|
|
346
|
+
}], initialDraftApplied: [{
|
|
347
|
+
type: Output
|
|
348
|
+
}], DraftStateChanged: [{
|
|
349
|
+
type: Output
|
|
350
|
+
}], ComposerBlurred: [{
|
|
351
|
+
type: Output
|
|
314
352
|
}], messageSent: [{
|
|
315
353
|
type: Output
|
|
316
354
|
}], sidebarToggleClicked: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-empty-state.component.js","sourceRoot":"","sources":["../../../../src/lib/components/conversation/conversation-empty-state.component.ts","../../../../src/lib/components/conversation/conversation-empty-state.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { UserInfo } from '@memberjunction/core';\nimport { PendingAttachment } from '@memberjunction/ng-composer';\nimport { MessageInputComponent } from '../message/message-input.component';\n\n@Component({\n standalone: false,\n selector: 'mj-conversation-empty-state',\n templateUrl: './conversation-empty-state.component.html',\n styleUrls: ['./conversation-empty-state.component.css']\n})\nexport class ConversationEmptyStateComponent {\n @Input() currentUser!: UserInfo;\n @Input() disabled: boolean = false;\n @Input() showSidebarToggle: boolean = false;\n @Input() enableAttachments: boolean = false;\n @Input() enableMentions: boolean = true;\n @Input() maxAttachments: number = 10;\n @Input() maxAttachmentSizeBytes: number = 20 * 1024 * 1024;\n @Input() acceptedFileTypes: string = 'image/*';\n\n /** Greeting text shown in the empty state. Set by host app via overlay/chat-area chain. */\n @Input() greeting: string = 'How can I help you?';\n\n /** When true (overlay context), suggested prompts are hidden to save space */\n private _overlayMode = false;\n @Input()\n set overlayMode(value: boolean) {\n this._overlayMode = value;\n if (value) {\n this.suggestedPrompts = [];\n }\n }\n get overlayMode(): boolean {\n return this._overlayMode;\n }\n\n @ViewChild(MessageInputComponent) private messageInput?: MessageInputComponent;\n\n @Output() messageSent = new EventEmitter<{text: string; attachments: PendingAttachment[]}>();\n @Output() sidebarToggleClicked = new EventEmitter<void>();\n\n public messageText: string = '';\n\n // All available suggested prompts (business user focused)\n private allSuggestedPrompts: Array<{icon: string; title: string; prompt: string}> = [\n // Data Analysis & Insights\n {\n icon: 'fa-solid fa-clock-rotate-left',\n title: 'Recent changes',\n prompt: 'Show me what\\'s changed in my data recently'\n },\n {\n icon: 'fa-solid fa-list-check',\n title: 'Pending items',\n prompt: 'Find all my incomplete or pending items'\n },\n {\n icon: 'fa-solid fa-magnifying-glass',\n title: 'Search everything',\n prompt: 'Search everything in my system for a specific topic'\n },\n {\n icon: 'fa-solid fa-clipboard-check',\n title: 'Data quality',\n prompt: 'Analyze my data and find duplicates or inconsistencies'\n },\n {\n icon: 'fa-solid fa-inbox',\n title: 'Catch up',\n prompt: 'Create a summary of activity while I was away'\n },\n\n // Research & Information Gathering\n {\n icon: 'fa-solid fa-download',\n title: 'Research & save',\n prompt: 'Research a topic and save the findings to my database'\n },\n {\n icon: 'fa-solid fa-code-compare',\n title: 'Compare sources',\n prompt: 'Compare my data with information from the web'\n },\n {\n icon: 'fa-solid fa-folder-open',\n title: 'Search files',\n prompt: 'Search my files and documents for related information'\n },\n {\n icon: 'fa-solid fa-layer-group',\n title: 'Multi-source search',\n prompt: 'Find relevant information across all my data sources'\n },\n {\n icon: 'fa-solid fa-sitemap',\n title: 'Comprehensive research',\n prompt: 'Gather information on a topic from multiple sources'\n },\n\n // Automation & Agent Building\n {\n icon: 'fa-solid fa-calendar-day',\n title: 'Daily summaries',\n prompt: 'Create an agent to send me daily data summaries'\n },\n {\n icon: 'fa-solid fa-bell',\n title: 'Change alerts',\n prompt: 'Build an agent that monitors data changes and alerts me'\n },\n {\n icon: 'fa-solid fa-chart-column',\n title: 'Automated reports',\n prompt: 'Design an agent to aggregate data and create reports'\n },\n {\n icon: 'fa-solid fa-arrows-rotate',\n title: 'Data sync',\n prompt: 'Help me create an agent that syncs data with external systems'\n },\n {\n icon: 'fa-solid fa-file-import',\n title: 'File processor',\n prompt: 'Build an agent that processes files and updates my database'\n },\n {\n icon: 'fa-brands fa-slack',\n title: 'Slack notifications',\n prompt: 'Create an agent to post updates to Slack when data changes'\n },\n {\n icon: 'fa-solid fa-broom',\n title: 'Data cleanup',\n prompt: 'Design an agent that validates and cleans up my data regularly'\n },\n {\n icon: 'fa-solid fa-chart-pie',\n title: 'Auto visualizations',\n prompt: 'Build an agent that generates visualizations from my data'\n },\n {\n icon: 'fa-solid fa-graduation-cap',\n title: 'Research compiler',\n prompt: 'Create an agent to research topics and compile findings'\n },\n {\n icon: 'fa-solid fa-diagram-project',\n title: 'Workflow automation',\n prompt: 'Help me design a workflow agent with approval steps'\n }\n ];\n\n // Randomly selected prompts to display (refreshed on each load)\n public suggestedPrompts: Array<{icon: string; title: string; prompt: string}> = [];\n\n constructor() {\n // Select 4 random prompts on initialization\n this.suggestedPrompts = this.selectRandomPrompts(4);\n }\n\n /**\n * Select random prompts from the full list\n */\n private selectRandomPrompts(count: number): Array<{icon: string; title: string; prompt: string}> {\n const shuffled = [...this.allSuggestedPrompts].sort(() => Math.random() - 0.5);\n return shuffled.slice(0, count);\n }\n\n /**\n * Focus the message input programmatically.\n * Called by parent when the user clicks \"New Conversation\" while already on the empty state.\n */\n public FocusInput(): void {\n setTimeout(() => {\n if (this.messageInput) {\n this.messageInput.inputBox?.focus();\n }\n }, 100);\n }\n\n onEmptyStateSubmit(event: {text: string; attachments: PendingAttachment[]}): void {\n this.messageSent.emit(event);\n }\n\n onSuggestedPromptClicked(prompt: string): void {\n if (!this.disabled) {\n this.messageSent.emit({ text: prompt, attachments: [] });\n }\n }\n}\n","<div class=\"conversation-empty-state\" [class.overlay-mode]=\"overlayMode\">\n <!-- Loading Overlay -->\n @if (disabled) {\n <div class=\"loading-overlay\">\n <mj-loading text=\"Creating your conversation...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <div class=\"empty-state-container\" [class.loading]=\"disabled\">\n <!-- Greeting Header (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"greeting-section\">\n <div class=\"greeting-icon\">\n <i class=\"fa-solid fa-comments fa-3x\"></i>\n </div>\n <h1 class=\"greeting-title\">Welcome to Conversations</h1>\n <p class=\"greeting-subtitle\">\n Start a new conversation by typing a message below, or choose a suggested prompt to get started.\n </p>\n </div>\n }\n\n <!-- Suggested Prompts (hidden in overlay mode) -->\n @if (suggestedPrompts.length > 0) {\n <div class=\"suggested-prompts\">\n <div class=\"prompt-grid\">\n @for (prompt of suggestedPrompts; track prompt) {\n <div\n class=\"prompt-card\"\n (click)=\"onSuggestedPromptClicked(prompt.prompt)\"\n [class.disabled]=\"disabled\"\n >\n <div class=\"prompt-icon\">\n <i class=\"{{prompt.icon}}\"></i>\n </div>\n <div class=\"prompt-content\">\n <div class=\"prompt-title\">{{prompt.title}}</div>\n <div class=\"prompt-text\">{{prompt.prompt}}</div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Compact greeting for overlay mode -->\n @if (overlayMode) {\n <div class=\"overlay-greeting\">\n <p class=\"overlay-greeting-text\">{{ greeting }}</p>\n </div>\n }\n\n <!-- Message Input (using full mj-message-input in empty state mode) -->\n <div class=\"message-input-wrapper\">\n <mj-message-input\n [placeholder]=\"overlayMode ? 'Type a message...' : 'Type your message to start a new conversation...'\"\n [disabled]=\"disabled\"\n [currentUser]=\"currentUser\"\n [emptyStateMode]=\"true\"\n [enableMentions]=\"enableMentions\"\n [enableAttachments]=\"enableAttachments\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n (emptyStateSubmit)=\"onEmptyStateSubmit($event)\">\n </mj-message-input>\n </div>\n\n <!-- Footer Tips (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"tips-section\">\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-at\"></i>\n <span>Use <strong>@AgentName</strong> to directly invoke a specific agent</span>\n </div>\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Press <strong>Enter</strong> to send, <strong>Shift+Enter</strong> for new line</span>\n </div>\n </div>\n }\n </div>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"conversation-empty-state.component.js","sourceRoot":"","sources":["../../../../src/lib/components/conversation/conversation-empty-state.component.ts","../../../../src/lib/components/conversation/conversation-empty-state.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { UserInfo } from '@memberjunction/core';\nimport { PendingAttachment } from '@memberjunction/ng-composer';\nimport { MessageInputComponent } from '../message/message-input.component';\n\n@Component({\n standalone: false,\n selector: 'mj-conversation-empty-state',\n templateUrl: './conversation-empty-state.component.html',\n styleUrls: ['./conversation-empty-state.component.css']\n})\nexport class ConversationEmptyStateComponent {\n @Input() currentUser!: UserInfo;\n @Input() disabled: boolean = false;\n @Input() showSidebarToggle: boolean = false;\n @Input() enableAttachments: boolean = false;\n @Input() enableMentions: boolean = true;\n /** Show the built-in suggested-prompt chips. Hosts that don't want the default prompt vocabulary set false. */\n @Input() showSuggestedPrompts: boolean = true;\n @Input() maxAttachments: number = 10;\n @Input() maxAttachmentSizeBytes: number = 20 * 1024 * 1024;\n @Input() acceptedFileTypes: string = 'image/*';\n\n /** Greeting text shown in the empty state. Set by host app via overlay/chat-area chain. */\n @Input() greeting: string = 'How can I help you?';\n\n /** When true (overlay context), suggested prompts are hidden to save space */\n private _overlayMode = false;\n @Input()\n set overlayMode(value: boolean) {\n this._overlayMode = value;\n if (value) {\n this.suggestedPrompts = [];\n }\n }\n get overlayMode(): boolean {\n return this._overlayMode;\n }\n\n @ViewChild(MessageInputComponent) private messageInput?: MessageInputComponent;\n\n /** Draft staged into the composer on mount (see MessageInputComponent.initialDraft). */\n @Input() initialDraft: string | null = null;\n @Output() initialDraftApplied = new EventEmitter<void>();\n /** Forwarded from the inner composer — serialized draft on every value change. */\n @Output() DraftStateChanged = new EventEmitter<string>();\n /** Forwarded from the inner composer — persist-drafts save point. */\n @Output() ComposerBlurred = new EventEmitter<void>();\n\n @Output() messageSent = new EventEmitter<{text: string; attachments: PendingAttachment[]}>();\n @Output() sidebarToggleClicked = new EventEmitter<void>();\n\n public messageText: string = '';\n\n // All available suggested prompts (business user focused)\n private allSuggestedPrompts: Array<{icon: string; title: string; prompt: string}> = [\n // Data Analysis & Insights\n {\n icon: 'fa-solid fa-clock-rotate-left',\n title: 'Recent changes',\n prompt: 'Show me what\\'s changed in my data recently'\n },\n {\n icon: 'fa-solid fa-list-check',\n title: 'Pending items',\n prompt: 'Find all my incomplete or pending items'\n },\n {\n icon: 'fa-solid fa-magnifying-glass',\n title: 'Search everything',\n prompt: 'Search everything in my system for a specific topic'\n },\n {\n icon: 'fa-solid fa-clipboard-check',\n title: 'Data quality',\n prompt: 'Analyze my data and find duplicates or inconsistencies'\n },\n {\n icon: 'fa-solid fa-inbox',\n title: 'Catch up',\n prompt: 'Create a summary of activity while I was away'\n },\n\n // Research & Information Gathering\n {\n icon: 'fa-solid fa-download',\n title: 'Research & save',\n prompt: 'Research a topic and save the findings to my database'\n },\n {\n icon: 'fa-solid fa-code-compare',\n title: 'Compare sources',\n prompt: 'Compare my data with information from the web'\n },\n {\n icon: 'fa-solid fa-folder-open',\n title: 'Search files',\n prompt: 'Search my files and documents for related information'\n },\n {\n icon: 'fa-solid fa-layer-group',\n title: 'Multi-source search',\n prompt: 'Find relevant information across all my data sources'\n },\n {\n icon: 'fa-solid fa-sitemap',\n title: 'Comprehensive research',\n prompt: 'Gather information on a topic from multiple sources'\n },\n\n // Automation & Agent Building\n {\n icon: 'fa-solid fa-calendar-day',\n title: 'Daily summaries',\n prompt: 'Create an agent to send me daily data summaries'\n },\n {\n icon: 'fa-solid fa-bell',\n title: 'Change alerts',\n prompt: 'Build an agent that monitors data changes and alerts me'\n },\n {\n icon: 'fa-solid fa-chart-column',\n title: 'Automated reports',\n prompt: 'Design an agent to aggregate data and create reports'\n },\n {\n icon: 'fa-solid fa-arrows-rotate',\n title: 'Data sync',\n prompt: 'Help me create an agent that syncs data with external systems'\n },\n {\n icon: 'fa-solid fa-file-import',\n title: 'File processor',\n prompt: 'Build an agent that processes files and updates my database'\n },\n {\n icon: 'fa-brands fa-slack',\n title: 'Slack notifications',\n prompt: 'Create an agent to post updates to Slack when data changes'\n },\n {\n icon: 'fa-solid fa-broom',\n title: 'Data cleanup',\n prompt: 'Design an agent that validates and cleans up my data regularly'\n },\n {\n icon: 'fa-solid fa-chart-pie',\n title: 'Auto visualizations',\n prompt: 'Build an agent that generates visualizations from my data'\n },\n {\n icon: 'fa-solid fa-graduation-cap',\n title: 'Research compiler',\n prompt: 'Create an agent to research topics and compile findings'\n },\n {\n icon: 'fa-solid fa-diagram-project',\n title: 'Workflow automation',\n prompt: 'Help me design a workflow agent with approval steps'\n }\n ];\n\n // Randomly selected prompts to display (refreshed on each load)\n public suggestedPrompts: Array<{icon: string; title: string; prompt: string}> = [];\n\n constructor() {\n // Select 4 random prompts on initialization\n this.suggestedPrompts = this.selectRandomPrompts(4);\n }\n\n /**\n * Select random prompts from the full list\n */\n private selectRandomPrompts(count: number): Array<{icon: string; title: string; prompt: string}> {\n const shuffled = [...this.allSuggestedPrompts].sort(() => Math.random() - 0.5);\n return shuffled.slice(0, count);\n }\n\n /**\n * Focus the message input programmatically.\n * Called by parent when the user clicks \"New Conversation\" while already on the empty state.\n */\n /**\n * Pre-addresses the composer to an agent as a resolved mention pill (delegates to\n * MessageInputComponent.InsertAgentMention). Returns false while the input isn't\n * mounted — callers may retry.\n */\n public async InsertAgentMention(agentName: string, focus: boolean = true): Promise<boolean> {\n if (!this.messageInput) {\n return false;\n }\n return this.messageInput.InsertAgentMention(agentName, focus);\n }\n\n public FocusInput(): void {\n setTimeout(() => {\n if (this.messageInput) {\n this.messageInput.inputBox?.focus();\n }\n }, 100);\n }\n\n onEmptyStateSubmit(event: {text: string; attachments: PendingAttachment[]}): void {\n this.messageSent.emit(event);\n }\n\n onSuggestedPromptClicked(prompt: string): void {\n if (!this.disabled) {\n this.messageSent.emit({ text: prompt, attachments: [] });\n }\n }\n}\n","<div class=\"conversation-empty-state\" [class.overlay-mode]=\"overlayMode\">\n <!-- Loading Overlay -->\n @if (disabled) {\n <div class=\"loading-overlay\">\n <mj-loading text=\"Creating your conversation...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <div class=\"empty-state-container\" [class.loading]=\"disabled\">\n <!-- Greeting Header (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"greeting-section\">\n <div class=\"greeting-icon\">\n <i class=\"fa-solid fa-comments fa-3x\"></i>\n </div>\n <h1 class=\"greeting-title\">Welcome to Conversations</h1>\n <p class=\"greeting-subtitle\">\n Start a new conversation by typing a message below, or choose a suggested prompt to get started.\n </p>\n </div>\n }\n\n <!-- Suggested Prompts (hidden in overlay mode) -->\n @if (showSuggestedPrompts && suggestedPrompts.length > 0) {\n <div class=\"suggested-prompts\">\n <div class=\"prompt-grid\">\n @for (prompt of suggestedPrompts; track prompt) {\n <div\n class=\"prompt-card\"\n (click)=\"onSuggestedPromptClicked(prompt.prompt)\"\n [class.disabled]=\"disabled\"\n >\n <div class=\"prompt-icon\">\n <i class=\"{{prompt.icon}}\"></i>\n </div>\n <div class=\"prompt-content\">\n <div class=\"prompt-title\">{{prompt.title}}</div>\n <div class=\"prompt-text\">{{prompt.prompt}}</div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Compact greeting for overlay mode -->\n @if (overlayMode) {\n <div class=\"overlay-greeting\">\n <p class=\"overlay-greeting-text\">{{ greeting }}</p>\n </div>\n }\n\n <!-- Message Input (using full mj-message-input in empty state mode) -->\n <div class=\"message-input-wrapper\">\n <mj-message-input\n [initialDraft]=\"initialDraft\"\n (initialDraftApplied)=\"initialDraftApplied.emit()\"\n (DraftStateChanged)=\"DraftStateChanged.emit($event)\"\n (ComposerBlurred)=\"ComposerBlurred.emit()\"\n [placeholder]=\"overlayMode ? 'Type a message...' : 'Type your message to start a new conversation...'\"\n [disabled]=\"disabled\"\n [currentUser]=\"currentUser\"\n [emptyStateMode]=\"true\"\n [enableMentions]=\"enableMentions\"\n [enableAttachments]=\"enableAttachments\"\n [maxAttachments]=\"maxAttachments\"\n [maxAttachmentSizeBytes]=\"maxAttachmentSizeBytes\"\n [acceptedFileTypes]=\"acceptedFileTypes\"\n (emptyStateSubmit)=\"onEmptyStateSubmit($event)\">\n </mj-message-input>\n </div>\n\n <!-- Footer Tips (hidden in overlay mode) -->\n @if (!overlayMode) {\n <div class=\"tips-section\">\n @if (enableMentions) {\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-at\"></i>\n <span>Use <strong>@AgentName</strong> to directly invoke a specific agent</span>\n </div>\n }\n <div class=\"tip-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Press <strong>Enter</strong> to send, <strong>Shift+Enter</strong> for new line</span>\n </div>\n </div>\n }\n </div>\n</div>\n"]}
|
|
@@ -41,6 +41,8 @@ export declare class MessageInputComponent extends BaseAngularComponent implemen
|
|
|
41
41
|
parentMessageId?: string;
|
|
42
42
|
enableAttachments: boolean;
|
|
43
43
|
enableMentions: boolean;
|
|
44
|
+
enablePlanMode: boolean;
|
|
45
|
+
enableRealtime: boolean;
|
|
44
46
|
maxAttachments: number;
|
|
45
47
|
maxAttachmentSizeBytes: number;
|
|
46
48
|
acceptedFileTypes: string;
|
|
@@ -216,6 +218,51 @@ export declare class MessageInputComponent extends BaseAngularComponent implemen
|
|
|
216
218
|
}>;
|
|
217
219
|
inputBox: AiComposerComponent;
|
|
218
220
|
messageText: string;
|
|
221
|
+
/**
|
|
222
|
+
* Prefills the composer with draft text WITHOUT sending (unlike pendingMessage,
|
|
223
|
+
* which auto-sends) and focuses the input — e.g. the omnibar's '@agent' flow
|
|
224
|
+
* lands in chat with '@AgentName ' staged so the user just types their ask.
|
|
225
|
+
*/
|
|
226
|
+
/**
|
|
227
|
+
* Draft text to stage in the composer when this input mounts (NOT sent — unlike
|
|
228
|
+
* pendingMessage). Applied once per distinct value, view-readiness-proof: if the
|
|
229
|
+
* view isn't up yet, ngAfterViewInit applies it. Emits initialDraftApplied so the
|
|
230
|
+
* host can clear its pending state.
|
|
231
|
+
*/
|
|
232
|
+
set initialDraft(value: string | null);
|
|
233
|
+
get initialDraft(): string | null;
|
|
234
|
+
private appliedInitialDraft;
|
|
235
|
+
private pendingInitialDraft;
|
|
236
|
+
initialDraftApplied: EventEmitter<void>;
|
|
237
|
+
/**
|
|
238
|
+
* Live draft-state signal: fires on every composer value change with the
|
|
239
|
+
* SERIALIZED content (mention pills encoded via getPlainTextWithJsonMentions,
|
|
240
|
+
* so hosts can persist drafts losslessly). Empty string = draft cleared.
|
|
241
|
+
*/
|
|
242
|
+
DraftStateChanged: EventEmitter<string>;
|
|
243
|
+
/** The composer lost focus — hosts flush persisted drafts on this. */
|
|
244
|
+
ComposerBlurred: EventEmitter<void>;
|
|
245
|
+
/** Handles the composer's value stream: keeps messageText in sync + emits draft state. */
|
|
246
|
+
OnComposerValueChanged(value: string): void;
|
|
247
|
+
/** Current composer content in the lossless serialized form ('' when empty). */
|
|
248
|
+
GetSerializedDraft(): string;
|
|
249
|
+
/**
|
|
250
|
+
* Pre-addresses the composer to an agent as a RESOLVED mention pill (+ trailing
|
|
251
|
+
* space, caret after, focused) — identical to the user typing '@agent' and picking
|
|
252
|
+
* it from the dropdown. Resolves the agent through MentionAutocompleteService so
|
|
253
|
+
* the chip carries the agent's real id/icon/presets; falls back to a plain-text
|
|
254
|
+
* '@Name ' draft when the agent can't be resolved (e.g. name mismatch).
|
|
255
|
+
*
|
|
256
|
+
* @returns false while the composer view isn't mounted yet — callers may retry.
|
|
257
|
+
*/
|
|
258
|
+
InsertAgentMention(agentName: string, focus?: boolean, clearExisting?: boolean): Promise<boolean>;
|
|
259
|
+
/**
|
|
260
|
+
* The insert happens mid-tab-mount; late-arriving chat UI (lists, empty-state
|
|
261
|
+
* autofocus, tab chrome) can steal focus AFTER we set it. Re-assert at settle
|
|
262
|
+
* points — only when focus genuinely left the editor, so we never fight the user.
|
|
263
|
+
*/
|
|
264
|
+
private scheduleFocusReassert;
|
|
265
|
+
SetDraft(text: string, focus?: boolean): void;
|
|
219
266
|
isSending: boolean;
|
|
220
267
|
isProcessing: boolean;
|
|
221
268
|
processingMessage: string;
|
|
@@ -580,6 +627,6 @@ export declare class MessageInputComponent extends BaseAngularComponent implemen
|
|
|
580
627
|
*/
|
|
581
628
|
private cleanupCompletionTimestamp;
|
|
582
629
|
static ɵfac: i0.ɵɵFactoryDeclaration<MessageInputComponent, never>;
|
|
583
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MessageInputComponent, "mj-message-input", never, { "conversationId": { "alias": "conversationId"; "required": false; }; "conversationName": { "alias": "conversationName"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "parentMessageId": { "alias": "parentMessageId"; "required": false; }; "enableAttachments": { "alias": "enableAttachments"; "required": false; }; "enableMentions": { "alias": "enableMentions"; "required": false; }; "maxAttachments": { "alias": "maxAttachments"; "required": false; }; "maxAttachmentSizeBytes": { "alias": "maxAttachmentSizeBytes"; "required": false; }; "acceptedFileTypes": { "alias": "acceptedFileTypes"; "required": false; }; "artifactsByDetailId": { "alias": "artifactsByDetailId"; "required": false; }; "systemArtifactsByDetailId": { "alias": "systemArtifactsByDetailId"; "required": false; }; "agentRunsByDetailId": { "alias": "agentRunsByDetailId"; "required": false; }; "emptyStateMode": { "alias": "emptyStateMode"; "required": false; }; "appContext": { "alias": "appContext"; "required": false; }; "defaultAgentId": { "alias": "defaultAgentId"; "required": false; }; "conversationDefaultAgentId": { "alias": "conversationDefaultAgentId"; "required": false; }; "agentConfigurationPresetId": { "alias": "agentConfigurationPresetId"; "required": false; }; "initialMessage": { "alias": "initialMessage"; "required": false; }; "initialAttachments": { "alias": "initialAttachments"; "required": false; }; "conversationHistory": { "alias": "conversationHistory"; "required": false; }; "inProgressMessageIds": { "alias": "inProgressMessageIds"; "required": false; }; "applicationId": { "alias": "applicationId"; "required": false; }; }, { "messageSent": "messageSent"; "agentResponse": "agentResponse"; "beforeAgentTurn": "beforeAgentTurn"; "afterAgentTurn": "afterAgentTurn"; "agentRunDetected": "agentRunDetected"; "agentRunUpdate": "agentRunUpdate"; "messageComplete": "messageComplete"; "artifactCreated": "artifactCreated"; "conversationRenamed": "conversationRenamed"; "intentCheckStarted": "intentCheckStarted"; "intentCheckCompleted": "intentCheckCompleted"; "initialMessageAutoSendStarted": "initialMessageAutoSendStarted"; "initialMessageAutoSendFailed": "initialMessageAutoSendFailed"; "emptyStateSubmit": "emptyStateSubmit"; "uploadStateChanged": "uploadStateChanged"; }, never, never, false, never>;
|
|
630
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MessageInputComponent, "mj-message-input", never, { "conversationId": { "alias": "conversationId"; "required": false; }; "conversationName": { "alias": "conversationName"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "parentMessageId": { "alias": "parentMessageId"; "required": false; }; "enableAttachments": { "alias": "enableAttachments"; "required": false; }; "enableMentions": { "alias": "enableMentions"; "required": false; }; "enablePlanMode": { "alias": "enablePlanMode"; "required": false; }; "enableRealtime": { "alias": "enableRealtime"; "required": false; }; "maxAttachments": { "alias": "maxAttachments"; "required": false; }; "maxAttachmentSizeBytes": { "alias": "maxAttachmentSizeBytes"; "required": false; }; "acceptedFileTypes": { "alias": "acceptedFileTypes"; "required": false; }; "artifactsByDetailId": { "alias": "artifactsByDetailId"; "required": false; }; "systemArtifactsByDetailId": { "alias": "systemArtifactsByDetailId"; "required": false; }; "agentRunsByDetailId": { "alias": "agentRunsByDetailId"; "required": false; }; "emptyStateMode": { "alias": "emptyStateMode"; "required": false; }; "appContext": { "alias": "appContext"; "required": false; }; "defaultAgentId": { "alias": "defaultAgentId"; "required": false; }; "conversationDefaultAgentId": { "alias": "conversationDefaultAgentId"; "required": false; }; "agentConfigurationPresetId": { "alias": "agentConfigurationPresetId"; "required": false; }; "initialMessage": { "alias": "initialMessage"; "required": false; }; "initialAttachments": { "alias": "initialAttachments"; "required": false; }; "conversationHistory": { "alias": "conversationHistory"; "required": false; }; "inProgressMessageIds": { "alias": "inProgressMessageIds"; "required": false; }; "applicationId": { "alias": "applicationId"; "required": false; }; "initialDraft": { "alias": "initialDraft"; "required": false; }; }, { "messageSent": "messageSent"; "agentResponse": "agentResponse"; "beforeAgentTurn": "beforeAgentTurn"; "afterAgentTurn": "afterAgentTurn"; "agentRunDetected": "agentRunDetected"; "agentRunUpdate": "agentRunUpdate"; "messageComplete": "messageComplete"; "artifactCreated": "artifactCreated"; "conversationRenamed": "conversationRenamed"; "intentCheckStarted": "intentCheckStarted"; "intentCheckCompleted": "intentCheckCompleted"; "initialMessageAutoSendStarted": "initialMessageAutoSendStarted"; "initialMessageAutoSendFailed": "initialMessageAutoSendFailed"; "emptyStateSubmit": "emptyStateSubmit"; "uploadStateChanged": "uploadStateChanged"; "initialDraftApplied": "initialDraftApplied"; "DraftStateChanged": "DraftStateChanged"; "ComposerBlurred": "ComposerBlurred"; }, never, never, false, never>;
|
|
584
631
|
}
|
|
585
632
|
//# sourceMappingURL=message-input.component.d.ts.map
|
|
@@ -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,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9I,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAmE,MAAM,+BAA+B,CAAC;AAC5I,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAsB,MAAM,8BAA8B,CAAC;AACvH,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAkD,MAAM,+CAA+C,CAAC;AAI7I,OAAO,EAAE,kBAAkB,EAA+G,MAAM,8BAA8B,CAAC;AAC/K,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAC;AAG/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;;AAUhF,qBAMa,qBAAsB,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa;
|
|
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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"}
|