@ctrl/ngx-emoji-mart 8.2.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -14
- package/anchors.component.d.ts +1 -1
- package/category.component.d.ts +1 -1
- package/esm2022/anchors.component.mjs +100 -0
- package/esm2022/category.component.mjs +409 -0
- package/esm2022/emoji-frequently.service.mjs +90 -0
- package/esm2022/emoji-search.service.mjs +178 -0
- package/esm2022/ngx-emoji/emoji.component.mjs +299 -0
- package/esm2022/ngx-emoji/emoji.module.mjs +17 -0
- package/esm2022/ngx-emoji/emoji.service.mjs +145 -0
- package/esm2022/picker.component.mjs +522 -0
- package/esm2022/picker.module.mjs +40 -0
- package/esm2022/preview.component.mjs +206 -0
- package/esm2022/search.component.mjs +175 -0
- package/esm2022/skins.component.mjs +107 -0
- package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart-ngx-emoji.mjs +62 -54
- package/{fesm2015 → fesm2022}/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart.mjs +320 -254
- package/fesm2022/ctrl-ngx-emoji-mart.mjs.map +1 -0
- package/ngx-emoji/emoji.component.d.ts +1 -1
- package/ngx-emoji/emoji.module.d.ts +1 -2
- package/package.json +8 -16
- package/picker.component.d.ts +2 -2
- package/picker.module.d.ts +1 -4
- package/preview.component.d.ts +2 -2
- package/search.component.d.ts +1 -1
- package/skins.component.d.ts +2 -2
- package/esm2020/anchors.component.mjs +0 -83
- package/esm2020/category.component.mjs +0 -386
- package/esm2020/emoji-frequently.service.mjs +0 -88
- package/esm2020/emoji-search.service.mjs +0 -177
- package/esm2020/ngx-emoji/emoji.component.mjs +0 -288
- package/esm2020/ngx-emoji/emoji.module.mjs +0 -18
- package/esm2020/ngx-emoji/emoji.service.mjs +0 -144
- package/esm2020/picker.component.mjs +0 -508
- package/esm2020/picker.module.mjs +0 -49
- package/esm2020/preview.component.mjs +0 -187
- package/esm2020/search.component.mjs +0 -165
- package/esm2020/skins.component.mjs +0 -108
- package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.mjs +0 -34330
- package/fesm2015/ctrl-ngx-emoji-mart.mjs +0 -1763
- package/fesm2015/ctrl-ngx-emoji-mart.mjs.map +0 -1
- package/fesm2020/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +0 -1
- package/fesm2020/ctrl-ngx-emoji-mart.mjs.map +0 -1
- /package/{esm2020 → esm2022}/ctrl-ngx-emoji-mart.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/data/categories.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/data/data.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/data/emojis.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/data/skins.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/index.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/svgs/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
@@ -1,386 +0,0 @@
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
2
|
-
import { Subject } from 'rxjs';
|
3
|
-
import * as i0 from "@angular/core";
|
4
|
-
import * as i1 from "@ctrl/ngx-emoji-mart/ngx-emoji";
|
5
|
-
import * as i2 from "./emoji-frequently.service";
|
6
|
-
import * as i3 from "@angular/common";
|
7
|
-
export class CategoryComponent {
|
8
|
-
constructor(ref, emojiService, frequently) {
|
9
|
-
this.ref = ref;
|
10
|
-
this.emojiService = emojiService;
|
11
|
-
this.frequently = frequently;
|
12
|
-
this.emojis = null;
|
13
|
-
this.hasStickyPosition = true;
|
14
|
-
this.name = '';
|
15
|
-
this.perLine = 9;
|
16
|
-
this.totalFrequentLines = 4;
|
17
|
-
this.recent = [];
|
18
|
-
this.custom = [];
|
19
|
-
this.hideObsolete = true;
|
20
|
-
this.virtualize = false;
|
21
|
-
this.virtualizeOffset = 0;
|
22
|
-
this.emojiClick = new EventEmitter();
|
23
|
-
/**
|
24
|
-
* Note: the suffix is added explicitly so we know the event is dispatched outside of the Angular zone.
|
25
|
-
*/
|
26
|
-
this.emojiOverOutsideAngular = new EventEmitter();
|
27
|
-
this.emojiLeaveOutsideAngular = new EventEmitter();
|
28
|
-
this.containerStyles = {};
|
29
|
-
this.emojisToDisplay = [];
|
30
|
-
this.filteredEmojisSubject = new Subject();
|
31
|
-
this.filteredEmojis$ = this.filteredEmojisSubject.asObservable();
|
32
|
-
this.labelStyles = {};
|
33
|
-
this.labelSpanStyles = {};
|
34
|
-
this.margin = 0;
|
35
|
-
this.minMargin = 0;
|
36
|
-
this.maxMargin = 0;
|
37
|
-
this.top = 0;
|
38
|
-
this.rows = 0;
|
39
|
-
}
|
40
|
-
ngOnInit() {
|
41
|
-
this.updateRecentEmojis();
|
42
|
-
this.emojisToDisplay = this.filterEmojis();
|
43
|
-
if (this.noEmojiToDisplay) {
|
44
|
-
this.containerStyles = { display: 'none' };
|
45
|
-
}
|
46
|
-
if (!this.hasStickyPosition) {
|
47
|
-
this.labelStyles = { height: 28 };
|
48
|
-
// this.labelSpanStyles = { position: 'absolute' };
|
49
|
-
}
|
50
|
-
}
|
51
|
-
ngOnChanges(changes) {
|
52
|
-
if (changes.emojis?.currentValue?.length !== changes.emojis?.previousValue?.length) {
|
53
|
-
this.emojisToDisplay = this.filterEmojis();
|
54
|
-
this.ngAfterViewInit();
|
55
|
-
}
|
56
|
-
}
|
57
|
-
ngAfterViewInit() {
|
58
|
-
if (!this.virtualize) {
|
59
|
-
return;
|
60
|
-
}
|
61
|
-
const { width } = this.container.nativeElement.getBoundingClientRect();
|
62
|
-
const perRow = Math.floor(width / (this.emojiSize + 12));
|
63
|
-
this.rows = Math.ceil(this.emojisToDisplay.length / perRow);
|
64
|
-
this.containerStyles = {
|
65
|
-
...this.containerStyles,
|
66
|
-
minHeight: `${this.rows * (this.emojiSize + 12) + 28}px`,
|
67
|
-
};
|
68
|
-
this.ref.detectChanges();
|
69
|
-
this.handleScroll(this.container.nativeElement.parentNode.parentNode.scrollTop);
|
70
|
-
}
|
71
|
-
get noEmojiToDisplay() {
|
72
|
-
return this.emojisToDisplay.length === 0;
|
73
|
-
}
|
74
|
-
memoizeSize() {
|
75
|
-
const parent = this.container.nativeElement.parentNode.parentNode;
|
76
|
-
const { top, height } = this.container.nativeElement.getBoundingClientRect();
|
77
|
-
const parentTop = parent.getBoundingClientRect().top;
|
78
|
-
const labelHeight = this.label.nativeElement.getBoundingClientRect().height;
|
79
|
-
this.top = top - parentTop + parent.scrollTop;
|
80
|
-
if (height === 0) {
|
81
|
-
this.maxMargin = 0;
|
82
|
-
}
|
83
|
-
else {
|
84
|
-
this.maxMargin = height - labelHeight;
|
85
|
-
}
|
86
|
-
}
|
87
|
-
handleScroll(scrollTop) {
|
88
|
-
let margin = scrollTop - this.top;
|
89
|
-
margin = margin < this.minMargin ? this.minMargin : margin;
|
90
|
-
margin = margin > this.maxMargin ? this.maxMargin : margin;
|
91
|
-
if (this.virtualize) {
|
92
|
-
const { top, height } = this.container.nativeElement.getBoundingClientRect();
|
93
|
-
const parentHeight = this.container.nativeElement.parentNode.parentNode.clientHeight;
|
94
|
-
if (parentHeight + (parentHeight + this.virtualizeOffset) >= top &&
|
95
|
-
-height - (parentHeight + this.virtualizeOffset) <= top) {
|
96
|
-
this.filteredEmojisSubject.next(this.emojisToDisplay);
|
97
|
-
}
|
98
|
-
else {
|
99
|
-
this.filteredEmojisSubject.next([]);
|
100
|
-
}
|
101
|
-
}
|
102
|
-
if (margin === this.margin) {
|
103
|
-
this.ref.detectChanges();
|
104
|
-
return false;
|
105
|
-
}
|
106
|
-
if (!this.hasStickyPosition) {
|
107
|
-
this.label.nativeElement.style.top = `${margin}px`;
|
108
|
-
}
|
109
|
-
this.margin = margin;
|
110
|
-
this.ref.detectChanges();
|
111
|
-
return true;
|
112
|
-
}
|
113
|
-
updateRecentEmojis() {
|
114
|
-
if (this.name !== 'Recent') {
|
115
|
-
return;
|
116
|
-
}
|
117
|
-
let frequentlyUsed = this.recent || this.frequently.get(this.perLine, this.totalFrequentLines);
|
118
|
-
if (!frequentlyUsed || !frequentlyUsed.length) {
|
119
|
-
frequentlyUsed = this.frequently.get(this.perLine, this.totalFrequentLines);
|
120
|
-
}
|
121
|
-
if (!frequentlyUsed.length) {
|
122
|
-
return;
|
123
|
-
}
|
124
|
-
this.emojis = frequentlyUsed
|
125
|
-
.map(id => {
|
126
|
-
const emoji = this.custom.filter((e) => e.id === id)[0];
|
127
|
-
if (emoji) {
|
128
|
-
return emoji;
|
129
|
-
}
|
130
|
-
return id;
|
131
|
-
})
|
132
|
-
.filter(id => !!this.emojiService.getData(id));
|
133
|
-
}
|
134
|
-
updateDisplay(display) {
|
135
|
-
this.containerStyles.display = display;
|
136
|
-
this.updateRecentEmojis();
|
137
|
-
this.ref.detectChanges();
|
138
|
-
}
|
139
|
-
trackById(index, item) {
|
140
|
-
return item;
|
141
|
-
}
|
142
|
-
filterEmojis() {
|
143
|
-
const newEmojis = [];
|
144
|
-
for (const emoji of this.emojis || []) {
|
145
|
-
if (!emoji) {
|
146
|
-
continue;
|
147
|
-
}
|
148
|
-
const data = this.emojiService.getData(emoji);
|
149
|
-
if (!data || (data.obsoletedBy && this.hideObsolete) || (!data.unified && !data.custom)) {
|
150
|
-
continue;
|
151
|
-
}
|
152
|
-
newEmojis.push(emoji);
|
153
|
-
}
|
154
|
-
return newEmojis;
|
155
|
-
}
|
156
|
-
}
|
157
|
-
CategoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: CategoryComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.EmojiService }, { token: i2.EmojiFrequentlyService }], target: i0.ɵɵFactoryTarget.Component });
|
158
|
-
CategoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: CategoryComponent, selector: "emoji-category", inputs: { emojis: "emojis", hasStickyPosition: "hasStickyPosition", name: "name", perLine: "perLine", totalFrequentLines: "totalFrequentLines", recent: "recent", custom: "custom", i18n: "i18n", id: "id", hideObsolete: "hideObsolete", notFoundEmoji: "notFoundEmoji", virtualize: "virtualize", virtualizeOffset: "virtualizeOffset", emojiIsNative: "emojiIsNative", emojiSkin: "emojiSkin", emojiSize: "emojiSize", emojiSet: "emojiSet", emojiSheetSize: "emojiSheetSize", emojiForceSize: "emojiForceSize", emojiTooltip: "emojiTooltip", emojiBackgroundImageFn: "emojiBackgroundImageFn", emojiImageUrlFn: "emojiImageUrlFn", emojiUseButton: "emojiUseButton" }, outputs: { emojiClick: "emojiClick", emojiOverOutsideAngular: "emojiOverOutsideAngular", emojiLeaveOutsideAngular: "emojiLeaveOutsideAngular" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "label", first: true, predicate: ["label"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: `
|
159
|
-
<section
|
160
|
-
#container
|
161
|
-
class="emoji-mart-category"
|
162
|
-
[attr.aria-label]="i18n.categories[id]"
|
163
|
-
[class.emoji-mart-no-results]="noEmojiToDisplay"
|
164
|
-
[ngStyle]="containerStyles"
|
165
|
-
>
|
166
|
-
<div class="emoji-mart-category-label" [ngStyle]="labelStyles" [attr.data-name]="name">
|
167
|
-
<!-- already labeled by the section aria-label -->
|
168
|
-
<span #label [ngStyle]="labelSpanStyles" aria-hidden="true">
|
169
|
-
{{ i18n.categories[id] }}
|
170
|
-
</span>
|
171
|
-
</div>
|
172
|
-
|
173
|
-
<div *ngIf="virtualize; else normalRenderTemplate">
|
174
|
-
<div *ngIf="filteredEmojis$ | async as filteredEmojis">
|
175
|
-
<ngx-emoji
|
176
|
-
*ngFor="let emoji of filteredEmojis; trackBy: trackById"
|
177
|
-
[emoji]="emoji"
|
178
|
-
[size]="emojiSize"
|
179
|
-
[skin]="emojiSkin"
|
180
|
-
[isNative]="emojiIsNative"
|
181
|
-
[set]="emojiSet"
|
182
|
-
[sheetSize]="emojiSheetSize"
|
183
|
-
[forceSize]="emojiForceSize"
|
184
|
-
[tooltip]="emojiTooltip"
|
185
|
-
[backgroundImageFn]="emojiBackgroundImageFn"
|
186
|
-
[imageUrlFn]="emojiImageUrlFn"
|
187
|
-
[hideObsolete]="hideObsolete"
|
188
|
-
[useButton]="emojiUseButton"
|
189
|
-
(emojiOverOutsideAngular)="emojiOverOutsideAngular.emit($event)"
|
190
|
-
(emojiLeaveOutsideAngular)="emojiLeaveOutsideAngular.emit($event)"
|
191
|
-
(emojiClick)="emojiClick.emit($event)"
|
192
|
-
></ngx-emoji>
|
193
|
-
</div>
|
194
|
-
</div>
|
195
|
-
|
196
|
-
<div *ngIf="noEmojiToDisplay">
|
197
|
-
<div>
|
198
|
-
<ngx-emoji
|
199
|
-
[emoji]="notFoundEmoji"
|
200
|
-
[size]="38"
|
201
|
-
[skin]="emojiSkin"
|
202
|
-
[isNative]="emojiIsNative"
|
203
|
-
[set]="emojiSet"
|
204
|
-
[sheetSize]="emojiSheetSize"
|
205
|
-
[forceSize]="emojiForceSize"
|
206
|
-
[tooltip]="emojiTooltip"
|
207
|
-
[backgroundImageFn]="emojiBackgroundImageFn"
|
208
|
-
[useButton]="emojiUseButton"
|
209
|
-
></ngx-emoji>
|
210
|
-
</div>
|
211
|
-
|
212
|
-
<div class="emoji-mart-no-results-label">
|
213
|
-
{{ i18n.notfound }}
|
214
|
-
</div>
|
215
|
-
</div>
|
216
|
-
</section>
|
217
|
-
|
218
|
-
<ng-template #normalRenderTemplate>
|
219
|
-
<ngx-emoji
|
220
|
-
*ngFor="let emoji of emojisToDisplay; trackBy: trackById"
|
221
|
-
[emoji]="emoji"
|
222
|
-
[size]="emojiSize"
|
223
|
-
[skin]="emojiSkin"
|
224
|
-
[isNative]="emojiIsNative"
|
225
|
-
[set]="emojiSet"
|
226
|
-
[sheetSize]="emojiSheetSize"
|
227
|
-
[forceSize]="emojiForceSize"
|
228
|
-
[tooltip]="emojiTooltip"
|
229
|
-
[backgroundImageFn]="emojiBackgroundImageFn"
|
230
|
-
[imageUrlFn]="emojiImageUrlFn"
|
231
|
-
[hideObsolete]="hideObsolete"
|
232
|
-
[useButton]="emojiUseButton"
|
233
|
-
(emojiOverOutsideAngular)="emojiOverOutsideAngular.emit($event)"
|
234
|
-
(emojiLeaveOutsideAngular)="emojiLeaveOutsideAngular.emit($event)"
|
235
|
-
(emojiClick)="emojiClick.emit($event)"
|
236
|
-
></ngx-emoji>
|
237
|
-
</ng-template>
|
238
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i1.EmojiComponent, selector: "ngx-emoji", inputs: ["skin", "set", "sheetSize", "isNative", "forceSize", "tooltip", "size", "emoji", "fallback", "hideObsolete", "sheetRows", "sheetColumns", "useButton", "backgroundImageFn", "imageUrlFn"], outputs: ["emojiClick", "emojiOver", "emojiOverOutsideAngular", "emojiLeave", "emojiLeaveOutsideAngular"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
239
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: CategoryComponent, decorators: [{
|
240
|
-
type: Component,
|
241
|
-
args: [{
|
242
|
-
selector: 'emoji-category',
|
243
|
-
template: `
|
244
|
-
<section
|
245
|
-
#container
|
246
|
-
class="emoji-mart-category"
|
247
|
-
[attr.aria-label]="i18n.categories[id]"
|
248
|
-
[class.emoji-mart-no-results]="noEmojiToDisplay"
|
249
|
-
[ngStyle]="containerStyles"
|
250
|
-
>
|
251
|
-
<div class="emoji-mart-category-label" [ngStyle]="labelStyles" [attr.data-name]="name">
|
252
|
-
<!-- already labeled by the section aria-label -->
|
253
|
-
<span #label [ngStyle]="labelSpanStyles" aria-hidden="true">
|
254
|
-
{{ i18n.categories[id] }}
|
255
|
-
</span>
|
256
|
-
</div>
|
257
|
-
|
258
|
-
<div *ngIf="virtualize; else normalRenderTemplate">
|
259
|
-
<div *ngIf="filteredEmojis$ | async as filteredEmojis">
|
260
|
-
<ngx-emoji
|
261
|
-
*ngFor="let emoji of filteredEmojis; trackBy: trackById"
|
262
|
-
[emoji]="emoji"
|
263
|
-
[size]="emojiSize"
|
264
|
-
[skin]="emojiSkin"
|
265
|
-
[isNative]="emojiIsNative"
|
266
|
-
[set]="emojiSet"
|
267
|
-
[sheetSize]="emojiSheetSize"
|
268
|
-
[forceSize]="emojiForceSize"
|
269
|
-
[tooltip]="emojiTooltip"
|
270
|
-
[backgroundImageFn]="emojiBackgroundImageFn"
|
271
|
-
[imageUrlFn]="emojiImageUrlFn"
|
272
|
-
[hideObsolete]="hideObsolete"
|
273
|
-
[useButton]="emojiUseButton"
|
274
|
-
(emojiOverOutsideAngular)="emojiOverOutsideAngular.emit($event)"
|
275
|
-
(emojiLeaveOutsideAngular)="emojiLeaveOutsideAngular.emit($event)"
|
276
|
-
(emojiClick)="emojiClick.emit($event)"
|
277
|
-
></ngx-emoji>
|
278
|
-
</div>
|
279
|
-
</div>
|
280
|
-
|
281
|
-
<div *ngIf="noEmojiToDisplay">
|
282
|
-
<div>
|
283
|
-
<ngx-emoji
|
284
|
-
[emoji]="notFoundEmoji"
|
285
|
-
[size]="38"
|
286
|
-
[skin]="emojiSkin"
|
287
|
-
[isNative]="emojiIsNative"
|
288
|
-
[set]="emojiSet"
|
289
|
-
[sheetSize]="emojiSheetSize"
|
290
|
-
[forceSize]="emojiForceSize"
|
291
|
-
[tooltip]="emojiTooltip"
|
292
|
-
[backgroundImageFn]="emojiBackgroundImageFn"
|
293
|
-
[useButton]="emojiUseButton"
|
294
|
-
></ngx-emoji>
|
295
|
-
</div>
|
296
|
-
|
297
|
-
<div class="emoji-mart-no-results-label">
|
298
|
-
{{ i18n.notfound }}
|
299
|
-
</div>
|
300
|
-
</div>
|
301
|
-
</section>
|
302
|
-
|
303
|
-
<ng-template #normalRenderTemplate>
|
304
|
-
<ngx-emoji
|
305
|
-
*ngFor="let emoji of emojisToDisplay; trackBy: trackById"
|
306
|
-
[emoji]="emoji"
|
307
|
-
[size]="emojiSize"
|
308
|
-
[skin]="emojiSkin"
|
309
|
-
[isNative]="emojiIsNative"
|
310
|
-
[set]="emojiSet"
|
311
|
-
[sheetSize]="emojiSheetSize"
|
312
|
-
[forceSize]="emojiForceSize"
|
313
|
-
[tooltip]="emojiTooltip"
|
314
|
-
[backgroundImageFn]="emojiBackgroundImageFn"
|
315
|
-
[imageUrlFn]="emojiImageUrlFn"
|
316
|
-
[hideObsolete]="hideObsolete"
|
317
|
-
[useButton]="emojiUseButton"
|
318
|
-
(emojiOverOutsideAngular)="emojiOverOutsideAngular.emit($event)"
|
319
|
-
(emojiLeaveOutsideAngular)="emojiLeaveOutsideAngular.emit($event)"
|
320
|
-
(emojiClick)="emojiClick.emit($event)"
|
321
|
-
></ngx-emoji>
|
322
|
-
</ng-template>
|
323
|
-
`,
|
324
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
325
|
-
preserveWhitespaces: false,
|
326
|
-
}]
|
327
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.EmojiService }, { type: i2.EmojiFrequentlyService }]; }, propDecorators: { emojis: [{
|
328
|
-
type: Input
|
329
|
-
}], hasStickyPosition: [{
|
330
|
-
type: Input
|
331
|
-
}], name: [{
|
332
|
-
type: Input
|
333
|
-
}], perLine: [{
|
334
|
-
type: Input
|
335
|
-
}], totalFrequentLines: [{
|
336
|
-
type: Input
|
337
|
-
}], recent: [{
|
338
|
-
type: Input
|
339
|
-
}], custom: [{
|
340
|
-
type: Input
|
341
|
-
}], i18n: [{
|
342
|
-
type: Input
|
343
|
-
}], id: [{
|
344
|
-
type: Input
|
345
|
-
}], hideObsolete: [{
|
346
|
-
type: Input
|
347
|
-
}], notFoundEmoji: [{
|
348
|
-
type: Input
|
349
|
-
}], virtualize: [{
|
350
|
-
type: Input
|
351
|
-
}], virtualizeOffset: [{
|
352
|
-
type: Input
|
353
|
-
}], emojiIsNative: [{
|
354
|
-
type: Input
|
355
|
-
}], emojiSkin: [{
|
356
|
-
type: Input
|
357
|
-
}], emojiSize: [{
|
358
|
-
type: Input
|
359
|
-
}], emojiSet: [{
|
360
|
-
type: Input
|
361
|
-
}], emojiSheetSize: [{
|
362
|
-
type: Input
|
363
|
-
}], emojiForceSize: [{
|
364
|
-
type: Input
|
365
|
-
}], emojiTooltip: [{
|
366
|
-
type: Input
|
367
|
-
}], emojiBackgroundImageFn: [{
|
368
|
-
type: Input
|
369
|
-
}], emojiImageUrlFn: [{
|
370
|
-
type: Input
|
371
|
-
}], emojiUseButton: [{
|
372
|
-
type: Input
|
373
|
-
}], emojiClick: [{
|
374
|
-
type: Output
|
375
|
-
}], emojiOverOutsideAngular: [{
|
376
|
-
type: Output
|
377
|
-
}], emojiLeaveOutsideAngular: [{
|
378
|
-
type: Output
|
379
|
-
}], container: [{
|
380
|
-
type: ViewChild,
|
381
|
-
args: ['container', { static: true }]
|
382
|
-
}], label: [{
|
383
|
-
type: ViewChild,
|
384
|
-
args: ['label', { static: true }]
|
385
|
-
}] } });
|
386
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9waWNrZXIvY2F0ZWdvcnkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQXlGM0MsTUFBTSxPQUFPLGlCQUFpQjtJQTRDNUIsWUFDUyxHQUFzQixFQUNyQixZQUEwQixFQUMxQixVQUFrQztRQUZuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQTlDbkMsV0FBTSxHQUFpQixJQUFJLENBQUM7UUFDNUIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsV0FBTSxHQUFVLEVBQUUsQ0FBQztRQUduQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUVwQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQVdwQixlQUFVLEdBQXdCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0Q7O1dBRUc7UUFDTyw0QkFBdUIsR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRSw2QkFBd0IsR0FBd0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUc3RSxvQkFBZSxHQUFRLEVBQUUsQ0FBQztRQUMxQixvQkFBZSxHQUFVLEVBQUUsQ0FBQztRQUNwQiwwQkFBcUIsR0FBRyxJQUFJLE9BQU8s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d0JBQXdCO3NCQUFqQyxNQUFNO2dCQUNtQyxTQUFTO3NCQUFsRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0YsS0FBSztzQkFBMUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW1vamksIEVtb2ppU2VydmljZSB9IGZyb20gJ0BjdHJsL25neC1lbW9qaS1tYXJ0L25neC1lbW9qaSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVtb2ppRnJlcXVlbnRseVNlcnZpY2UgfSBmcm9tICcuL2Vtb2ppLWZyZXF1ZW50bHkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Vtb2ppLWNhdGVnb3J5JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c2VjdGlvblxuICAgICAgI2NvbnRhaW5lclxuICAgICAgY2xhc3M9XCJlbW9qaS1tYXJ0LWNhdGVnb3J5XCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaTE4bi5jYXRlZ29yaWVzW2lkXVwiXG4gICAgICBbY2xhc3MuZW1vamktbWFydC1uby1yZXN1bHRzXT1cIm5vRW1vamlUb0Rpc3BsYXlcIlxuICAgICAgW25nU3R5bGVdPVwiY29udGFpbmVyU3R5bGVzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1jYXRlZ29yeS1sYWJlbFwiIFtuZ1N0eWxlXT1cImxhYmVsU3R5bGVzXCIgW2F0dHIuZGF0YS1uYW1lXT1cIm5hbWVcIj5cbiAgICAgICAgPCEtLSBhbHJlYWR5IGxhYmVsZWQgYnkgdGhlIHNlY3Rpb24gYXJpYS1sYWJlbCAtLT5cbiAgICAgICAgPHNwYW4gI2xhYmVsIFtuZ1N0eWxlXT1cImxhYmVsU3BhblN0eWxlc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgIHt7IGkxOG4uY2F0ZWdvcmllc1tpZF0gfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJ2aXJ0dWFsaXplOyBlbHNlIG5vcm1hbFJlbmRlclRlbXBsYXRlXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJlZEVtb2ppcyQgfCBhc3luYyBhcyBmaWx0ZXJlZEVtb2ppc1wiPlxuICAgICAgICAgIDxuZ3gtZW1vamlcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBlbW9qaSBvZiBmaWx0ZXJlZEVtb2ppczsgdHJhY2tCeTogdHJhY2tCeUlkXCJcbiAgICAgICAgICAgIFtlbW9qaV09XCJlbW9qaVwiXG4gICAgICAgICAgICBbc2l6ZV09XCJlbW9qaVNpemVcIlxuICAgICAgICAgICAgW3NraW5dPVwiZW1vamlTa2luXCJcbiAgICAgICAgICAgIFtpc05hdGl2ZV09XCJlbW9qaUlzTmF0aXZlXCJcbiAgICAgICAgICAgIFtzZXRdPVwiZW1vamlTZXRcIlxuICAgICAgICAgICAgW3NoZWV0U2l6ZV09XCJlbW9qaVNoZWV0U2l6ZVwiXG4gICAgICAgICAgICBbZm9yY2VTaXplXT1cImVtb2ppRm9yY2VTaXplXCJcbiAgICAgICAgICAgIFt0b29sdGlwXT1cImVtb2ppVG9vbHRpcFwiXG4gICAgICAgICAgICBbYmFja2dyb3VuZEltYWdlRm5dPVwiZW1vamlCYWNrZ3JvdW5kSW1hZ2VGblwiXG4gICAgICAgICAgICBbaW1hZ2VVcmxGbl09XCJlbW9qaUltYWdlVXJsRm5cIlxuICAgICAgICAgICAgW2hpZGVPYnNvbGV0ZV09XCJoaWRlT2Jzb2xldGVcIlxuICAgICAgICAgICAgW3VzZUJ1dHRvbl09XCJlbW9qaVVzZUJ1dHRvblwiXG4gICAgICAgICAgICAoZW1vamlPdmVyT3V0c2lkZUFuZ3VsYXIpPVwiZW1vamlPdmVyT3V0c2lkZUFuZ3VsYXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChlbW9qaUxlYXZlT3V0c2lkZUFuZ3VsYXIpPVwiZW1vamlMZWF2ZU91dHNpZGVBbmd1bGFyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZW1vamlDbGljayk9XCJlbW9qaUNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvbmd4LWVtb2ppPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwibm9FbW9qaVRvRGlzcGxheVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxuZ3gtZW1vamlcbiAgICAgICAgICAgIFtlbW9qaV09XCJub3RGb3VuZEVtb2ppXCJcbiAgICAgICAgICAgIFtzaXplXT1cIjM4XCJcbiAgICAgICAgICAgIFtza2luXT1cImVtb2ppU2tpblwiXG4gICAgICAgICAgICBbaXNOYXRpdmVdPVwiZW1vamlJc05hdGl2ZVwiXG4gICAgICAgICAgICBbc2V0XT1cImVtb2ppU2V0XCJcbiAgICAgICAgICAgIFtzaGVldFNpemVdPVwiZW1vamlTaGVldFNpemVcIlxuICAgICAgICAgICAgW2ZvcmNlU2l6ZV09XCJlbW9qaUZvcmNlU2l6ZVwiXG4gICAgICAgICAgICBbdG9vbHRpcF09XCJlbW9qaVRvb2x0aXBcIlxuICAgICAgICAgICAgW2JhY2tncm91bmRJbWFnZUZuXT1cImVtb2ppQmFja2dyb3VuZEltYWdlRm5cIlxuICAgICAgICAgICAgW3VzZUJ1dHRvbl09XCJlbW9qaVVzZUJ1dHRvblwiXG4gICAgICAgICAgPjwvbmd4LWVtb2ppPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1uby1yZXN1bHRzLWxhYmVsXCI+XG4gICAgICAgICAge3sgaTE4bi5ub3Rmb3VuZCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsUmVuZGVyVGVtcGxhdGU+XG4gICAgICA8bmd4LWVtb2ppXG4gICAgICAgICpuZ0Zvcj1cImxldCBlbW9qaSBvZiBlbW9qaXNUb0Rpc3BsYXk7IHRyYWNrQnk6IHRyYWNrQnlJZFwiXG4gICAgICAgIFtlbW9qaV09XCJlbW9qaVwiXG4gICAgICAgIFtzaXplXT1cImVtb2ppU2l6ZVwiXG4gICAgICAgIFtza2luXT1cImVtb2ppU2tpblwiXG4gICAgICAgIFtpc05hdGl2ZV09XCJlbW9qaUlzTmF0aXZlXCJcbiAgICAgICAgW3NldF09XCJlbW9qaVNldFwiXG4gICAgICAgIFtzaGVldFNpemVdPVwiZW1vamlTaGVldFNpemVcIlxuICAgICAgICBbZm9yY2VTaXplXT1cImVtb2ppRm9yY2VTaXplXCJcbiAgICAgICAgW3Rvb2x0aXBdPVwiZW1vamlUb29sdGlwXCJcbiAgICAgICAgW2JhY2tncm91bmRJbWFnZUZuXT1cImVtb2ppQmFja2dyb3VuZEltYWdlRm5cIlxuICAgICAgICBbaW1hZ2VVcmxGbl09XCJlbW9qaUltYWdlVXJsRm5cIlxuICAgICAgICBbaGlkZU9ic29sZXRlXT1cImhpZGVPYnNvbGV0ZVwiXG4gICAgICAgIFt1c2VCdXR0b25dPVwiZW1vamlVc2VCdXR0b25cIlxuICAgICAgICAoZW1vamlPdmVyT3V0c2lkZUFuZ3VsYXIpPVwiZW1vamlPdmVyT3V0c2lkZUFuZ3VsYXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGVtb2ppTGVhdmVPdXRzaWRlQW5ndWxhcik9XCJlbW9qaUxlYXZlT3V0c2lkZUFuZ3VsYXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGVtb2ppQ2xpY2spPVwiZW1vamlDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgPjwvbmd4LWVtb2ppPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGVtb2ppczogYW55W10gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaGFzU3RpY2t5UG9zaXRpb24gPSB0cnVlO1xuICBASW5wdXQoKSBuYW1lID0gJyc7XG4gIEBJbnB1dCgpIHBlckxpbmUgPSA5O1xuICBASW5wdXQoKSB0b3RhbEZyZXF1ZW50TGluZXMgPSA0O1xuICBASW5wdXQoKSByZWNlbnQ6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGN1c3RvbTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaTE4bjogYW55O1xuICBASW5wdXQoKSBpZDogYW55O1xuICBASW5wdXQoKSBoaWRlT2Jzb2xldGUgPSB0cnVlO1xuICBASW5wdXQoKSBub3RGb3VuZEVtb2ppPzogc3RyaW5nO1xuICBASW5wdXQoKSB2aXJ0dWFsaXplID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZpcnR1YWxpemVPZmZzZXQgPSAwO1xuICBASW5wdXQoKSBlbW9qaUlzTmF0aXZlPzogRW1vamlbJ2lzTmF0aXZlJ107XG4gIEBJbnB1dCgpIGVtb2ppU2tpbiE6IEVtb2ppWydza2luJ107XG4gIEBJbnB1dCgpIGVtb2ppU2l6ZSE6IEVtb2ppWydzaXplJ107XG4gIEBJbnB1dCgpIGVtb2ppU2V0ITogRW1vamlbJ3NldCddO1xuICBASW5wdXQoKSBlbW9qaVNoZWV0U2l6ZSE6IEVtb2ppWydzaGVldFNpemUnXTtcbiAgQElucHV0KCkgZW1vamlGb3JjZVNpemUhOiBFbW9qaVsnZm9yY2VTaXplJ107XG4gIEBJbnB1dCgpIGVtb2ppVG9vbHRpcCE6IEVtb2ppWyd0b29sdGlwJ107XG4gIEBJbnB1dCgpIGVtb2ppQmFja2dyb3VuZEltYWdlRm4/OiBFbW9qaVsnYmFja2dyb3VuZEltYWdlRm4nXTtcbiAgQElucHV0KCkgZW1vamlJbWFnZVVybEZuPzogRW1vamlbJ2ltYWdlVXJsRm4nXTtcbiAgQElucHV0KCkgZW1vamlVc2VCdXR0b24/OiBib29sZWFuO1xuICBAT3V0cHV0KCkgZW1vamlDbGljazogRW1vamlbJ2Vtb2ppQ2xpY2snXSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyoqXG4gICAqIE5vdGU6IHRoZSBzdWZmaXggaXMgYWRkZWQgZXhwbGljaXRseSBzbyB3ZSBrbm93IHRoZSBldmVudCBpcyBkaXNwYXRjaGVkIG91dHNpZGUgb2YgdGhlIEFuZ3VsYXIgem9uZS5cbiAgICovXG4gIEBPdXRwdXQoKSBlbW9qaU92ZXJPdXRzaWRlQW5ndWxhcjogRW1vamlbJ2Vtb2ppT3ZlciddID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZW1vamlMZWF2ZU91dHNpZGVBbmd1bGFyOiBFbW9qaVsnZW1vamlMZWF2ZSddID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsYWJlbCcsIHsgc3RhdGljOiB0cnVlIH0pIGxhYmVsITogRWxlbWVudFJlZjtcbiAgY29udGFpbmVyU3R5bGVzOiBhbnkgPSB7fTtcbiAgZW1vamlzVG9EaXNwbGF5OiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIGZpbHRlcmVkRW1vamlzU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcbiAgZmlsdGVyZWRFbW9qaXMkOiBPYnNlcnZhYmxlPGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSB0aGlzLmZpbHRlcmVkRW1vamlzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgbGFiZWxTdHlsZXM6IGFueSA9IHt9O1xuICBsYWJlbFNwYW5TdHlsZXM6IGFueSA9IHt9O1xuICBtYXJnaW4gPSAwO1xuICBtaW5NYXJnaW4gPSAwO1xuICBtYXhNYXJnaW4gPSAwO1xuICB0b3AgPSAwO1xuICByb3dzID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVtb2ppU2VydmljZTogRW1vamlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZnJlcXVlbnRseTogRW1vamlGcmVxdWVudGx5U2VydmljZSxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBkYXRlUmVjZW50RW1vamlzKCk7XG4gICAgdGhpcy5lbW9qaXNUb0Rpc3BsYXkgPSB0aGlzLmZpbHRlckVtb2ppcygpO1xuXG4gICAgaWYgKHRoaXMubm9FbW9qaVRvRGlzcGxheSkge1xuICAgICAgdGhpcy5jb250YWluZXJTdHlsZXMgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5oYXNTdGlja3lQb3NpdGlvbikge1xuICAgICAgdGhpcy5sYWJlbFN0eWxlcyA9IHsgaGVpZ2h0OiAyOCB9O1xuICAgICAgLy8gdGhpcy5sYWJlbFNwYW5TdHlsZXMgPSB7IHBvc2l0aW9uOiAnYWJzb2x1dGUnIH07XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmVtb2ppcz8uY3VycmVudFZhbHVlPy5sZW5ndGggIT09IGNoYW5nZXMuZW1vamlzPy5wcmV2aW91c1ZhbHVlPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZW1vamlzVG9EaXNwbGF5ID0gdGhpcy5maWx0ZXJFbW9qaXMoKTtcbiAgICAgIHRoaXMubmdBZnRlclZpZXdJbml0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICghdGhpcy52aXJ0dWFsaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyB3aWR0aCB9ID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IHBlclJvdyA9IE1hdGguZmxvb3Iod2lkdGggLyAodGhpcy5lbW9qaVNpemUgKyAxMikpO1xuICAgIHRoaXMucm93cyA9IE1hdGguY2VpbCh0aGlzLmVtb2ppc1RvRGlzcGxheS5sZW5ndGggLyBwZXJSb3cpO1xuXG4gICAgdGhpcy5jb250YWluZXJTdHlsZXMgPSB7XG4gICAgICAuLi50aGlzLmNvbnRhaW5lclN0eWxlcyxcbiAgICAgIG1pbkhlaWdodDogYCR7dGhpcy5yb3dzICogKHRoaXMuZW1vamlTaXplICsgMTIpICsgMjh9cHhgLFxuICAgIH07XG5cbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmhhbmRsZVNjcm9sbCh0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5zY3JvbGxUb3ApO1xuICB9XG5cbiAgZ2V0IG5vRW1vamlUb0Rpc3BsYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW1vamlzVG9EaXNwbGF5Lmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIG1lbW9pemVTaXplKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIGNvbnN0IHsgdG9wLCBoZWlnaHQgfSA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcGFyZW50VG9wID0gcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICBjb25zdCBsYWJlbEhlaWdodCA9IHRoaXMubGFiZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cbiAgICB0aGlzLnRvcCA9IHRvcCAtIHBhcmVudFRvcCArIHBhcmVudC5zY3JvbGxUb3A7XG5cbiAgICBpZiAoaGVpZ2h0ID09PSAwKSB7XG4gICAgICB0aGlzLm1heE1hcmdpbiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWF4TWFyZ2luID0gaGVpZ2h0IC0gbGFiZWxIZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU2Nyb2xsKHNjcm9sbFRvcDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgbGV0IG1hcmdpbiA9IHNjcm9sbFRvcCAtIHRoaXMudG9wO1xuICAgIG1hcmdpbiA9IG1hcmdpbiA8IHRoaXMubWluTWFyZ2luID8gdGhpcy5taW5NYXJnaW4gOiBtYXJnaW47XG4gICAgbWFyZ2luID0gbWFyZ2luID4gdGhpcy5tYXhNYXJnaW4gPyB0aGlzLm1heE1hcmdpbiA6IG1hcmdpbjtcblxuICAgIGlmICh0aGlzLnZpcnR1YWxpemUpIHtcbiAgICAgIGNvbnN0IHsgdG9wLCBoZWlnaHQgfSA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBwYXJlbnRIZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZS5jbGllbnRIZWlnaHQ7XG5cbiAgICAgIGlmIChcbiAgICAgICAgcGFyZW50SGVpZ2h0ICsgKHBhcmVudEhlaWdodCArIHRoaXMudmlydHVhbGl6ZU9mZnNldCkgPj0gdG9wICYmXG4gICAgICAgIC1oZWlnaHQgLSAocGFyZW50SGVpZ2h0ICsgdGhpcy52aXJ0dWFsaXplT2Zmc2V0KSA8PSB0b3BcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkRW1vamlzU3ViamVjdC5uZXh0KHRoaXMuZW1vamlzVG9EaXNwbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRFbW9qaXNTdWJqZWN0Lm5leHQoW10pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXJnaW4gPT09IHRoaXMubWFyZ2luKSB7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhhc1N0aWNreVBvc2l0aW9uKSB7XG4gICAgICB0aGlzLmxhYmVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wID0gYCR7bWFyZ2lufXB4YDtcbiAgICB9XG5cbiAgICB0aGlzLm1hcmdpbiA9IG1hcmdpbjtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB1cGRhdGVSZWNlbnRFbW9qaXMoKSB7XG4gICAgaWYgKHRoaXMubmFtZSAhPT0gJ1JlY2VudCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZnJlcXVlbnRseVVzZWQgPSB0aGlzLnJlY2VudCB8fCB0aGlzLmZyZXF1ZW50bHkuZ2V0KHRoaXMucGVyTGluZSwgdGhpcy50b3RhbEZyZXF1ZW50TGluZXMpO1xuICAgIGlmICghZnJlcXVlbnRseVVzZWQgfHwgIWZyZXF1ZW50bHlVc2VkLmxlbmd0aCkge1xuICAgICAgZnJlcXVlbnRseVVzZWQgPSB0aGlzLmZyZXF1ZW50bHkuZ2V0KHRoaXMucGVyTGluZSwgdGhpcy50b3RhbEZyZXF1ZW50TGluZXMpO1xuICAgIH1cbiAgICBpZiAoIWZyZXF1ZW50bHlVc2VkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVtb2ppcyA9IGZyZXF1ZW50bHlVc2VkXG4gICAgICAubWFwKGlkID0+IHtcbiAgICAgICAgY29uc3QgZW1vamkgPSB0aGlzLmN1c3RvbS5maWx0ZXIoKGU6IGFueSkgPT4gZS5pZCA9PT0gaWQpWzBdO1xuICAgICAgICBpZiAoZW1vamkpIHtcbiAgICAgICAgICByZXR1cm4gZW1vamk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaWQ7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihpZCA9PiAhIXRoaXMuZW1vamlTZXJ2aWNlLmdldERhdGEoaWQpKTtcbiAgfVxuXG4gIHVwZGF0ZURpc3BsYXkoZGlzcGxheTogJ25vbmUnIHwgJ2Jsb2NrJykge1xuICAgIHRoaXMuY29udGFpbmVyU3R5bGVzLmRpc3BsYXkgPSBkaXNwbGF5O1xuICAgIHRoaXMudXBkYXRlUmVjZW50RW1vamlzKCk7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdHJhY2tCeUlkKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJFbW9qaXMoKTogYW55W10ge1xuICAgIGNvbnN0IG5ld0Vtb2ppcyA9IFtdO1xuICAgIGZvciAoY29uc3QgZW1vamkgb2YgdGhpcy5lbW9qaXMgfHwgW10pIHtcbiAgICAgIGlmICghZW1vamkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5lbW9qaVNlcnZpY2UuZ2V0RGF0YShlbW9qaSk7XG4gICAgICBpZiAoIWRhdGEgfHwgKGRhdGEub2Jzb2xldGVkQnkgJiYgdGhpcy5oaWRlT2Jzb2xldGUpIHx8ICghZGF0YS51bmlmaWVkICYmICFkYXRhLmN1c3RvbSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBuZXdFbW9qaXMucHVzaChlbW9qaSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdFbW9qaXM7XG4gIH1cbn1cbiJdfQ==
|
@@ -1,88 +0,0 @@
|
|
1
|
-
import { isPlatformBrowser } from '@angular/common';
|
2
|
-
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
|
3
|
-
import * as i0 from "@angular/core";
|
4
|
-
export class EmojiFrequentlyService {
|
5
|
-
constructor(platformId) {
|
6
|
-
this.platformId = platformId;
|
7
|
-
this.NAMESPACE = 'emoji-mart';
|
8
|
-
this.frequently = null;
|
9
|
-
this.defaults = {};
|
10
|
-
this.initialized = false;
|
11
|
-
this.DEFAULTS = [
|
12
|
-
'+1',
|
13
|
-
'grinning',
|
14
|
-
'kissing_heart',
|
15
|
-
'heart_eyes',
|
16
|
-
'laughing',
|
17
|
-
'stuck_out_tongue_winking_eye',
|
18
|
-
'sweat_smile',
|
19
|
-
'joy',
|
20
|
-
'scream',
|
21
|
-
'disappointed',
|
22
|
-
'unamused',
|
23
|
-
'weary',
|
24
|
-
'sob',
|
25
|
-
'sunglasses',
|
26
|
-
'heart',
|
27
|
-
'poop',
|
28
|
-
];
|
29
|
-
}
|
30
|
-
init() {
|
31
|
-
this.frequently = JSON.parse((isPlatformBrowser(this.platformId) &&
|
32
|
-
localStorage.getItem(`${this.NAMESPACE}.frequently`)) ||
|
33
|
-
'null');
|
34
|
-
this.initialized = true;
|
35
|
-
}
|
36
|
-
add(emoji) {
|
37
|
-
if (!this.initialized) {
|
38
|
-
this.init();
|
39
|
-
}
|
40
|
-
if (!this.frequently) {
|
41
|
-
this.frequently = this.defaults;
|
42
|
-
}
|
43
|
-
if (!this.frequently[emoji.id]) {
|
44
|
-
this.frequently[emoji.id] = 0;
|
45
|
-
}
|
46
|
-
this.frequently[emoji.id] += 1;
|
47
|
-
if (isPlatformBrowser(this.platformId)) {
|
48
|
-
localStorage.setItem(`${this.NAMESPACE}.last`, emoji.id);
|
49
|
-
localStorage.setItem(`${this.NAMESPACE}.frequently`, JSON.stringify(this.frequently));
|
50
|
-
}
|
51
|
-
}
|
52
|
-
get(perLine, totalLines) {
|
53
|
-
if (!this.initialized) {
|
54
|
-
this.init();
|
55
|
-
}
|
56
|
-
if (this.frequently === null) {
|
57
|
-
this.defaults = {};
|
58
|
-
const result = [];
|
59
|
-
for (let i = 0; i < perLine; i++) {
|
60
|
-
this.defaults[this.DEFAULTS[i]] = perLine - i;
|
61
|
-
result.push(this.DEFAULTS[i]);
|
62
|
-
}
|
63
|
-
return result;
|
64
|
-
}
|
65
|
-
const quantity = perLine * totalLines;
|
66
|
-
const frequentlyKeys = Object.keys(this.frequently);
|
67
|
-
const sorted = frequentlyKeys
|
68
|
-
.sort((a, b) => this.frequently[a] - this.frequently[b])
|
69
|
-
.reverse();
|
70
|
-
const sliced = sorted.slice(0, quantity);
|
71
|
-
const last = isPlatformBrowser(this.platformId) && localStorage.getItem(`${this.NAMESPACE}.last`);
|
72
|
-
if (last && !sliced.includes(last)) {
|
73
|
-
sliced.pop();
|
74
|
-
sliced.push(last);
|
75
|
-
}
|
76
|
-
return sliced;
|
77
|
-
}
|
78
|
-
}
|
79
|
-
EmojiFrequentlyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: EmojiFrequentlyService, deps: [{ token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable });
|
80
|
-
EmojiFrequentlyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: EmojiFrequentlyService, providedIn: 'root' });
|
81
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: EmojiFrequentlyService, decorators: [{
|
82
|
-
type: Injectable,
|
83
|
-
args: [{ providedIn: 'root' }]
|
84
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
85
|
-
type: Inject,
|
86
|
-
args: [PLATFORM_ID]
|
87
|
-
}] }]; } });
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamktZnJlcXVlbnRseS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9waWNrZXIvZW1vamktZnJlcXVlbnRseS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLaEUsTUFBTSxPQUFPLHNCQUFzQjtJQXVCakMsWUFBeUMsVUFBa0I7UUFBbEIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQXRCM0QsY0FBUyxHQUFHLFlBQVksQ0FBQztRQUN6QixlQUFVLEdBQXFDLElBQUksQ0FBQztRQUNwRCxhQUFRLEdBQThCLEVBQUUsQ0FBQztRQUN6QyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixhQUFRLEdBQUc7WUFDVCxJQUFJO1lBQ0osVUFBVTtZQUNWLGVBQWU7WUFDZixZQUFZO1lBQ1osVUFBVTtZQUNWLDhCQUE4QjtZQUM5QixhQUFhO1lBQ2IsS0FBSztZQUNMLFFBQVE7WUFDUixjQUFjO1lBQ2QsVUFBVTtZQUNWLE9BQU87WUFDUCxLQUFLO1lBQ0wsWUFBWTtZQUNaLE9BQU87WUFDUCxNQUFNO1NBQ1AsQ0FBQztJQUM0RCxDQUFDO0lBQy9ELElBQUk7UUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzFCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNqQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsYUFBYSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUNULENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBQ0QsR0FBRyxDQUFDLEtBQWdCO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENB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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBQTEFURk9STV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFbW9qaURhdGEgfSBmcm9tICdAY3RybC9uZ3gtZW1vamktbWFydC9uZ3gtZW1vamknO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEVtb2ppRnJlcXVlbnRseVNlcnZpY2Uge1xuICBOQU1FU1BBQ0UgPSAnZW1vamktbWFydCc7XG4gIGZyZXF1ZW50bHk6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcbiAgZGVmYXVsdHM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgREVGQVVMVFMgPSBbXG4gICAgJysxJyxcbiAgICAnZ3Jpbm5pbmcnLFxuICAgICdraXNzaW5nX2hlYXJ0JyxcbiAgICAnaGVhcnRfZXllcycsXG4gICAgJ2xhdWdoaW5nJyxcbiAgICAnc3R1Y2tfb3V0X3Rvbmd1ZV93aW5raW5nX2V5ZScsXG4gICAgJ3N3ZWF0X3NtaWxlJyxcbiAgICAnam95JyxcbiAgICAnc2NyZWFtJyxcbiAgICAnZGlzYXBwb2ludGVkJyxcbiAgICAndW5hbXVzZWQnLFxuICAgICd3ZWFyeScsXG4gICAgJ3NvYicsXG4gICAgJ3N1bmdsYXNzZXMnLFxuICAgICdoZWFydCcsXG4gICAgJ3Bvb3AnLFxuICBdO1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IHN0cmluZykge31cbiAgaW5pdCgpIHtcbiAgICB0aGlzLmZyZXF1ZW50bHkgPSBKU09OLnBhcnNlKFxuICAgICAgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiZcbiAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5OQU1FU1BBQ0V9LmZyZXF1ZW50bHlgKSkgfHxcbiAgICAgICAgJ251bGwnLFxuICAgICk7XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cbiAgYWRkKGVtb2ppOiBFbW9qaURhdGEpIHtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZnJlcXVlbnRseSkge1xuICAgICAgdGhpcy5mcmVxdWVudGx5ID0gdGhpcy5kZWZhdWx0cztcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZyZXF1ZW50bHlbZW1vamkuaWRdKSB7XG4gICAgICB0aGlzLmZyZXF1ZW50bHlbZW1vamkuaWRdID0gMDtcbiAgICB9XG4gICAgdGhpcy5mcmVxdWVudGx5W2Vtb2ppLmlkXSArPSAxO1xuXG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMuTkFNRVNQQUNFfS5sYXN0YCwgZW1vamkuaWQpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5OQU1FU1BBQ0V9LmZyZXF1ZW50bHlgLCBKU09OLnN0cmluZ2lmeSh0aGlzLmZyZXF1ZW50bHkpKTtcbiAgICB9XG4gIH1cbiAgZ2V0KHBlckxpbmU6IG51bWJlciwgdG90YWxMaW5lczogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZnJlcXVlbnRseSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5kZWZhdWx0cyA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGVyTGluZTsgaSsrKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdHNbdGhpcy5ERUZBVUxUU1tpXV0gPSBwZXJMaW5lIC0gaTtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5ERUZBVUxUU1tpXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IHF1YW50aXR5ID0gcGVyTGluZSAqIHRvdGFsTGluZXM7XG4gICAgY29uc3QgZnJlcXVlbnRseUtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmZyZXF1ZW50bHkpO1xuXG4gICAgY29uc3Qgc29ydGVkID0gZnJlcXVlbnRseUtleXNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiB0aGlzLmZyZXF1ZW50bHkhW2FdIC0gdGhpcy5mcmVxdWVudGx5IVtiXSlcbiAgICAgIC5yZXZlcnNlKCk7XG4gICAgY29uc3Qgc2xpY2VkID0gc29ydGVkLnNsaWNlKDAsIHF1YW50aXR5KTtcblxuICAgIGNvbnN0IGxhc3QgPVxuICAgICAgaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLk5BTUVTUEFDRX0ubGFzdGApO1xuXG4gICAgaWYgKGxhc3QgJiYgIXNsaWNlZC5pbmNsdWRlcyhsYXN0KSkge1xuICAgICAgc2xpY2VkLnBvcCgpO1xuICAgICAgc2xpY2VkLnB1c2gobGFzdCk7XG4gICAgfVxuICAgIHJldHVybiBzbGljZWQ7XG4gIH1cbn1cbiJdfQ==
|