@ctrl/ngx-emoji-mart 8.1.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.
Files changed (54) hide show
  1. package/README.md +39 -14
  2. package/anchors.component.d.ts +1 -1
  3. package/category.component.d.ts +3 -3
  4. package/esm2022/anchors.component.mjs +100 -0
  5. package/esm2022/category.component.mjs +409 -0
  6. package/esm2022/emoji-frequently.service.mjs +90 -0
  7. package/esm2022/emoji-search.service.mjs +178 -0
  8. package/esm2022/ngx-emoji/emoji.component.mjs +299 -0
  9. package/esm2022/ngx-emoji/emoji.module.mjs +17 -0
  10. package/esm2022/ngx-emoji/emoji.service.mjs +145 -0
  11. package/esm2022/picker.component.mjs +522 -0
  12. package/esm2022/picker.module.mjs +40 -0
  13. package/esm2022/preview.component.mjs +206 -0
  14. package/esm2022/search.component.mjs +175 -0
  15. package/esm2022/skins.component.mjs +107 -0
  16. package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart-ngx-emoji.mjs +81 -68
  17. package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -1
  18. package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart.mjs +327 -261
  19. package/fesm2022/ctrl-ngx-emoji-mart.mjs.map +1 -0
  20. package/ngx-emoji/emoji.component.d.ts +10 -9
  21. package/ngx-emoji/emoji.module.d.ts +1 -2
  22. package/package.json +8 -16
  23. package/picker.component.d.ts +2 -2
  24. package/picker.module.d.ts +1 -4
  25. package/preview.component.d.ts +2 -2
  26. package/search.component.d.ts +1 -1
  27. package/skins.component.d.ts +2 -2
  28. package/esm2020/anchors.component.mjs +0 -83
  29. package/esm2020/category.component.mjs +0 -386
  30. package/esm2020/emoji-frequently.service.mjs +0 -88
  31. package/esm2020/emoji-search.service.mjs +0 -177
  32. package/esm2020/ngx-emoji/emoji.component.mjs +0 -283
  33. package/esm2020/ngx-emoji/emoji.module.mjs +0 -18
  34. package/esm2020/ngx-emoji/emoji.service.mjs +0 -144
  35. package/esm2020/picker.component.mjs +0 -508
  36. package/esm2020/picker.module.mjs +0 -49
  37. package/esm2020/preview.component.mjs +0 -187
  38. package/esm2020/search.component.mjs +0 -165
  39. package/esm2020/skins.component.mjs +0 -108
  40. package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.mjs +0 -34325
  41. package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +0 -1
  42. package/fesm2015/ctrl-ngx-emoji-mart.mjs +0 -1763
  43. package/fesm2015/ctrl-ngx-emoji-mart.mjs.map +0 -1
  44. package/fesm2020/ctrl-ngx-emoji-mart.mjs.map +0 -1
  45. /package/{esm2020 → esm2022}/ctrl-ngx-emoji-mart.mjs +0 -0
  46. /package/{esm2020 → esm2022}/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.mjs +0 -0
  47. /package/{esm2020 → esm2022}/ngx-emoji/data/categories.mjs +0 -0
  48. /package/{esm2020 → esm2022}/ngx-emoji/data/data.interfaces.mjs +0 -0
  49. /package/{esm2020 → esm2022}/ngx-emoji/data/emojis.mjs +0 -0
  50. /package/{esm2020 → esm2022}/ngx-emoji/data/skins.mjs +0 -0
  51. /package/{esm2020 → esm2022}/ngx-emoji/index.mjs +0 -0
  52. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  53. /package/{esm2020 → esm2022}/svgs/index.mjs +0 -0
  54. /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.emojiOver = 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.emojiLeaveOutsideAngular = new EventEmitter();
