@libs-ui/components-inputs-mention 0.2.356-42 → 0.2.356-43
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
CHANGED
|
@@ -1,147 +1,444 @@
|
|
|
1
1
|
# @libs-ui/components-inputs-mention
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Angular directive thêm tính năng mention (gợi ý khi gõ ký tự trigger) vào input, textarea hoặc contenteditable elements.
|
|
4
4
|
|
|
5
5
|
## Giới thiệu
|
|
6
6
|
|
|
7
|
-
`LibsUiComponentsInputsMentionDirective` là một standalone
|
|
7
|
+
`LibsUiComponentsInputsMentionDirective` là một Angular standalone directive cho phép người dùng tìm kiếm và chọn các mục từ danh sách khi gõ một ký tự kích hoạt (ví dụ: `@`, `#`). Directive hỗ trợ đầy đủ cả input/textarea thông thường lẫn contenteditable elements và các rich text editor như Quill. Danh sách gợi ý được render thông qua dynamic component, tự định vị theo vị trí con trỏ trong văn bản.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Tính năng
|
|
10
10
|
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
11
|
+
- Hỗ trợ nhiều ký tự trigger (`@`, `#`, ...) với cấu hình riêng biệt trong cùng một input
|
|
12
|
+
- Hoạt động trên `input`, `textarea` và các phần tử `contenteditable`
|
|
13
|
+
- Tích hợp sẵn với Quill editor (tự động phát hiện `.ql-editor`)
|
|
14
|
+
- Tùy chỉnh template hiển thị từng mục trong danh sách gợi ý qua `TemplateRef`
|
|
15
|
+
- Lọc danh sách theo từ khóa tìm kiếm (tích hợp sẵn hoặc custom filter)
|
|
16
|
+
- Điều hướng bàn phím: mũi tên lên/xuống, Enter để chọn, Escape để đóng
|
|
17
|
+
- Hỗ trợ iframe
|
|
18
|
+
- Expose `FunctionControl` để chèn mention thủ công từ bên ngoài
|
|
19
|
+
- Angular Signals + `ChangeDetectionStrategy.OnPush` cho hiệu năng tốt nhất
|
|
20
|
+
- Tự động dọn dẹp dynamic component khi directive bị destroy
|
|
18
21
|
|
|
19
22
|
## Khi nào sử dụng
|
|
20
23
|
|
|
21
|
-
- Khi
|
|
22
|
-
- Khi
|
|
23
|
-
- Khi
|
|
24
|
+
- Khi cần tính năng mention trong khung chat hoặc khu vực bình luận
|
|
25
|
+
- Khi muốn hỗ trợ phím tắt gắn thẻ người dùng nhanh trong các form nhập liệu
|
|
26
|
+
- Khi cần tích hợp mention vào các rich text editor (Quill, contenteditable)
|
|
27
|
+
- Khi muốn hỗ trợ nhiều loại trigger khác nhau trong cùng một vùng nhập (`@` cho người dùng, `#` cho tag)
|
|
28
|
+
- Khi cần chèn mention thủ công từ nút bên ngoài (qua `outFunctionControl`)
|
|
24
29
|
|
|
25
30
|
## Cài đặt
|
|
26
31
|
|
|
27
32
|
```bash
|
|
28
|
-
# npm
|
|
29
33
|
npm install @libs-ui/components-inputs-mention
|
|
30
|
-
|
|
31
|
-
# yarn
|
|
32
|
-
yarn add @libs-ui/components-inputs-mention
|
|
33
34
|
```
|
|
34
35
|
|
|
35
36
|
## Import
|
|
36
37
|
|
|
37
38
|
```typescript
|
|
38
39
|
import { LibsUiComponentsInputsMentionDirective } from '@libs-ui/components-inputs-mention';
|
|
40
|
+
import { IMentionConfig, IMentionInsert, IMentionFunctionControlEvent } from '@libs-ui/components-inputs-mention';
|
|
39
41
|
|
|
40
42
|
@Component({
|
|
41
43
|
standalone: true,
|
|
42
44
|
imports: [LibsUiComponentsInputsMentionDirective],
|
|
43
45
|
// ...
|
|
44
46
|
})
|
|
45
|
-
export class
|
|
47
|
+
export class MyComponent {}
|
|
46
48
|
```
|
|
47
49
|
|
|
48
|
-
## Ví dụ
|
|
50
|
+
## Ví dụ sử dụng
|
|
51
|
+
|
|
52
|
+
### 1. Cơ bản — input với trigger `@`
|
|
49
53
|
|
|
50
|
-
|
|
54
|
+
```typescript
|
|
55
|
+
import { Component } from '@angular/core';
|
|
56
|
+
import { LibsUiComponentsInputsMentionDirective, IMentionConfig } from '@libs-ui/components-inputs-mention';
|
|
57
|
+
|
|
58
|
+
@Component({
|
|
59
|
+
standalone: true,
|
|
60
|
+
imports: [LibsUiComponentsInputsMentionDirective],
|
|
61
|
+
template: `
|
|
62
|
+
<input
|
|
63
|
+
type="text"
|
|
64
|
+
class="w-full p-2 border rounded"
|
|
65
|
+
placeholder="Gõ @ để mention người dùng..."
|
|
66
|
+
LibsUiComponentsInputsMentionDirective
|
|
67
|
+
[mentionConfig]="basicConfig"
|
|
68
|
+
(outSearchTerm)="handlerSearchTerm($event)"
|
|
69
|
+
(outItemSelected)="handlerItemSelected($event)"
|
|
70
|
+
/>
|
|
71
|
+
`,
|
|
72
|
+
})
|
|
73
|
+
export class CommentInputComponent {
|
|
74
|
+
readonly basicConfig: IMentionConfig = {
|
|
75
|
+
items: [
|
|
76
|
+
{ id: '1', name: 'Anh Tuấn', username: 'tuan@example.com' },
|
|
77
|
+
{ id: '2', name: 'Bảo Ngọc', username: 'ngoc@example.com' },
|
|
78
|
+
{ id: '3', name: 'Công Thành', username: 'thanh@example.com' },
|
|
79
|
+
],
|
|
80
|
+
triggerChar: '@',
|
|
81
|
+
labelKey: 'name',
|
|
82
|
+
mentionFilter: (search, items) => {
|
|
83
|
+
const s = search.toLowerCase();
|
|
84
|
+
return items?.filter((item: any) => item.name.toLowerCase().includes(s));
|
|
85
|
+
},
|
|
86
|
+
mentionSelect: (item: any, triggerChar) => `${triggerChar}${item.name}`,
|
|
87
|
+
};
|
|
51
88
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
89
|
+
handlerSearchTerm(term: string | undefined): void {
|
|
90
|
+
// term là chuỗi người dùng đang gõ sau @
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
handlerItemSelected(item: unknown): void {
|
|
94
|
+
// item là object được chọn từ danh sách
|
|
95
|
+
}
|
|
96
|
+
}
|
|
57
97
|
```
|
|
58
98
|
|
|
59
|
-
###
|
|
99
|
+
### 2. Nhiều trigger — `@` cho người dùng và `#` cho tag
|
|
60
100
|
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
101
|
+
```typescript
|
|
102
|
+
import { Component } from '@angular/core';
|
|
103
|
+
import { LibsUiComponentsInputsMentionDirective, IMentionConfig } from '@libs-ui/components-inputs-mention';
|
|
104
|
+
|
|
105
|
+
@Component({
|
|
106
|
+
standalone: true,
|
|
107
|
+
imports: [LibsUiComponentsInputsMentionDirective],
|
|
108
|
+
template: `
|
|
109
|
+
<textarea
|
|
110
|
+
class="w-full p-2 border rounded min-h-[100px]"
|
|
111
|
+
placeholder="Gõ @ cho người dùng, # cho tags..."
|
|
112
|
+
LibsUiComponentsInputsMentionDirective
|
|
113
|
+
[mentionConfig]="multiConfig"
|
|
114
|
+
></textarea>
|
|
115
|
+
`,
|
|
116
|
+
})
|
|
117
|
+
export class MultiTriggerComponent {
|
|
118
|
+
readonly users = [
|
|
119
|
+
{ id: '1', name: 'Anh Tuấn', username: 'tuan' },
|
|
120
|
+
{ id: '2', name: 'Bảo Ngọc', username: 'ngoc' },
|
|
121
|
+
];
|
|
122
|
+
|
|
123
|
+
readonly tags = [
|
|
124
|
+
{ id: 't1', name: 'angular', username: 'AG' },
|
|
125
|
+
{ id: 't2', name: 'typescript', username: 'TS' },
|
|
126
|
+
];
|
|
127
|
+
|
|
128
|
+
readonly filterByName = (search: string, items?: Array<any>) =>
|
|
129
|
+
items?.filter((item) => item.name.toLowerCase().includes(search.toLowerCase()));
|
|
130
|
+
|
|
131
|
+
readonly multiConfig: IMentionConfig = {
|
|
132
|
+
items: this.users,
|
|
67
133
|
triggerChar: '@',
|
|
134
|
+
labelKey: 'name',
|
|
135
|
+
mentionFilter: this.filterByName,
|
|
136
|
+
mentionSelect: (item: any, triggerChar) => `${triggerChar}${item.name}`,
|
|
68
137
|
mention: [
|
|
69
|
-
{
|
|
70
|
-
|
|
71
|
-
|
|
138
|
+
{
|
|
139
|
+
items: this.tags,
|
|
140
|
+
triggerChar: '#',
|
|
141
|
+
labelKey: 'name',
|
|
142
|
+
mentionFilter: this.filterByName,
|
|
143
|
+
mentionSelect: (item: any, triggerChar) => `${triggerChar}${item.name}`,
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
72
148
|
```
|
|
73
149
|
|
|
74
|
-
|
|
150
|
+
### 3. ContentEditable với custom template danh sách
|
|
75
151
|
|
|
76
|
-
|
|
152
|
+
```typescript
|
|
153
|
+
import { Component } from '@angular/core';
|
|
154
|
+
import { LibsUiComponentsInputsMentionDirective, IMentionConfig } from '@libs-ui/components-inputs-mention';
|
|
77
155
|
|
|
78
|
-
|
|
156
|
+
@Component({
|
|
157
|
+
standalone: true,
|
|
158
|
+
imports: [LibsUiComponentsInputsMentionDirective],
|
|
159
|
+
template: `
|
|
160
|
+
<div
|
|
161
|
+
contenteditable="true"
|
|
162
|
+
class="w-full p-4 border rounded bg-white min-h-[100px]"
|
|
163
|
+
LibsUiComponentsInputsMentionDirective
|
|
164
|
+
[mentionConfig]="basicConfig"
|
|
165
|
+
[mentionListTemplate]="customTpl"
|
|
166
|
+
>
|
|
167
|
+
Thử gõ @ ở đây...
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<ng-template #customTpl let-item="item">
|
|
171
|
+
<div class="flex items-center gap-3 p-3 hover:bg-blue-50 cursor-pointer">
|
|
172
|
+
<div class="w-8 h-8 rounded-full bg-blue-500 text-white flex items-center justify-center font-bold">
|
|
173
|
+
{{ item.name[0] }}
|
|
174
|
+
</div>
|
|
175
|
+
<div>
|
|
176
|
+
<div class="font-medium text-gray-800 text-sm">{{ item.name }}</div>
|
|
177
|
+
<div class="text-xs text-gray-500">{{ item.username }}</div>
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
</ng-template>
|
|
181
|
+
`,
|
|
182
|
+
})
|
|
183
|
+
export class ContentEditableMentionComponent {
|
|
184
|
+
readonly basicConfig: IMentionConfig = {
|
|
185
|
+
items: [
|
|
186
|
+
{ id: '1', name: 'Anh Tuấn', username: 'tuan@example.com' },
|
|
187
|
+
{ id: '2', name: 'Bảo Ngọc', username: 'ngoc@example.com' },
|
|
188
|
+
],
|
|
189
|
+
triggerChar: '@',
|
|
190
|
+
labelKey: 'name',
|
|
191
|
+
mentionFilter: (search, items) =>
|
|
192
|
+
items?.filter((item: any) => item.name.toLowerCase().includes(search.toLowerCase())),
|
|
193
|
+
mentionSelect: (item: any) => `@${item.name}`,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
```
|
|
79
197
|
|
|
80
|
-
|
|
81
|
-
| ----------------------- | -------------------------------- | ----------- | ------------------------------------------------- |
|
|
82
|
-
| `[timeDelayInit]` | `number` | `0` | Thời gian trễ trước khi khởi tạo directive logic. |
|
|
83
|
-
| `[mentionConfig]` | `IMentionConfig` | `undefined` | Cấu hình chính cho mention. |
|
|
84
|
-
| `[mentionListTemplate]` | `TemplateRef<TYPE_TEMPLATE_REF>` | `undefined` | Template tùy chỉnh cho danh sách gợi ý. |
|
|
198
|
+
### 4. Chèn mention thủ công từ nút bên ngoài
|
|
85
199
|
|
|
86
|
-
|
|
200
|
+
```typescript
|
|
201
|
+
import { Component } from '@angular/core';
|
|
202
|
+
import { LibsUiComponentsInputsMentionDirective, IMentionConfig, IMentionFunctionControlEvent } from '@libs-ui/components-inputs-mention';
|
|
87
203
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
204
|
+
@Component({
|
|
205
|
+
standalone: true,
|
|
206
|
+
imports: [LibsUiComponentsInputsMentionDirective],
|
|
207
|
+
template: `
|
|
208
|
+
<div
|
|
209
|
+
contenteditable="true"
|
|
210
|
+
class="w-full p-3 border rounded min-h-[80px]"
|
|
211
|
+
LibsUiComponentsInputsMentionDirective
|
|
212
|
+
[mentionConfig]="config"
|
|
213
|
+
(outFunctionControl)="handlerFunctionControl($event)"
|
|
214
|
+
></div>
|
|
215
|
+
|
|
216
|
+
<button
|
|
217
|
+
class="mt-2 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"
|
|
218
|
+
(click)="handlerAddMention($event)"
|
|
219
|
+
>
|
|
220
|
+
Thêm @mention
|
|
221
|
+
</button>
|
|
222
|
+
`,
|
|
223
|
+
})
|
|
224
|
+
export class ManualMentionComponent {
|
|
225
|
+
private mentionControl: IMentionFunctionControlEvent | undefined;
|
|
226
|
+
|
|
227
|
+
readonly config: IMentionConfig = {
|
|
228
|
+
items: [
|
|
229
|
+
{ id: '1', name: 'Anh Tuấn', username: 'tuan' },
|
|
230
|
+
{ id: '2', name: 'Bảo Ngọc', username: 'ngoc' },
|
|
231
|
+
],
|
|
232
|
+
triggerChar: '@',
|
|
233
|
+
labelKey: 'name',
|
|
234
|
+
mentionFilter: (search, items) =>
|
|
235
|
+
items?.filter((item: any) => item.name.toLowerCase().includes(search.toLowerCase())),
|
|
236
|
+
mentionSelect: (item: any) => `@${item.name}`,
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
handlerFunctionControl(event: IMentionFunctionControlEvent): void {
|
|
240
|
+
this.mentionControl = event;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
handlerAddMention(event: Event): void {
|
|
244
|
+
event.stopPropagation();
|
|
245
|
+
this.mentionControl?.addMention(false);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### 5. Lắng nghe sự kiện chèn mention (Rich Text Editor)
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
import { Component } from '@angular/core';
|
|
254
|
+
import { LibsUiComponentsInputsMentionDirective, IMentionConfig, IMentionInsert } from '@libs-ui/components-inputs-mention';
|
|
255
|
+
|
|
256
|
+
@Component({
|
|
257
|
+
standalone: true,
|
|
258
|
+
imports: [LibsUiComponentsInputsMentionDirective],
|
|
259
|
+
template: `
|
|
260
|
+
<div
|
|
261
|
+
contenteditable="true"
|
|
262
|
+
class="w-full p-3 border rounded min-h-[80px]"
|
|
263
|
+
LibsUiComponentsInputsMentionDirective
|
|
264
|
+
[mentionConfig]="config"
|
|
265
|
+
(outInsertMention)="handlerInsertMention($event)"
|
|
266
|
+
(outToggle)="handlerToggle($event)"
|
|
267
|
+
></div>
|
|
268
|
+
`,
|
|
269
|
+
})
|
|
270
|
+
export class RteIntegrationComponent {
|
|
271
|
+
readonly config: IMentionConfig = {
|
|
272
|
+
items: [{ id: '1', name: 'Anh Tuấn', username: 'tuan@example.com' }],
|
|
273
|
+
triggerChar: '@',
|
|
274
|
+
labelKey: 'name',
|
|
275
|
+
mentionFilter: (search, items) =>
|
|
276
|
+
items?.filter((item: any) => item.name.toLowerCase().includes(search.toLowerCase())),
|
|
277
|
+
mentionSelect: (item: any) => `@${item.name}`,
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
handlerInsertMention(event: IMentionInsert): void {
|
|
281
|
+
event; // { data: { id, feId, value }, lengthKey }
|
|
282
|
+
// Dùng trong Quill: editor.deleteText(pos - event.lengthKey, event.lengthKey)
|
|
283
|
+
// rồi editor.insertEmbed(pos, 'mention', event.data)
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
handlerToggle(isOpen: boolean): void {
|
|
287
|
+
// isOpen = true khi danh sách gợi ý hiện, false khi đóng
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## @Input()
|
|
293
|
+
|
|
294
|
+
| Input | Type | Default | Mô tả | Ví dụ |
|
|
295
|
+
|---|---|---|---|---|
|
|
296
|
+
| `[timeDelayInit]` | `number` | `0` | Thời gian delay (ms) trước khi directive gắn event listeners. Hữu ích khi host element cần render xong trước. | `[timeDelayInit]="500"` |
|
|
297
|
+
| `[mentionConfig]` | `IMentionConfig` | `undefined` | Cấu hình chính cho mention: danh sách items, ký tự trigger, các tùy chọn filter/select. Bắt buộc phải truyền để directive hoạt động. | `[mentionConfig]="myConfig"` |
|
|
298
|
+
| `[mentionListTemplate]` | `TemplateRef<any>` | `undefined` | Template tùy chỉnh cho từng mục trong danh sách gợi ý. Context: `{ item, index }`. Nếu không truyền, dùng template mặc định (avatar + tên + username). | `[mentionListTemplate]="myTpl"` |
|
|
299
|
+
|
|
300
|
+
## @Output()
|
|
301
|
+
|
|
302
|
+
| Output | Type | Mô tả | Handler TS | Binding HTML |
|
|
303
|
+
|---|---|---|---|---|
|
|
304
|
+
| `(outSearchTerm)` | `string \| undefined` | Emits từ khóa người dùng đang gõ sau ký tự trigger. Dùng để load data bất đồng bộ từ API. | `handlerSearchTerm(term: string \| undefined): void { term; }` | `(outSearchTerm)="handlerSearchTerm($event)"` |
|
|
305
|
+
| `(outItemSelected)` | `unknown` | Emits object mục được chọn từ danh sách (trước khi chèn vào input). | `handlerItemSelected(item: unknown): void { item; }` | `(outItemSelected)="handlerItemSelected($event)"` |
|
|
306
|
+
| `(outToggle)` | `boolean` | Emits `true` khi danh sách gợi ý mở ra, `false` khi đóng lại. | `handlerToggle(isOpen: boolean): void { isOpen; }` | `(outToggle)="handlerToggle($event)"` |
|
|
307
|
+
| `(outInsertMention)` | `IMentionInsert` | Emits khi một mention được chèn thành công. Dùng cho rich text editor cần xử lý chèn node thủ công. | `handlerInsertMention(e: IMentionInsert): void { e.data; e.lengthKey; }` | `(outInsertMention)="handlerInsertMention($event)"` |
|
|
308
|
+
| `(outFunctionControl)` | `IMentionFunctionControlEvent` | Emits object chứa phương thức điều khiển directive từ bên ngoài (ví dụ: chèn mention thủ công). Emits một lần sau `ngAfterViewInit`. | `handlerFunctionControl(ctrl: IMentionFunctionControlEvent): void { this.ctrl = ctrl; }` | `(outFunctionControl)="handlerFunctionControl($event)"` |
|
|
95
309
|
|
|
96
310
|
## Types & Interfaces
|
|
97
311
|
|
|
98
312
|
```typescript
|
|
313
|
+
import {
|
|
314
|
+
IMentionConfig,
|
|
315
|
+
IMentionItem,
|
|
316
|
+
IMentionInsert,
|
|
317
|
+
IMentionFunctionControlEvent,
|
|
318
|
+
INodeInsert,
|
|
319
|
+
} from '@libs-ui/components-inputs-mention';
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
```typescript
|
|
323
|
+
/**
|
|
324
|
+
* Cấu hình chính truyền vào [mentionConfig].
|
|
325
|
+
* Kế thừa IMentionItem và bổ sung các tùy chọn giao diện + đa trigger.
|
|
326
|
+
*/
|
|
99
327
|
export interface IMentionConfig extends IMentionItem {
|
|
328
|
+
/** Tắt style mặc định của danh sách gợi ý */
|
|
100
329
|
disableStyle?: boolean;
|
|
330
|
+
/** ID của iframe chứa host element (khi dùng trong iframe) */
|
|
101
331
|
iframe?: string;
|
|
332
|
+
/** Cấu hình cho các trigger bổ sung (ngoài trigger chính) */
|
|
102
333
|
mention?: Array<IMentionItem>;
|
|
103
334
|
}
|
|
104
335
|
|
|
336
|
+
/**
|
|
337
|
+
* Cấu hình cho từng trigger riêng lẻ.
|
|
338
|
+
*/
|
|
105
339
|
export interface IMentionItem {
|
|
340
|
+
/** Ký tự kích hoạt danh sách gợi ý. Mặc định: '@' */
|
|
106
341
|
triggerChar?: string;
|
|
342
|
+
/** Tên field trong object dùng làm nhãn hiển thị. Mặc định: 'email' */
|
|
107
343
|
labelKey?: string;
|
|
344
|
+
/** Tắt tự động sắp xếp danh sách items theo labelKey */
|
|
108
345
|
disableSort?: boolean;
|
|
346
|
+
/** Tắt bộ lọc nội bộ (dùng khi tự xử lý filter bằng outSearchTerm + API) */
|
|
109
347
|
disableSearch?: boolean;
|
|
348
|
+
/** Hiển thị danh sách phía trên con trỏ thay vì bên dưới */
|
|
110
349
|
dropUp?: boolean;
|
|
350
|
+
/** Cho phép nhập khoảng trắng khi đang search mention */
|
|
111
351
|
allowSpace?: boolean;
|
|
352
|
+
/** Giới hạn số khoảng trắng tối đa trong search query */
|
|
112
353
|
limitSpaceSearchQuery?: number;
|
|
354
|
+
/** Bao gồm ký tự trigger trong giá trị emit ra outSearchTerm */
|
|
113
355
|
returnTrigger?: boolean;
|
|
356
|
+
/** Hàm format text được chèn vào input sau khi chọn item */
|
|
114
357
|
mentionSelect?: (item: unknown, triggerChar?: string) => string;
|
|
358
|
+
/** Hàm lọc danh sách items theo search string */
|
|
115
359
|
mentionFilter?: (searchString: string, items?: Array<unknown>) => Array<unknown> | undefined;
|
|
360
|
+
/** Sự kiện DOM trên mention span đã chèn kích hoạt mentionActionByEvent */
|
|
116
361
|
mentionEventName?: 'click' | 'mouseenter';
|
|
362
|
+
/** Callback được gọi khi sự kiện mentionEventName xảy ra trên span mention */
|
|
117
363
|
mentionActionByEvent?: (item: unknown, triggerChars?: string) => void;
|
|
364
|
+
/** Danh sách items hiển thị trong danh sách gợi ý. Bắt buộc. */
|
|
118
365
|
items: Array<Record<string, string | undefined>>;
|
|
119
|
-
|
|
366
|
+
/** z-index của dropdown danh sách gợi ý. Mặc định: 2500 */
|
|
120
367
|
zIndex?: number;
|
|
121
368
|
}
|
|
122
369
|
|
|
370
|
+
/**
|
|
371
|
+
* Dữ liệu emit qua outInsertMention khi một mention được chèn thành công.
|
|
372
|
+
* Dùng cho rich text editor tích hợp sâu (Quill, ProseMirror).
|
|
373
|
+
*/
|
|
123
374
|
export interface IMentionInsert {
|
|
124
375
|
data: {
|
|
376
|
+
/** ID định danh duy nhất (từ item.id hoặc uuid tự sinh) */
|
|
125
377
|
id: string;
|
|
378
|
+
/** Frontend ID dùng để track node trong DOM */
|
|
126
379
|
feId: string;
|
|
380
|
+
/** Giá trị text được chèn (kết quả của mentionSelect) */
|
|
127
381
|
value: string;
|
|
128
382
|
};
|
|
383
|
+
/** Số ký tự cần xóa tính từ vị trí con trỏ để thay bằng mention node */
|
|
129
384
|
lengthKey: number;
|
|
130
385
|
}
|
|
131
386
|
|
|
387
|
+
/**
|
|
388
|
+
* Object emit qua outFunctionControl để điều khiển directive từ bên ngoài.
|
|
389
|
+
*/
|
|
132
390
|
export interface IMentionFunctionControlEvent {
|
|
391
|
+
/**
|
|
392
|
+
* Chèn ký tự trigger vào vị trí con trỏ hiện tại và mở danh sách gợi ý.
|
|
393
|
+
* @param inputEvent - true nếu gọi từ sự kiện input
|
|
394
|
+
*/
|
|
133
395
|
addMention: (inputEvent: boolean) => void;
|
|
134
396
|
}
|
|
135
397
|
```
|
|
136
398
|
|
|
137
|
-
##
|
|
399
|
+
## Cấu hình mặc định (DEFAULT_CONFIG)
|
|
400
|
+
|
|
401
|
+
Khi không truyền đủ các option, directive áp dụng các giá trị mặc định sau:
|
|
402
|
+
|
|
403
|
+
| Thuộc tính | Giá trị mặc định |
|
|
404
|
+
|---|---|
|
|
405
|
+
| `triggerChar` | `'@'` |
|
|
406
|
+
| `labelKey` | `'email'` |
|
|
407
|
+
| `allowSpace` | `true` |
|
|
408
|
+
| `returnTrigger` | `false` |
|
|
409
|
+
| `limitSpaceSearchQuery` | `3` |
|
|
410
|
+
| `mentionEventName` | `'click'` |
|
|
411
|
+
| `mentionSelect` | `(item) => '@' + item.email` |
|
|
412
|
+
| `mentionFilter` | Lọc theo field `name` và `username` (hỗ trợ tiếng Việt bỏ dấu) |
|
|
413
|
+
| `zIndex` | `2500` |
|
|
414
|
+
|
|
415
|
+
## Điều hướng bàn phím
|
|
416
|
+
|
|
417
|
+
| Phím | Hành động |
|
|
418
|
+
|---|---|
|
|
419
|
+
| `@`, `#`, ... (trigger char) | Mở danh sách gợi ý |
|
|
420
|
+
| Mũi tên xuống | Chọn item tiếp theo |
|
|
421
|
+
| Mũi tên lên | Chọn item trước đó |
|
|
422
|
+
| `Enter` hoặc `Tab` | Chèn item đang active vào input |
|
|
423
|
+
| `Escape` | Đóng danh sách gợi ý |
|
|
424
|
+
| `Backspace` về trước ký tự trigger | Đóng danh sách gợi ý |
|
|
425
|
+
| `Space` (khi `allowSpace: false`) | Đóng danh sách gợi ý |
|
|
138
426
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
427
|
+
## Lưu ý quan trọng
|
|
428
|
+
|
|
429
|
+
⚠️ **mentionConfig là bắt buộc**: Nếu không truyền `[mentionConfig]`, directive sẽ không gắn event listeners và không hoạt động. Kiểm tra `ngAfterViewInit` trong source.
|
|
430
|
+
|
|
431
|
+
⚠️ **ContentEditable vs Input**: Logic xử lý caret và chèn mention khác nhau giữa `input`/`textarea` và `contenteditable`. Với `input`/`textarea`, directive dùng `selectionStart`. Với `contenteditable`, directive dùng `window.getSelection()` để tính vị trí và chèn HTML node.
|
|
432
|
+
|
|
433
|
+
⚠️ **outInsertMention chỉ emit với contenteditable**: Output `(outInsertMention)` chỉ được emit khi host element là `contenteditable` (mode editor). Với `input`/`textarea`, mention được chèn trực tiếp vào `value`.
|
|
434
|
+
|
|
435
|
+
⚠️ **Dependency bắt buộc**: Directive phụ thuộc vào `LibsUiDynamicComponentService` để render danh sách gợi ý. Đảm bảo service này được cung cấp trong ứng dụng.
|
|
436
|
+
|
|
437
|
+
⚠️ **mentionFilter phải được truyền để lọc hoạt động**: Nếu không truyền `mentionFilter`, directive dùng hàm mặc định lọc theo field `name` và `username`. Nếu data của bạn dùng field khác, hãy truyền hàm `mentionFilter` riêng.
|
|
438
|
+
|
|
439
|
+
⚠️ **timeDelayInit với lazy-loaded editor**: Khi dùng cùng Quill hoặc editor khởi tạo bất đồng bộ, truyền `[timeDelayInit]="500"` hoặc giá trị phù hợp để đảm bảo editor đã render xong trước khi directive gắn event.
|
|
440
|
+
|
|
441
|
+
⚠️ **disableSearch để load data từ API**: Khi muốn tự load danh sách từ API dựa trên từ khóa, set `disableSearch: true` trong config và lắng nghe `(outSearchTerm)` để gọi API. Sau khi nhận kết quả, cập nhật `mentionConfig.items` để danh sách hiển thị mới.
|
|
145
442
|
|
|
146
443
|
## Demo
|
|
147
444
|
|
|
@@ -149,8 +446,4 @@ export interface IMentionFunctionControlEvent {
|
|
|
149
446
|
npx nx serve core-ui
|
|
150
447
|
```
|
|
151
448
|
|
|
152
|
-
Truy cập: `http://localhost:
|
|
153
|
-
|
|
154
|
-
## License
|
|
155
|
-
|
|
156
|
-
MIT
|
|
449
|
+
Truy cập: `http://localhost:4500/inputs/mention`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { signal, model, viewChild, viewChildren,
|
|
2
|
+
import { signal, model, viewChild, viewChildren, Component, ChangeDetectionStrategy, inject, ElementRef, input, output, effect, untracked, Directive } from '@angular/core';
|
|
3
3
|
import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
|
|
4
|
-
import {
|
|
4
|
+
import { get, deleteUnicode, set, isNil, UtilsKeyCodeConstant, uuid } from '@libs-ui/utils';
|
|
5
5
|
import { Subject, fromEvent, takeUntil } from 'rxjs';
|
|
6
6
|
import { tap, takeUntil as takeUntil$1 } from 'rxjs/operators';
|
|
7
7
|
import { NgTemplateOutlet } from '@angular/common';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libs-ui-components-inputs-mention.mjs","sources":["../../../../../../libs-ui/components/inputs/mention/src/defines/template.define.ts","../../../../../../libs-ui/components/inputs/mention/src/defines/utils.define.ts","../../../../../../libs-ui/components/inputs/mention/src/defines/caret-coords.define.ts","../../../../../../libs-ui/components/inputs/mention/src/list/list.component.ts","../../../../../../libs-ui/components/inputs/mention/src/list/list.component.html","../../../../../../libs-ui/components/inputs/mention/src/mention.directive.ts","../../../../../../libs-ui/components/inputs/mention/src/libs-ui-components-inputs-mention.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { deleteUnicode, get } from '@libs-ui/utils';\nimport { IMentionConfig } from '../interfaces/mention.interface';\nexport const PATTERN_INSERT = '\\ufeff';\n\nexport const buildTemplate = (value: string, id: string, feId: string): string => {\n return `<span class=\"libs-ui-components-mention-item\" style=\"font-weight: 600;-moz-osx-font-smoothing: grayscale;-webkit-font-smoothing: antialiased; color: #7239EA\" contenteditable=\"false\" id=\"${id}\" feId=\"${feId}\" value=\"${value}\">${value}</span> `;\n};\n\nexport const DEFAULT_CONFIG: IMentionConfig = {\n items: [],\n triggerChar: '@',\n labelKey: 'email',\n allowSpace: true,\n returnTrigger: false,\n limitSpaceSearchQuery: 3,\n mentionEventName: 'click',\n mentionActionByEvent: (item, trigger) => console.log(item, trigger),\n mentionSelect: (item) => `@${get(item, 'email')}`,\n mentionFilter: (search: string, items?: Array<unknown>) => {\n const searchString = deleteUnicode(search.toLowerCase());\n\n return items?.filter((item) => {\n const name = deleteUnicode(get<any>(item, 'name')?.toLowerCase() || '');\n const userName = deleteUnicode(get<any>(item, 'username')?.toLowerCase() || '');\n\n return name.includes(searchString) || userName.includes(searchString);\n });\n },\n};\n","import { get } from '@libs-ui/utils';\nimport { PATTERN_INSERT } from './template.define';\n\nconst setValue = (el: HTMLInputElement, value: string) => {\n if (isInputOrTextAreaElement(el)) {\n el.value = value;\n\n return;\n }\n el.textContent = value;\n};\n\nexport const getValue = (el: HTMLInputElement) => {\n return isInputOrTextAreaElement(el) ? el.value : el.textContent;\n};\n\nexport const insertValue = (el: HTMLInputElement, start: number, end: number, text: string, iframe: HTMLIFrameElement, noRecursion = false): ChildNode | undefined | null => {\n if (isTextElement(el)) {\n const val = getValue(el);\n\n text = noRecursion ? PATTERN_INSERT : text;\n setValue(el, val?.substring(0, start) + text + val?.substring(end, val.length));\n setCaretPosition(el, start + text.length, iframe);\n\n return;\n }\n if (noRecursion) {\n return;\n }\n\n return insertValueToContentEditable(start, end, text);\n};\n\nconst insertValueToContentEditable = (start: number, end: number, text: string): ChildNode | undefined | null => {\n if (!window.getSelection) {\n return;\n }\n const sel = window.getSelection();\n\n if (!sel?.anchorNode || !sel.getRangeAt || !sel.rangeCount) {\n return;\n }\n let range = sel.getRangeAt(0);\n const anchorNode = sel.anchorNode;\n const numberTextBeforeCursor = (getTextBeforeCursor() || '').length;\n\n range.setStart(anchorNode, numberTextBeforeCursor - (end - start));\n range.setEnd(anchorNode, numberTextBeforeCursor);\n range.deleteContents();\n // Range.createContextualFragment() would be useful here but is\n // only relatively recently standardized and is not supported in\n // some browsers (IE9, for one)\n const el = document.createElement('SPAN');\n\n el.innerHTML = text;\n const frag = document.createDocumentFragment();\n let node, lastNode, nodeHandlerEvent;\n\n while ((node = el.firstChild)) {\n if (get(node, 'getAttribute')) {\n nodeHandlerEvent = node;\n }\n\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n return nodeHandlerEvent;\n};\n\nexport const getTextBeforeCursor = () => {\n const sel = window.getSelection();\n\n if (!sel?.anchorNode) {\n return undefined;\n }\n const range = sel.getRangeAt(0);\n const anchorNode = sel.anchorNode;\n const rangeNew = document.createRange();\n\n rangeNew.selectNodeContents(anchorNode);\n rangeNew.setEnd(range.startContainer, range.startOffset);\n\n const fragNew = rangeNew.cloneContents();\n const elmPrev = document.createElement('SPAN');\n\n elmPrev.appendChild(fragNew);\n\n return elmPrev.innerText;\n};\n\nexport const isInputOrTextAreaElement = (el: HTMLElement): boolean => {\n return el !== null && (el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA');\n};\n\nexport const isTextElement = (el: HTMLElement): boolean => {\n return el !== null && (el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA' || el.nodeName === '#text');\n};\n\nexport const setCaretPosition = (el: HTMLInputElement, pos: number, iframe: HTMLIFrameElement) => {\n if (isInputOrTextAreaElement(el) && el.selectionStart) {\n el.focus();\n el.setSelectionRange(pos, pos);\n\n return;\n }\n const range = getDocument(iframe)?.createRange();\n\n range?.setStart(el, pos);\n range?.collapse(true);\n const sel = getWindowSelection(iframe);\n\n if (!sel) {\n return;\n }\n sel.removeAllRanges();\n if (range) {\n sel.addRange(range);\n }\n};\n\nexport const getCaretPosition = (el: HTMLInputElement, iframe?: HTMLIFrameElement): number => {\n if (isInputOrTextAreaElement(el)) {\n const val = el.value;\n\n return val.slice(0, el.selectionStart || undefined).length;\n }\n const selObj = getWindowSelection(iframe);\n\n if (selObj && selObj.rangeCount > 0) {\n const selRange = selObj.getRangeAt(0);\n const preCaretRange = selRange.cloneRange();\n\n preCaretRange.selectNodeContents(el);\n preCaretRange.setEnd(selRange.endContainer, selRange.endOffset);\n const position = preCaretRange.toString().length;\n\n return position;\n }\n return 0;\n};\n\n// Based on ment.io functions...\n//\n\nconst getDocument = (iframe?: HTMLIFrameElement) => {\n if (!iframe) {\n return document;\n }\n\n return iframe.contentWindow?.document;\n};\n\nexport const getWindowSelection = (iframe?: HTMLIFrameElement): Selection | null => {\n if (!iframe) {\n return window.getSelection();\n }\n\n return iframe.contentWindow?.getSelection() || null;\n};\n\nexport const getContentEditableCaretCoords = (ctx: { iframe: HTMLIFrameElement | undefined; parent: Element | null; windowParent?: boolean }) => {\n const markerTextChar = '\\ufeff';\n const markerId = 'sel_' + new Date().getTime() + '_' + Math.random().toString().substring(2);\n const doc = getDocument(ctx.iframe) as Document;\n const sel = getWindowSelection(ctx.iframe) as Selection;\n\n if (!sel) {\n return {\n left: 0,\n top: 0,\n bottom: 0,\n };\n }\n const prevRange = sel.getRangeAt(0);\n\n // create new range and set postion using prevRange\n const range = doc.createRange();\n const anchorNode = sel.anchorNode as Node;\n range.setStart(anchorNode, prevRange.startOffset);\n range.setEnd(anchorNode, prevRange.startOffset);\n range.collapse(false);\n\n // Create the marker element containing a single invisible character\n // using DOM methods and insert it at the position in the range\n const markerEl = doc.createElement('span');\n\n markerEl.id = markerId;\n markerEl.appendChild(doc.createTextNode(markerTextChar));\n range.insertNode(markerEl);\n sel.removeAllRanges();\n sel.addRange(prevRange);\n\n const coordinates = {\n left: 0,\n top: markerEl.offsetHeight,\n bottom: -1,\n };\n\n localToRelativeCoordinates(ctx, markerEl, coordinates);\n markerEl.parentNode?.removeChild(markerEl);\n const widthScreen = (ctx.windowParent ? window.parent.innerWidth : window.innerWidth) || document.documentElement.clientWidth || document.body.clientWidth;\n\n if (coordinates.left + 315 > widthScreen) {\n coordinates.left = coordinates.left - 300;\n }\n const heightScreen = (ctx.windowParent ? window.parent.innerHeight : window.innerHeight) || document.documentElement.clientHeight || document.body.clientHeight;\n\n if (coordinates.top + 190 > heightScreen) {\n coordinates.bottom = heightScreen - coordinates.top + 15;\n coordinates.top = -1;\n }\n\n return coordinates;\n};\n\nconst localToRelativeCoordinates = (ctx: { iframe: HTMLIFrameElement | undefined; parent: Element | null; windowParent?: boolean }, element: Element, coordinates: { top: number; left: number; bottom: number }) => {\n let obj = <HTMLElement>element;\n let iframe = ctx ? ctx.iframe : null;\n\n while (obj) {\n if (ctx.parent !== null && ctx.parent === obj) {\n break;\n }\n coordinates.left += obj.offsetLeft + obj.clientLeft;\n coordinates.top += obj.offsetTop + obj.clientTop;\n obj = <HTMLElement>obj.offsetParent;\n if (!obj && iframe) {\n obj = iframe;\n iframe = null;\n }\n }\n obj = <HTMLElement>element;\n iframe = ctx ? ctx.iframe : null;\n while ((obj !== getDocument()?.body || ctx.windowParent) && obj !== null) {\n if (ctx.parent !== null && ctx.parent === obj) {\n break;\n }\n if (obj.scrollTop && obj.scrollTop > 0) {\n coordinates.top -= obj.scrollTop;\n }\n if (obj.scrollLeft && obj.scrollLeft > 0) {\n coordinates.left -= obj.scrollLeft;\n }\n obj = ctx.windowParent ? <HTMLElement>obj.offsetParent : <HTMLElement>obj.parentNode;\n if (!obj && iframe) {\n obj = iframe;\n iframe = null;\n }\n }\n};\n\nconst setEndOfContentEditable = (contentEditableElement: Node) => {\n if (document.createRange) {\n const range = document.createRange(); //Create a range (a range is a like the selection but invisible)\n const selection = window.getSelection(); //get the selection object (allows you to change selection)\n\n range.selectNodeContents(contentEditableElement); //Select the entire contents of the element with the range\n range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start\n selection?.removeAllRanges(); //remove any selections already made\n selection?.addRange(range); //make the range you have just created the visible selection\n }\n};\n\nexport const insertTextAtCaret = (element: HTMLInputElement, text: string) => {\n if (window.getSelection) {\n if (!elementContainsSelection(element)) {\n setEndOfContentEditable(element);\n insertTextAtCaret(element, text);\n\n return;\n }\n const sel = window.getSelection();\n\n if (sel?.getRangeAt && sel.rangeCount) {\n let range = sel.getRangeAt(0);\n const el = document.createElement('SPAN');\n\n range.deleteContents();\n el.innerHTML = text;\n const frag = document.createDocumentFragment();\n let node: Node | null;\n let lastNode!: Node;\n\n while ((node = el.firstChild)) {\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n }\n};\n\nconst elementContainsSelection = (el: HTMLInputElement) => {\n if (!window.getSelection) {\n return false;\n }\n const sel = window.getSelection();\n\n if (sel && sel.rangeCount > 0) {\n for (let i = 0; i < sel.rangeCount; ++i) {\n if (!isOrContains(sel.getRangeAt(i).commonAncestorContainer, el)) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n};\n\nconst isOrContains = (node: Node, container: HTMLInputElement) => {\n while (node) {\n if (node === container) {\n return true;\n }\n if (node.parentNode) {\n node = node.parentNode;\n }\n }\n\n return false;\n};\n","/* From: https://github.com/component/textarea-caret-position */\n\nimport { PathOf } from '@libs-ui/interfaces-types';\nimport { get, isNil, set } from '@libs-ui/utils';\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize',\n];\n\nconst isBrowser = typeof window !== 'undefined';\nconst isFirefox = isBrowser && get(window, 'mozInnerScreenX') !== null;\n\nexport const getCaretCoordinates = (element: Element, position: number | null) => {\n if (!isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n // The mirror div will replicate the textarea's style\n const div: HTMLDivElement = document.createElement('div');\n\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n const style = div.style;\n const computed = window.getComputedStyle ? window.getComputedStyle(element) : get(element, 'currentStyle'); // currentStyle for IE < 9\n const isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput) {\n style.wordBreak = 'break-word';\n } // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n\n // Transfer the element's properties to the div\n properties.forEach((prop) => {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing !== 'border-box') {\n style.lineHeight = computed.height;\n\n return;\n }\n const height = parseInt(computed.height);\n const outerHeight = parseInt(computed.paddingTop) + parseInt(computed.paddingBottom) + parseInt(computed.borderTopWidth) + parseInt(computed.borderBottomWidth);\n const targetHeight = outerHeight + parseInt(computed.lineHeight);\n\n if (height > targetHeight) {\n style.lineHeight = height - outerHeight + 'px';\n\n return;\n }\n if (height === targetHeight) {\n style.lineHeight = computed.lineHeight;\n\n return;\n }\n style.lineHeight = '0';\n\n return;\n }\n set(style, prop as PathOf<CSSStyleDeclaration>, computed[prop]);\n });\n\n if (!isFirefox) {\n style.overflow = 'hidden';\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n }\n const value = get(element, 'value');\n if (isFirefox && element.scrollHeight > parseInt(computed.height)) {\n style.overflowY = 'scroll';\n }\n div.textContent = value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput && !isNil(div.textContent)) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n }\n const span = document.createElement('span');\n\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n const coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth']),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth']),\n height: parseInt(computed['lineHeight']),\n };\n\n document.body.removeChild(div);\n\n return coordinates;\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, model, OnDestroy, OnInit, signal, viewChild, viewChildren } from '@angular/core';\nimport { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { set, UtilsKeyCodeConstant } from '@libs-ui/utils';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { getCaretCoordinates } from '../defines/caret-coords.define';\nimport { getContentEditableCaretCoords, isInputOrTextAreaElement } from '../defines/utils.define';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-mention-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent, NgTemplateOutlet],\n})\nexport class LibsUiComponentsInputsMentionListComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n public items = signal<Array<Record<string, string | undefined>>>([]);\n public activeIndex = signal<number>(0);\n public hidden = signal<boolean>(false);\n public styleOff = signal<boolean>(false);\n public parentHandlerKeyDown = signal<((e: Event, element: HTMLInputElement | undefined) => unknown) | undefined>(undefined);\n\n protected dropUp = signal<boolean>(false);\n\n private readonly coords = signal<{ top: number; left: number; bottom?: number }>({ top: 0, left: 0, bottom: 0 });\n private readonly offset = signal<number>(0);\n private readonly nativeParentElement = signal<HTMLInputElement | undefined>(undefined);\n private readonly onDestroy = new Subject<void>();\n\n // #region INPUT\n labelKey = model<string>('label');\n zIndex = model<number>(1000);\n isIframe = model.required<boolean>();\n defaultAvatar = model<string>();\n listTemplate = signal<any>(undefined);\n\n /* VIEW CHILD */\n readonly elementEl = viewChild<ElementRef>('elementRef');\n readonly itemsEl = viewChildren<ElementRef>('itemRef');\n\n ngOnInit() {\n if (this.isIframe()) {\n this.initEvent(window.parent, 'wheel');\n this.initEvent(window.parent, 'resize');\n return;\n }\n this.initEvent(window, 'wheel');\n this.initEvent(window, 'resize');\n }\n\n /* FUNCTIONS */\n private initEvent(element: Window, eventName: string) {\n fromEvent<Event>(element, eventName)\n .pipe(takeUntil(this.onDestroy))\n .subscribe((event: Event) => {\n if (eventName === 'resize' || !this.elementEl()?.nativeElement.contains(event.target)) {\n this.handlerListenClose(event);\n }\n });\n }\n\n private handlerListenClose(event: Event) {\n if (event.target !== this.elementEl()?.nativeElement) {\n this.hidden.set(true);\n }\n }\n\n // lots of confusion here between relative coordinates and containers\n position(nativeParentElement: HTMLInputElement, iframe?: HTMLIFrameElement, leftDiv?: number): void {\n this.nativeParentElement.set(nativeParentElement);\n if (isInputOrTextAreaElement(nativeParentElement)) {\n // parent elements need to have postition:relative for this to work correctly?\n this.coords.set(getCaretCoordinates(nativeParentElement, nativeParentElement.selectionStart));\n this.coords.update((item) => ({\n ...item,\n top: nativeParentElement.offsetTop + item.top - nativeParentElement.scrollTop,\n left: nativeParentElement.offsetLeft + item.left - nativeParentElement.scrollLeft + nativeParentElement.getBoundingClientRect().left,\n }));\n\n // getCretCoordinates() for text/input elements needs an additional offset to position the list correctly\n this.offset.set(this.getBlockCursorDimensions(nativeParentElement).height);\n this.positionElement();\n return;\n }\n if (iframe) {\n const context: { iframe: HTMLIFrameElement; parent: Element | null; windowParent?: boolean } = { iframe: iframe, parent: window.parent.document.body, windowParent: true };\n const caretRelativeToView = getContentEditableCaretCoords(context);\n const doc = document.documentElement;\n const scrollLeft = (window.scrollX || doc.scrollLeft) - (doc.clientLeft || 0);\n this.coords.update((item) => ({\n ...item,\n left: caretRelativeToView.left - scrollLeft - (leftDiv || 0),\n bottom: window.parent.innerHeight - caretRelativeToView.top + 18,\n }));\n if (caretRelativeToView.bottom && caretRelativeToView.bottom !== -1) {\n this.coords.update((item) => ({\n ...item,\n bottom: caretRelativeToView.bottom,\n }));\n }\n this.positionElement();\n\n return;\n }\n const doc = document.documentElement;\n const scrollLeft = (window.scrollX || doc.scrollLeft) - (doc.clientLeft || 0);\n const scrollTop = (window.scrollX || doc.scrollTop) - (doc.clientTop || 0);\n // bounding rectangles are relative to view, offsets are relative to container?\n const caretRelativeToView = getContentEditableCaretCoords({ iframe, parent: null });\n\n this.coords.update((item) => ({\n ...item,\n top: caretRelativeToView.top - scrollTop + 10,\n left: caretRelativeToView.left - scrollLeft - (leftDiv || 0),\n bottom: caretRelativeToView.bottom,\n }));\n this.positionElement();\n }\n\n get ActiveItem() {\n return this.items()[this.activeIndex()];\n }\n\n protected handlerClick(event: Event, index: number) {\n event.stopPropagation();\n this.activeIndex.set(index);\n set(event as KeyboardEvent, 'keyCode', UtilsKeyCodeConstant.ENTER);\n this.parentHandlerKeyDown()?.(event, this.nativeParentElement());\n }\n\n activateNextItem() {\n this.activeIndex.set(this.items().length - 1 > this.activeIndex() ? this.activeIndex() + 1 : this.activeIndex());\n this.scrollToActive();\n }\n\n activatePreviousItem() {\n this.activeIndex.set(this.activeIndex() > 0 ? this.activeIndex() - 1 : this.activeIndex());\n this.scrollToActive();\n }\n\n private positionElement(left: number = this.coords().left, top: number = this.coords().top, dropUp: boolean = this.dropUp(), bottom: number = this.coords().bottom || 0) {\n const el = this.elementEl()?.nativeElement;\n\n top += dropUp ? 0 : this.offset(); // top of list is next line\n el.style.position = 'absolute';\n el.style.left = left + 'px';\n el.style.top = bottom !== -1 ? 'auto' : top + 'px';\n el.style.bottom = bottom === -1 ? 'auto' : bottom + 'px';\n this.nativeParentElement()?.normalize();\n }\n\n private getBlockCursorDimensions(nativeParentElement: HTMLInputElement) {\n const parentStyles = window.getComputedStyle(nativeParentElement);\n\n return {\n height: parseFloat(parentStyles.lineHeight),\n width: parseFloat(parentStyles.fontSize),\n };\n }\n\n protected handleActiveItem(event: Event, index: number) {\n event.stopPropagation();\n this.activeIndex.set(index);\n }\n\n private scrollToActive() {\n if (!this.itemsEl() || this.itemsEl().length <= this.activeIndex()) {\n return;\n }\n this.itemsEl()[this.activeIndex()].nativeElement.scrollIntoView();\n }\n\n scrollContent() {\n setTimeout(() => {\n const element = this.elementEl();\n if (element?.nativeElement) {\n element.nativeElement.scrollTop = 0;\n }\n });\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","<div\n #elementRef\n class=\"libs-ui-mention-list\"\n [style.zIndex]=\"zIndex()\"\n [class.hidden]=\"hidden()\">\n @for (item of items(); track item) {\n <div\n #itemRef\n class=\"libs-ui-mention-list-item\"\n [class.libs-ui-mention-list-item-active]=\"$index === activeIndex()\"\n (mousedown)=\"handlerClick($event, $index)\"\n (mouseenter)=\"handleActiveItem($event, $index)\">\n @if (listTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"listTemplate()\"\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\"></ng-container>\n } @else {\n <div class=\"px-[12px] py-[6px] flex items-center\">\n <libs_ui-components-avatar\n [size]=\"24\"\n [linkAvatar]=\"item.avatar\"\n [linkAvatarError]=\"defaultAvatar()\"\n [getLastTextAfterSpace]=\"true\"\n [textAvatar]=\"item.name\"\n [idGenColor]=\"item.id\" />\n <libs_ui-components-popover\n [classInclude]=\"'libs-ui-font-h5r'\"\n [type]=\"'text'\"\n [ignoreShowPopover]=\"true\"\n [config]=\"{ width: 250 }\">\n <!-- // ta.m ẩn show tooltip vì chưa xử lý đc vị trí -->\n {{ item.name + ' (' + item.username + ')' }}\n </libs_ui-components-popover>\n </div>\n }\n </div>\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, ComponentRef, Directive, ElementRef, OnDestroy, TemplateRef, effect, inject, input, output, signal, untracked } from '@angular/core';\nimport { IEvent, TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { UtilsKeyCodeConstant, get, isNil, uuid } from '@libs-ui/utils';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { DEFAULT_CONFIG, buildTemplate } from './defines/template.define';\nimport { getCaretPosition, getTextBeforeCursor, getValue, getWindowSelection, insertTextAtCaret, insertValue, setCaretPosition } from './defines/utils.define';\nimport { IMentionConfig, IMentionFunctionControlEvent, IMentionInsert, INodeInsert } from './interfaces/mention.interface';\nimport { LibsUiComponentsInputsMentionListComponent } from './list/list.component';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsInputsMentionDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsInputsMentionDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private readonly listComponentRef = signal<ComponentRef<LibsUiComponentsInputsMentionListComponent> | undefined>(undefined);\n private readonly nodesInsert = signal<Set<INodeInsert>>(new Set());\n private readonly activeConfig = signal<IMentionConfig | undefined>(undefined);\n private readonly triggerChars = signal<Record<string, IMentionConfig>>({});\n private readonly searchString = signal<string>('');\n private readonly startPos = signal<number | undefined>(undefined);\n private readonly startNode = signal<any>(undefined);\n private readonly searchList = signal<LibsUiComponentsInputsMentionListComponent | undefined>(undefined);\n private readonly searching = signal<boolean>(false);\n private readonly iframe = signal<any>(undefined);\n private readonly lastKeyCode = signal<number | undefined>(undefined);\n private readonly isEditor = signal<boolean>(false);\n private readonly iframeId = signal<string | undefined>(undefined);\n private readonly element = inject(ElementRef);\n private readonly dynamicComponentService = inject(LibsUiDynamicComponentService);\n private readonly onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly timeDelayInit = input<number, number | undefined>(0, { transform: (val) => val ?? 0 });\n readonly mentionConfig = input<IMentionConfig>();\n readonly mentionListTemplate = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n\n // #region OUTPUT\n readonly outSearchTerm = output<string | undefined>();\n readonly outItemSelected = output<unknown>();\n readonly outToggle = output<boolean>();\n readonly outInsertMention = output<IMentionInsert>();\n readonly outFunctionControl = output<IMentionFunctionControlEvent>();\n\n constructor() {\n effect(() => {\n this.mentionConfig();\n untracked(() => this.updateConfig());\n });\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (!this.mentionConfig()) {\n return;\n }\n const isContentEditable = this.element.nativeElement.getAttribute('contenteditable');\n this.isEditor.set(!isContentEditable);\n const element = !this.isEditor() ? this.element.nativeElement : this.element.nativeElement.querySelector('.ql-editor[contenteditable=\"true\"]');\n if (element) {\n element.addEventListener('keydown', (event: Event) => {\n this.handlerKeydown.bind(this)(event, element);\n });\n element.addEventListener('input', (event: InputEvent) => {\n this.handlerInput.bind(this)(event, element);\n });\n element.addEventListener('blur', (event: Event) => {\n this.handlerBlur.bind(this)(event);\n });\n element.addEventListener('click', (event: Event) => {\n this.handlerFocus.bind(this)(event, element);\n });\n }\n this.outFunctionControl.emit({\n addMention: () => {\n insertTextAtCaret(element, `${this.mentionConfig()?.triggerChar}`);\n setTimeout(() => {\n this.handlerKeydown({ key: this.mentionConfig()?.triggerChar, keyCode: UtilsKeyCodeConstant.BACKSPACE, shiftKey: true, inputEvent: true }, element);\n }, 500);\n },\n });\n }, this.timeDelayInit());\n }\n\n /* FUNCTIONS */\n protected updateConfig() {\n const mentionConfig = this.mentionConfig();\n if (!mentionConfig) {\n return;\n }\n this.triggerChars.set({});\n this.addConfig(mentionConfig);\n if (mentionConfig.mention) {\n mentionConfig.mention.forEach((config) => this.addConfig(config));\n }\n }\n\n private addConfig(config: IMentionConfig) {\n const defaults = { ...DEFAULT_CONFIG };\n const labelKey = config.labelKey || 'label';\n config = Object.assign(defaults, config);\n if (config.items && config.items.length > 0) {\n if (typeof config.items[0] === 'string') {\n config.items.forEach((label) => {\n const object: Record<string, Record<string, string | undefined>> = {};\n object[labelKey] = label;\n return object;\n });\n }\n if (labelKey) {\n // remove items without an labelKey (as it's required to filter the list)\n config.items = config.items.filter((e) => e[labelKey]);\n if (!config.disableSort) {\n config.items.sort((a, b) => (a[labelKey] || '').localeCompare(b[labelKey] || ''));\n }\n }\n }\n this.triggerChars.update((item) => ({\n ...item,\n [config.triggerChar || '@']: config,\n }));\n if (this.activeConfig() && this.activeConfig()?.triggerChar === config.triggerChar) {\n this.activeConfig.set(config);\n this.updateSearchList();\n }\n }\n\n protected setIframe(iframe: HTMLIFrameElement) {\n this.iframe.set(iframe);\n }\n\n private stopEvent(event: Event) {\n if (get<unknown>(event, 'wasClick')) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n\n protected handlerBlur(event: Event) {\n setTimeout(() => {\n this.stopEvent(event);\n this.stopSearch();\n }, 100);\n }\n\n protected handlerInput(event: InputEvent, nativeElement: HTMLInputElement = this.element.nativeElement) {\n const data = get(event, 'data');\n if (this.lastKeyCode() === UtilsKeyCodeConstant.BUFFERED && data) {\n const keyCode = data.charCodeAt(0);\n this.handlerKeydown({ keyCode, inputEvent: true }, nativeElement);\n }\n }\n\n protected handlerKeydown(event: any, nativeElement: HTMLInputElement = this.element.nativeElement): any {\n this.lastKeyCode.set(event.keyCode);\n if (event.isComposing || event.keyCode === UtilsKeyCodeConstant.BUFFERED) {\n return;\n }\n\n const val: any = getValue(nativeElement);\n let pos: any = getCaretPosition(nativeElement, this.iframe());\n let charPressed = event.key;\n if (!this.isEditor()) {\n if (event.keyCode === UtilsKeyCodeConstant.BACKSPACE) {\n this.appendEmptyToLastNode(pos, val.length, nativeElement);\n }\n setTimeout(() => this.addNodeZeroWidthSpace(nativeElement), 0);\n }\n if (!charPressed) {\n const charCode = event.which || event.keyCode;\n charPressed = String.fromCharCode(event.which || event.keyCode);\n if (!event.shiftKey && charCode >= 65 && charCode <= 90) {\n charPressed = String.fromCharCode(charCode + 32);\n }\n }\n if (event.keyCode === UtilsKeyCodeConstant.ENTER && event.wasClick && pos < (this.startPos() || 0)) {\n pos = this.startNode().length;\n setCaretPosition(this.startNode(), pos, this.iframe());\n }\n const config = this.triggerChars()[charPressed];\n if (config) {\n this.activeConfig.set(config);\n this.startPos.set(event.inputEvent ? pos - 1 : pos);\n this.startNode.set(getWindowSelection(this.iframe())?.anchorNode);\n this.searching.set(true);\n this.searchString.set('');\n this.showSearchList(nativeElement);\n this.updateSearchList();\n if (config.returnTrigger) {\n this.outSearchTerm.emit(config.triggerChar);\n }\n return;\n }\n setTimeout(() => {\n for (const itemSet of this.nodesInsert()) {\n if (!nativeElement.contains(itemSet.elementSpan)) {\n itemSet.subscription?.unsubscribe();\n this.nodesInsert().delete(itemSet);\n }\n }\n });\n const startPos = this.startPos();\n if (isNil(startPos) || startPos < 0 || !this.searching()) {\n return;\n }\n const searchList = this.searchList();\n if (pos <= startPos) {\n if (searchList) {\n searchList.hidden.set(true);\n }\n return;\n }\n if (event.keyCode === UtilsKeyCodeConstant.SHIFT || event.metaKey || event.altKey || event.ctrlKey || pos <= startPos) {\n return;\n }\n if (!this.activeConfig()?.allowSpace && event.keyCode === UtilsKeyCodeConstant.SPACE) {\n this.startPos.set(-1);\n } else if (event.keyCode === UtilsKeyCodeConstant.BACKSPACE && pos > 0) {\n pos--;\n if (pos === this.startPos()) {\n this.stopSearch();\n }\n } else if (searchList?.hidden()) {\n if (event.keyCode === UtilsKeyCodeConstant.TAB || event.keyCode === UtilsKeyCodeConstant.ENTER) {\n this.stopSearch();\n return;\n }\n } else if (!searchList?.hidden() && this.activeConfig()) {\n if (event.keyCode === UtilsKeyCodeConstant.TAB || event.keyCode === UtilsKeyCodeConstant.ENTER) {\n this.stopEvent(event);\n // emit the selected list item\n this.outItemSelected.emit(searchList?.ActiveItem);\n // optional function to format the selected item before inserting the text\n this.insertMention(nativeElement, pos);\n // fire input event so angular bindings are updated\n if ('Event' in window) {\n // this seems backwards, but fire the event from this elements nativeElement (not the\n // one provided that may be in an iframe, as it won't be propogate)\n // Create the event using the modern Event constructor\n const evt = new Event(this.iframe() ? 'change' : 'input', {\n bubbles: true,\n cancelable: false,\n });\n // Dispatch the event on the native element\n nativeElement.dispatchEvent(evt);\n }\n this.startPos.set(-1);\n this.stopSearch();\n\n return false;\n }\n\n if (event.keyCode === UtilsKeyCodeConstant.ESCAPE) {\n this.stopEvent(event);\n this.stopSearch();\n\n return false;\n }\n if (event.keyCode === UtilsKeyCodeConstant.DOWN_ARROW) {\n this.stopEvent(event);\n searchList?.activateNextItem();\n\n return false;\n }\n if (event.keyCode === UtilsKeyCodeConstant.UP_ARROW) {\n this.stopEvent(event);\n searchList?.activatePreviousItem();\n\n return false;\n }\n }\n if (charPressed.length !== 1 && event.keyCode !== UtilsKeyCodeConstant.BACKSPACE) {\n this.stopEvent(event);\n\n return false;\n }\n if (!this.searching()) {\n return;\n }\n let mention = val.substring((this.startPos() || 0) + 1, pos);\n\n if (event.keyCode !== UtilsKeyCodeConstant.BACKSPACE && !event.inputEvent) {\n mention += charPressed;\n }\n const searchString = mention.replace(String.fromCharCode(160), ' ').replace(String.fromCharCode(0), '');\n this.searchString.set(searchString.trim());\n const limitSpaceSearchQuery = this.activeConfig()?.limitSpaceSearchQuery;\n if (limitSpaceSearchQuery && searchString.split(' ').length - 1 > limitSpaceSearchQuery) {\n this.searchString.set('');\n }\n if (this.activeConfig()?.returnTrigger) {\n const triggerChar = this.searchString() || event.keyCode === UtilsKeyCodeConstant.BACKSPACE ? val.substring(this.startPos(), (this.startPos() || 0) + 1) : '';\n\n this.outSearchTerm.emit(triggerChar + this.searchString());\n this.updateSearchList();\n\n return;\n }\n this.outSearchTerm.emit(this.searchString());\n this.updateSearchList();\n }\n\n protected handlerFocus(e?: Event, nativeElement: HTMLInputElement = this.element.nativeElement) {\n e?.stopPropagation();\n setTimeout(() => {\n const node = getWindowSelection(this.iframe())?.anchorNode;\n\n if (node?.nodeType !== 3) {\n this.stopSearch();\n\n return;\n }\n const textBeforeCursor = getTextBeforeCursor() || '';\n\n const triggerChars = Object.keys(this.triggerChars()).map((key: string) => {\n return {\n key: key,\n config: this.triggerChars()[key],\n index: textBeforeCursor.lastIndexOf(key),\n };\n });\n const matchingCharacters = triggerChars.reduce((pre, current) => (pre && current && current.index > pre.index ? current : pre), triggerChars[0]);\n\n if (matchingCharacters.index < 0) {\n this.stopSearch();\n\n return;\n }\n const search = textBeforeCursor?.substring(matchingCharacters.index, textBeforeCursor.length);\n\n if (!search) {\n this.stopSearch();\n\n return;\n }\n const pos = getCaretPosition(nativeElement, this.iframe());\n\n this.activeConfig.set(matchingCharacters.config);\n this.startPos.set(pos - (textBeforeCursor.length - matchingCharacters.index));\n this.searchString.set(search.replace(matchingCharacters.key, ''));\n this.searching.set(true);\n this.handlerKeydown({ keyCode: ''.charCodeAt(0), inputEvent: false }, nativeElement);\n const divElement = document.createElement('div');\n\n divElement.style.width = 'max-content';\n divElement.style.position = 'absolute';\n divElement.innerText = search;\n document.body.appendChild(divElement);\n let iframe = undefined;\n try {\n iframe = this.mentionConfig()?.iframe ? (window.parent.document.getElementById(this.mentionConfig()?.iframe as string) as HTMLIFrameElement) : undefined;\n } catch (error) {\n console.log(error);\n }\n const searchList = this.searchList();\n if (searchList) {\n searchList.position(nativeElement, iframe, divElement.getBoundingClientRect().width);\n }\n divElement.remove();\n nativeElement.normalize();\n });\n }\n\n private stopSearch() {\n const searchList = this.searchList();\n if (searchList && !searchList.hidden()) {\n searchList.hidden.set(true);\n this.outToggle.emit(false);\n }\n this.activeConfig.set(undefined);\n this.searching.set(false);\n }\n\n private updateSearchList() {\n const matches: any[] = [];\n const activeConfig = this.activeConfig();\n const searchString = this.searchString();\n const searchList = this.searchList();\n // disabling the search relies on the async operation to do the filtering\n if (activeConfig?.items && !activeConfig.disableSearch && !isNil(searchString) && activeConfig.labelKey && activeConfig.mentionFilter) {\n matches.push(...(activeConfig.mentionFilter(searchString, activeConfig.items) as any));\n }\n // update the search list\n if (!searchList) {\n return;\n }\n searchList.items.set(matches);\n searchList.hidden.set(!matches.length);\n searchList.activeIndex.set(0);\n searchList.scrollContent();\n this.outToggle.emit(!!matches.length);\n }\n\n private showSearchList(nativeElement: HTMLInputElement) {\n let iframe = undefined;\n const mentionConfig = this.mentionConfig();\n try {\n iframe = mentionConfig?.iframe ? (window.parent.document.getElementById(mentionConfig?.iframe as string) as HTMLIFrameElement) : undefined;\n } catch (error) {\n console.log(error);\n }\n if (!mentionConfig) {\n return;\n }\n this.outToggle.emit(true);\n let firstTime = false;\n\n if (!this.listComponentRef()) {\n firstTime = true;\n this.listComponentRef.set(this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsInputsMentionListComponent));\n this.searchList.set(this.listComponentRef()?.instance);\n }\n this.searchList()?.labelKey.set(this.activeConfig()?.labelKey || '');\n this.searchList()?.styleOff.set(this.mentionConfig()?.disableStyle || false);\n this.searchList()?.activeIndex.set(0);\n this.searchList()?.zIndex.set(this.mentionConfig()?.zIndex || 2500);\n this.searchList()?.isIframe.set(!!iframe);\n this.searchList()?.listTemplate.set(this.mentionListTemplate());\n this.searchList()?.parentHandlerKeyDown.set(this.handlerKeydown.bind(this));\n this.searchList()?.position(nativeElement, iframe);\n if (firstTime && this.listComponentRef()) {\n this.dynamicComponentService.addToBody(this.listComponentRef(), !!iframe);\n }\n }\n\n private destroyListSearch() {\n this.dynamicComponentService.remove(this.listComponentRef, this.iframeId());\n this.listComponentRef.set(undefined);\n }\n\n protected appendEmptyToLastNode(position: number, length: number, nativeElement: HTMLInputElement = this.element.nativeElement) {\n const empty = document.createTextNode('\\u00A0');\n const selection = getWindowSelection(this.iframe());\n const anchorNode = selection?.anchorNode;\n\n if (this.isEditor()) {\n const parentNode = anchorNode?.parentNode as Element;\n\n if (parentNode?.getAttribute?.('id')) {\n if (!parentNode.nextSibling?.textContent?.length) {\n parentNode?.parentNode?.insertBefore(empty, parentNode.nextSibling);\n }\n const range = document.createRange();\n const sel = window.getSelection();\n\n range.setStart(parentNode.nextSibling as Node, 0);\n range.collapse(true);\n sel?.removeAllRanges();\n sel?.addRange(range);\n }\n\n return;\n }\n let preNode = null;\n const anchorOffset = selection?.anchorOffset;\n\n if (!anchorNode || !anchorOffset) {\n return;\n }\n\n if (anchorNode.nodeName.toLowerCase() !== '#text') {\n nativeElement.appendChild(empty);\n\n return;\n }\n\n for (const node of Array.from(nativeElement.childNodes)) {\n if (anchorNode.nodeType === 3 && anchorNode === node && preNode?.getAttribute?.('id') && (!anchorNode.textContent?.length || anchorNode.textContent.length === 1) && position === length) {\n nativeElement.appendChild(empty);\n break;\n }\n preNode = node as Element;\n }\n }\n\n protected addNodeZeroWidthSpace(nativeElement: HTMLInputElement = this.element.nativeElement) {\n const empty = document.createTextNode('\\u200b');\n let preNode = null;\n\n for (const node of Array.from(nativeElement.childNodes)) {\n const typedNode: any = node;\n\n if (preNode?.getAttribute?.('id') && typedNode?.getAttribute?.('id')) {\n nativeElement.insertBefore(empty, preNode.nextSibling);\n }\n\n preNode = typedNode;\n }\n }\n\n private insertMention(nativeElement: HTMLInputElement, pos: number) {\n const activeConfig = this.activeConfig();\n if (!activeConfig) {\n return;\n }\n const searchList = this.searchList();\n let text = '';\n const feId = uuid();\n const id = searchList?.ActiveItem.id || uuid();\n const itemActive = searchList?.ActiveItem;\n const { triggerChar, mentionEventName, mentionActionByEvent } = activeConfig;\n\n if (activeConfig.mentionSelect) {\n text = activeConfig.mentionSelect(searchList?.ActiveItem, activeConfig.triggerChar);\n }\n if (!this.isEditor()) {\n let span: HTMLSpanElement = document.createElement('TEXTAREA');\n\n span.innerText = text;\n text = span.innerHTML;\n span.remove();\n text = buildTemplate(text, id, feId);\n span = insertValue(nativeElement, this.startPos() || 0, pos, text, this.iframe()) as HTMLSpanElement;\n if (span) {\n const data: INodeInsert = {\n elementSpan: span,\n subscription: undefined,\n item: itemActive,\n triggerChar: triggerChar,\n manualAdd: true,\n };\n\n this.nodesInsert().add(data);\n if (mentionEventName) {\n data.subscription = fromEvent<IEvent>(span, mentionEventName)\n .pipe(\n tap((e) => e.stopPropagation()),\n takeUntil(this.onDestroy)\n )\n .subscribe(() => {\n if (mentionActionByEvent) {\n mentionActionByEvent(itemActive, triggerChar);\n }\n });\n }\n }\n } else {\n this.outInsertMention.emit({ data: { id, value: text, feId }, lengthKey: pos - (this.startPos() || 0) });\n }\n }\n\n ngOnDestroy(): void {\n this.destroyListSearch();\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["takeUntil"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"libs-ui-components-inputs-mention.mjs","sources":["../../../../../../libs-ui/components/inputs/mention/src/defines/template.define.ts","../../../../../../libs-ui/components/inputs/mention/src/defines/utils.define.ts","../../../../../../libs-ui/components/inputs/mention/src/defines/caret-coords.define.ts","../../../../../../libs-ui/components/inputs/mention/src/list/list.component.ts","../../../../../../libs-ui/components/inputs/mention/src/list/list.component.html","../../../../../../libs-ui/components/inputs/mention/src/mention.directive.ts","../../../../../../libs-ui/components/inputs/mention/src/libs-ui-components-inputs-mention.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { deleteUnicode, get } from '@libs-ui/utils';\nimport { IMentionConfig } from '../interfaces/mention.interface';\nexport const PATTERN_INSERT = '\\ufeff';\n\nexport const buildTemplate = (value: string, id: string, feId: string): string => {\n return `<span class=\"libs-ui-components-mention-item\" style=\"font-weight: 600;-moz-osx-font-smoothing: grayscale;-webkit-font-smoothing: antialiased; color: #7239EA\" contenteditable=\"false\" id=\"${id}\" feId=\"${feId}\" value=\"${value}\">${value}</span> `;\n};\n\nexport const DEFAULT_CONFIG: IMentionConfig = {\n items: [],\n triggerChar: '@',\n labelKey: 'email',\n allowSpace: true,\n returnTrigger: false,\n limitSpaceSearchQuery: 3,\n mentionEventName: 'click',\n mentionActionByEvent: (item, trigger) => console.log(item, trigger),\n mentionSelect: (item) => `@${get(item, 'email')}`,\n mentionFilter: (search: string, items?: Array<unknown>) => {\n const searchString = deleteUnicode(search.toLowerCase());\n\n return items?.filter((item) => {\n const name = deleteUnicode(get<any>(item, 'name')?.toLowerCase() || '');\n const userName = deleteUnicode(get<any>(item, 'username')?.toLowerCase() || '');\n\n return name.includes(searchString) || userName.includes(searchString);\n });\n },\n};\n","import { get } from '@libs-ui/utils';\nimport { PATTERN_INSERT } from './template.define';\n\nconst setValue = (el: HTMLInputElement, value: string) => {\n if (isInputOrTextAreaElement(el)) {\n el.value = value;\n\n return;\n }\n el.textContent = value;\n};\n\nexport const getValue = (el: HTMLInputElement) => {\n return isInputOrTextAreaElement(el) ? el.value : el.textContent;\n};\n\nexport const insertValue = (el: HTMLInputElement, start: number, end: number, text: string, iframe: HTMLIFrameElement, noRecursion = false): ChildNode | undefined | null => {\n if (isTextElement(el)) {\n const val = getValue(el);\n\n text = noRecursion ? PATTERN_INSERT : text;\n setValue(el, val?.substring(0, start) + text + val?.substring(end, val.length));\n setCaretPosition(el, start + text.length, iframe);\n\n return;\n }\n if (noRecursion) {\n return;\n }\n\n return insertValueToContentEditable(start, end, text);\n};\n\nconst insertValueToContentEditable = (start: number, end: number, text: string): ChildNode | undefined | null => {\n if (!window.getSelection) {\n return;\n }\n const sel = window.getSelection();\n\n if (!sel?.anchorNode || !sel.getRangeAt || !sel.rangeCount) {\n return;\n }\n let range = sel.getRangeAt(0);\n const anchorNode = sel.anchorNode;\n const numberTextBeforeCursor = (getTextBeforeCursor() || '').length;\n\n range.setStart(anchorNode, numberTextBeforeCursor - (end - start));\n range.setEnd(anchorNode, numberTextBeforeCursor);\n range.deleteContents();\n // Range.createContextualFragment() would be useful here but is\n // only relatively recently standardized and is not supported in\n // some browsers (IE9, for one)\n const el = document.createElement('SPAN');\n\n el.innerHTML = text;\n const frag = document.createDocumentFragment();\n let node, lastNode, nodeHandlerEvent;\n\n while ((node = el.firstChild)) {\n if (get(node, 'getAttribute')) {\n nodeHandlerEvent = node;\n }\n\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n // Preserve the selection\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n return nodeHandlerEvent;\n};\n\nexport const getTextBeforeCursor = () => {\n const sel = window.getSelection();\n\n if (!sel?.anchorNode) {\n return undefined;\n }\n const range = sel.getRangeAt(0);\n const anchorNode = sel.anchorNode;\n const rangeNew = document.createRange();\n\n rangeNew.selectNodeContents(anchorNode);\n rangeNew.setEnd(range.startContainer, range.startOffset);\n\n const fragNew = rangeNew.cloneContents();\n const elmPrev = document.createElement('SPAN');\n\n elmPrev.appendChild(fragNew);\n\n return elmPrev.innerText;\n};\n\nexport const isInputOrTextAreaElement = (el: HTMLElement): boolean => {\n return el !== null && (el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA');\n};\n\nexport const isTextElement = (el: HTMLElement): boolean => {\n return el !== null && (el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA' || el.nodeName === '#text');\n};\n\nexport const setCaretPosition = (el: HTMLInputElement, pos: number, iframe: HTMLIFrameElement) => {\n if (isInputOrTextAreaElement(el) && el.selectionStart) {\n el.focus();\n el.setSelectionRange(pos, pos);\n\n return;\n }\n const range = getDocument(iframe)?.createRange();\n\n range?.setStart(el, pos);\n range?.collapse(true);\n const sel = getWindowSelection(iframe);\n\n if (!sel) {\n return;\n }\n sel.removeAllRanges();\n if (range) {\n sel.addRange(range);\n }\n};\n\nexport const getCaretPosition = (el: HTMLInputElement, iframe?: HTMLIFrameElement): number => {\n if (isInputOrTextAreaElement(el)) {\n const val = el.value;\n\n return val.slice(0, el.selectionStart || undefined).length;\n }\n const selObj = getWindowSelection(iframe);\n\n if (selObj && selObj.rangeCount > 0) {\n const selRange = selObj.getRangeAt(0);\n const preCaretRange = selRange.cloneRange();\n\n preCaretRange.selectNodeContents(el);\n preCaretRange.setEnd(selRange.endContainer, selRange.endOffset);\n const position = preCaretRange.toString().length;\n\n return position;\n }\n return 0;\n};\n\n// Based on ment.io functions...\n//\n\nconst getDocument = (iframe?: HTMLIFrameElement) => {\n if (!iframe) {\n return document;\n }\n\n return iframe.contentWindow?.document;\n};\n\nexport const getWindowSelection = (iframe?: HTMLIFrameElement): Selection | null => {\n if (!iframe) {\n return window.getSelection();\n }\n\n return iframe.contentWindow?.getSelection() || null;\n};\n\nexport const getContentEditableCaretCoords = (ctx: { iframe: HTMLIFrameElement | undefined; parent: Element | null; windowParent?: boolean }) => {\n const markerTextChar = '\\ufeff';\n const markerId = 'sel_' + new Date().getTime() + '_' + Math.random().toString().substring(2);\n const doc = getDocument(ctx.iframe) as Document;\n const sel = getWindowSelection(ctx.iframe) as Selection;\n\n if (!sel) {\n return {\n left: 0,\n top: 0,\n bottom: 0,\n };\n }\n const prevRange = sel.getRangeAt(0);\n\n // create new range and set postion using prevRange\n const range = doc.createRange();\n const anchorNode = sel.anchorNode as Node;\n range.setStart(anchorNode, prevRange.startOffset);\n range.setEnd(anchorNode, prevRange.startOffset);\n range.collapse(false);\n\n // Create the marker element containing a single invisible character\n // using DOM methods and insert it at the position in the range\n const markerEl = doc.createElement('span');\n\n markerEl.id = markerId;\n markerEl.appendChild(doc.createTextNode(markerTextChar));\n range.insertNode(markerEl);\n sel.removeAllRanges();\n sel.addRange(prevRange);\n\n const coordinates = {\n left: 0,\n top: markerEl.offsetHeight,\n bottom: -1,\n };\n\n localToRelativeCoordinates(ctx, markerEl, coordinates);\n markerEl.parentNode?.removeChild(markerEl);\n const widthScreen = (ctx.windowParent ? window.parent.innerWidth : window.innerWidth) || document.documentElement.clientWidth || document.body.clientWidth;\n\n if (coordinates.left + 315 > widthScreen) {\n coordinates.left = coordinates.left - 300;\n }\n const heightScreen = (ctx.windowParent ? window.parent.innerHeight : window.innerHeight) || document.documentElement.clientHeight || document.body.clientHeight;\n\n if (coordinates.top + 190 > heightScreen) {\n coordinates.bottom = heightScreen - coordinates.top + 15;\n coordinates.top = -1;\n }\n\n return coordinates;\n};\n\nconst localToRelativeCoordinates = (ctx: { iframe: HTMLIFrameElement | undefined; parent: Element | null; windowParent?: boolean }, element: Element, coordinates: { top: number; left: number; bottom: number }) => {\n let obj = <HTMLElement>element;\n let iframe = ctx ? ctx.iframe : null;\n\n while (obj) {\n if (ctx.parent !== null && ctx.parent === obj) {\n break;\n }\n coordinates.left += obj.offsetLeft + obj.clientLeft;\n coordinates.top += obj.offsetTop + obj.clientTop;\n obj = <HTMLElement>obj.offsetParent;\n if (!obj && iframe) {\n obj = iframe;\n iframe = null;\n }\n }\n obj = <HTMLElement>element;\n iframe = ctx ? ctx.iframe : null;\n while ((obj !== getDocument()?.body || ctx.windowParent) && obj !== null) {\n if (ctx.parent !== null && ctx.parent === obj) {\n break;\n }\n if (obj.scrollTop && obj.scrollTop > 0) {\n coordinates.top -= obj.scrollTop;\n }\n if (obj.scrollLeft && obj.scrollLeft > 0) {\n coordinates.left -= obj.scrollLeft;\n }\n obj = ctx.windowParent ? <HTMLElement>obj.offsetParent : <HTMLElement>obj.parentNode;\n if (!obj && iframe) {\n obj = iframe;\n iframe = null;\n }\n }\n};\n\nconst setEndOfContentEditable = (contentEditableElement: Node) => {\n if (document.createRange) {\n const range = document.createRange(); //Create a range (a range is a like the selection but invisible)\n const selection = window.getSelection(); //get the selection object (allows you to change selection)\n\n range.selectNodeContents(contentEditableElement); //Select the entire contents of the element with the range\n range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start\n selection?.removeAllRanges(); //remove any selections already made\n selection?.addRange(range); //make the range you have just created the visible selection\n }\n};\n\nexport const insertTextAtCaret = (element: HTMLInputElement, text: string) => {\n if (window.getSelection) {\n if (!elementContainsSelection(element)) {\n setEndOfContentEditable(element);\n insertTextAtCaret(element, text);\n\n return;\n }\n const sel = window.getSelection();\n\n if (sel?.getRangeAt && sel.rangeCount) {\n let range = sel.getRangeAt(0);\n const el = document.createElement('SPAN');\n\n range.deleteContents();\n el.innerHTML = text;\n const frag = document.createDocumentFragment();\n let node: Node | null;\n let lastNode!: Node;\n\n while ((node = el.firstChild)) {\n lastNode = frag.appendChild(node);\n }\n range.insertNode(frag);\n\n if (lastNode) {\n range = range.cloneRange();\n range.setStartAfter(lastNode);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n }\n};\n\nconst elementContainsSelection = (el: HTMLInputElement) => {\n if (!window.getSelection) {\n return false;\n }\n const sel = window.getSelection();\n\n if (sel && sel.rangeCount > 0) {\n for (let i = 0; i < sel.rangeCount; ++i) {\n if (!isOrContains(sel.getRangeAt(i).commonAncestorContainer, el)) {\n return false;\n }\n }\n\n return true;\n }\n\n return false;\n};\n\nconst isOrContains = (node: Node, container: HTMLInputElement) => {\n while (node) {\n if (node === container) {\n return true;\n }\n if (node.parentNode) {\n node = node.parentNode;\n }\n }\n\n return false;\n};\n","/* From: https://github.com/component/textarea-caret-position */\n\nimport { PathOf } from '@libs-ui/interfaces-types';\nimport { get, isNil, set } from '@libs-ui/utils';\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nconst properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize',\n];\n\nconst isBrowser = typeof window !== 'undefined';\nconst isFirefox = isBrowser && get(window, 'mozInnerScreenX') !== null;\n\nexport const getCaretCoordinates = (element: Element, position: number | null) => {\n if (!isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n // The mirror div will replicate the textarea's style\n const div: HTMLDivElement = document.createElement('div');\n\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n const style = div.style;\n const computed = window.getComputedStyle ? window.getComputedStyle(element) : get(element, 'currentStyle'); // currentStyle for IE < 9\n const isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput) {\n style.wordBreak = 'break-word';\n } // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n\n // Transfer the element's properties to the div\n properties.forEach((prop) => {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n if (computed.boxSizing !== 'border-box') {\n style.lineHeight = computed.height;\n\n return;\n }\n const height = parseInt(computed.height);\n const outerHeight = parseInt(computed.paddingTop) + parseInt(computed.paddingBottom) + parseInt(computed.borderTopWidth) + parseInt(computed.borderBottomWidth);\n const targetHeight = outerHeight + parseInt(computed.lineHeight);\n\n if (height > targetHeight) {\n style.lineHeight = height - outerHeight + 'px';\n\n return;\n }\n if (height === targetHeight) {\n style.lineHeight = computed.lineHeight;\n\n return;\n }\n style.lineHeight = '0';\n\n return;\n }\n set(style, prop as PathOf<CSSStyleDeclaration>, computed[prop]);\n });\n\n if (!isFirefox) {\n style.overflow = 'hidden';\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n }\n const value = get(element, 'value');\n if (isFirefox && element.scrollHeight > parseInt(computed.height)) {\n style.overflowY = 'scroll';\n }\n div.textContent = value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput && !isNil(div.textContent)) {\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n }\n const span = document.createElement('span');\n\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n const coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth']),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth']),\n height: parseInt(computed['lineHeight']),\n };\n\n document.body.removeChild(div);\n\n return coordinates;\n};\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, model, OnDestroy, OnInit, signal, viewChild, viewChildren } from '@angular/core';\nimport { LibsUiComponentsAvatarComponent } from '@libs-ui/components-avatar';\nimport { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';\nimport { set, UtilsKeyCodeConstant } from '@libs-ui/utils';\nimport { fromEvent, Subject, takeUntil } from 'rxjs';\nimport { getCaretCoordinates } from '../defines/caret-coords.define';\nimport { getContentEditableCaretCoords, isInputOrTextAreaElement } from '../defines/utils.define';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'libs_ui-components-inputs-mention-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss'],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [LibsUiComponentsAvatarComponent, LibsUiComponentsPopoverComponent, NgTemplateOutlet],\n})\nexport class LibsUiComponentsInputsMentionListComponent implements OnInit, OnDestroy {\n // #region PROPERTY\n public items = signal<Array<Record<string, string | undefined>>>([]);\n public activeIndex = signal<number>(0);\n public hidden = signal<boolean>(false);\n public styleOff = signal<boolean>(false);\n public parentHandlerKeyDown = signal<((e: Event, element: HTMLInputElement | undefined) => unknown) | undefined>(undefined);\n\n protected dropUp = signal<boolean>(false);\n\n private readonly coords = signal<{ top: number; left: number; bottom?: number }>({ top: 0, left: 0, bottom: 0 });\n private readonly offset = signal<number>(0);\n private readonly nativeParentElement = signal<HTMLInputElement | undefined>(undefined);\n private readonly onDestroy = new Subject<void>();\n\n // #region INPUT\n labelKey = model<string>('label');\n zIndex = model<number>(1000);\n isIframe = model.required<boolean>();\n defaultAvatar = model<string>();\n listTemplate = signal<any>(undefined);\n\n /* VIEW CHILD */\n readonly elementEl = viewChild<ElementRef>('elementRef');\n readonly itemsEl = viewChildren<ElementRef>('itemRef');\n\n ngOnInit() {\n if (this.isIframe()) {\n this.initEvent(window.parent, 'wheel');\n this.initEvent(window.parent, 'resize');\n return;\n }\n this.initEvent(window, 'wheel');\n this.initEvent(window, 'resize');\n }\n\n /* FUNCTIONS */\n private initEvent(element: Window, eventName: string) {\n fromEvent<Event>(element, eventName)\n .pipe(takeUntil(this.onDestroy))\n .subscribe((event: Event) => {\n if (eventName === 'resize' || !this.elementEl()?.nativeElement.contains(event.target)) {\n this.handlerListenClose(event);\n }\n });\n }\n\n private handlerListenClose(event: Event) {\n if (event.target !== this.elementEl()?.nativeElement) {\n this.hidden.set(true);\n }\n }\n\n // lots of confusion here between relative coordinates and containers\n position(nativeParentElement: HTMLInputElement, iframe?: HTMLIFrameElement, leftDiv?: number): void {\n this.nativeParentElement.set(nativeParentElement);\n if (isInputOrTextAreaElement(nativeParentElement)) {\n // parent elements need to have postition:relative for this to work correctly?\n this.coords.set(getCaretCoordinates(nativeParentElement, nativeParentElement.selectionStart));\n this.coords.update((item) => ({\n ...item,\n top: nativeParentElement.offsetTop + item.top - nativeParentElement.scrollTop,\n left: nativeParentElement.offsetLeft + item.left - nativeParentElement.scrollLeft + nativeParentElement.getBoundingClientRect().left,\n }));\n\n // getCretCoordinates() for text/input elements needs an additional offset to position the list correctly\n this.offset.set(this.getBlockCursorDimensions(nativeParentElement).height);\n this.positionElement();\n return;\n }\n if (iframe) {\n const context: { iframe: HTMLIFrameElement; parent: Element | null; windowParent?: boolean } = { iframe: iframe, parent: window.parent.document.body, windowParent: true };\n const caretRelativeToView = getContentEditableCaretCoords(context);\n const doc = document.documentElement;\n const scrollLeft = (window.scrollX || doc.scrollLeft) - (doc.clientLeft || 0);\n this.coords.update((item) => ({\n ...item,\n left: caretRelativeToView.left - scrollLeft - (leftDiv || 0),\n bottom: window.parent.innerHeight - caretRelativeToView.top + 18,\n }));\n if (caretRelativeToView.bottom && caretRelativeToView.bottom !== -1) {\n this.coords.update((item) => ({\n ...item,\n bottom: caretRelativeToView.bottom,\n }));\n }\n this.positionElement();\n\n return;\n }\n const doc = document.documentElement;\n const scrollLeft = (window.scrollX || doc.scrollLeft) - (doc.clientLeft || 0);\n const scrollTop = (window.scrollX || doc.scrollTop) - (doc.clientTop || 0);\n // bounding rectangles are relative to view, offsets are relative to container?\n const caretRelativeToView = getContentEditableCaretCoords({ iframe, parent: null });\n\n this.coords.update((item) => ({\n ...item,\n top: caretRelativeToView.top - scrollTop + 10,\n left: caretRelativeToView.left - scrollLeft - (leftDiv || 0),\n bottom: caretRelativeToView.bottom,\n }));\n this.positionElement();\n }\n\n get ActiveItem() {\n return this.items()[this.activeIndex()];\n }\n\n protected handlerClick(event: Event, index: number) {\n event.stopPropagation();\n this.activeIndex.set(index);\n set(event as KeyboardEvent, 'keyCode', UtilsKeyCodeConstant.ENTER);\n this.parentHandlerKeyDown()?.(event, this.nativeParentElement());\n }\n\n activateNextItem() {\n this.activeIndex.set(this.items().length - 1 > this.activeIndex() ? this.activeIndex() + 1 : this.activeIndex());\n this.scrollToActive();\n }\n\n activatePreviousItem() {\n this.activeIndex.set(this.activeIndex() > 0 ? this.activeIndex() - 1 : this.activeIndex());\n this.scrollToActive();\n }\n\n private positionElement(left: number = this.coords().left, top: number = this.coords().top, dropUp: boolean = this.dropUp(), bottom: number = this.coords().bottom || 0) {\n const el = this.elementEl()?.nativeElement;\n\n top += dropUp ? 0 : this.offset(); // top of list is next line\n el.style.position = 'absolute';\n el.style.left = left + 'px';\n el.style.top = bottom !== -1 ? 'auto' : top + 'px';\n el.style.bottom = bottom === -1 ? 'auto' : bottom + 'px';\n this.nativeParentElement()?.normalize();\n }\n\n private getBlockCursorDimensions(nativeParentElement: HTMLInputElement) {\n const parentStyles = window.getComputedStyle(nativeParentElement);\n\n return {\n height: parseFloat(parentStyles.lineHeight),\n width: parseFloat(parentStyles.fontSize),\n };\n }\n\n protected handleActiveItem(event: Event, index: number) {\n event.stopPropagation();\n this.activeIndex.set(index);\n }\n\n private scrollToActive() {\n if (!this.itemsEl() || this.itemsEl().length <= this.activeIndex()) {\n return;\n }\n this.itemsEl()[this.activeIndex()].nativeElement.scrollIntoView();\n }\n\n scrollContent() {\n setTimeout(() => {\n const element = this.elementEl();\n if (element?.nativeElement) {\n element.nativeElement.scrollTop = 0;\n }\n });\n }\n\n ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","<div\n #elementRef\n class=\"libs-ui-mention-list\"\n [style.zIndex]=\"zIndex()\"\n [class.hidden]=\"hidden()\">\n @for (item of items(); track item) {\n <div\n #itemRef\n class=\"libs-ui-mention-list-item\"\n [class.libs-ui-mention-list-item-active]=\"$index === activeIndex()\"\n (mousedown)=\"handlerClick($event, $index)\"\n (mouseenter)=\"handleActiveItem($event, $index)\">\n @if (listTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"listTemplate()\"\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\"></ng-container>\n } @else {\n <div class=\"px-[12px] py-[6px] flex items-center\">\n <libs_ui-components-avatar\n [size]=\"24\"\n [linkAvatar]=\"item.avatar\"\n [linkAvatarError]=\"defaultAvatar()\"\n [getLastTextAfterSpace]=\"true\"\n [textAvatar]=\"item.name\"\n [idGenColor]=\"item.id\" />\n <libs_ui-components-popover\n [classInclude]=\"'libs-ui-font-h5r'\"\n [type]=\"'text'\"\n [ignoreShowPopover]=\"true\"\n [config]=\"{ width: 250 }\">\n <!-- // ta.m ẩn show tooltip vì chưa xử lý đc vị trí -->\n {{ item.name + ' (' + item.username + ')' }}\n </libs_ui-components-popover>\n </div>\n }\n </div>\n }\n</div>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { AfterViewInit, ComponentRef, Directive, ElementRef, OnDestroy, TemplateRef, effect, inject, input, output, signal, untracked } from '@angular/core';\nimport { IEvent, TYPE_TEMPLATE_REF } from '@libs-ui/interfaces-types';\nimport { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';\nimport { UtilsKeyCodeConstant, get, isNil, uuid } from '@libs-ui/utils';\nimport { Subject, fromEvent } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { DEFAULT_CONFIG, buildTemplate } from './defines/template.define';\nimport { getCaretPosition, getTextBeforeCursor, getValue, getWindowSelection, insertTextAtCaret, insertValue, setCaretPosition } from './defines/utils.define';\nimport { IMentionConfig, IMentionFunctionControlEvent, IMentionInsert, INodeInsert } from './interfaces/mention.interface';\nimport { LibsUiComponentsInputsMentionListComponent } from './list/list.component';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[LibsUiComponentsInputsMentionDirective]',\n standalone: true,\n})\nexport class LibsUiComponentsInputsMentionDirective implements AfterViewInit, OnDestroy {\n // #region PROPERTY\n private readonly listComponentRef = signal<ComponentRef<LibsUiComponentsInputsMentionListComponent> | undefined>(undefined);\n private readonly nodesInsert = signal<Set<INodeInsert>>(new Set());\n private readonly activeConfig = signal<IMentionConfig | undefined>(undefined);\n private readonly triggerChars = signal<Record<string, IMentionConfig>>({});\n private readonly searchString = signal<string>('');\n private readonly startPos = signal<number | undefined>(undefined);\n private readonly startNode = signal<any>(undefined);\n private readonly searchList = signal<LibsUiComponentsInputsMentionListComponent | undefined>(undefined);\n private readonly searching = signal<boolean>(false);\n private readonly iframe = signal<any>(undefined);\n private readonly lastKeyCode = signal<number | undefined>(undefined);\n private readonly isEditor = signal<boolean>(false);\n private readonly iframeId = signal<string | undefined>(undefined);\n private readonly element = inject(ElementRef);\n private readonly dynamicComponentService = inject(LibsUiDynamicComponentService);\n private readonly onDestroy = new Subject<void>();\n\n // #region INPUT\n readonly timeDelayInit = input<number, number | undefined>(0, { transform: (val) => val ?? 0 });\n readonly mentionConfig = input<IMentionConfig>();\n readonly mentionListTemplate = input<TemplateRef<TYPE_TEMPLATE_REF>>();\n\n // #region OUTPUT\n readonly outSearchTerm = output<string | undefined>();\n readonly outItemSelected = output<unknown>();\n readonly outToggle = output<boolean>();\n readonly outInsertMention = output<IMentionInsert>();\n readonly outFunctionControl = output<IMentionFunctionControlEvent>();\n\n constructor() {\n effect(() => {\n this.mentionConfig();\n untracked(() => this.updateConfig());\n });\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (!this.mentionConfig()) {\n return;\n }\n const isContentEditable = this.element.nativeElement.getAttribute('contenteditable');\n this.isEditor.set(!isContentEditable);\n const element = !this.isEditor() ? this.element.nativeElement : this.element.nativeElement.querySelector('.ql-editor[contenteditable=\"true\"]');\n if (element) {\n element.addEventListener('keydown', (event: Event) => {\n this.handlerKeydown.bind(this)(event, element);\n });\n element.addEventListener('input', (event: InputEvent) => {\n this.handlerInput.bind(this)(event, element);\n });\n element.addEventListener('blur', (event: Event) => {\n this.handlerBlur.bind(this)(event);\n });\n element.addEventListener('click', (event: Event) => {\n this.handlerFocus.bind(this)(event, element);\n });\n }\n this.outFunctionControl.emit({\n addMention: () => {\n insertTextAtCaret(element, `${this.mentionConfig()?.triggerChar}`);\n setTimeout(() => {\n this.handlerKeydown({ key: this.mentionConfig()?.triggerChar, keyCode: UtilsKeyCodeConstant.BACKSPACE, shiftKey: true, inputEvent: true }, element);\n }, 500);\n },\n });\n }, this.timeDelayInit());\n }\n\n /* FUNCTIONS */\n protected updateConfig() {\n const mentionConfig = this.mentionConfig();\n if (!mentionConfig) {\n return;\n }\n this.triggerChars.set({});\n this.addConfig(mentionConfig);\n if (mentionConfig.mention) {\n mentionConfig.mention.forEach((config) => this.addConfig(config));\n }\n }\n\n private addConfig(config: IMentionConfig) {\n const defaults = { ...DEFAULT_CONFIG };\n const labelKey = config.labelKey || 'label';\n config = Object.assign(defaults, config);\n if (config.items && config.items.length > 0) {\n if (typeof config.items[0] === 'string') {\n config.items.forEach((label) => {\n const object: Record<string, Record<string, string | undefined>> = {};\n object[labelKey] = label;\n return object;\n });\n }\n if (labelKey) {\n // remove items without an labelKey (as it's required to filter the list)\n config.items = config.items.filter((e) => e[labelKey]);\n if (!config.disableSort) {\n config.items.sort((a, b) => (a[labelKey] || '').localeCompare(b[labelKey] || ''));\n }\n }\n }\n this.triggerChars.update((item) => ({\n ...item,\n [config.triggerChar || '@']: config,\n }));\n if (this.activeConfig() && this.activeConfig()?.triggerChar === config.triggerChar) {\n this.activeConfig.set(config);\n this.updateSearchList();\n }\n }\n\n protected setIframe(iframe: HTMLIFrameElement) {\n this.iframe.set(iframe);\n }\n\n private stopEvent(event: Event) {\n if (get<unknown>(event, 'wasClick')) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n }\n\n protected handlerBlur(event: Event) {\n setTimeout(() => {\n this.stopEvent(event);\n this.stopSearch();\n }, 100);\n }\n\n protected handlerInput(event: InputEvent, nativeElement: HTMLInputElement = this.element.nativeElement) {\n const data = get(event, 'data');\n if (this.lastKeyCode() === UtilsKeyCodeConstant.BUFFERED && data) {\n const keyCode = data.charCodeAt(0);\n this.handlerKeydown({ keyCode, inputEvent: true }, nativeElement);\n }\n }\n\n protected handlerKeydown(event: any, nativeElement: HTMLInputElement = this.element.nativeElement): any {\n this.lastKeyCode.set(event.keyCode);\n if (event.isComposing || event.keyCode === UtilsKeyCodeConstant.BUFFERED) {\n return;\n }\n\n const val: any = getValue(nativeElement);\n let pos: any = getCaretPosition(nativeElement, this.iframe());\n let charPressed = event.key;\n if (!this.isEditor()) {\n if (event.keyCode === UtilsKeyCodeConstant.BACKSPACE) {\n this.appendEmptyToLastNode(pos, val.length, nativeElement);\n }\n setTimeout(() => this.addNodeZeroWidthSpace(nativeElement), 0);\n }\n if (!charPressed) {\n const charCode = event.which || event.keyCode;\n charPressed = String.fromCharCode(event.which || event.keyCode);\n if (!event.shiftKey && charCode >= 65 && charCode <= 90) {\n charPressed = String.fromCharCode(charCode + 32);\n }\n }\n if (event.keyCode === UtilsKeyCodeConstant.ENTER && event.wasClick && pos < (this.startPos() || 0)) {\n pos = this.startNode().length;\n setCaretPosition(this.startNode(), pos, this.iframe());\n }\n const config = this.triggerChars()[charPressed];\n if (config) {\n this.activeConfig.set(config);\n this.startPos.set(event.inputEvent ? pos - 1 : pos);\n this.startNode.set(getWindowSelection(this.iframe())?.anchorNode);\n this.searching.set(true);\n this.searchString.set('');\n this.showSearchList(nativeElement);\n this.updateSearchList();\n if (config.returnTrigger) {\n this.outSearchTerm.emit(config.triggerChar);\n }\n return;\n }\n setTimeout(() => {\n for (const itemSet of this.nodesInsert()) {\n if (!nativeElement.contains(itemSet.elementSpan)) {\n itemSet.subscription?.unsubscribe();\n this.nodesInsert().delete(itemSet);\n }\n }\n });\n const startPos = this.startPos();\n if (isNil(startPos) || startPos < 0 || !this.searching()) {\n return;\n }\n const searchList = this.searchList();\n if (pos <= startPos) {\n if (searchList) {\n searchList.hidden.set(true);\n }\n return;\n }\n if (event.keyCode === UtilsKeyCodeConstant.SHIFT || event.metaKey || event.altKey || event.ctrlKey || pos <= startPos) {\n return;\n }\n if (!this.activeConfig()?.allowSpace && event.keyCode === UtilsKeyCodeConstant.SPACE) {\n this.startPos.set(-1);\n } else if (event.keyCode === UtilsKeyCodeConstant.BACKSPACE && pos > 0) {\n pos--;\n if (pos === this.startPos()) {\n this.stopSearch();\n }\n } else if (searchList?.hidden()) {\n if (event.keyCode === UtilsKeyCodeConstant.TAB || event.keyCode === UtilsKeyCodeConstant.ENTER) {\n this.stopSearch();\n return;\n }\n } else if (!searchList?.hidden() && this.activeConfig()) {\n if (event.keyCode === UtilsKeyCodeConstant.TAB || event.keyCode === UtilsKeyCodeConstant.ENTER) {\n this.stopEvent(event);\n // emit the selected list item\n this.outItemSelected.emit(searchList?.ActiveItem);\n // optional function to format the selected item before inserting the text\n this.insertMention(nativeElement, pos);\n // fire input event so angular bindings are updated\n if ('Event' in window) {\n // this seems backwards, but fire the event from this elements nativeElement (not the\n // one provided that may be in an iframe, as it won't be propogate)\n // Create the event using the modern Event constructor\n const evt = new Event(this.iframe() ? 'change' : 'input', {\n bubbles: true,\n cancelable: false,\n });\n // Dispatch the event on the native element\n nativeElement.dispatchEvent(evt);\n }\n this.startPos.set(-1);\n this.stopSearch();\n\n return false;\n }\n\n if (event.keyCode === UtilsKeyCodeConstant.ESCAPE) {\n this.stopEvent(event);\n this.stopSearch();\n\n return false;\n }\n if (event.keyCode === UtilsKeyCodeConstant.DOWN_ARROW) {\n this.stopEvent(event);\n searchList?.activateNextItem();\n\n return false;\n }\n if (event.keyCode === UtilsKeyCodeConstant.UP_ARROW) {\n this.stopEvent(event);\n searchList?.activatePreviousItem();\n\n return false;\n }\n }\n if (charPressed.length !== 1 && event.keyCode !== UtilsKeyCodeConstant.BACKSPACE) {\n this.stopEvent(event);\n\n return false;\n }\n if (!this.searching()) {\n return;\n }\n let mention = val.substring((this.startPos() || 0) + 1, pos);\n\n if (event.keyCode !== UtilsKeyCodeConstant.BACKSPACE && !event.inputEvent) {\n mention += charPressed;\n }\n const searchString = mention.replace(String.fromCharCode(160), ' ').replace(String.fromCharCode(0), '');\n this.searchString.set(searchString.trim());\n const limitSpaceSearchQuery = this.activeConfig()?.limitSpaceSearchQuery;\n if (limitSpaceSearchQuery && searchString.split(' ').length - 1 > limitSpaceSearchQuery) {\n this.searchString.set('');\n }\n if (this.activeConfig()?.returnTrigger) {\n const triggerChar = this.searchString() || event.keyCode === UtilsKeyCodeConstant.BACKSPACE ? val.substring(this.startPos(), (this.startPos() || 0) + 1) : '';\n\n this.outSearchTerm.emit(triggerChar + this.searchString());\n this.updateSearchList();\n\n return;\n }\n this.outSearchTerm.emit(this.searchString());\n this.updateSearchList();\n }\n\n protected handlerFocus(e?: Event, nativeElement: HTMLInputElement = this.element.nativeElement) {\n e?.stopPropagation();\n setTimeout(() => {\n const node = getWindowSelection(this.iframe())?.anchorNode;\n\n if (node?.nodeType !== 3) {\n this.stopSearch();\n\n return;\n }\n const textBeforeCursor = getTextBeforeCursor() || '';\n\n const triggerChars = Object.keys(this.triggerChars()).map((key: string) => {\n return {\n key: key,\n config: this.triggerChars()[key],\n index: textBeforeCursor.lastIndexOf(key),\n };\n });\n const matchingCharacters = triggerChars.reduce((pre, current) => (pre && current && current.index > pre.index ? current : pre), triggerChars[0]);\n\n if (matchingCharacters.index < 0) {\n this.stopSearch();\n\n return;\n }\n const search = textBeforeCursor?.substring(matchingCharacters.index, textBeforeCursor.length);\n\n if (!search) {\n this.stopSearch();\n\n return;\n }\n const pos = getCaretPosition(nativeElement, this.iframe());\n\n this.activeConfig.set(matchingCharacters.config);\n this.startPos.set(pos - (textBeforeCursor.length - matchingCharacters.index));\n this.searchString.set(search.replace(matchingCharacters.key, ''));\n this.searching.set(true);\n this.handlerKeydown({ keyCode: ''.charCodeAt(0), inputEvent: false }, nativeElement);\n const divElement = document.createElement('div');\n\n divElement.style.width = 'max-content';\n divElement.style.position = 'absolute';\n divElement.innerText = search;\n document.body.appendChild(divElement);\n let iframe = undefined;\n try {\n iframe = this.mentionConfig()?.iframe ? (window.parent.document.getElementById(this.mentionConfig()?.iframe as string) as HTMLIFrameElement) : undefined;\n } catch (error) {\n console.log(error);\n }\n const searchList = this.searchList();\n if (searchList) {\n searchList.position(nativeElement, iframe, divElement.getBoundingClientRect().width);\n }\n divElement.remove();\n nativeElement.normalize();\n });\n }\n\n private stopSearch() {\n const searchList = this.searchList();\n if (searchList && !searchList.hidden()) {\n searchList.hidden.set(true);\n this.outToggle.emit(false);\n }\n this.activeConfig.set(undefined);\n this.searching.set(false);\n }\n\n private updateSearchList() {\n const matches: any[] = [];\n const activeConfig = this.activeConfig();\n const searchString = this.searchString();\n const searchList = this.searchList();\n // disabling the search relies on the async operation to do the filtering\n if (activeConfig?.items && !activeConfig.disableSearch && !isNil(searchString) && activeConfig.labelKey && activeConfig.mentionFilter) {\n matches.push(...(activeConfig.mentionFilter(searchString, activeConfig.items) as any));\n }\n // update the search list\n if (!searchList) {\n return;\n }\n searchList.items.set(matches);\n searchList.hidden.set(!matches.length);\n searchList.activeIndex.set(0);\n searchList.scrollContent();\n this.outToggle.emit(!!matches.length);\n }\n\n private showSearchList(nativeElement: HTMLInputElement) {\n let iframe = undefined;\n const mentionConfig = this.mentionConfig();\n try {\n iframe = mentionConfig?.iframe ? (window.parent.document.getElementById(mentionConfig?.iframe as string) as HTMLIFrameElement) : undefined;\n } catch (error) {\n console.log(error);\n }\n if (!mentionConfig) {\n return;\n }\n this.outToggle.emit(true);\n let firstTime = false;\n\n if (!this.listComponentRef()) {\n firstTime = true;\n this.listComponentRef.set(this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsInputsMentionListComponent));\n this.searchList.set(this.listComponentRef()?.instance);\n }\n this.searchList()?.labelKey.set(this.activeConfig()?.labelKey || '');\n this.searchList()?.styleOff.set(this.mentionConfig()?.disableStyle || false);\n this.searchList()?.activeIndex.set(0);\n this.searchList()?.zIndex.set(this.mentionConfig()?.zIndex || 2500);\n this.searchList()?.isIframe.set(!!iframe);\n this.searchList()?.listTemplate.set(this.mentionListTemplate());\n this.searchList()?.parentHandlerKeyDown.set(this.handlerKeydown.bind(this));\n this.searchList()?.position(nativeElement, iframe);\n if (firstTime && this.listComponentRef()) {\n this.dynamicComponentService.addToBody(this.listComponentRef(), !!iframe);\n }\n }\n\n private destroyListSearch() {\n this.dynamicComponentService.remove(this.listComponentRef, this.iframeId());\n this.listComponentRef.set(undefined);\n }\n\n protected appendEmptyToLastNode(position: number, length: number, nativeElement: HTMLInputElement = this.element.nativeElement) {\n const empty = document.createTextNode('\\u00A0');\n const selection = getWindowSelection(this.iframe());\n const anchorNode = selection?.anchorNode;\n\n if (this.isEditor()) {\n const parentNode = anchorNode?.parentNode as Element;\n\n if (parentNode?.getAttribute?.('id')) {\n if (!parentNode.nextSibling?.textContent?.length) {\n parentNode?.parentNode?.insertBefore(empty, parentNode.nextSibling);\n }\n const range = document.createRange();\n const sel = window.getSelection();\n\n range.setStart(parentNode.nextSibling as Node, 0);\n range.collapse(true);\n sel?.removeAllRanges();\n sel?.addRange(range);\n }\n\n return;\n }\n let preNode = null;\n const anchorOffset = selection?.anchorOffset;\n\n if (!anchorNode || !anchorOffset) {\n return;\n }\n\n if (anchorNode.nodeName.toLowerCase() !== '#text') {\n nativeElement.appendChild(empty);\n\n return;\n }\n\n for (const node of Array.from(nativeElement.childNodes)) {\n if (anchorNode.nodeType === 3 && anchorNode === node && preNode?.getAttribute?.('id') && (!anchorNode.textContent?.length || anchorNode.textContent.length === 1) && position === length) {\n nativeElement.appendChild(empty);\n break;\n }\n preNode = node as Element;\n }\n }\n\n protected addNodeZeroWidthSpace(nativeElement: HTMLInputElement = this.element.nativeElement) {\n const empty = document.createTextNode('\\u200b');\n let preNode = null;\n\n for (const node of Array.from(nativeElement.childNodes)) {\n const typedNode: any = node;\n\n if (preNode?.getAttribute?.('id') && typedNode?.getAttribute?.('id')) {\n nativeElement.insertBefore(empty, preNode.nextSibling);\n }\n\n preNode = typedNode;\n }\n }\n\n private insertMention(nativeElement: HTMLInputElement, pos: number) {\n const activeConfig = this.activeConfig();\n if (!activeConfig) {\n return;\n }\n const searchList = this.searchList();\n let text = '';\n const feId = uuid();\n const id = searchList?.ActiveItem.id || uuid();\n const itemActive = searchList?.ActiveItem;\n const { triggerChar, mentionEventName, mentionActionByEvent } = activeConfig;\n\n if (activeConfig.mentionSelect) {\n text = activeConfig.mentionSelect(searchList?.ActiveItem, activeConfig.triggerChar);\n }\n if (!this.isEditor()) {\n let span: HTMLSpanElement = document.createElement('TEXTAREA');\n\n span.innerText = text;\n text = span.innerHTML;\n span.remove();\n text = buildTemplate(text, id, feId);\n span = insertValue(nativeElement, this.startPos() || 0, pos, text, this.iframe()) as HTMLSpanElement;\n if (span) {\n const data: INodeInsert = {\n elementSpan: span,\n subscription: undefined,\n item: itemActive,\n triggerChar: triggerChar,\n manualAdd: true,\n };\n\n this.nodesInsert().add(data);\n if (mentionEventName) {\n data.subscription = fromEvent<IEvent>(span, mentionEventName)\n .pipe(\n tap((e) => e.stopPropagation()),\n takeUntil(this.onDestroy)\n )\n .subscribe(() => {\n if (mentionActionByEvent) {\n mentionActionByEvent(itemActive, triggerChar);\n }\n });\n }\n }\n } else {\n this.outInsertMention.emit({ data: { id, value: text, feId }, lengthKey: pos - (this.startPos() || 0) });\n }\n }\n\n ngOnDestroy(): void {\n this.destroyListSearch();\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["takeUntil"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libs-ui/components-inputs-mention",
|
|
3
|
-
"version": "0.2.356-
|
|
3
|
+
"version": "0.2.356-43",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/core": ">=18.0.0",
|
|
6
|
-
"@libs-ui/utils": "0.2.356-
|
|
6
|
+
"@libs-ui/utils": "0.2.356-43",
|
|
7
7
|
"rxjs": "~7.8.0",
|
|
8
|
-
"@libs-ui/components-avatar": "0.2.356-
|
|
9
|
-
"@libs-ui/components-popover": "0.2.356-
|
|
10
|
-
"@libs-ui/interfaces-types": "0.2.356-
|
|
11
|
-
"@libs-ui/services-dynamic-component": "0.2.356-
|
|
8
|
+
"@libs-ui/components-avatar": "0.2.356-43",
|
|
9
|
+
"@libs-ui/components-popover": "0.2.356-43",
|
|
10
|
+
"@libs-ui/interfaces-types": "0.2.356-43",
|
|
11
|
+
"@libs-ui/services-dynamic-component": "0.2.356-43",
|
|
12
12
|
"@angular/common": "~18.2.0"
|
|
13
13
|
},
|
|
14
14
|
"sideEffects": false,
|