@memberjunction/ng-conversations 2.113.2 → 2.115.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.
Files changed (47) hide show
  1. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +7 -1
  2. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  3. package/dist/lib/components/conversation/conversation-chat-area.component.js +90 -33
  4. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  5. package/dist/lib/components/conversation/conversation-empty-state.component.js +2 -2
  6. package/dist/lib/components/conversation/conversation-list.component.js +1 -1
  7. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  8. package/dist/lib/components/mention/mention-dropdown.component.js +31 -23
  9. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
  10. package/dist/lib/components/mention/mention-editor.component.d.ts +117 -0
  11. package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -0
  12. package/dist/lib/components/mention/mention-editor.component.js +550 -0
  13. package/dist/lib/components/mention/mention-editor.component.js.map +1 -0
  14. package/dist/lib/components/message/message-input-box.component.d.ts +19 -34
  15. package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
  16. package/dist/lib/components/message/message-input-box.component.js +66 -176
  17. package/dist/lib/components/message/message-input-box.component.js.map +1 -1
  18. package/dist/lib/components/message/message-input.component.d.ts +7 -1
  19. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  20. package/dist/lib/components/message/message-input.component.js +124 -36
  21. package/dist/lib/components/message/message-input.component.js.map +1 -1
  22. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  23. package/dist/lib/components/message/message-item.component.js +41 -3
  24. package/dist/lib/components/message/message-item.component.js.map +1 -1
  25. package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
  26. package/dist/lib/components/navigation/conversation-navigation.component.js +3 -3
  27. package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
  28. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  29. package/dist/lib/components/tasks/tasks-dropdown.component.js +3 -3
  30. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  31. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +15 -1
  32. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  33. package/dist/lib/components/workspace/conversation-workspace.component.js +203 -80
  34. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  35. package/dist/lib/conversations.module.d.ts +55 -54
  36. package/dist/lib/conversations.module.d.ts.map +1 -1
  37. package/dist/lib/conversations.module.js +4 -0
  38. package/dist/lib/conversations.module.js.map +1 -1
  39. package/dist/lib/services/mention-autocomplete.service.d.ts +8 -0
  40. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
  41. package/dist/lib/services/mention-autocomplete.service.js +34 -3
  42. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  43. package/dist/public-api.d.ts +1 -0
  44. package/dist/public-api.d.ts.map +1 -1
  45. package/dist/public-api.js +1 -0
  46. package/dist/public-api.js.map +1 -1
  47. package/package.json +14 -14