27
- this.emojiClick = 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: { emojiOver: "emojiOver", emojiLeaveOutsideAngular: "emojiLeaveOutsideAngular", emojiClick: "emojiClick" }, 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
- (emojiOver)="emojiOver.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
- (emojiOver)="emojiOver.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: ["emojiOver", "emojiLeave", "emojiLeaveOutsideAngular", "emojiClick"] }, { 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
- (emojiOver)="emojiOver.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
- (emojiOver)="emojiOver.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
- }], emojiOver: [{
374
- type: Output
375
- }], emojiLeaveOutsideAngular: [{
376
- type: Output
377
- }], emojiClick: [{
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9waWNrZXIvY2F0ZWdvcnkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQXlGM0MsTUFBTSxPQUFPLGlCQUFpQjtJQTRDNUIsWUFDUyxHQUFzQixFQUNyQixZQUEwQixFQUMxQixVQUFrQztRQUZuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQTlDbkMsV0FBTSxHQUFpQixJQUFJLENBQUM7UUFDNUIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsV0FBTSxHQUFVLEVBQUUsQ0FBQztRQUduQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUVwQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQVdwQixjQUFTLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0Q7O1dBRUc7UUFDTyw2QkFBd0IsR0FBd0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuRSxlQUFVLEdBQXdCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHL0Qsb0JBQWUsR0FBUSxFQUFFLENBQUM7UUFDMUIsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDcEIsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVB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QVU7c0JBQW5CLE1BQU07Z0JBQ21DLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRixLQUFLO3NCQUExQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbW9qaSwgRW1vamlTZXJ2aWNlIH0gZnJvbSAnQGN0cmwvbmd4LWVtb2ppLW1hcnQvbmd4LWVtb2ppJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRW1vamlGcmVxdWVudGx5U2VydmljZSB9IGZyb20gJy4vZW1vamktZnJlcXVlbnRseS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW1vamktY2F0ZWdvcnknLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzZWN0aW9uXG4gICAgICAjY29udGFpbmVyXG4gICAgICBjbGFzcz1cImVtb2ppLW1hcnQtY2F0ZWdvcnlcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpMThuLmNhdGVnb3JpZXNbaWRdXCJcbiAgICAgIFtjbGFzcy5lbW9qaS1tYXJ0LW5vLXJlc3VsdHNdPVwibm9FbW9qaVRvRGlzcGxheVwiXG4gICAgICBbbmdTdHlsZV09XCJjb250YWluZXJTdHlsZXNcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LWNhdGVnb3J5LWxhYmVsXCIgW25nU3R5bGVdPVwibGFiZWxTdHlsZXNcIiBbYXR0ci5kYXRhLW5hbWVdPVwibmFtZVwiPlxuICAgICAgICA8IS0tIGFscmVhZHkgbGFiZWxlZCBieSB0aGUgc2VjdGlvbiBhcmlhLWxhYmVsIC0tPlxuICAgICAgICA8c3BhbiAjbGFiZWwgW25nU3R5bGVdPVwibGFiZWxTcGFuU3R5bGVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAge3sgaTE4bi5jYXRlZ29yaWVzW2lkXSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cInZpcnR1YWxpemU7IGVsc2Ugbm9ybWFsUmVuZGVyVGVtcGxhdGVcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcmVkRW1vamlzJCB8IGFzeW5jIGFzIGZpbHRlcmVkRW1vamlzXCI+XG4gICAgICAgICAgPG5neC1lbW9qaVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGVtb2ppIG9mIGZpbHRlcmVkRW1vamlzOyB0cmFja0J5OiB0cmFja0J5SWRcIlxuICAgICAgICAgICAgW2Vtb2ppXT1cImVtb2ppXCJcbiAgICAgICAgICAgIFtzaXplXT1cImVtb2ppU2l6ZVwiXG4gICAgICAgICAgICBbc2tpbl09XCJlbW9qaVNraW5cIlxuICAgICAgICAgICAgW2lzTmF0aXZlXT1cImVtb2ppSXNOYXRpdmVcIlxuICAgICAgICAgICAgW3NldF09XCJlbW9qaVNldFwiXG4gICAgICAgICAgICBbc2hlZXRTaXplXT1cImVtb2ppU2hlZXRTaXplXCJcbiAgICAgICAgICAgIFtmb3JjZVNpemVdPVwiZW1vamlGb3JjZVNpemVcIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZW1vamlUb29sdGlwXCJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kSW1hZ2VGbl09XCJlbW9qaUJhY2tncm91bmRJbWFnZUZuXCJcbiAgICAgICAgICAgIFtpbWFnZVVybEZuXT1cImVtb2ppSW1hZ2VVcmxGblwiXG4gICAgICAgICAgICBbaGlkZU9ic29sZXRlXT1cImhpZGVPYnNvbGV0ZVwiXG4gICAgICAgICAgICBbdXNlQnV0dG9uXT1cImVtb2ppVXNlQnV0dG9uXCJcbiAgICAgICAgICAgIChlbW9qaU92ZXIpPVwiZW1vamlPdmVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZW1vamlMZWF2ZU91dHNpZGVBbmd1bGFyKT1cImVtb2ppTGVhdmVPdXRzaWRlQW5ndWxhci5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGVtb2ppQ2xpY2spPVwiZW1vamlDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgID48L25neC1lbW9qaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cIm5vRW1vamlUb0Rpc3BsYXlcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8bmd4LWVtb2ppXG4gICAgICAgICAgICBbZW1vamldPVwibm90Rm91bmRFbW9qaVwiXG4gICAgICAgICAgICBbc2l6ZV09XCIzOFwiXG4gICAgICAgICAgICBbc2tpbl09XCJlbW9qaVNraW5cIlxuICAgICAgICAgICAgW2lzTmF0aXZlXT1cImVtb2ppSXNOYXRpdmVcIlxuICAgICAgICAgICAgW3NldF09XCJlbW9qaVNldFwiXG4gICAgICAgICAgICBbc2hlZXRTaXplXT1cImVtb2ppU2hlZXRTaXplXCJcbiAgICAgICAgICAgIFtmb3JjZVNpemVdPVwiZW1vamlGb3JjZVNpemVcIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZW1vamlUb29sdGlwXCJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kSW1hZ2VGbl09XCJlbW9qaUJhY2tncm91bmRJbWFnZUZuXCJcbiAgICAgICAgICAgIFt1c2VCdXR0b25dPVwiZW1vamlVc2VCdXR0b25cIlxuICAgICAgICAgID48L25neC1lbW9qaT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtbm8tcmVzdWx0cy1sYWJlbFwiPlxuICAgICAgICAgIHt7IGkxOG4ubm90Zm91bmQgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG5cbiAgICA8bmctdGVtcGxhdGUgI25vcm1hbFJlbmRlclRlbXBsYXRlPlxuICAgICAgPG5neC1lbW9qaVxuICAgICAgICAqbmdGb3I9XCJsZXQgZW1vamkgb2YgZW1vamlzVG9EaXNwbGF5OyB0cmFja0J5OiB0cmFja0J5SWRcIlxuICAgICAgICBbZW1vamldPVwiZW1vamlcIlxuICAgICAgICBbc2l6ZV09XCJlbW9qaVNpemVcIlxuICAgICAgICBbc2tpbl09XCJlbW9qaVNraW5cIlxuICAgICAgICBbaXNOYXRpdmVdPVwiZW1vamlJc05hdGl2ZVwiXG4gICAgICAgIFtzZXRdPVwiZW1vamlTZXRcIlxuICAgICAgICBbc2hlZXRTaXplXT1cImVtb2ppU2hlZXRTaXplXCJcbiAgICAgICAgW2ZvcmNlU2l6ZV09XCJlbW9qaUZvcmNlU2l6ZVwiXG4gICAgICAgIFt0b29sdGlwXT1cImVtb2ppVG9vbHRpcFwiXG4gICAgICAgIFtiYWNrZ3JvdW5kSW1hZ2VGbl09XCJlbW9qaUJhY2tncm91bmRJbWFnZUZuXCJcbiAgICAgICAgW2ltYWdlVXJsRm5dPVwiZW1vamlJbWFnZVVybEZuXCJcbiAgICAgICAgW2hpZGVPYnNvbGV0ZV09XCJoaWRlT2Jzb2xldGVcIlxuICAgICAgICBbdXNlQnV0dG9uXT1cImVtb2ppVXNlQnV0dG9uXCJcbiAgICAgICAgKGVtb2ppT3Zlcik9XCJlbW9qaU92ZXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGVtb2ppTGVhdmVPdXRzaWRlQW5ndWxhcik9XCJlbW9qaUxlYXZlT3V0c2lkZUFuZ3VsYXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGVtb2ppQ2xpY2spPVwiZW1vamlDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgPjwvbmd4LWVtb2ppPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGVtb2ppczogYW55W10gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaGFzU3RpY2t5UG9zaXRpb24gPSB0cnVlO1xuICBASW5wdXQoKSBuYW1lID0gJyc7XG4gIEBJbnB1dCgpIHBlckxpbmUgPSA5O1xuICBASW5wdXQoKSB0b3RhbEZyZXF1ZW50TGluZXMgPSA0O1xuICBASW5wdXQoKSByZWNlbnQ6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGN1c3RvbTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaTE4bjogYW55O1xuICBASW5wdXQoKSBpZDogYW55O1xuICBASW5wdXQoKSBoaWRlT2Jzb2xldGUgPSB0cnVlO1xuICBASW5wdXQoKSBub3RGb3VuZEVtb2ppPzogc3RyaW5nO1xuICBASW5wdXQoKSB2aXJ0dWFsaXplID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZpcnR1YWxpemVPZmZzZXQgPSAwO1xuICBASW5wdXQoKSBlbW9qaUlzTmF0aXZlPzogRW1vamlbJ2lzTmF0aXZlJ107XG4gIEBJbnB1dCgpIGVtb2ppU2tpbiE6IEVtb2ppWydza2luJ107XG4gIEBJbnB1dCgpIGVtb2ppU2l6ZSE6IEVtb2ppWydzaXplJ107XG4gIEBJbnB1dCgpIGVtb2ppU2V0ITogRW1vamlbJ3NldCddO1xuICBASW5wdXQoKSBlbW9qaVNoZWV0U2l6ZSE6IEVtb2ppWydzaGVldFNpemUnXTtcbiAgQElucHV0KCkgZW1vamlGb3JjZVNpemUhOiBFbW9qaVsnZm9yY2VTaXplJ107XG4gIEBJbnB1dCgpIGVtb2ppVG9vbHRpcCE6IEVtb2ppWyd0b29sdGlwJ107XG4gIEBJbnB1dCgpIGVtb2ppQmFja2dyb3VuZEltYWdlRm4/OiBFbW9qaVsnYmFja2dyb3VuZEltYWdlRm4nXTtcbiAgQElucHV0KCkgZW1vamlJbWFnZVVybEZuPzogRW1vamlbJ2ltYWdlVXJsRm4nXTtcbiAgQElucHV0KCkgZW1vamlVc2VCdXR0b24/OiBib29sZWFuO1xuICBAT3V0cHV0KCkgZW1vamlPdmVyOiBFbW9qaVsnZW1vamlPdmVyJ10gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKlxuICAgKiBOb3RlOiB0aGUgc3VmZml4IGlzIGFkZGVkIGV4cGxpY2l0bHkgc28gd2Uga25vdyB0aGUgZXZlbnQgaXMgZGlzcGF0Y2hlZCBvdXRzaWRlIG9mIHRoZSBBbmd1bGFyIHpvbmUuXG4gICAqL1xuICBAT3V0cHV0KCkgZW1vamlMZWF2ZU91dHNpZGVBbmd1bGFyOiBFbW9qaVsnZW1vamlMZWF2ZSddID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZW1vamlDbGljazogRW1vamlbJ2Vtb2ppQ2xpY2snXSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbGFiZWwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBsYWJlbCE6IEVsZW1lbnRSZWY7XG4gIGNvbnRhaW5lclN0eWxlczogYW55ID0ge307XG4gIGVtb2ppc1RvRGlzcGxheTogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBmaWx0ZXJlZEVtb2ppc1N1YmplY3QgPSBuZXcgU3ViamVjdDxhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gIGZpbHRlcmVkRW1vamlzJDogT2JzZXJ2YWJsZTxhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQ+ID0gdGhpcy5maWx0ZXJlZEVtb2ppc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGxhYmVsU3R5bGVzOiBhbnkgPSB7fTtcbiAgbGFiZWxTcGFuU3R5bGVzOiBhbnkgPSB7fTtcbiAgbWFyZ2luID0gMDtcbiAgbWluTWFyZ2luID0gMDtcbiAgbWF4TWFyZ2luID0gMDtcbiAgdG9wID0gMDtcbiAgcm93cyA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbW9qaVNlcnZpY2U6IEVtb2ppU2VydmljZSxcbiAgICBwcml2YXRlIGZyZXF1ZW50bHk6IEVtb2ppRnJlcXVlbnRseVNlcnZpY2UsXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZVJlY2VudEVtb2ppcygpO1xuICAgIHRoaXMuZW1vamlzVG9EaXNwbGF5ID0gdGhpcy5maWx0ZXJFbW9qaXMoKTtcblxuICAgIGlmICh0aGlzLm5vRW1vamlUb0Rpc3BsYXkpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyU3R5bGVzID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGFzU3RpY2t5UG9zaXRpb24pIHtcbiAgICAgIHRoaXMubGFiZWxTdHlsZXMgPSB7IGhlaWdodDogMjggfTtcbiAgICAgIC8vIHRoaXMubGFiZWxTcGFuU3R5bGVzID0geyBwb3NpdGlvbjogJ2Fic29sdXRlJyB9O1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5lbW9qaXM/LmN1cnJlbnRWYWx1ZT8ubGVuZ3RoICE9PSBjaGFuZ2VzLmVtb2ppcz8ucHJldmlvdXNWYWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmVtb2ppc1RvRGlzcGxheSA9IHRoaXMuZmlsdGVyRW1vamlzKCk7XG4gICAgICB0aGlzLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbGl6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBjb25zdCBwZXJSb3cgPSBNYXRoLmZsb29yKHdpZHRoIC8gKHRoaXMuZW1vamlTaXplICsgMTIpKTtcbiAgICB0aGlzLnJvd3MgPSBNYXRoLmNlaWwodGhpcy5lbW9qaXNUb0Rpc3BsYXkubGVuZ3RoIC8gcGVyUm93KTtcblxuICAgIHRoaXMuY29udGFpbmVyU3R5bGVzID0ge1xuICAgICAgLi4udGhpcy5jb250YWluZXJTdHlsZXMsXG4gICAgICBtaW5IZWlnaHQ6IGAke3RoaXMucm93cyAqICh0aGlzLmVtb2ppU2l6ZSArIDEyKSArIDI4fXB4YCxcbiAgICB9O1xuXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy5oYW5kbGVTY3JvbGwodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUuc2Nyb2xsVG9wKTtcbiAgfVxuXG4gIGdldCBub0Vtb2ppVG9EaXNwbGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVtb2ppc1RvRGlzcGxheS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBtZW1vaXplU2l6ZSgpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICBjb25zdCB7IHRvcCwgaGVpZ2h0IH0gPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHBhcmVudFRvcCA9IHBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgY29uc3QgbGFiZWxIZWlnaHQgPSB0aGlzLmxhYmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXG4gICAgdGhpcy50b3AgPSB0b3AgLSBwYXJlbnRUb3AgKyBwYXJlbnQuc2Nyb2xsVG9wO1xuXG4gICAgaWYgKGhlaWdodCA9PT0gMCkge1xuICAgICAgdGhpcy5tYXhNYXJnaW4gPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1heE1hcmdpbiA9IGhlaWdodCAtIGxhYmVsSGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNjcm9sbChzY3JvbGxUb3A6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGxldCBtYXJnaW4gPSBzY3JvbGxUb3AgLSB0aGlzLnRvcDtcbiAgICBtYXJnaW4gPSBtYXJnaW4gPCB0aGlzLm1pbk1hcmdpbiA/IHRoaXMubWluTWFyZ2luIDogbWFyZ2luO1xuICAgIG1hcmdpbiA9IG1hcmdpbiA+IHRoaXMubWF4TWFyZ2luID8gdGhpcy5tYXhNYXJnaW4gOiBtYXJnaW47XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsaXplKSB7XG4gICAgICBjb25zdCB7IHRvcCwgaGVpZ2h0IH0gPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgcGFyZW50SGVpZ2h0ID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2xpZW50SGVpZ2h0O1xuXG4gICAgICBpZiAoXG4gICAgICAgIHBhcmVudEhlaWdodCArIChwYXJlbnRIZWlnaHQgKyB0aGlzLnZpcnR1YWxpemVPZmZzZXQpID49IHRvcCAmJlxuICAgICAgICAtaGVpZ2h0IC0gKHBhcmVudEhlaWdodCArIHRoaXMudmlydHVhbGl6ZU9mZnNldCkgPD0gdG9wXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEVtb2ppc1N1YmplY3QubmV4dCh0aGlzLmVtb2ppc1RvRGlzcGxheSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbHRlcmVkRW1vamlzU3ViamVjdC5uZXh0KFtdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWFyZ2luID09PSB0aGlzLm1hcmdpbikge1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5oYXNTdGlja3lQb3NpdGlvbikge1xuICAgICAgdGhpcy5sYWJlbC5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IGAke21hcmdpbn1weGA7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJnaW4gPSBtYXJnaW47XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdXBkYXRlUmVjZW50RW1vamlzKCkge1xuICAgIGlmICh0aGlzLm5hbWUgIT09ICdSZWNlbnQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGZyZXF1ZW50bHlVc2VkID0gdGhpcy5yZWNlbnQgfHwgdGhpcy5mcmVxdWVudGx5LmdldCh0aGlzLnBlckxpbmUsIHRoaXMudG90YWxGcmVxdWVudExpbmVzKTtcbiAgICBpZiAoIWZyZXF1ZW50bHlVc2VkIHx8ICFmcmVxdWVudGx5VXNlZC5sZW5ndGgpIHtcbiAgICAgIGZyZXF1ZW50bHlVc2VkID0gdGhpcy5mcmVxdWVudGx5LmdldCh0aGlzLnBlckxpbmUsIHRoaXMudG90YWxGcmVxdWVudExpbmVzKTtcbiAgICB9XG4gICAgaWYgKCFmcmVxdWVudGx5VXNlZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbW9qaXMgPSBmcmVxdWVudGx5VXNlZFxuICAgICAgLm1hcChpZCA9PiB7XG4gICAgICAgIGNvbnN0IGVtb2ppID0gdGhpcy5jdXN0b20uZmlsdGVyKChlOiBhbnkpID0+IGUuaWQgPT09IGlkKVswXTtcbiAgICAgICAgaWYgKGVtb2ppKSB7XG4gICAgICAgICAgcmV0dXJuIGVtb2ppO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoaWQgPT4gISF0aGlzLmVtb2ppU2VydmljZS5nZXREYXRhKGlkKSk7XG4gIH1cblxuICB1cGRhdGVEaXNwbGF5KGRpc3BsYXk6ICdub25lJyB8ICdibG9jaycpIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0eWxlcy5kaXNwbGF5ID0gZGlzcGxheTtcbiAgICB0aGlzLnVwZGF0ZVJlY2VudEVtb2ppcygpO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHRyYWNrQnlJZChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyRW1vamlzKCk6IGFueVtdIHtcbiAgICBjb25zdCBuZXdFbW9qaXMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVtb2ppIG9mIHRoaXMuZW1vamlzIHx8IFtdKSB7XG4gICAgICBpZiAoIWVtb2ppKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZW1vamlTZXJ2aWNlLmdldERhdGEoZW1vamkpO1xuICAgICAgaWYgKCFkYXRhIHx8IChkYXRhLm9ic29sZXRlZEJ5ICYmIHRoaXMuaGlkZU9ic29sZXRlKSB8fCAoIWRhdGEudW5pZmllZCAmJiAhZGF0YS5jdXN0b20pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbmV3RW1vamlzLnB1c2goZW1vamkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3RW1vamlzO1xuICB9XG59XG4iXX0=
@@ -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==