@memberjunction/ng-conversations 2.114.0 → 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.
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
- package/dist/lib/components/conversation/conversation-chat-area.component.js +8 -4
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
- package/dist/lib/components/mention/mention-dropdown.component.js +31 -23
- package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
- package/dist/lib/components/mention/mention-editor.component.d.ts +117 -0
- package/dist/lib/components/mention/mention-editor.component.d.ts.map +1 -0
- package/dist/lib/components/mention/mention-editor.component.js +550 -0
- package/dist/lib/components/mention/mention-editor.component.js.map +1 -0
- package/dist/lib/components/message/message-input-box.component.d.ts +19 -34
- package/dist/lib/components/message/message-input-box.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-input-box.component.js +66 -176
- package/dist/lib/components/message/message-input-box.component.js.map +1 -1
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
- package/dist/lib/components/message/message-item.component.js +41 -3
- package/dist/lib/components/message/message-item.component.js.map +1 -1
- package/dist/lib/components/navigation/conversation-navigation.component.js +2 -2
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +4 -1
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
- package/dist/lib/components/workspace/conversation-workspace.component.js +108 -73
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
- package/dist/lib/conversations.module.d.ts +55 -54
- package/dist/lib/conversations.module.d.ts.map +1 -1
- package/dist/lib/conversations.module.js +4 -0
- package/dist/lib/conversations.module.js.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.d.ts +8 -0
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -1
- package/dist/lib/services/mention-autocomplete.service.js +34 -3
- package/dist/lib/services/mention-autocomplete.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 +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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"}
|