@ctrl/ngx-emoji-mart 5.1.2 → 6.1.1
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 +11 -19
- package/anchors.component.d.ts +3 -0
- package/category.component.d.ts +7 -2
- package/ctrl-ngx-emoji-mart.d.ts +1 -0
- package/emoji-frequently.service.d.ts +3 -0
- package/emoji-search.service.d.ts +3 -0
- package/esm2020/anchors.component.mjs +83 -0
- package/esm2020/category.component.mjs +386 -0
- package/{esm2015/ctrl-ngx-emoji-mart.js → esm2020/ctrl-ngx-emoji-mart.mjs} +0 -0
- package/{esm2015/emoji-frequently.service.js → esm2020/emoji-frequently.service.mjs} +10 -8
- package/esm2020/emoji-search.service.mjs +177 -0
- package/{esm2015/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.js → esm2020/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.mjs} +0 -0
- package/{esm2015/ngx-emoji/data/categories.js → esm2020/ngx-emoji/data/categories.mjs} +4 -4
- package/{esm2015/ngx-emoji/data/data.interfaces.js → esm2020/ngx-emoji/data/data.interfaces.mjs} +0 -0
- package/esm2020/ngx-emoji/data/emojis.mjs +29543 -0
- package/{esm2015/ngx-emoji/data/skins.js → esm2020/ngx-emoji/data/skins.mjs} +0 -0
- package/esm2020/ngx-emoji/emoji.component.mjs +236 -0
- package/esm2020/ngx-emoji/emoji.module.mjs +18 -0
- package/esm2020/ngx-emoji/emoji.service.mjs +144 -0
- package/{esm2015/ngx-emoji/index.js → esm2020/ngx-emoji/index.mjs} +0 -0
- package/esm2020/picker.component.mjs +505 -0
- package/esm2020/picker.module.mjs +49 -0
- package/esm2020/preview.component.mjs +187 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/esm2020/search.component.mjs +165 -0
- package/esm2020/skins.component.mjs +108 -0
- package/esm2020/svgs/index.mjs +18 -0
- package/{esm2015/utils/index.js → esm2020/utils/index.mjs} +0 -0
- package/fesm2015/{ctrl-ngx-emoji-mart-ngx-emoji.js → ctrl-ngx-emoji-mart-ngx-emoji.mjs} +24809 -18497
- package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -0
- package/fesm2015/{ctrl-ngx-emoji-mart.js → ctrl-ngx-emoji-mart.mjs} +676 -329
- package/fesm2015/ctrl-ngx-emoji-mart.mjs.map +1 -0
- package/fesm2020/ctrl-ngx-emoji-mart-ngx-emoji.mjs +31829 -0
- package/fesm2020/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -0
- package/fesm2020/ctrl-ngx-emoji-mart.mjs +1757 -0
- package/fesm2020/ctrl-ngx-emoji-mart.mjs.map +1 -0
- package/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.d.ts +1 -0
- package/ngx-emoji/emoji.component.d.ts +3 -0
- package/ngx-emoji/emoji.module.d.ts +6 -0
- package/ngx-emoji/emoji.service.d.ts +3 -0
- package/ngx-emoji/package.json +6 -7
- package/package.json +29 -10
- package/picker.component.d.ts +3 -0
- package/picker.css +0 -1
- package/picker.module.d.ts +13 -0
- package/preview.component.d.ts +4 -1
- package/search.component.d.ts +3 -0
- package/skins.component.d.ts +6 -3
- package/bundles/ctrl-ngx-emoji-mart-ngx-emoji.umd.js +0 -25822
- package/bundles/ctrl-ngx-emoji-mart-ngx-emoji.umd.js.map +0 -1
- package/bundles/ctrl-ngx-emoji-mart-ngx-emoji.umd.min.js +0 -2
- package/bundles/ctrl-ngx-emoji-mart-ngx-emoji.umd.min.js.map +0 -1
- package/bundles/ctrl-ngx-emoji-mart.umd.js +0 -1695
- package/bundles/ctrl-ngx-emoji-mart.umd.js.map +0 -1
- package/bundles/ctrl-ngx-emoji-mart.umd.min.js +0 -2
- package/bundles/ctrl-ngx-emoji-mart.umd.min.js.map +0 -1
- package/ctrl-ngx-emoji-mart.metadata.json +0 -1
- package/esm2015/anchors.component.js +0 -54
- package/esm2015/category.component.js +0 -276
- package/esm2015/emoji-search.service.js +0 -179
- package/esm2015/ngx-emoji/data/emojis.js +0 -23289
- package/esm2015/ngx-emoji/emoji.component.js +0 -174
- package/esm2015/ngx-emoji/emoji.module.js +0 -13
- package/esm2015/ngx-emoji/emoji.service.js +0 -143
- package/esm2015/picker.component.js +0 -459
- package/esm2015/picker.module.js +0 -34
- package/esm2015/preview.component.js +0 -113
- package/esm2015/search.component.js +0 -115
- package/esm2015/skins.component.js +0 -76
- package/esm2015/svgs/index.js +0 -18
- package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.js.map +0 -1
- package/fesm2015/ctrl-ngx-emoji-mart.js.map +0 -1
- package/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.metadata.json +0 -1
@@ -1,459 +0,0 @@
|
|
1
|
-
import { isPlatformBrowser } from '@angular/common';
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, NgZone, Output, PLATFORM_ID, Renderer2, ViewChild, ViewChildren, } from '@angular/core';
|
3
|
-
import { categories, } from '@ctrl/ngx-emoji-mart/ngx-emoji';
|
4
|
-
import { CategoryComponent } from './category.component';
|
5
|
-
import { EmojiFrequentlyService } from './emoji-frequently.service';
|
6
|
-
import { PreviewComponent } from './preview.component';
|
7
|
-
import { SearchComponent } from './search.component';
|
8
|
-
import * as icons from './svgs';
|
9
|
-
import { measureScrollbar } from './utils';
|
10
|
-
const I18N = {
|
11
|
-
search: 'Search',
|
12
|
-
emojilist: 'List of emoji',
|
13
|
-
notfound: 'No Emoji Found',
|
14
|
-
clear: 'Clear',
|
15
|
-
categories: {
|
16
|
-
search: 'Search Results',
|
17
|
-
recent: 'Frequently Used',
|
18
|
-
people: 'Smileys & People',
|
19
|
-
nature: 'Animals & Nature',
|
20
|
-
foods: 'Food & Drink',
|
21
|
-
activity: 'Activity',
|
22
|
-
places: 'Travel & Places',
|
23
|
-
objects: 'Objects',
|
24
|
-
symbols: 'Symbols',
|
25
|
-
flags: 'Flags',
|
26
|
-
custom: 'Custom',
|
27
|
-
},
|
28
|
-
skintones: {
|
29
|
-
1: 'Default Skin Tone',
|
30
|
-
2: 'Light Skin Tone',
|
31
|
-
3: 'Medium-Light Skin Tone',
|
32
|
-
4: 'Medium Skin Tone',
|
33
|
-
5: 'Medium-Dark Skin Tone',
|
34
|
-
6: 'Dark Skin Tone',
|
35
|
-
},
|
36
|
-
};
|
37
|
-
export class PickerComponent {
|
38
|
-
constructor(ngZone, renderer, ref, frequently, platformId) {
|
39
|
-
this.ngZone = ngZone;
|
40
|
-
this.renderer = renderer;
|
41
|
-
this.ref = ref;
|
42
|
-
this.frequently = frequently;
|
43
|
-
this.platformId = platformId;
|
44
|
-
this.perLine = 9;
|
45
|
-
this.totalFrequentLines = 4;
|
46
|
-
this.i18n = {};
|
47
|
-
this.style = {};
|
48
|
-
this.title = 'Emoji Mart™';
|
49
|
-
this.emoji = 'department_store';
|
50
|
-
this.darkMode = !!(typeof matchMedia === 'function' && matchMedia('(prefers-color-scheme: dark)').matches);
|
51
|
-
this.color = '#ae65c5';
|
52
|
-
this.hideObsolete = true;
|
53
|
-
/** all categories shown */
|
54
|
-
this.categories = [];
|
55
|
-
/** used to temporarily draw categories */
|
56
|
-
this.activeCategories = [];
|
57
|
-
this.set = 'apple';
|
58
|
-
this.skin = 1;
|
59
|
-
/** Renders the native unicode emoji */
|
60
|
-
this.isNative = false;
|
61
|
-
this.emojiSize = 24;
|
62
|
-
this.sheetSize = 64;
|
63
|
-
this.showPreview = true;
|
64
|
-
this.emojiTooltip = false;
|
65
|
-
this.autoFocus = false;
|
66
|
-
this.custom = [];
|
67
|
-
this.hideRecent = true;
|
68
|
-
this.notFoundEmoji = 'sleuth_or_spy';
|
69
|
-
this.categoriesIcons = icons.categories;
|
70
|
-
this.searchIcons = icons.search;
|
71
|
-
this.useButton = false;
|
72
|
-
this.enableFrequentEmojiSort = false;
|
73
|
-
this.enableSearch = true;
|
74
|
-
this.showSingleCategory = false;
|
75
|
-
this.virtualize = false;
|
76
|
-
this.virtualizeOffset = 0;
|
77
|
-
this.emojiClick = new EventEmitter();
|
78
|
-
this.emojiSelect = new EventEmitter();
|
79
|
-
this.skinChange = new EventEmitter();
|
80
|
-
this.scrollHeight = 0;
|
81
|
-
this.clientHeight = 0;
|
82
|
-
this.clientWidth = 0;
|
83
|
-
this.firstRender = true;
|
84
|
-
this.animationFrameRequestId = null;
|
85
|
-
this.NAMESPACE = 'emoji-mart';
|
86
|
-
this.measureScrollbar = 0;
|
87
|
-
this.RECENT_CATEGORY = {
|
88
|
-
id: 'recent',
|
89
|
-
name: 'Recent',
|
90
|
-
emojis: null,
|
91
|
-
};
|
92
|
-
this.SEARCH_CATEGORY = {
|
93
|
-
id: 'search',
|
94
|
-
name: 'Search',
|
95
|
-
emojis: null,
|
96
|
-
anchor: false,
|
97
|
-
};
|
98
|
-
this.CUSTOM_CATEGORY = {
|
99
|
-
id: 'custom',
|
100
|
-
name: 'Custom',
|
101
|
-
emojis: [],
|
102
|
-
};
|
103
|
-
this.backgroundImageFn = (set, sheetSize) => `https://unpkg.com/emoji-datasource-${this.set}@6.0.0/img/${this.set}/sheets-256/${this.sheetSize}.png`;
|
104
|
-
}
|
105
|
-
ngOnInit() {
|
106
|
-
// measure scroll
|
107
|
-
this.measureScrollbar = measureScrollbar();
|
108
|
-
this.i18n = Object.assign(Object.assign({}, I18N), this.i18n);
|
109
|
-
this.i18n.categories = Object.assign(Object.assign({}, I18N.categories), this.i18n.categories);
|
110
|
-
this.skin =
|
111
|
-
JSON.parse((isPlatformBrowser(this.platformId) && localStorage.getItem(`${this.NAMESPACE}.skin`)) ||
|
112
|
-
'null') || this.skin;
|
113
|
-
const allCategories = [...categories];
|
114
|
-
if (this.custom.length > 0) {
|
115
|
-
this.CUSTOM_CATEGORY.emojis = this.custom.map(emoji => {
|
116
|
-
return Object.assign(Object.assign({}, emoji), {
|
117
|
-
// `<Category />` expects emoji to have an `id`.
|
118
|
-
id: emoji.shortNames[0], custom: true });
|
119
|
-
});
|
120
|
-
allCategories.push(this.CUSTOM_CATEGORY);
|
121
|
-
}
|
122
|
-
if (this.include !== undefined) {
|
123
|
-
allCategories.sort((a, b) => {
|
124
|
-
if (this.include.indexOf(a.id) > this.include.indexOf(b.id)) {
|
125
|
-
return 1;
|
126
|
-
}
|
127
|
-
return -1;
|
128
|
-
});
|
129
|
-
}
|
130
|
-
for (const category of allCategories) {
|
131
|
-
const isIncluded = this.include && this.include.length ? this.include.indexOf(category.id) > -1 : true;
|
132
|
-
const isExcluded = this.exclude && this.exclude.length ? this.exclude.indexOf(category.id) > -1 : false;
|
133
|
-
if (!isIncluded || isExcluded) {
|
134
|
-
continue;
|
135
|
-
}
|
136
|
-
if (this.emojisToShowFilter) {
|
137
|
-
const newEmojis = [];
|
138
|
-
const { emojis } = category;
|
139
|
-
// tslint:disable-next-line: prefer-for-of
|
140
|
-
for (let emojiIndex = 0; emojiIndex < emojis.length; emojiIndex++) {
|
141
|
-
const emoji = emojis[emojiIndex];
|
142
|
-
if (this.emojisToShowFilter(emoji)) {
|
143
|
-
newEmojis.push(emoji);
|
144
|
-
}
|
145
|
-
}
|
146
|
-
if (newEmojis.length) {
|
147
|
-
const newCategory = {
|
148
|
-
emojis: newEmojis,
|
149
|
-
name: category.name,
|
150
|
-
id: category.id,
|
151
|
-
};
|
152
|
-
this.categories.push(newCategory);
|
153
|
-
}
|
154
|
-
}
|
155
|
-
else {
|
156
|
-
this.categories.push(category);
|
157
|
-
}
|
158
|
-
this.categoriesIcons = Object.assign(Object.assign({}, icons.categories), this.categoriesIcons);
|
159
|
-
this.searchIcons = Object.assign(Object.assign({}, icons.search), this.searchIcons);
|
160
|
-
}
|
161
|
-
const includeRecent = this.include && this.include.length
|
162
|
-
? this.include.indexOf(this.RECENT_CATEGORY.id) > -1
|
163
|
-
: true;
|
164
|
-
const excludeRecent = this.exclude && this.exclude.length
|
165
|
-
? this.exclude.indexOf(this.RECENT_CATEGORY.id) > -1
|
166
|
-
: false;
|
167
|
-
if (includeRecent && !excludeRecent) {
|
168
|
-
this.hideRecent = false;
|
169
|
-
this.categories.unshift(this.RECENT_CATEGORY);
|
170
|
-
}
|
171
|
-
if (this.categories[0]) {
|
172
|
-
this.categories[0].first = true;
|
173
|
-
}
|
174
|
-
this.categories.unshift(this.SEARCH_CATEGORY);
|
175
|
-
this.selected = this.categories.filter(category => category.first)[0].name;
|
176
|
-
// Need to be careful if small number of categories
|
177
|
-
const categoriesToLoadFirst = Math.min(this.categories.length, 3);
|
178
|
-
this.setActiveCategories((this.activeCategories = this.categories.slice(0, categoriesToLoadFirst)));
|
179
|
-
// Trim last active category
|
180
|
-
const lastActiveCategoryEmojis = this.categories[categoriesToLoadFirst - 1].emojis.slice();
|
181
|
-
this.categories[categoriesToLoadFirst - 1].emojis = lastActiveCategoryEmojis.slice(0, 60);
|
182
|
-
setTimeout(() => {
|
183
|
-
// Restore last category
|
184
|
-
this.categories[categoriesToLoadFirst - 1].emojis = lastActiveCategoryEmojis;
|
185
|
-
this.setActiveCategories(this.categories);
|
186
|
-
// The `setTimeout` will trigger the change detection, but since we're inside
|
187
|
-
// the OnPush component we can run change detection locally starting from this
|
188
|
-
// component and going down to the children.
|
189
|
-
this.ref.detectChanges();
|
190
|
-
// tslint:disable-next-line: no-unused-expression
|
191
|
-
isPlatformBrowser(this.platformId) &&
|
192
|
-
this.ngZone.runOutsideAngular(() => {
|
193
|
-
// The `updateCategoriesSize` doesn't change properties that are used
|
194
|
-
// in templates, thus this is run in the context of the root zone to avoid
|
195
|
-
// running change detection.
|
196
|
-
requestAnimationFrame(() => {
|
197
|
-
this.updateCategoriesSize();
|
198
|
-
});
|
199
|
-
});
|
200
|
-
});
|
201
|
-
this.ngZone.runOutsideAngular(() => {
|
202
|
-
// DOM events that are listened by Angular inside the template trigger change detection
|
203
|
-
// and also wrapped into additional functions that call `markForCheck()`. We listen `scroll`
|
204
|
-
// in the context of the root zone since it will not trigger change detection each time
|
205
|
-
// the `scroll` event is dispatched.
|
206
|
-
this.scrollListener = this.renderer.listen(this.scrollRef.nativeElement, 'scroll', () => {
|
207
|
-
this.handleScroll();
|
208
|
-
});
|
209
|
-
});
|
210
|
-
}
|
211
|
-
ngOnDestroy() {
|
212
|
-
this.scrollListener();
|
213
|
-
// This is called here because the component might be destroyed
|
214
|
-
// but there will still be a `requestAnimationFrame` callback in the queue
|
215
|
-
// that calls `detectChanges()` on the `ViewRef`. This will lead to a runtime
|
216
|
-
// exception if the `detectChanges()` is called after the `ViewRef` is destroyed.
|
217
|
-
this.cancelAnimationFrame();
|
218
|
-
}
|
219
|
-
setActiveCategories(categoriesToMakeActive) {
|
220
|
-
if (this.showSingleCategory) {
|
221
|
-
this.activeCategories = categoriesToMakeActive.filter(x => x.name === this.selected || x === this.SEARCH_CATEGORY);
|
222
|
-
}
|
223
|
-
else {
|
224
|
-
this.activeCategories = categoriesToMakeActive;
|
225
|
-
}
|
226
|
-
}
|
227
|
-
updateCategoriesSize() {
|
228
|
-
this.categoryRefs.forEach(component => component.memoizeSize());
|
229
|
-
if (this.scrollRef) {
|
230
|
-
const target = this.scrollRef.nativeElement;
|
231
|
-
this.scrollHeight = target.scrollHeight;
|
232
|
-
this.clientHeight = target.clientHeight;
|
233
|
-
this.clientWidth = target.clientWidth;
|
234
|
-
}
|
235
|
-
}
|
236
|
-
handleAnchorClick($event) {
|
237
|
-
var _a;
|
238
|
-
this.updateCategoriesSize();
|
239
|
-
this.selected = $event.category.name;
|
240
|
-
this.setActiveCategories(this.categories);
|
241
|
-
if (this.SEARCH_CATEGORY.emojis) {
|
242
|
-
this.handleSearch(null);
|
243
|
-
(_a = this.searchRef) === null || _a === void 0 ? void 0 : _a.clear();
|
244
|
-
this.handleAnchorClick($event);
|
245
|
-
return;
|
246
|
-
}
|
247
|
-
const component = this.categoryRefs.find(n => n.id === $event.category.id);
|
248
|
-
if (component) {
|
249
|
-
let { top } = component;
|
250
|
-
if ($event.category.first) {
|
251
|
-
top = 0;
|
252
|
-
}
|
253
|
-
else {
|
254
|
-
top += 1;
|
255
|
-
}
|
256
|
-
this.scrollRef.nativeElement.scrollTop = top;
|
257
|
-
}
|
258
|
-
this.nextScroll = $event.category.name;
|
259
|
-
// handle component scrolling to load emojis
|
260
|
-
for (const category of this.categories) {
|
261
|
-
const componentToScroll = this.categoryRefs.find(({ id }) => id === category.id);
|
262
|
-
componentToScroll === null || componentToScroll === void 0 ? void 0 : componentToScroll.handleScroll(this.scrollRef.nativeElement.scrollTop);
|
263
|
-
}
|
264
|
-
}
|
265
|
-
categoryTrack(index, item) {
|
266
|
-
return item.id;
|
267
|
-
}
|
268
|
-
handleScroll(noSelectionChange = false) {
|
269
|
-
if (this.nextScroll) {
|
270
|
-
this.selected = this.nextScroll;
|
271
|
-
this.nextScroll = undefined;
|
272
|
-
this.ref.detectChanges();
|
273
|
-
return;
|
274
|
-
}
|
275
|
-
if (!this.scrollRef) {
|
276
|
-
return;
|
277
|
-
}
|
278
|
-
if (this.showSingleCategory) {
|
279
|
-
return;
|
280
|
-
}
|
281
|
-
let activeCategory;
|
282
|
-
if (this.SEARCH_CATEGORY.emojis) {
|
283
|
-
activeCategory = this.SEARCH_CATEGORY;
|
284
|
-
}
|
285
|
-
else {
|
286
|
-
const target = this.scrollRef.nativeElement;
|
287
|
-
// check scroll is not at bottom
|
288
|
-
if (target.scrollTop === 0) {
|
289
|
-
// hit the TOP
|
290
|
-
activeCategory = this.categories.find(n => n.first === true);
|
291
|
-
}
|
292
|
-
else if (target.scrollHeight - target.scrollTop === this.clientHeight) {
|
293
|
-
// scrolled to bottom activate last category
|
294
|
-
activeCategory = this.categories[this.categories.length - 1];
|
295
|
-
}
|
296
|
-
else {
|
297
|
-
// scrolling
|
298
|
-
for (const category of this.categories) {
|
299
|
-
const component = this.categoryRefs.find(({ id }) => id === category.id);
|
300
|
-
const active = component === null || component === void 0 ? void 0 : component.handleScroll(target.scrollTop);
|
301
|
-
if (active) {
|
302
|
-
activeCategory = category;
|
303
|
-
}
|
304
|
-
}
|
305
|
-
}
|
306
|
-
this.scrollTop = target.scrollTop;
|
307
|
-
}
|
308
|
-
// This will allow us to run the change detection only when the category changes.
|
309
|
-
if (!noSelectionChange && activeCategory && activeCategory.name !== this.selected) {
|
310
|
-
this.selected = activeCategory.name;
|
311
|
-
this.ref.detectChanges();
|
312
|
-
}
|
313
|
-
else if (noSelectionChange) {
|
314
|
-
this.ref.detectChanges();
|
315
|
-
}
|
316
|
-
}
|
317
|
-
handleSearch($emojis) {
|
318
|
-
this.SEARCH_CATEGORY.emojis = $emojis;
|
319
|
-
for (const component of this.categoryRefs.toArray()) {
|
320
|
-
if (component.name === 'Search') {
|
321
|
-
component.emojis = $emojis;
|
322
|
-
component.updateDisplay($emojis ? 'block' : 'none');
|
323
|
-
}
|
324
|
-
else {
|
325
|
-
component.updateDisplay($emojis ? 'none' : 'block');
|
326
|
-
}
|
327
|
-
}
|
328
|
-
this.scrollRef.nativeElement.scrollTop = 0;
|
329
|
-
this.handleScroll();
|
330
|
-
}
|
331
|
-
handleEnterKey($event, emoji) {
|
332
|
-
if (!emoji) {
|
333
|
-
if (this.SEARCH_CATEGORY.emojis !== null && this.SEARCH_CATEGORY.emojis.length) {
|
334
|
-
emoji = this.SEARCH_CATEGORY.emojis[0];
|
335
|
-
if (emoji) {
|
336
|
-
this.emojiSelect.emit({ $event, emoji });
|
337
|
-
}
|
338
|
-
else {
|
339
|
-
return;
|
340
|
-
}
|
341
|
-
}
|
342
|
-
}
|
343
|
-
if (!this.hideRecent && !this.recent && emoji) {
|
344
|
-
this.frequently.add(emoji);
|
345
|
-
}
|
346
|
-
const component = this.categoryRefs.toArray()[1];
|
347
|
-
if (component && this.enableFrequentEmojiSort) {
|
348
|
-
component.getEmojis();
|
349
|
-
component.ref.markForCheck();
|
350
|
-
}
|
351
|
-
}
|
352
|
-
handleEmojiOver($event) {
|
353
|
-
var _a;
|
354
|
-
if (!this.showPreview || !this.previewRef) {
|
355
|
-
return;
|
356
|
-
}
|
357
|
-
const emojiData = this.CUSTOM_CATEGORY.emojis.find((customEmoji) => customEmoji.id === $event.emoji.id);
|
358
|
-
if (emojiData) {
|
359
|
-
$event.emoji = Object.assign({}, emojiData);
|
360
|
-
}
|
361
|
-
this.previewEmoji = $event.emoji;
|
362
|
-
this.cancelAnimationFrame();
|
363
|
-
(_a = this.ref) === null || _a === void 0 ? void 0 : _a.detectChanges();
|
364
|
-
}
|
365
|
-
handleEmojiLeave() {
|
366
|
-
if (!this.showPreview || !this.previewRef) {
|
367
|
-
return;
|
368
|
-
}
|
369
|
-
this.ngZone.runOutsideAngular(() => {
|
370
|
-
this.animationFrameRequestId = requestAnimationFrame(() => {
|
371
|
-
this.previewEmoji = null;
|
372
|
-
this.ref.detectChanges();
|
373
|
-
});
|
374
|
-
});
|
375
|
-
}
|
376
|
-
handleEmojiClick($event) {
|
377
|
-
this.emojiClick.emit($event);
|
378
|
-
this.emojiSelect.emit($event);
|
379
|
-
this.handleEnterKey($event.$event, $event.emoji);
|
380
|
-
}
|
381
|
-
handleSkinChange(skin) {
|
382
|
-
this.skin = skin;
|
383
|
-
localStorage.setItem(`${this.NAMESPACE}.skin`, String(skin));
|
384
|
-
this.skinChange.emit(skin);
|
385
|
-
}
|
386
|
-
getWidth() {
|
387
|
-
if (this.style && this.style.width) {
|
388
|
-
return this.style.width;
|
389
|
-
}
|
390
|
-
return this.perLine * (this.emojiSize + 12) + 12 + 2 + this.measureScrollbar + 'px';
|
391
|
-
}
|
392
|
-
cancelAnimationFrame() {
|
393
|
-
if (this.animationFrameRequestId !== null) {
|
394
|
-
cancelAnimationFrame(this.animationFrameRequestId);
|
395
|
-
this.animationFrameRequestId = null;
|
396
|
-
}
|
397
|
-
}
|
398
|
-
}
|
399
|
-
PickerComponent.decorators = [
|
400
|
-
{ type: Component, args: [{
|
401
|
-
selector: 'emoji-mart',
|
402
|
-
template: "<section\n class=\"emoji-mart {{ darkMode ? 'emoji-mart-dark' : '' }}\"\n [style.width]=\"getWidth()\"\n [ngStyle]=\"style\"\n>\n <div class=\"emoji-mart-bar\">\n <emoji-mart-anchors\n [categories]=\"categories\"\n (anchorClick)=\"handleAnchorClick($event)\"\n [color]=\"color\"\n [selected]=\"selected\"\n [i18n]=\"i18n\"\n [icons]=\"categoriesIcons\"\n ></emoji-mart-anchors>\n </div>\n <emoji-search\n *ngIf=\"enableSearch\"\n [i18n]=\"i18n\"\n (searchResults)=\"handleSearch($event)\"\n (enterKey)=\"handleEnterKey($event)\"\n [include]=\"include\"\n [exclude]=\"exclude\"\n [custom]=\"custom\"\n [autoFocus]=\"autoFocus\"\n [icons]=\"searchIcons\"\n [emojisToShowFilter]=\"emojisToShowFilter\"\n ></emoji-search>\n <section #scrollRef class=\"emoji-mart-scroll\" [attr.aria-label]=\"i18n.emojilist\">\n <emoji-category\n *ngFor=\"let category of activeCategories; let idx = index; trackBy: categoryTrack\"\n [id]=\"category.id\"\n [name]=\"category.name\"\n [emojis]=\"category.emojis\"\n [perLine]=\"perLine\"\n [totalFrequentLines]=\"totalFrequentLines\"\n [hasStickyPosition]=\"isNative\"\n [i18n]=\"i18n\"\n [hideObsolete]=\"hideObsolete\"\n [notFoundEmoji]=\"notFoundEmoji\"\n [custom]=\"category.id == RECENT_CATEGORY.id ? CUSTOM_CATEGORY.emojis : undefined\"\n [recent]=\"category.id == RECENT_CATEGORY.id ? recent : undefined\"\n [virtualize]=\"virtualize\"\n [virtualizeOffset]=\"virtualizeOffset\"\n [emojiIsNative]=\"isNative\"\n [emojiSkin]=\"skin\"\n [emojiSize]=\"emojiSize\"\n [emojiSet]=\"set\"\n [emojiSheetSize]=\"sheetSize\"\n [emojiForceSize]=\"isNative\"\n [emojiTooltip]=\"emojiTooltip\"\n [emojiBackgroundImageFn]=\"backgroundImageFn\"\n [emojiImageUrlFn]=\"imageUrlFn\"\n [emojiUseButton]=\"useButton\"\n (emojiOver)=\"handleEmojiOver($event)\"\n (emojiLeave)=\"handleEmojiLeave()\"\n (emojiClick)=\"handleEmojiClick($event)\"\n ></emoji-category>\n </section>\n <div class=\"emoji-mart-bar\" *ngIf=\"showPreview\">\n <emoji-preview\n [title]=\"title\"\n [emoji]=\"previewEmoji\"\n [idleEmoji]=\"emoji\"\n [emojiIsNative]=\"isNative\"\n [emojiSize]=\"38\"\n [emojiSkin]=\"skin\"\n [emojiSet]=\"set\"\n [i18n]=\"i18n\"\n [emojiSheetSize]=\"sheetSize\"\n [emojiBackgroundImageFn]=\"backgroundImageFn\"\n [emojiImageUrlFn]=\"imageUrlFn\"\n (skinChange)=\"handleSkinChange($event)\"\n ></emoji-preview>\n </div>\n</section>\n",
|
403
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
404
|
-
preserveWhitespaces: false
|
405
|
-
},] }
|
406
|
-
];
|
407
|
-
PickerComponent.ctorParameters = () => [
|
408
|
-
{ type: NgZone },
|
409
|
-
{ type: Renderer2 },
|
410
|
-
{ type: ChangeDetectorRef },
|
411
|
-
{ type: EmojiFrequentlyService },
|
412
|
-
{ type: String, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
|
413
|
-
];
|
414
|
-
PickerComponent.propDecorators = {
|
415
|
-
perLine: [{ type: Input }],
|
416
|
-
totalFrequentLines: [{ type: Input }],
|
417
|
-
i18n: [{ type: Input }],
|
418
|
-
style: [{ type: Input }],
|
419
|
-
title: [{ type: Input }],
|
420
|
-
emoji: [{ type: Input }],
|
421
|
-
darkMode: [{ type: Input }],
|
422
|
-
color: [{ type: Input }],
|
423
|
-
hideObsolete: [{ type: Input }],
|
424
|
-
categories: [{ type: Input }],
|
425
|
-
activeCategories: [{ type: Input }],
|
426
|
-
set: [{ type: Input }],
|
427
|
-
skin: [{ type: Input }],
|
428
|
-
isNative: [{ type: Input }],
|
429
|
-
emojiSize: [{ type: Input }],
|
430
|
-
sheetSize: [{ type: Input }],
|
431
|
-
emojisToShowFilter: [{ type: Input }],
|
432
|
-
showPreview: [{ type: Input }],
|
433
|
-
emojiTooltip: [{ type: Input }],
|
434
|
-
autoFocus: [{ type: Input }],
|
435
|
-
custom: [{ type: Input }],
|
436
|
-
hideRecent: [{ type: Input }],
|
437
|
-
imageUrlFn: [{ type: Input }],
|
438
|
-
include: [{ type: Input }],
|
439
|
-
exclude: [{ type: Input }],
|
440
|
-
notFoundEmoji: [{ type: Input }],
|
441
|
-
categoriesIcons: [{ type: Input }],
|
442
|
-
searchIcons: [{ type: Input }],
|
443
|
-
useButton: [{ type: Input }],
|
444
|
-
enableFrequentEmojiSort: [{ type: Input }],
|
445
|
-
enableSearch: [{ type: Input }],
|
446
|
-
showSingleCategory: [{ type: Input }],
|
447
|
-
virtualize: [{ type: Input }],
|
448
|
-
virtualizeOffset: [{ type: Input }],
|
449
|
-
recent: [{ type: Input }],
|
450
|
-
emojiClick: [{ type: Output }],
|
451
|
-
emojiSelect: [{ type: Output }],
|
452
|
-
skinChange: [{ type: Output }],
|
453
|
-
scrollRef: [{ type: ViewChild, args: ['scrollRef', { static: true },] }],
|
454
|
-
previewRef: [{ type: ViewChild, args: [PreviewComponent, { static: false },] }],
|
455
|
-
searchRef: [{ type: ViewChild, args: [SearchComponent, { static: false },] }],
|
456
|
-
categoryRefs: [{ type: ViewChildren, args: [CategoryComponent,] }],
|
457
|
-
backgroundImageFn: [{ type: Input }]
|
458
|
-
};
|
459
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGlja2VyL3BpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBQ04sV0FBVyxFQUVYLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxVQUFVLEdBS1gsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxLQUFLLEtBQUssTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTNDLE1BQU0sSUFBSSxHQUFRO0lBQ2hCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLFNBQVMsRUFBRSxlQUFlO0lBQzFCLFFBQVEsRUFBRSxnQkFBZ0I7SUFDMUIsS0FBSyxFQUFFLE9BQU87SUFDZCxVQUFVLEVBQUU7UUFDVixNQUFNLEVBQUUsZ0JBQWdCO1FBQ3hCLE1BQU0sRUFBRSxpQkFBaUI7UUFDekIsTUFBTSxFQUFFLGtCQUFrQjtRQUMxQixNQUFNLEVBQUUsa0JBQWtCO1FBQzFCLEtBQUssRUFBRSxjQUFjO1FBQ3JCLFFBQVEsRUFBRSxVQUFVO1FBQ3BCLE1B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LE1BQU07Z0JBQy9DLG1CQUFtQixFQUFFLEtBQUs7YUFDM0I7OztZQTFEQyxNQUFNO1lBTU4sU0FBUztZQVpULGlCQUFpQjtZQXlCVixzQkFBc0I7eUNBOEgxQixNQUFNLFNBQUMsV0FBVzs7O3NCQXJGcEIsS0FBSztpQ0FDTCxLQUFLO21CQUNMLEtBQUs7b0JBQ0wsS0FBSztvQkFDTCxLQUFLO29CQUNMLEtBQUs7dUJBQ0wsS0FBSztvQkFHTCxLQUFLOzJCQUNMLEtBQUs7eUJBRUwsS0FBSzsrQkFFTCxLQUFLO2tCQUNMLEtBQUs7bUJBQ0wsS0FBSzt1QkFFTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUNMLEtBQUs7MkJBQ0wsS0FBSzt3QkFDTCxLQUFLO3FCQUNMLEtBQUs7eUJBQ0wsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLEtBQUs7c0JBQ0wsS0FBSzs0QkFDTCxLQUFLOzhCQUNMLEtBQUs7MEJBQ0wsS0FBSzt3QkFDTCxLQUFLO3NDQUNMLEtBQUs7MkJBQ0wsS0FBSztpQ0FDTCxLQUFLO3lCQUNMLEtBQUs7K0JBQ0wsS0FBSztxQkFDTCxLQUFLO3lCQUNMLE1BQU07MEJBQ04sTUFBTTt5QkFDTixNQUFNO3dCQUNOLFNBQVMsU0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3lCQUN2QyxTQUFTLFNBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO3dCQUM3QyxTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTsyQkFDNUMsWUFBWSxTQUFDLGlCQUFpQjtnQ0E4QjlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBjYXRlZ29yaWVzLFxuICBFbW9qaSxcbiAgRW1vamlDYXRlZ29yeSxcbiAgRW1vamlEYXRhLFxuICBFbW9qaUV2ZW50LFxufSBmcm9tICdAY3RybC9uZ3gtZW1vamktbWFydC9uZ3gtZW1vamknO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb21wb25lbnQgfSBmcm9tICcuL2NhdGVnb3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbW9qaUZyZXF1ZW50bHlTZXJ2aWNlIH0gZnJvbSAnLi9lbW9qaS1mcmVxdWVudGx5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi9zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCAqIGFzIGljb25zIGZyb20gJy4vc3Zncyc7XG5pbXBvcnQgeyBtZWFzdXJlU2Nyb2xsYmFyIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IEkxOE46IGFueSA9IHtcbiAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgZW1vamlsaXN0OiAnTGlzdCBvZiBlbW9qaScsXG4gIG5vdGZvdW5kOiAnTm8gRW1vamkgRm91bmQnLFxuICBjbGVhcjogJ0NsZWFyJyxcbiAgY2F0ZWdvcmllczoge1xuICAgIHNlYXJjaDogJ1NlYXJjaCBSZXN1bHRzJyxcbiAgICByZWNlbnQ6ICdGcmVxdWVudGx5IFVzZWQnLFxuICAgIHBlb3BsZTogJ1NtaWxleXMgJiBQZW9wbGUnLFxuICAgIG5hdHVyZTogJ0FuaW1hbHMgJiBOYXR1cmUnLFxuICAgIGZvb2RzOiAnRm9vZCAmIERyaW5rJyxcbiAgICBhY3Rpdml0eTogJ0FjdGl2aXR5JyxcbiAgICBwbGFjZXM6ICdUcmF2ZWwgJiBQbGFjZXMnLFxuICAgIG9iamVjdHM6ICdPYmplY3RzJyxcbiAgICBzeW1ib2xzOiAnU3ltYm9scycsXG4gICAgZmxhZ3M6ICdGbGFncycsXG4gICAgY3VzdG9tOiAnQ3VzdG9tJyxcbiAgfSxcbiAgc2tpbnRvbmVzOiB7XG4gICAgMTogJ0RlZmF1bHQgU2tpbiBUb25lJyxcbiAgICAyOiAnTGlnaHQgU2tpbiBUb25lJyxcbiAgICAzOiAnTWVkaXVtLUxpZ2h0IFNraW4gVG9uZScsXG4gICAgNDogJ01lZGl1bSBTa2luIFRvbmUnLFxuICAgIDU6ICdNZWRpdW0tRGFyayBTa2luIFRvbmUnLFxuICAgIDY6ICdEYXJrIFNraW4gVG9uZScsXG4gIH0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlbW9qaS1tYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwZXJMaW5lID0gOTtcbiAgQElucHV0KCkgdG90YWxGcmVxdWVudExpbmVzID0gNDtcbiAgQElucHV0KCkgaTE4bjogYW55ID0ge307XG4gIEBJbnB1dCgpIHN0eWxlOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgdGl0bGUgPSAnRW1vamkgTWFydOKEoic7XG4gIEBJbnB1dCgpIGVtb2ppID0gJ2RlcGFydG1lbnRfc3RvcmUnO1xuICBASW5wdXQoKSBkYXJrTW9kZSA9ICEhKFxuICAgIHR5cGVvZiBtYXRjaE1lZGlhID09PSAnZnVuY3Rpb24nICYmIG1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzXG4gICk7XG4gIEBJbnB1dCgpIGNvbG9yID0gJyNhZTY1YzUnO1xuICBASW5wdXQoKSBoaWRlT2Jzb2xldGUgPSB0cnVlO1xuICAvKiogYWxsIGNhdGVnb3JpZXMgc2hvd24gKi9cbiAgQElucHV0KCkgY2F0ZWdvcmllczogRW1vamlDYXRlZ29yeVtdID0gW107XG4gIC8qKiB1c2VkIHRvIHRlbXBvcmFyaWx5IGRyYXcgY2F0ZWdvcmllcyAqL1xuICBASW5wdXQoKSBhY3RpdmVDYXRlZ29yaWVzOiBFbW9qaUNhdGVnb3J5W10gPSBbXTtcbiAgQElucHV0KCkgc2V0OiBFbW9qaVsnc2V0J10gPSAnYXBwbGUnO1xuICBASW5wdXQoKSBza2luOiBFbW9qaVsnc2tpbiddID0gMTtcbiAgLyoqIFJlbmRlcnMgdGhlIG5hdGl2ZSB1bmljb2RlIGVtb2ppICovXG4gIEBJbnB1dCgpIGlzTmF0aXZlOiBFbW9qaVsnaXNOYXRpdmUnXSA9IGZhbHNlO1xuICBASW5wdXQoKSBlbW9qaVNpemU6IEVtb2ppWydzaXplJ10gPSAyNDtcbiAgQElucHV0KCkgc2hlZXRTaXplOiBFbW9qaVsnc2hlZXRTaXplJ10gPSA2NDtcbiAgQElucHV0KCkgZW1vamlzVG9TaG93RmlsdGVyPzogKHg6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd1ByZXZpZXcgPSB0cnVlO1xuICBASW5wdXQoKSBlbW9qaVRvb2x0aXAgPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b0ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGN1c3RvbTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaGlkZVJlY2VudCA9IHRydWU7XG4gIEBJbnB1dCgpIGltYWdlVXJsRm46IEVtb2ppWydpbWFnZVVybEZuJ107XG4gIEBJbnB1dCgpIGluY2x1ZGU/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgZXhjbHVkZT86IHN0cmluZ1tdO1xuICBASW5wdXQoKSBub3RGb3VuZEVtb2ppID0gJ3NsZXV0aF9vcl9zcHknO1xuICBASW5wdXQoKSBjYXRlZ29yaWVzSWNvbnMgPSBpY29ucy5jYXRlZ29yaWVzO1xuICBASW5wdXQoKSBzZWFyY2hJY29ucyA9IGljb25zLnNlYXJjaDtcbiAgQElucHV0KCkgdXNlQnV0dG9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZUZyZXF1ZW50RW1vamlTb3J0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZVNlYXJjaCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dTaW5nbGVDYXRlZ29yeSA9IGZhbHNlO1xuICBASW5wdXQoKSB2aXJ0dWFsaXplID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZpcnR1YWxpemVPZmZzZXQgPSAwO1xuICBASW5wdXQoKSByZWNlbnQ/OiBzdHJpbmdbXTtcbiAgQE91dHB1dCgpIGVtb2ppQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGVtb2ppU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBza2luQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxFbW9qaVsnc2tpbiddPigpO1xuICBAVmlld0NoaWxkKCdzY3JvbGxSZWYnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHNjcm9sbFJlZiE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoUHJldmlld0NvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIHByZXZpZXdSZWY/OiBQcmV2aWV3Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKFNlYXJjaENvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIHNlYXJjaFJlZj86IFNlYXJjaENvbXBvbmVudDtcbiAgQFZpZXdDaGlsZHJlbihDYXRlZ29yeUNvbXBvbmVudCkgY2F0ZWdvcnlSZWZzITogUXVlcnlMaXN0PENhdGVnb3J5Q29tcG9uZW50PjtcbiAgc2Nyb2xsSGVpZ2h0ID0gMDtcbiAgY2xpZW50SGVpZ2h0ID0gMDtcbiAgY2xpZW50V2lkdGggPSAwO1xuICBzZWxlY3RlZD86IHN0cmluZztcbiAgbmV4dFNjcm9sbD86IHN0cmluZztcbiAgc2Nyb2xsVG9wPzogbnVtYmVyO1xuICBmaXJzdFJlbmRlciA9IHRydWU7XG4gIHByZXZpZXdFbW9qaTogYW55O1xuICBhbmltYXRpb25GcmFtZVJlcXVlc3RJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIE5BTUVTUEFDRSA9ICdlbW9qaS1tYXJ0JztcbiAgbWVhc3VyZVNjcm9sbGJhciA9IDA7XG4gIFJFQ0VOVF9DQVRFR09SWTogRW1vamlDYXRlZ29yeSA9IHtcbiAgICBpZDogJ3JlY2VudCcsXG4gICAgbmFtZTogJ1JlY2VudCcsXG4gICAgZW1vamlzOiBudWxsLFxuICB9O1xuICBTRUFSQ0hfQ0FURUdPUlk6IEVtb2ppQ2F0ZWdvcnkgPSB7XG4gICAgaWQ6ICdzZWFyY2gnLFxuICAgIG5hbWU6ICdTZWFyY2gnLFxuICAgIGVtb2ppczogbnVsbCxcbiAgICBhbmNob3I6IGZhbHNlLFxuICB9O1xuICBDVVNUT01fQ0FURUdPUlk6IEVtb2ppQ2F0ZWdvcnkgPSB7XG4gICAgaWQ6ICdjdXN0b20nLFxuICAgIG5hbWU6ICdDdXN0b20nLFxuICAgIGVtb2ppczogW10sXG4gIH07XG4gIHByaXZhdGUgc2Nyb2xsTGlzdGVuZXIhOiAoKSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpXG4gIGJhY2tncm91bmRJbWFnZUZuOiBFbW9qaVsnYmFja2dyb3VuZEltYWdlRm4nXSA9IChzZXQ6IHN0cmluZywgc2hlZXRTaXplOiBudW1iZXIpID0+XG4gICAgYGh0dHBzOi8vdW5wa2cuY29tL2Vtb2ppLWRhdGFzb3VyY2UtJHt0aGlzLnNldH1ANi4wLjAvaW1nLyR7dGhpcy5zZXR9L3NoZWV0cy0yNTYvJHt0aGlzLnNoZWV0U2l6ZX0ucG5nYFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGZyZXF1ZW50bHk6IEVtb2ppRnJlcXVlbnRseVNlcnZpY2UsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBtZWFzdXJlIHNjcm9sbFxuICAgIHRoaXMubWVhc3VyZVNjcm9sbGJhciA9IG1lYXN1cmVTY3JvbGxiYXIoKTtcblxuICAgIHRoaXMuaTE4biA9IHsgLi4uSTE4TiwgLi4udGhpcy5pMThuIH07XG4gICAgdGhpcy5pMThuLmNhdGVnb3JpZXMgPSB7IC4uLkkxOE4uY2F0ZWdvcmllcywgLi4udGhpcy5pMThuLmNhdGVnb3JpZXMgfTtcbiAgICB0aGlzLnNraW4gPVxuICAgICAgSlNPTi5wYXJzZShcbiAgICAgICAgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkgJiYgbG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5OQU1FU1BBQ0V9LnNraW5gKSkgfHxcbiAgICAgICAgICAnbnVsbCcsXG4gICAgICApIHx8IHRoaXMuc2tpbjtcblxuICAgIGNvbnN0IGFsbENhdGVnb3JpZXMgPSBbLi4uY2F0ZWdvcmllc107XG5cbiAgICBpZiAodGhpcy5jdXN0b20ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5DVVNUT01fQ0FURUdPUlkuZW1vamlzID0gdGhpcy5jdXN0b20ubWFwKGVtb2ppID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5lbW9qaSxcbiAgICAgICAgICAvLyBgPENhdGVnb3J5IC8+YCBleHBlY3RzIGVtb2ppIHRvIGhhdmUgYW4gYGlkYC5cbiAgICAgICAgICBpZDogZW1vamkuc2hvcnROYW1lc1swXSxcbiAgICAgICAgICBjdXN0b206IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgYWxsQ2F0ZWdvcmllcy5wdXNoKHRoaXMuQ1VTVE9NX0NBVEVHT1JZKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbmNsdWRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFsbENhdGVnb3JpZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbmNsdWRlIS5pbmRleE9mKGEuaWQpID4gdGhpcy5pbmNsdWRlIS5pbmRleE9mKGIuaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBhbGxDYXRlZ29yaWVzKSB7XG4gICAgICBjb25zdCBpc0luY2x1ZGVkID1cbiAgICAgICAgdGhpcy5pbmNsdWRlICYmIHRoaXMuaW5jbHVkZS5sZW5ndGggPyB0aGlzLmluY2x1ZGUuaW5kZXhPZihjYXRlZ29yeS5pZCkgPiAtMSA6IHRydWU7XG4gICAgICBjb25zdCBpc0V4Y2x1ZGVkID1cbiAgICAgICAgdGhpcy5leGNsdWRlICYmIHRoaXMuZXhjbHVkZS5sZW5ndGggPyB0aGlzLmV4Y2x1ZGUuaW5kZXhPZihjYXRlZ29yeS5pZCkgPiAtMSA6IGZhbHNlO1xuICAgICAgaWYgKCFpc0luY2x1ZGVkIHx8IGlzRXhjbHVkZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVtb2ppc1RvU2hvd0ZpbHRlcikge1xuICAgICAgICBjb25zdCBuZXdFbW9qaXMgPSBbXTtcblxuICAgICAgICBjb25zdCB7IGVtb2ppcyB9ID0gY2F0ZWdvcnk7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogcHJlZmVyLWZvci1vZlxuICAgICAgICBmb3IgKGxldCBlbW9qaUluZGV4ID0gMDsgZW1vamlJbmRleCA8IGVtb2ppcyEubGVuZ3RoOyBlbW9qaUluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBlbW9qaSA9IGVtb2ppcyFbZW1vamlJbmRleF07XG4gICAgICAgICAgaWYgKHRoaXMuZW1vamlzVG9TaG93RmlsdGVyKGVtb2ppKSkge1xuICAgICAgICAgICAgbmV3RW1vamlzLnB1c2goZW1vamkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdFbW9qaXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgbmV3Q2F0ZWdvcnkgPSB7XG4gICAgICAgICAgICBlbW9qaXM6IG5ld0Vtb2ppcyxcbiAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5Lm5hbWUsXG4gICAgICAgICAgICBpZDogY2F0ZWdvcnkuaWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5wdXNoKG5ld0NhdGVnb3J5KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhdGVnb3JpZXNJY29ucyA9IHsgLi4uaWNvbnMuY2F0ZWdvcmllcywgLi4udGhpcy5jYXRlZ29yaWVzSWNvbnMgfTtcbiAgICAgIHRoaXMuc2VhcmNoSWNvbnMgPSB7IC4uLmljb25zLnNlYXJjaCwgLi4udGhpcy5zZWFyY2hJY29ucyB9O1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVSZWNlbnQgPVxuICAgICAgdGhpcy5pbmNsdWRlICYmIHRoaXMuaW5jbHVkZS5sZW5ndGhcbiAgICAgICAgPyB0aGlzLmluY2x1ZGUuaW5kZXhPZih0aGlzLlJFQ0VOVF9DQVRFR09SWS5pZCkgPiAtMVxuICAgICAgICA6IHRydWU7XG4gICAgY29uc3QgZXhjbHVkZVJlY2VudCA9XG4gICAgICB0aGlzLmV4Y2x1ZGUgJiYgdGhpcy5leGNsdWRlLmxlbmd0aFxuICAgICAgICA/IHRoaXMuZXhjbHVkZS5pbmRleE9mKHRoaXMuUkVDRU5UX0NBVEVHT1JZLmlkKSA+IC0xXG4gICAgICAgIDogZmFsc2U7XG4gICAgaWYgKGluY2x1ZGVSZWNlbnQgJiYgIWV4Y2x1ZGVSZWNlbnQpIHtcbiAgICAgIHRoaXMuaGlkZVJlY2VudCA9IGZhbHNlO1xuICAgICAgdGhpcy5jYXRlZ29yaWVzLnVuc2hpZnQodGhpcy5SRUNFTlRfQ0FURUdPUlkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhdGVnb3JpZXNbMF0pIHtcbiAgICAgIHRoaXMuY2F0ZWdvcmllc1swXS5maXJzdCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jYXRlZ29yaWVzLnVuc2hpZnQodGhpcy5TRUFSQ0hfQ0FURUdPUlkpO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLmNhdGVnb3JpZXMuZmlsdGVyKGNhdGVnb3J5ID0+IGNhdGVnb3J5LmZpcnN0KVswXS5uYW1lO1xuXG4gICAgLy8gTmVlZCB0byBiZSBjYXJlZnVsIGlmIHNtYWxsIG51bWJlciBvZiBjYXRlZ29yaWVzXG4gICAgY29uc3QgY2F0ZWdvcmllc1RvTG9hZEZpcnN0ID0gTWF0aC5taW4odGhpcy5jYXRlZ29yaWVzLmxlbmd0aCwgMyk7XG4gICAgdGhpcy5zZXRBY3RpdmVDYXRlZ29yaWVzKFxuICAgICAgKHRoaXMuYWN0aXZlQ2F0ZWdvcmllcyA9IHRoaXMuY2F0ZWdvcmllcy5zbGljZSgwLCBjYXRlZ29yaWVzVG9Mb2FkRmlyc3QpKSxcbiAgICApO1xuXG4gICAgLy8gVHJpbSBsYXN0IGFjdGl2ZSBjYXRlZ29yeVxuICAgIGNvbnN0IGxhc3RBY3RpdmVDYXRlZ29yeUVtb2ppcyA9IHRoaXMuY2F0ZWdvcmllc1tjYXRlZ29yaWVzVG9Mb2FkRmlyc3QgLSAxXS5lbW9qaXMhLnNsaWNlKCk7XG4gICAgdGhpcy5jYXRlZ29yaWVzW2NhdGVnb3JpZXNUb0xvYWRGaXJzdCAtIDFdLmVtb2ppcyA9IGxhc3RBY3RpdmVDYXRlZ29yeUVtb2ppcy5zbGljZSgwLCA2MCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIFJlc3RvcmUgbGFzdCBjYXRlZ29yeVxuICAgICAgdGhpcy5jYXRlZ29yaWVzW2NhdGVnb3JpZXNUb0xvYWRGaXJzdCAtIDFdLmVtb2ppcyA9IGxhc3RBY3RpdmVDYXRlZ29yeUVtb2ppcztcbiAgICAgIHRoaXMuc2V0QWN0aXZlQ2F0ZWdvcmllcyh0aGlzLmNhdGVnb3JpZXMpO1xuICAgICAgLy8gVGhlIGBzZXRUaW1lb3V0YCB3aWxsIHRyaWdnZXIgdGhlIGNoYW5nZSBkZXRlY3Rpb24sIGJ1dCBzaW5jZSB3ZSdyZSBpbnNpZGVcbiAgICAgIC8vIHRoZSBPblB1c2ggY29tcG9uZW50IHdlIGNhbiBydW4gY2hhbmdlIGRldGVjdGlvbiBsb2NhbGx5IHN0YXJ0aW5nIGZyb20gdGhpc1xuICAgICAgLy8gY29tcG9uZW50IGFuZCBnb2luZyBkb3duIHRvIHRoZSBjaGlsZHJlbi5cbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11bnVzZWQtZXhwcmVzc2lvblxuICAgICAgaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSAmJlxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgLy8gVGhlIGB1cGRhdGVDYXRlZ29yaWVzU2l6ZWAgZG9lc24ndCBjaGFuZ2UgcHJvcGVydGllcyB0aGF0IGFyZSB1c2VkXG4gICAgICAgICAgLy8gaW4gdGVtcGxhdGVzLCB0aHVzIHRoaXMgaXMgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSByb290IHpvbmUgdG8gYXZvaWRcbiAgICAgICAgICAvLyBydW5uaW5nIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2F0ZWdvcmllc1NpemUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAvLyBET00gZXZlbnRzIHRoYXQgYXJlIGxpc3RlbmVkIGJ5IEFuZ3VsYXIgaW5zaWRlIHRoZSB0ZW1wbGF0ZSB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICAgIC8vIGFuZCBhbHNvIHdyYXBwZWQgaW50byBhZGRpdGlvbmFsIGZ1bmN0aW9ucyB0aGF0IGNhbGwgYG1hcmtGb3JDaGVjaygpYC4gV2UgbGlzdGVuIGBzY3JvbGxgXG4gICAgICAvLyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcm9vdCB6b25lIHNpbmNlIGl0IHdpbGwgbm90IHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBlYWNoIHRpbWVcbiAgICAgIC8vIHRoZSBgc2Nyb2xsYCBldmVudCBpcyBkaXNwYXRjaGVkLlxuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuc2Nyb2xsUmVmLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2Nyb2xsKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXIoKTtcbiAgICAvLyBUaGlzIGlzIGNhbGxlZCBoZXJlIGJlY2F1c2UgdGhlIGNvbXBvbmVudCBtaWdodCBiZSBkZXN0cm95ZWRcbiAgICAvLyBidXQgdGhlcmUgd2lsbCBzdGlsbCBiZSBhIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGNhbGxiYWNrIGluIHRoZSBxdWV1ZVxuICAgIC8vIHRoYXQgY2FsbHMgYGRldGVjdENoYW5nZXMoKWAgb24gdGhlIGBWaWV3UmVmYC4gVGhpcyB3aWxsIGxlYWQgdG8gYSBydW50aW1lXG4gICAgLy8gZXhjZXB0aW9uIGlmIHRoZSBgZGV0ZWN0Q2hhbmdlcygpYCBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGBWaWV3UmVmYCBpcyBkZXN0cm95ZWQuXG4gICAgdGhpcy5jYW5jZWxBbmltYXRpb25GcmFtZSgpO1xuICB9XG5cbiAgc2V0QWN0aXZlQ2F0ZWdvcmllcyhjYXRlZ29yaWVzVG9NYWtlQWN0aXZlOiBBcnJheTxFbW9qaUNhdGVnb3J5Pikge1xuICAgIGlmICh0aGlzLnNob3dTaW5nbGVDYXRlZ29yeSkge1xuICAgICAgdGhpcy5hY3RpdmVDYXRlZ29yaWVzID0gY2F0ZWdvcmllc1RvTWFrZUFjdGl2ZS5maWx0ZXIoXG4gICAgICAgIHggPT4geC5uYW1lID09PSB0aGlzLnNlbGVjdGVkIHx8IHggPT09IHRoaXMuU0VBUkNIX0NBVEVHT1JZLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVDYXRlZ29yaWVzID0gY2F0ZWdvcmllc1RvTWFrZUFjdGl2ZTtcbiAgICB9XG4gIH1cbiAgdXBkYXRlQ2F0ZWdvcmllc1NpemUoKSB7XG4gICAgdGhpcy5jYXRlZ29yeVJlZnMuZm9yRWFjaChjb21wb25lbnQgPT4gY29tcG9uZW50Lm1lbW9pemVTaXplKCkpO1xuXG4gICAgaWYgKHRoaXMuc2Nyb2xsUmVmKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnNjcm9sbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0YXJnZXQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgdGhpcy5jbGllbnRIZWlnaHQgPSB0YXJnZXQuY2xpZW50SGVpZ2h0O1xuICAgICAgdGhpcy5jbGllbnRXaWR0aCA9IHRhcmdldC5jbGllbnRXaWR0aDtcbiAgICB9XG4gIH1cbiAgaGFuZGxlQW5jaG9yQ2xpY2soJGV2ZW50OiB7IGNhdGVnb3J5OiBFbW9qaUNhdGVnb3J5OyBpbmRleDogbnVtYmVyIH0pIHtcbiAgICB0aGlzLnVwZGF0ZUNhdGVnb3JpZXNTaXplKCk7XG4gICAgdGhpcy5zZWxlY3RlZCA9ICRldmVudC5jYXRlZ29yeS5uYW1lO1xuICAgIHRoaXMuc2V0QWN0aXZlQ2F0ZWdvcmllcyh0aGlzLmNhdGVnb3JpZXMpO1xuXG4gICAgaWYgKHRoaXMuU0VBUkNIX0NBVEVHT1JZLmVtb2ppcykge1xuICAgICAgdGhpcy5oYW5kbGVTZWFyY2gobnVsbCk7XG4gICAgICB0aGlzLnNlYXJjaFJlZj8uY2xlYXIoKTtcbiAgICAgIHRoaXMuaGFuZGxlQW5jaG9yQ2xpY2soJGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNhdGVnb3J5UmVmcy5maW5kKG4gPT4gbi5pZCA9PT0gJGV2ZW50LmNhdGVnb3J5LmlkKTtcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICBsZXQgeyB0b3AgfSA9IGNvbXBvbmVudDtcblxuICAgICAgaWYgKCRldmVudC5jYXRlZ29yeS5maXJzdCkge1xuICAgICAgICB0b3AgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9wICs9IDE7XG4gICAgICB9XG4gICAgICB0aGlzLnNjcm9sbFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHRvcDtcbiAgICB9XG4gICAgdGhpcy5uZXh0U2Nyb2xsID0gJGV2ZW50LmNhdGVnb3J5Lm5hbWU7XG5cbiAgICAvLyBoYW5kbGUgY29tcG9uZW50IHNjcm9sbGluZyB0byBsb2FkIGVtb2ppc1xuICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgdGhpcy5jYXRlZ29yaWVzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRUb1Njcm9sbCA9IHRoaXMuY2F0ZWdvcnlSZWZzLmZpbmQoKHsgaWQgfSkgPT4gaWQgPT09IGNhdGVnb3J5LmlkKTtcbiAgICAgIGNvbXBvbmVudFRvU2Nyb2xsPy5oYW5kbGVTY3JvbGwodGhpcy5zY3JvbGxSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUb3ApO1xuICAgIH1cbiAgfVxuICBjYXRlZ29yeVRyYWNrKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG4gIGhhbmRsZVNjcm9sbChub1NlbGVjdGlvbkNoYW5nZSA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMubmV4dFNjcm9sbCkge1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMubmV4dFNjcm9sbDtcbiAgICAgIHRoaXMubmV4dFNjcm9sbCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjcm9sbFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93U2luZ2xlQ2F0ZWdvcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgYWN0aXZlQ2F0ZWdvcnk6IEVtb2ppQ2F0ZWdvcnkgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuU0VBUkNIX0NBVEVHT1JZLmVtb2ppcykge1xuICAgICAgYWN0aXZlQ2F0ZWdvcnkgPSB0aGlzLlNFQVJDSF9DQVRFR09SWTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5zY3JvbGxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIC8vIGNoZWNrIHNjcm9sbCBpcyBub3QgYXQgYm90dG9tXG4gICAgICBpZiAodGFyZ2V0LnNjcm9sbFRvcCA9PT0gMCkge1xuICAgICAgICAvLyBoaXQgdGhlIFRPUFxuICAgICAgICBhY3RpdmVDYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllcy5maW5kKG4gPT4gbi5maXJzdCA9PT0gdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldC5zY3JvbGxIZWlnaHQgLSB0YXJnZXQuc2Nyb2xsVG9wID09PSB0aGlzLmNsaWVudEhlaWdodCkge1xuICAgICAgICAvLyBzY3JvbGxlZCB0byBib3R0b20gYWN0aXZhdGUgbGFzdCBjYXRlZ29yeVxuICAgICAgICBhY3RpdmVDYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcmllc1t0aGlzLmNhdGVnb3JpZXMubGVuZ3RoIC0gMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzY3JvbGxpbmdcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiB0aGlzLmNhdGVnb3JpZXMpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNhdGVnb3J5UmVmcy5maW5kKCh7IGlkIH0pID0+IGlkID09PSBjYXRlZ29yeS5pZCk7XG4gICAgICAgICAgY29uc3QgYWN0aXZlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY29tcG9uZW50Py5oYW5kbGVTY3JvbGwodGFyZ2V0LnNjcm9sbFRvcCk7XG4gICAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aXZlQ2F0ZWdvcnkgPSBjYXRlZ29yeTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUb3AgPSB0YXJnZXQuc2Nyb2xsVG9wO1xuICAgIH1cbiAgICAvLyBUaGlzIHdpbGwgYWxsb3cgdXMgdG8gcnVuIHRoZSBjaGFuZ2UgZGV0ZWN0aW9uIG9ubHkgd2hlbiB0aGUgY2F0ZWdvcnkgY2hhbmdlcy5cbiAgICBpZiAoIW5vU2VsZWN0aW9uQ2hhbmdlICYmIGFjdGl2ZUNhdGVnb3J5ICYmIGFjdGl2ZUNhdGVnb3J5Lm5hbWUgIT09IHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBhY3RpdmVDYXRlZ29yeS5uYW1lO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSBpZiAobm9TZWxlY3Rpb25DaGFuZ2UpIHtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlU2VhcmNoKCRlbW9qaXM6IGFueVtdIHwgbnVsbCkge1xuICAgIHRoaXMuU0VBUkNIX0NBVEVHT1JZLmVtb2ppcyA9ICRlbW9qaXM7XG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jYXRlZ29yeVJlZnMudG9BcnJheSgpKSB7XG4gICAgICBpZiAoY29tcG9uZW50Lm5hbWUgPT09ICdTZWFyY2gnKSB7XG4gICAgICAgIGNvbXBvbmVudC5lbW9qaXMgPSAkZW1vamlzO1xuICAgICAgICBjb21wb25lbnQudXBkYXRlRGlzcGxheSgkZW1vamlzID8gJ2Jsb2NrJyA6ICdub25lJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnQudXBkYXRlRGlzcGxheSgkZW1vamlzID8gJ25vbmUnIDogJ2Jsb2NrJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zY3JvbGxSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIHRoaXMuaGFuZGxlU2Nyb2xsKCk7XG4gIH1cblxuICBoYW5kbGVFbnRlcktleSgkZXZlbnQ6IEV2ZW50LCBlbW9qaT86IEVtb2ppRGF0YSkge1xuICAgIGlmICghZW1vamkpIHtcbiAgICAgIGlmICh0aGlzLlNFQVJDSF9DQVRFR09SWS5lbW9qaXMgIT09IG51bGwgJiYgdGhpcy5TRUFSQ0hfQ0FURUdPUlkuZW1vamlzLmxlbmd0aCkge1xuICAgICAgICBlbW9qaSA9IHRoaXMuU0VBUkNIX0NBVEVHT1JZLmVtb2ppc1swXTtcbiAgICAgICAgaWYgKGVtb2ppKSB7XG4gICAgICAgICAgdGhpcy5lbW9qaVNlbGVjdC5lbWl0KHsgJGV2ZW50LCBlbW9qaSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGlkZVJlY2VudCAmJiAhdGhpcy5yZWNlbnQgJiYgZW1vamkpIHtcbiAgICAgIHRoaXMuZnJlcXVlbnRseS5hZGQoZW1vamkpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY2F0ZWdvcnlSZWZzLnRvQXJyYXkoKVsxXTtcbiAgICBpZiAoY29tcG9uZW50ICYmIHRoaXMuZW5hYmxlRnJlcXVlbnRFbW9qaVNvcnQpIHtcbiAgICAgIGNvbXBvbmVudC5nZXRFbW9qaXMoKTtcbiAgICAgIGNvbXBvbmVudC5yZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIGhhbmRsZUVtb2ppT3ZlcigkZXZlbnQ6IEVtb2ppRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuc2hvd1ByZXZpZXcgfHwgIXRoaXMucHJldmlld1JlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVtb2ppRGF0YSA9IHRoaXMuQ1VTVE9NX0NBVEVHT1JZLmVtb2ppcyEuZmluZChcbiAgICAgIChjdXN0b21FbW9qaTogYW55KSA9PiBjdXN0b21FbW9qaS5pZCA9PT0gJGV2ZW50LmVtb2ppLmlkLFxuICAgICk7XG4gICAgaWYgKGVtb2ppRGF0YSkge1xuICAgICAgJGV2ZW50LmVtb2ppID0geyAuLi5lbW9qaURhdGEgfTtcbiAgICB9XG5cbiAgICB0aGlzLnByZXZpZXdFbW9qaSA9ICRldmVudC5lbW9qaTtcbiAgICB0aGlzLmNhbmNlbEFuaW1hdGlvbkZyYW1lKCk7XG4gICAgdGhpcy5yZWY/LmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBoYW5kbGVFbW9qaUxlYXZlKCkge1xuICAgIGlmICghdGhpcy5zaG93UHJldmlldyB8fCAhdGhpcy5wcmV2aWV3UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5hbmltYXRpb25GcmFtZVJlcXVlc3RJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucHJldmlld0Vtb2ppID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlRW1vamlDbGljaygkZXZlbnQ6IEVtb2ppRXZlbnQpIHtcbiAgICB0aGlzLmVtb2ppQ2xpY2suZW1pdCgkZXZlbnQpO1xuICAgIHRoaXMuZW1vamlTZWxlY3QuZW1pdCgkZXZlbnQpO1xuICAgIHRoaXMuaGFuZGxlRW50ZXJLZXkoJGV2ZW50LiRldmVudCwgJGV2ZW50LmVtb2ppKTtcbiAgfVxuICBoYW5kbGVTa2luQ2hhbmdlKHNraW46IEVtb2ppWydza2luJ10pIHtcbiAgICB0aGlzLnNraW4gPSBza2luO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMuTkFNRVNQQUNFfS5za2luYCwgU3RyaW5nKHNraW4pKTtcbiAgICB0aGlzLnNraW5DaGFuZ2UuZW1pdChza2luKTtcbiAgfVxuICBnZXRXaWR0aCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnN0eWxlICYmIHRoaXMuc3R5bGUud2lkdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0eWxlLndpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wZXJMaW5lICogKHRoaXMuZW1vamlTaXplICsgMTIpICsgMTIgKyAyICsgdGhpcy5tZWFzdXJlU2Nyb2xsYmFyICsgJ3B4JztcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsQW5pbWF0aW9uRnJhbWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYW5pbWF0aW9uRnJhbWVSZXF1ZXN0SWQgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuYW5pbWF0aW9uRnJhbWVSZXF1ZXN0SWQpO1xuICAgICAgdGhpcy5hbmltYXRpb25GcmFtZVJlcXVlc3RJZCA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/esm2015/picker.module.js
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
2
|
-
import { NgModule } from '@angular/core';
|
3
|
-
import { FormsModule } from '@angular/forms';
|
4
|
-
import { EmojiModule } from '@ctrl/ngx-emoji-mart/ngx-emoji';
|
5
|
-
import { AnchorsComponent } from './anchors.component';
|
6
|
-
import { CategoryComponent } from './category.component';
|
7
|
-
import { PickerComponent } from './picker.component';
|
8
|
-
import { PreviewComponent } from './preview.component';
|
9
|
-
import { SearchComponent } from './search.component';
|
10
|
-
import { SkinComponent } from './skins.component';
|
11
|
-
export class PickerModule {
|
12
|
-
}
|
13
|
-
PickerModule.decorators = [
|
14
|
-
{ type: NgModule, args: [{
|
15
|
-
imports: [CommonModule, FormsModule, EmojiModule],
|
16
|
-
exports: [
|
17
|
-
PickerComponent,
|
18
|
-
AnchorsComponent,
|
19
|
-
CategoryComponent,
|
20
|
-
SearchComponent,
|
21
|
-
PreviewComponent,
|
22
|
-
SkinComponent,
|
23
|
-
],
|
24
|
-
declarations: [
|
25
|
-
PickerComponent,
|
26
|
-
AnchorsComponent,
|
27
|
-
CategoryComponent,
|
28
|
-
SearchComponent,
|
29
|
-
PreviewComponent,
|
30
|
-
SkinComponent,
|
31
|
-
],
|
32
|
-
},] }
|
33
|
-
];
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGlja2VyL3BpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQXFCbEQsTUFBTSxPQUFPLFlBQVk7OztZQW5CeEIsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO2dCQUNqRCxPQUFPLEVBQUU7b0JBQ1AsZUFBZTtvQkFDZixnQkFBZ0I7b0JBQ2hCLGlCQUFpQjtvQkFDakIsZUFBZTtvQkFDZixnQkFBZ0I7b0JBQ2hCLGFBQWE7aUJBQ2Q7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLGVBQWU7b0JBQ2YsZ0JBQWdCO29CQUNoQixpQkFBaUI7b0JBQ2pCLGVBQWU7b0JBQ2YsZ0JBQWdCO29CQUNoQixhQUFhO2lCQUNkO2FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBFbW9qaU1vZHVsZSB9IGZyb20gJ0BjdHJsL25neC1lbW9qaS1tYXJ0L25neC1lbW9qaSc7XG5pbXBvcnQgeyBBbmNob3JzQ29tcG9uZW50IH0gZnJvbSAnLi9hbmNob3JzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbXBvbmVudCB9IGZyb20gJy4vY2F0ZWdvcnkuY29tcG9uZW50JztcbmltcG9ydCB7IFBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi9wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuL3NlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2tpbkNvbXBvbmVudCB9IGZyb20gJy4vc2tpbnMuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIEVtb2ppTW9kdWxlXSxcbiAgZXhwb3J0czogW1xuICAgIFBpY2tlckNvbXBvbmVudCxcbiAgICBBbmNob3JzQ29tcG9uZW50LFxuICAgIENhdGVnb3J5Q29tcG9uZW50LFxuICAgIFNlYXJjaENvbXBvbmVudCxcbiAgICBQcmV2aWV3Q29tcG9uZW50LFxuICAgIFNraW5Db21wb25lbnQsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFBpY2tlckNvbXBvbmVudCxcbiAgICBBbmNob3JzQ29tcG9uZW50LFxuICAgIENhdGVnb3J5Q29tcG9uZW50LFxuICAgIFNlYXJjaENvbXBvbmVudCxcbiAgICBQcmV2aWV3Q29tcG9uZW50LFxuICAgIFNraW5Db21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBpY2tlck1vZHVsZSB7fVxuIl19
|