@@ -0,0 +1,550 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild, forwardRef } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/mention-autocomplete.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "./mention-dropdown.component";
7
+ const _c0 = ["editor"];
8
+ function MentionEditorComponent_mj_mention_dropdown_3_Template(rf, ctx) { if (rf & 1) {
9
+ const _r2 = i0.ɵɵgetCurrentView();
10
+ i0.ɵɵelementStart(0, "mj-mention-dropdown", 4);
11
+ i0.ɵɵlistener("suggestionSelected", function MentionEditorComponent_mj_mention_dropdown_3_Template_mj_mention_dropdown_suggestionSelected_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onMentionSelected($event)); })("closed", function MentionEditorComponent_mj_mention_dropdown_3_Template_mj_mention_dropdown_closed_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeMentionDropdown()); });
12
+ i0.ɵɵelementEnd();
13
+ } if (rf & 2) {
14
+ const ctx_r2 = i0.ɵɵnextContext();
15
+ i0.ɵɵproperty("suggestions", ctx_r2.mentionSuggestions)("position", ctx_r2.mentionDropdownPosition)("showAbove", ctx_r2.mentionDropdownShowAbove)("useFixedPositioning", true)("visible", true);
16
+ } }
17
+ /**
18
+ * ContentEditable-based mention editor with visual chips/pills
19
+ * Provides Slack/Teams-style mention UX with immutable mention tokens
20
+ */
21
+ export class MentionEditorComponent {
22
+ mentionAutocomplete;
23
+ editorRef;
24
+ placeholder = 'Type @ to mention agents or users...';
25
+ disabled = false;
26
+ currentUser;
27
+ enableMentions = true;
28
+ valueChange = new EventEmitter();
29
+ mentionSelected = new EventEmitter();
30
+ enterPressed = new EventEmitter();
31
+ // Mention dropdown state
32
+ showMentionDropdown = false;
33
+ mentionSuggestions = [];
34
+ mentionDropdownPosition = { top: 0, left: 0 };
35
+ mentionDropdownShowAbove = false;
36
+ mentionStartIndex = -1;
37
+ mentionQuery = '';
38
+ onChange = () => { };
39
+ onTouched = () => { };
40
+ constructor(mentionAutocomplete) {
41
+ this.mentionAutocomplete = mentionAutocomplete;
42
+ }
43
+ async ngOnInit() {
44
+ if (this.enableMentions && this.currentUser) {
45
+ await this.mentionAutocomplete.initialize(this.currentUser);
46
+ }
47
+ }
48
+ ngAfterViewInit() {
49
+ // Auto-focus the editor
50
+ setTimeout(() => {
51
+ this.editorRef?.nativeElement?.focus();
52
+ }, 100);
53
+ }
54
+ /**
55
+ * Handle clicks on the container - focus the editor if clicking outside the contentEditable
56
+ */
57
+ onContainerClick(event) {
58
+ const target = event.target;
59
+ const editor = this.editorRef?.nativeElement;
60
+ // Don't handle clicks on the dropdown or its children
61
+ if (target.closest('mj-mention-dropdown')) {
62
+ return;
63
+ }
64
+ // If clicking on container or any element that's not the editor itself, focus the editor
65
+ if (target !== editor && !editor?.contains(target)) {
66
+ editor?.focus();
67
+ // Move cursor to end of content
68
+ const selection = window.getSelection();
69
+ const range = document.createRange();
70
+ if (editor && selection) {
71
+ range.selectNodeContents(editor);
72
+ range.collapse(false); // Collapse to end
73
+ selection.removeAllRanges();
74
+ selection.addRange(range);
75
+ }
76
+ }
77
+ }
78
+ /**
79
+ * Handle input changes in contentEditable
80
+ */
81
+ onInput() {
82
+ const plainText = this.getPlainText();
83
+ this.onChange(plainText);
84
+ this.valueChange.emit(plainText);
85
+ // Handle @mention autocomplete
86
+ if (this.enableMentions && this.currentUser) {
87
+ this.handleMentionInput();
88
+ }
89
+ }
90
+ /**
91
+ * Handle blur event - close dropdown when editor loses focus
92
+ */
93
+ onBlur() {
94
+ // Call form control touched callback
95
+ this.onTouched();
96
+ // Close dropdown when editor loses focus
97
+ // Use setTimeout to allow mousedown events on dropdown to fire first
98
+ setTimeout(() => {
99
+ if (this.showMentionDropdown) {
100
+ console.log('[MentionEditor] Closing dropdown on blur');
101
+ this.closeMentionDropdown();
102
+ }
103
+ }, 200);
104
+ }
105
+ /**
106
+ * Handle paste event - strip HTML and paste as plain text only
107
+ */
108
+ onPaste(event) {
109
+ event.preventDefault();
110
+ // Get plain text from clipboard
111
+ const text = event.clipboardData?.getData('text/plain') || '';
112
+ if (!text)
113
+ return;
114
+ // Insert plain text at cursor position
115
+ const selection = window.getSelection();
116
+ if (!selection || selection.rangeCount === 0)
117
+ return;
118
+ const range = selection.getRangeAt(0);
119
+ range.deleteContents();
120
+ // Insert text as text node (not HTML)
121
+ const textNode = document.createTextNode(text);
122
+ range.insertNode(textNode);
123
+ // Move cursor to end of inserted text
124
+ range.setStartAfter(textNode);
125
+ range.collapse(true);
126
+ selection.removeAllRanges();
127
+ selection.addRange(range);
128
+ // Trigger input event to update model
129
+ this.onInput();
130
+ }
131
+ /**
132
+ * Handle keydown events
133
+ */
134
+ onKeyDown(event) {
135
+ // Enter alone: Send message (if dropdown not showing)
136
+ if (event.key === 'Enter' && !event.shiftKey && !this.showMentionDropdown) {
137
+ event.preventDefault();
138
+ const plainText = this.getPlainText();
139
+ this.enterPressed.emit(plainText);
140
+ return;
141
+ }
142
+ // Backspace: Check if deleting a mention chip
143
+ if (event.key === 'Backspace') {
144
+ this.handleBackspace(event);
145
+ }
146
+ // Handle mention dropdown navigation
147
+ if (this.showMentionDropdown) {
148
+ // Let the dropdown handle arrow keys, enter, escape
149
+ // (We'll pass these through to mention-dropdown component)
150
+ }
151
+ }
152
+ /**
153
+ * Handle @mention input detection
154
+ */
155
+ handleMentionInput() {
156
+ const selection = window.getSelection();
157
+ if (!selection || selection.rangeCount === 0)
158
+ return;
159
+ const range = selection.getRangeAt(0);
160
+ const textBeforeCursor = this.getTextBeforeCursor(range);
161
+ // Find the last @ before cursor
162
+ const lastAtIndex = textBeforeCursor.lastIndexOf('@');
163
+ if (lastAtIndex === -1) {
164
+ this.closeMentionDropdown();
165
+ return;
166
+ }
167
+ // Check if there's a space between @ and cursor (means mention was completed)
168
+ const textAfterAt = textBeforeCursor.substring(lastAtIndex + 1);
169
+ if (textAfterAt.includes(' ')) {
170
+ this.closeMentionDropdown();
171
+ return;
172
+ }
173
+ // Extract query
174
+ this.mentionQuery = textAfterAt;
175
+ this.mentionStartIndex = lastAtIndex;
176
+ // Get suggestions
177
+ this.mentionSuggestions = this.mentionAutocomplete.getSuggestions(this.mentionQuery, !!this.currentUser);
178
+ if (this.mentionSuggestions.length > 0) {
179
+ this.showMentionDropdown = true;
180
+ this.positionMentionDropdown();
181
+ }
182
+ else {
183
+ this.closeMentionDropdown();
184
+ }
185
+ }
186
+ /**
187
+ * Get text before cursor position
188
+ */
189
+ getTextBeforeCursor(range) {
190
+ const tempRange = range.cloneRange();
191
+ tempRange.selectNodeContents(this.editorRef.nativeElement);
192
+ tempRange.setEnd(range.startContainer, range.startOffset);
193
+ return tempRange.toString();
194
+ }
195
+ /**
196
+ * Position the mention dropdown
197
+ */
198
+ positionMentionDropdown() {
199
+ const editor = this.editorRef?.nativeElement;
200
+ if (!editor)
201
+ return;
202
+ // Get the parent container (message-input-box-container) for alignment
203
+ const container = editor.closest('.message-input-box-container');
204
+ const containerRect = container?.getBoundingClientRect();
205
+ const selection = window.getSelection();
206
+ if (!selection || selection.rangeCount === 0)
207
+ return;
208
+ const range = selection.getRangeAt(0);
209
+ const cursorRect = range.getBoundingClientRect();
210
+ // Check space below vs above
211
+ const spaceBelow = window.innerHeight - cursorRect.bottom;
212
+ const spaceAbove = cursorRect.top;
213
+ const dropdownHeight = Math.min(this.mentionSuggestions.length * 56, 300);
214
+ this.mentionDropdownShowAbove = spaceBelow < dropdownHeight && spaceAbove > spaceBelow;
215
+ if (this.mentionDropdownShowAbove) {
216
+ // Position above, aligning with container top if possible
217
+ this.mentionDropdownPosition = {
218
+ top: containerRect ? containerRect.top + window.scrollY : cursorRect.top + window.scrollY - 4,
219
+ left: cursorRect.left + window.scrollX
220
+ };
221
+ }
222
+ else {
223
+ // Position below cursor, but align bottom edge with container top
224
+ this.mentionDropdownPosition = {
225
+ top: containerRect ? containerRect.top + window.scrollY : cursorRect.bottom + window.scrollY + 4,
226
+ left: cursorRect.left + window.scrollX
227
+ };
228
+ }
229
+ }
230
+ /**
231
+ * Handle mention selection from dropdown
232
+ */
233
+ onMentionSelected(suggestion) {
234
+ console.log('[MentionEditor] Mention selected:', suggestion);
235
+ this.insertMentionChip(suggestion);
236
+ this.closeMentionDropdown();
237
+ this.mentionSelected.emit(suggestion);
238
+ // Refocus the editor after selection
239
+ setTimeout(() => {
240
+ this.editorRef?.nativeElement?.focus();
241
+ }, 50);
242
+ }
243
+ /**
244
+ * Insert a mention chip at the current cursor position
245
+ */
246
+ insertMentionChip(suggestion) {
247
+ const selection = window.getSelection();
248
+ if (!selection || selection.rangeCount === 0)
249
+ return;
250
+ const range = selection.getRangeAt(0);
251
+ // Delete the @query text
252
+ const textBeforeCursor = this.getTextBeforeCursor(range);
253
+ const lastAtIndex = textBeforeCursor.lastIndexOf('@');
254
+ const deleteLength = textBeforeCursor.length - lastAtIndex;
255
+ range.setStart(range.startContainer, range.startOffset - deleteLength);
256
+ range.deleteContents();
257
+ // Create mention chip element
258
+ const chip = this.createMentionChip(suggestion);
259
+ // Insert chip
260
+ range.insertNode(chip);
261
+ // Add space after chip
262
+ const space = document.createTextNode(' ');
263
+ range.collapse(false);
264
+ range.insertNode(space);
265
+ // Move cursor after the space
266
+ range.setStartAfter(space);
267
+ range.collapse(true);
268
+ selection.removeAllRanges();
269
+ selection.addRange(range);
270
+ // Trigger change detection
271
+ this.onInput();
272
+ }
273
+ /**
274
+ * Create a mention chip DOM element
275
+ */
276
+ createMentionChip(suggestion) {
277
+ const chip = document.createElement('span');
278
+ chip.className = 'mention-chip';
279
+ chip.contentEditable = 'false'; // Make chip non-editable
280
+ chip.setAttribute('data-mention-id', suggestion.id);
281
+ chip.setAttribute('data-mention-type', suggestion.type);
282
+ chip.setAttribute('data-mention-name', suggestion.name);
283
+ // Apply inline styles directly
284
+ const isUser = suggestion.type === 'user';
285
+ chip.style.cssText = `
286
+ display: inline-flex;
287
+ align-items: center;
288
+ gap: 5px;
289
+ padding: 4px 12px;
290
+ margin: 0 3px;
291
+ border-radius: 16px;
292
+ font-size: 13px;
293
+ font-weight: 600;
294
+ cursor: default;
295
+ user-select: none;
296
+ vertical-align: middle;
297
+ white-space: nowrap;
298
+ pointer-events: all;
299
+ background: ${isUser ? 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)' : 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)'};
300
+ color: white;
301
+ border: 2px solid ${isUser ? 'rgba(240, 147, 251, 0.4)' : 'rgba(102, 126, 234, 0.4)'};
302
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2), 0 1px 2px rgba(0, 0, 0, 0.1);
303
+ `;
304
+ // Add icon or image
305
+ if (suggestion.type === 'agent' && suggestion.imageUrl) {
306
+ // Use image if available (LogoURL from agent)
307
+ const img = document.createElement('img');
308
+ img.src = suggestion.imageUrl;
309
+ img.alt = suggestion.displayName;
310
+ img.style.cssText = 'width: 16px; height: 16px; border-radius: 50%; object-fit: cover;';
311
+ chip.appendChild(img);
312
+ }
313
+ else if (suggestion.type === 'agent' && suggestion.icon === 'mj-icon-skip') {
314
+ // Special handling for mj-icon-skip: use the SVG data URI as an image
315
+ const img = document.createElement('img');
316
+ img.src = "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";
317
+ img.alt = suggestion.displayName;
318
+ img.style.cssText = 'width: 16px; height: 16px; border-radius: 50%; object-fit: cover;';
319
+ chip.appendChild(img);
320
+ }
321
+ else {
322
+ // Use icon for users or agents without images
323
+ const icon = document.createElement('i');
324
+ icon.style.cssText = 'font-size: 12px; opacity: 0.95;';
325
+ if (suggestion.type === 'agent' && suggestion.icon) {
326
+ icon.className = this.getIconClasses(suggestion.icon);
327
+ }
328
+ else if (suggestion.type === 'user') {
329
+ icon.className = 'fa-solid fa-user';
330
+ }
331
+ else {
332
+ icon.className = 'fa-solid fa-robot';
333
+ }
334
+ chip.appendChild(icon);
335
+ }
336
+ // Add space between icon/image and text
337
+ const space = document.createTextNode(' ');
338
+ chip.appendChild(space);
339
+ // Add text
340
+ const text = document.createTextNode(suggestion.displayName);
341
+ chip.appendChild(text);
342
+ console.log('[MentionEditor] Created chip:', chip.outerHTML);
343
+ return chip;
344
+ }
345
+ /**
346
+ * Get icon classes with proper FA prefix
347
+ */
348
+ getIconClasses(iconClass) {
349
+ if (!iconClass)
350
+ return 'fa-solid fa-robot';
351
+ if (iconClass.includes('fa-')) {
352
+ if (iconClass.match(/\b(fa-solid|fa-regular|fa-light|fa-brands)\b/)) {
353
+ return iconClass;
354
+ }
355
+ return `fa-solid ${iconClass}`;
356
+ }
357
+ return iconClass;
358
+ }
359
+ /**
360
+ * Handle backspace key - delete entire chip if cursor is right after one
361
+ */
362
+ handleBackspace(event) {
363
+ const selection = window.getSelection();
364
+ if (!selection || selection.rangeCount === 0)
365
+ return;
366
+ const range = selection.getRangeAt(0);
367
+ // Check if cursor is right after a mention chip
368
+ if (range.collapsed && range.startOffset > 0) {
369
+ const prevNode = range.startContainer.childNodes[range.startOffset - 1];
370
+ if (prevNode && prevNode.classList?.contains('mention-chip')) {
371
+ event.preventDefault();
372
+ prevNode.remove();
373
+ this.onInput();
374
+ }
375
+ }
376
+ }
377
+ /**
378
+ * Close mention dropdown
379
+ */
380
+ closeMentionDropdown() {
381
+ this.showMentionDropdown = false;
382
+ this.mentionSuggestions = [];
383
+ this.mentionStartIndex = -1;
384
+ this.mentionQuery = '';
385
+ }
386
+ /**
387
+ * Convert editor HTML to plain text with @mentions
388
+ */
389
+ getPlainText() {
390
+ const editor = this.editorRef?.nativeElement;
391
+ if (!editor)
392
+ return '';
393
+ let text = '';
394
+ const nodes = editor.childNodes;
395
+ for (let i = 0; i < nodes.length; i++) {
396
+ const node = nodes[i];
397
+ if (node.nodeType === Node.TEXT_NODE) {
398
+ text += node.textContent || '';
399
+ }
400
+ else if (node.nodeType === Node.ELEMENT_NODE) {
401
+ const element = node;
402
+ if (element.classList.contains('mention-chip')) {
403
+ const name = element.getAttribute('data-mention-name') || '';
404
+ // Use quoted format if name has spaces
405
+ text += name.includes(' ') ? `@"${name}"` : `@${name}`;
406
+ }
407
+ else if (element.tagName === 'BR') {
408
+ text += '\n';
409
+ }
410
+ else if (element.tagName === 'DIV') {
411
+ // Handle line breaks from contentEditable
412
+ if (i > 0)
413
+ text += '\n';
414
+ text += this.getNodeText(element);
415
+ }
416
+ else {
417
+ text += element.textContent || '';
418
+ }
419
+ }
420
+ }
421
+ return text;
422
+ }
423
+ /**
424
+ * Get text from a node recursively
425
+ */
426
+ getNodeText(node) {
427
+ let text = '';
428
+ const children = node.childNodes;
429
+ for (let i = 0; i < children.length; i++) {
430
+ const child = children[i];
431
+ if (child.nodeType === Node.TEXT_NODE) {
432
+ text += child.textContent || '';
433
+ }
434
+ else if (child.nodeType === Node.ELEMENT_NODE) {
435
+ const element = child;
436
+ if (element.classList.contains('mention-chip')) {
437
+ const name = element.getAttribute('data-mention-name') || '';
438
+ text += name.includes(' ') ? `@"${name}"` : `@${name}`;
439
+ }
440
+ else {
441
+ text += this.getNodeText(element);
442
+ }
443
+ }
444
+ }
445
+ return text;
446
+ }
447
+ /**
448
+ * Set editor content from plain text (for programmatic updates)
449
+ */
450
+ setEditorContent(text) {
451
+ const editor = this.editorRef?.nativeElement;
452
+ if (!editor)
453
+ return;
454
+ // For now, just set as plain text
455
+ // TODO: Parse @mentions and render as chips
456
+ editor.textContent = text;
457
+ }
458
+ // ControlValueAccessor implementation
459
+ writeValue(value) {
460
+ if (value) {
461
+ this.setEditorContent(value);
462
+ }
463
+ else if (this.editorRef?.nativeElement) {
464
+ this.editorRef.nativeElement.textContent = '';
465
+ }
466
+ }
467
+ registerOnChange(fn) {
468
+ this.onChange = fn;
469
+ }
470
+ registerOnTouched(fn) {
471
+ this.onTouched = fn;
472
+ }
473
+ setDisabledState(isDisabled) {
474
+ this.disabled = isDisabled;
475
+ if (this.editorRef?.nativeElement) {
476
+ this.editorRef.nativeElement.contentEditable = (!isDisabled).toString();
477
+ }
478
+ }
479
+ /**
480
+ * Focus the editor
481
+ */
482
+ focus() {
483
+ this.editorRef?.nativeElement?.focus();
484
+ }
485
+ /**
486
+ * Clear the editor content
487
+ */
488
+ clear() {
489
+ if (this.editorRef?.nativeElement) {
490
+ this.editorRef.nativeElement.textContent = '';
491
+ this.onInput();
492
+ }
493
+ }
494
+ static ɵfac = function MentionEditorComponent_Factory(t) { return new (t || MentionEditorComponent)(i0.ɵɵdirectiveInject(i1.MentionAutocompleteService)); };
495
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MentionEditorComponent, selectors: [["mj-mention-editor"]], viewQuery: function MentionEditorComponent_Query(rf, ctx) { if (rf & 1) {
496
+ i0.ɵɵviewQuery(_c0, 5);
497
+ } if (rf & 2) {
498
+ let _t;
499
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.editorRef = _t.first);
500
+ } }, inputs: { placeholder: "placeholder", disabled: "disabled", currentUser: "currentUser", enableMentions: "enableMentions" }, outputs: { valueChange: "valueChange", mentionSelected: "mentionSelected", enterPressed: "enterPressed" }, features: [i0.ɵɵProvidersFeature([
501
+ {
502
+ provide: NG_VALUE_ACCESSOR,
503
+ useExisting: forwardRef(() => MentionEditorComponent),
504
+ multi: true
505
+ }
506
+ ])], decls: 4, vars: 3, consts: [["editor", ""], [1, "mention-editor-container", 3, "click"], ["contenteditable", "true", 1, "mention-editor", 3, "input", "keydown", "blur", "paste"], [3, "suggestions", "position", "showAbove", "useFixedPositioning", "visible", "suggestionSelected", "closed", 4, "ngIf"], [3, "suggestionSelected", "closed", "suggestions", "position", "showAbove", "useFixedPositioning", "visible"]], template: function MentionEditorComponent_Template(rf, ctx) { if (rf & 1) {
507
+ const _r1 = i0.ɵɵgetCurrentView();
508
+ i0.ɵɵelementStart(0, "div", 1);
509
+ i0.ɵɵlistener("click", function MentionEditorComponent_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onContainerClick($event)); });
510
+ i0.ɵɵelementStart(1, "div", 2, 0);
511
+ i0.ɵɵlistener("input", function MentionEditorComponent_Template_div_input_1_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onInput()); })("keydown", function MentionEditorComponent_Template_div_keydown_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onKeyDown($event)); })("blur", function MentionEditorComponent_Template_div_blur_1_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onBlur()); })("paste", function MentionEditorComponent_Template_div_paste_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onPaste($event)); });
512
+ i0.ɵɵelementEnd();
513
+ i0.ɵɵtemplate(3, MentionEditorComponent_mj_mention_dropdown_3_Template, 1, 5, "mj-mention-dropdown", 3);
514
+ i0.ɵɵelementEnd();
515
+ } if (rf & 2) {
516
+ i0.ɵɵadvance();
517
+ i0.ɵɵattribute("contenteditable", !ctx.disabled)("data-placeholder", ctx.placeholder);
518
+ i0.ɵɵadvance(2);
519
+ i0.ɵɵproperty("ngIf", ctx.showMentionDropdown && ctx.enableMentions);
520
+ } }, dependencies: [i2.NgIf, i3.MentionDropdownComponent], styles: ["//[_ngcontent-%COMP%] Mention[_ngcontent-%COMP%] Editor[_ngcontent-%COMP%] Component[_ngcontent-%COMP%] Styles\n//[_ngcontent-%COMP%] ContentEditable-based[_ngcontent-%COMP%] editor[_ngcontent-%COMP%] with[_ngcontent-%COMP%] mention[_ngcontent-%COMP%] chips/pills\n\n.mention-editor-container[_ngcontent-%COMP%] {\n position: relative;\n width: 100%;\n display: block;\n}\n\n.mention-editor[_ngcontent-%COMP%] {\n display: block;\n width: 100%;\n min-height: 100px;\n max-height: 300px;\n padding: 7px 3.5rem 7px 12px; // top right bottom left - more left padding for caret\n outline: none;\n border: none;\n background: transparent;\n font-family: inherit;\n font-size: 1rem;\n line-height: 1.5;\n overflow-y: auto;\n overflow-x: hidden; // Prevent horizontal scroll\n word-wrap: break-word;\n white-space: pre-wrap;\n cursor: text; // Ensure text cursor\n user-select: text; // Ensure text is selectable\n box-sizing: border-box; // Include padding in height calculation\n\n // Placeholder styling (using data attribute)\n &:empty:before {\n content: attr(data-placeholder);\n color: var(--text-tertiary, #999);\n pointer-events: none;\n position: absolute;\n }\n\n &:focus {\n outline: none;\n }\n\n &[contenteditable=\"false\"] {\n cursor: not-allowed;\n opacity: 0.6;\n background: var(--background-disabled, #f5f5f5);\n }\n\n // Mobile responsive\n @media (max-width: 768px) {\n font-size: 16px; // Prevent iOS zoom\n padding: 5px;\n padding-right: 3rem;\n }\n}\n\n//[_ngcontent-%COMP%] Mention[_ngcontent-%COMP%] Chip/Pill[_ngcontent-%COMP%] Styles\n//[_ngcontent-%COMP%] ViewEncapsulation.None[_ngcontent-%COMP%] allows[_ngcontent-%COMP%] these[_ngcontent-%COMP%] styles[_ngcontent-%COMP%] to[_ngcontent-%COMP%] apply[_ngcontent-%COMP%] to[_ngcontent-%COMP%] dynamically[_ngcontent-%COMP%] created[_ngcontent-%COMP%] elements\n[_ngcontent-%COMP%] .mention-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 12px;\n margin: 0 3px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 600;\n cursor: default;\n user-select: none;\n vertical-align: middle;\n white-space: nowrap;\n\n // Prevent editing the chip content\n pointer-events: all;\n -webkit-user-modify: read-only;\n -moz-user-modify: read-only;\n\n // Default (agent) styling - Bold, visible gradient like Slack\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border: 2px solid rgba(102, 126, 234, 0.4);\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2), 0 1px 2px rgba(0, 0, 0, 0.1);\n\n i {\n font-size: 12px;\n opacity: 0.95;\n }\n\n // User styling (override via data attribute if needed)\n &[data-mention-type=\"user\"] {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n color: white;\n border: 2px solid rgba(240, 147, 251, 0.4);\n }\n\n // Hover effect\n &:hover {\n transform: translateY(-1px);\n box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25), 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: all 0.2s ease;\n }\n\n // Selected/focused state\n &:focus,\n &.selected {\n outline: 2px solid var(--primary-color, #007bff);\n outline-offset: 2px;\n }\n\n // Animation on insert\n @keyframes chipInsert {\n 0% {\n transform: scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n\n animation: chipInsert 0.15s ease-out;\n}\n\n//[_ngcontent-%COMP%] Dark[_ngcontent-%COMP%] mode[_ngcontent-%COMP%] support\n@media[_ngcontent-%COMP%] (prefers-color-scheme[_ngcontent-%COMP%]: dark)[_ngcontent-%COMP%] {\n .mention-editor {\n color: #e0e0e0;\n\n &:empty:before {\n color: #777;\n }\n\n &[contenteditable=\"false\"] {\n background: #2d2d2d;\n }\n }\n\n .mention-chip {\n background: linear-gradient(135deg, #4a148c 0%, #6a1b9a 100%);\n color: #ce93d8;\n border-color: #8e24aa;\n\n &[data-mention-type=\"user\"] {\n background: linear-gradient(135deg, #880e4f 0%, #ad1457 100%);\n color: #f48fb1;\n border-color: #c2185b;\n }\n }\n}\n\n//[_ngcontent-%COMP%] Ensure[_ngcontent-%COMP%] proper[_ngcontent-%COMP%] spacing[_ngcontent-%COMP%] around[_ngcontent-%COMP%] chips\n.mention-editor[_ngcontent-%COMP%] {\n .mention-chip + .mention-chip {\n margin-left: 4px;\n }\n\n // Prevent weird spacing issues\n br {\n display: block;\n content: \"\";\n margin: 0;\n }\n}\n\n//[_ngcontent-%COMP%] Custom[_ngcontent-%COMP%] scrollbar[_ngcontent-%COMP%] for[_ngcontent-%COMP%] editor\n.mention-editor[_ngcontent-%COMP%] {\n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n\n &:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n }\n}"] });
521
+ }
522
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MentionEditorComponent, [{
523
+ type: Component,
524
+ args: [{ selector: 'mj-mention-editor', providers: [
525
+ {
526
+ provide: NG_VALUE_ACCESSOR,
527
+ useExisting: forwardRef(() => MentionEditorComponent),
528
+ multi: true
529
+ }
530
+ ], template: "<div class=\"mention-editor-container\" (click)=\"onContainerClick($event)\">\n <div\n #editor\n class=\"mention-editor\"\n contenteditable=\"true\"\n [attr.contenteditable]=\"!disabled\"\n [attr.data-placeholder]=\"placeholder\"\n (input)=\"onInput()\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"onBlur()\"\n (paste)=\"onPaste($event)\"\n ></div>\n\n <!-- Mention Dropdown -->\n <mj-mention-dropdown\n *ngIf=\"showMentionDropdown && enableMentions\"\n [suggestions]=\"mentionSuggestions\"\n [position]=\"mentionDropdownPosition\"\n [showAbove]=\"mentionDropdownShowAbove\"\n [useFixedPositioning]=\"true\"\n [visible]=\"true\"\n (suggestionSelected)=\"onMentionSelected($event)\"\n (closed)=\"closeMentionDropdown()\">\n </mj-mention-dropdown>\n</div>\n", styles: ["// Mention Editor Component Styles\n// ContentEditable-based editor with mention chips/pills\n\n.mention-editor-container {\n position: relative;\n width: 100%;\n display: block;\n}\n\n.mention-editor {\n display: block;\n width: 100%;\n min-height: 100px;\n max-height: 300px;\n padding: 7px 3.5rem 7px 12px; // top right bottom left - more left padding for caret\n outline: none;\n border: none;\n background: transparent;\n font-family: inherit;\n font-size: 1rem;\n line-height: 1.5;\n overflow-y: auto;\n overflow-x: hidden; // Prevent horizontal scroll\n word-wrap: break-word;\n white-space: pre-wrap;\n cursor: text; // Ensure text cursor\n user-select: text; // Ensure text is selectable\n box-sizing: border-box; // Include padding in height calculation\n\n // Placeholder styling (using data attribute)\n &:empty:before {\n content: attr(data-placeholder);\n color: var(--text-tertiary, #999);\n pointer-events: none;\n position: absolute;\n }\n\n &:focus {\n outline: none;\n }\n\n &[contenteditable=\"false\"] {\n cursor: not-allowed;\n opacity: 0.6;\n background: var(--background-disabled, #f5f5f5);\n }\n\n // Mobile responsive\n @media (max-width: 768px) {\n font-size: 16px; // Prevent iOS zoom\n padding: 5px;\n padding-right: 3rem;\n }\n}\n\n// Mention Chip/Pill Styles\n// ViewEncapsulation.None allows these styles to apply to dynamically created elements\n::ng-deep .mention-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 12px;\n margin: 0 3px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 600;\n cursor: default;\n user-select: none;\n vertical-align: middle;\n white-space: nowrap;\n\n // Prevent editing the chip content\n pointer-events: all;\n -webkit-user-modify: read-only;\n -moz-user-modify: read-only;\n\n // Default (agent) styling - Bold, visible gradient like Slack\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border: 2px solid rgba(102, 126, 234, 0.4);\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2), 0 1px 2px rgba(0, 0, 0, 0.1);\n\n i {\n font-size: 12px;\n opacity: 0.95;\n }\n\n // User styling (override via data attribute if needed)\n &[data-mention-type=\"user\"] {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n color: white;\n border: 2px solid rgba(240, 147, 251, 0.4);\n }\n\n // Hover effect\n &:hover {\n transform: translateY(-1px);\n box-shadow: 0 3px 8px rgba(0, 0, 0, 0.25), 0 1px 3px rgba(0, 0, 0, 0.15);\n transition: all 0.2s ease;\n }\n\n // Selected/focused state\n &:focus,\n &.selected {\n outline: 2px solid var(--primary-color, #007bff);\n outline-offset: 2px;\n }\n\n // Animation on insert\n @keyframes chipInsert {\n 0% {\n transform: scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n }\n\n animation: chipInsert 0.15s ease-out;\n}\n\n// Dark mode support\n@media (prefers-color-scheme: dark) {\n .mention-editor {\n color: #e0e0e0;\n\n &:empty:before {\n color: #777;\n }\n\n &[contenteditable=\"false\"] {\n background: #2d2d2d;\n }\n }\n\n .mention-chip {\n background: linear-gradient(135deg, #4a148c 0%, #6a1b9a 100%);\n color: #ce93d8;\n border-color: #8e24aa;\n\n &[data-mention-type=\"user\"] {\n background: linear-gradient(135deg, #880e4f 0%, #ad1457 100%);\n color: #f48fb1;\n border-color: #c2185b;\n }\n }\n}\n\n// Ensure proper spacing around chips\n.mention-editor {\n .mention-chip + .mention-chip {\n margin-left: 4px;\n }\n\n // Prevent weird spacing issues\n br {\n display: block;\n content: \"\";\n margin: 0;\n }\n}\n\n// Custom scrollbar for editor\n.mention-editor {\n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: rgba(0, 0, 0, 0.2);\n border-radius: 3px;\n\n &:hover {\n background: rgba(0, 0, 0, 0.3);\n }\n }\n}\n"] }]
531
+ }], () => [{ type: i1.MentionAutocompleteService }], { editorRef: [{
532
+ type: ViewChild,
533
+ args: ['editor', { static: false }]
534
+ }], placeholder: [{
535
+ type: Input
536
+ }], disabled: [{
537
+ type: Input
538
+ }], currentUser: [{
539
+ type: Input
540
+ }], enableMentions: [{
541
+ type: Input
542
+ }], valueChange: [{
543
+ type: Output
544
+ }], mentionSelected: [{
545
+ type: Output
546
+ }], enterPressed: [{
547
+ type: Output
548
+ }] }); })();
549
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MentionEditorComponent, { className: "MentionEditorComponent", filePath: "src/lib/components/mention/mention-editor.component.ts", lineNumber: 33 }); })();
550
+ //# sourceMappingURL=mention-editor.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mention-editor.component.js","sourceRoot":"","sources":["../../../../src/lib/components/mention/mention-editor.component.ts","../../../../src/lib/components/mention/mention-editor.component.html"],"names":[],"mappings":"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"}