@ctrl/ngx-emoji-mart 6.0.1 → 6.1.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 (65) hide show
  1. package/anchors.component.d.ts +3 -0
  2. package/category.component.d.ts +3 -0
  3. package/ctrl-ngx-emoji-mart.d.ts +1 -0
  4. package/emoji-frequently.service.d.ts +3 -0
  5. package/emoji-search.service.d.ts +3 -0
  6. package/esm2020/anchors.component.mjs +83 -0
  7. package/esm2020/category.component.mjs +386 -0
  8. package/{esm2015/ctrl-ngx-emoji-mart.js → esm2020/ctrl-ngx-emoji-mart.mjs} +0 -0
  9. package/{esm2015/emoji-frequently.service.js → esm2020/emoji-frequently.service.mjs} +10 -8
  10. package/esm2020/emoji-search.service.mjs +177 -0
  11. package/{esm2015/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.js → esm2020/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.mjs} +0 -0
  12. package/{esm2015/ngx-emoji/data/categories.js → esm2020/ngx-emoji/data/categories.mjs} +0 -0
  13. package/{esm2015/ngx-emoji/data/data.interfaces.js → esm2020/ngx-emoji/data/data.interfaces.mjs} +0 -0
  14. package/{esm2015/ngx-emoji/data/emojis.js → esm2020/ngx-emoji/data/emojis.mjs} +0 -0
  15. package/{esm2015/ngx-emoji/data/skins.js → esm2020/ngx-emoji/data/skins.mjs} +0 -0
  16. package/esm2020/ngx-emoji/emoji.component.mjs +236 -0
  17. package/esm2020/ngx-emoji/emoji.module.mjs +18 -0
  18. package/esm2020/ngx-emoji/emoji.service.mjs +144 -0
  19. package/{esm2015/ngx-emoji/index.js → esm2020/ngx-emoji/index.mjs} +0 -0
  20. package/esm2020/picker.component.mjs +505 -0
  21. package/esm2020/picker.module.mjs +49 -0
  22. package/esm2020/preview.component.mjs +181 -0
  23. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  24. package/esm2020/search.component.mjs +165 -0
  25. package/esm2020/skins.component.mjs +108 -0
  26. package/{esm2015/svgs/index.js → esm2020/svgs/index.mjs} +0 -0
  27. package/{esm2015/utils/index.js → esm2020/utils/index.mjs} +0 -0
  28. package/fesm2015/{ctrl-ngx-emoji-mart-ngx-emoji.js → ctrl-ngx-emoji-mart-ngx-emoji.mjs} +101 -44
  29. package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -0
  30. package/fesm2015/{ctrl-ngx-emoji-mart.js → ctrl-ngx-emoji-mart.mjs} +623 -284
  31. package/fesm2015/ctrl-ngx-emoji-mart.mjs.map +1 -0
  32. package/fesm2020/ctrl-ngx-emoji-mart-ngx-emoji.mjs +31829 -0
  33. package/fesm2020/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -0
  34. package/fesm2020/ctrl-ngx-emoji-mart.mjs +1751 -0
  35. package/fesm2020/ctrl-ngx-emoji-mart.mjs.map +1 -0
  36. package/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.d.ts +1 -0
  37. package/ngx-emoji/emoji.component.d.ts +3 -0
  38. package/ngx-emoji/emoji.module.d.ts +6 -0
  39. package/ngx-emoji/emoji.service.d.ts +3 -0
  40. package/ngx-emoji/package.json +6 -7
  41. package/package.json +29 -10
  42. package/picker.component.d.ts +3 -0
  43. package/picker.module.d.ts +13 -0
  44. package/preview.component.d.ts +4 -1
  45. package/search.component.d.ts +3 -0
  46. package/skins.component.d.ts +6 -3
  47. package/bundles/ctrl-ngx-emoji-mart-ngx-emoji.umd.js +0 -32104
  48. package/bundles/ctrl-ngx-emoji-mart-ngx-emoji.umd.js.map +0 -1
  49. package/bundles/ctrl-ngx-emoji-mart.umd.js +0 -1729
  50. package/bundles/ctrl-ngx-emoji-mart.umd.js.map +0 -1
  51. package/ctrl-ngx-emoji-mart.metadata.json +0 -1
  52. package/esm2015/anchors.component.js +0 -54
  53. package/esm2015/category.component.js +0 -275
  54. package/esm2015/emoji-search.service.js +0 -179
  55. package/esm2015/ngx-emoji/emoji.component.js +0 -174
  56. package/esm2015/ngx-emoji/emoji.module.js +0 -13
  57. package/esm2015/ngx-emoji/emoji.service.js +0 -143
  58. package/esm2015/picker.component.js +0 -459
  59. package/esm2015/picker.module.js +0 -34
  60. package/esm2015/preview.component.js +0 -113
  61. package/esm2015/search.component.js +0 -115
  62. package/esm2015/skins.component.js +0 -76
  63. package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.js.map +0 -1
  64. package/fesm2015/ctrl-ngx-emoji-mart.js.map +0 -1
  65. package/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.metadata.json +0 -1
@@ -0,0 +1,49 @@
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
+ import * as i0 from "@angular/core";
12
+ export class PickerModule {
13
+ }
14
+ PickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
+ PickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PickerModule, declarations: [PickerComponent,
16
+ AnchorsComponent,
17
+ CategoryComponent,
18
+ SearchComponent,
19
+ PreviewComponent,
20
+ SkinComponent], imports: [CommonModule, FormsModule, EmojiModule], exports: [PickerComponent,
21
+ AnchorsComponent,
22
+ CategoryComponent,
23
+ SearchComponent,
24
+ PreviewComponent,
25
+ SkinComponent] });
26
+ PickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PickerModule, imports: [[CommonModule, FormsModule, EmojiModule]] });
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PickerModule, decorators: [{
28
+ type: NgModule,
29
+ args: [{
30
+ imports: [CommonModule, FormsModule, EmojiModule],
31
+ exports: [
32
+ PickerComponent,
33
+ AnchorsComponent,
34
+ CategoryComponent,
35
+ SearchComponent,
36
+ PreviewComponent,
37
+ SkinComponent,
38
+ ],
39
+ declarations: [
40
+ PickerComponent,
41
+ AnchorsComponent,
42
+ CategoryComponent,
43
+ SearchComponent,
44
+ PreviewComponent,
45
+ SkinComponent,
46
+ ],
47
+ }]
48
+ }] });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGlja2VyL3BpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFxQmxELE1BQU0sT0FBTyxZQUFZOzt5R0FBWixZQUFZOzBHQUFaLFlBQVksaUJBUnJCLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsaUJBQWlCO1FBQ2pCLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIsYUFBYSxhQWZMLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxhQUU5QyxlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGlCQUFpQjtRQUNqQixlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLGFBQWE7MEdBV0osWUFBWSxZQWxCZCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDOzJGQWtCdEMsWUFBWTtrQkFuQnhCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7b0JBQ2pELE9BQU8sRUFBRTt3QkFDUCxlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsYUFBYTtxQkFDZDtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBFbW9qaU1vZHVsZSB9IGZyb20gJ0BjdHJsL25neC1lbW9qaS1tYXJ0L25neC1lbW9qaSc7XG5pbXBvcnQgeyBBbmNob3JzQ29tcG9uZW50IH0gZnJvbSAnLi9hbmNob3JzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYXRlZ29yeUNvbXBvbmVudCB9IGZyb20gJy4vY2F0ZWdvcnkuY29tcG9uZW50JztcbmltcG9ydCB7IFBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi9wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuL3NlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2tpbkNvbXBvbmVudCB9IGZyb20gJy4vc2tpbnMuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIEVtb2ppTW9kdWxlXSxcbiAgZXhwb3J0czogW1xuICAgIFBpY2tlckNvbXBvbmVudCxcbiAgICBBbmNob3JzQ29tcG9uZW50LFxuICAgIENhdGVnb3J5Q29tcG9uZW50LFxuICAgIFNlYXJjaENvbXBvbmVudCxcbiAgICBQcmV2aWV3Q29tcG9uZW50LFxuICAgIFNraW5Db21wb25lbnQsXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFBpY2tlckNvbXBvbmVudCxcbiAgICBBbmNob3JzQ29tcG9uZW50LFxuICAgIENhdGVnb3J5Q29tcG9uZW50LFxuICAgIFNlYXJjaENvbXBvbmVudCxcbiAgICBQcmV2aWV3Q29tcG9uZW50LFxuICAgIFNraW5Db21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBpY2tlck1vZHVsZSB7fVxuIl19
@@ -0,0 +1,181 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@ctrl/ngx-emoji-mart/ngx-emoji";
4
+ import * as i2 from "./skins.component";
5
+ import * as i3 from "@angular/common";
6
+ export class PreviewComponent {
7
+ constructor(ref, emojiService) {
8
+ this.ref = ref;
9
+ this.emojiService = emojiService;
10
+ this.skinChange = new EventEmitter();
11
+ this.emojiData = {};
12
+ }
13
+ ngOnChanges() {
14
+ if (!this.emoji) {
15
+ return;
16
+ }
17
+ this.emojiData = this.emojiService.getData(this.emoji, this.emojiSkin, this.emojiSet);
18
+ const knownEmoticons = [];
19
+ const listedEmoticons = [];
20
+ const emoitcons = this.emojiData.emoticons || [];
21
+ emoitcons.forEach((emoticon) => {
22
+ if (knownEmoticons.indexOf(emoticon.toLowerCase()) >= 0) {
23
+ return;
24
+ }
25
+ knownEmoticons.push(emoticon.toLowerCase());
26
+ listedEmoticons.push(emoticon);
27
+ });
28
+ this.listedEmoticons = listedEmoticons;
29
+ this.ref?.detectChanges();
30
+ }
31
+ }
32
+ PreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PreviewComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.EmojiService }], target: i0.ɵɵFactoryTarget.Component });
33
+ PreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: PreviewComponent, selector: "emoji-preview", inputs: { title: "title", emoji: "emoji", idleEmoji: "idleEmoji", i18n: "i18n", emojiIsNative: "emojiIsNative", emojiSkin: "emojiSkin", emojiSize: "emojiSize", emojiSet: "emojiSet", emojiSheetSize: "emojiSheetSize", emojiBackgroundImageFn: "emojiBackgroundImageFn", emojiImageUrlFn: "emojiImageUrlFn" }, outputs: { skinChange: "skinChange" }, usesOnChanges: true, ngImport: i0, template: `
34
+ <div class="emoji-mart-preview" *ngIf="emoji && emojiData">
35
+ <div class="emoji-mart-preview-emoji">
36
+ <ngx-emoji
37
+ [emoji]="emoji"
38
+ [size]="38"
39
+ [isNative]="emojiIsNative"
40
+ [skin]="emojiSkin"
41
+ [size]="emojiSize"
42
+ [set]="emojiSet"
43
+ [sheetSize]="emojiSheetSize"
44
+ [backgroundImageFn]="emojiBackgroundImageFn"
45
+ [imageUrlFn]="emojiImageUrlFn"
46
+ ></ngx-emoji>
47
+ </div>
48
+
49
+ <div class="emoji-mart-preview-data">
50
+ <div class="emoji-mart-preview-name">{{ emojiData.name }}</div>
51
+ <div class="emoji-mart-preview-shortname">
52
+ <span
53
+ class="emoji-mart-preview-shortname"
54
+ *ngFor="let short_name of emojiData.shortNames"
55
+ >
56
+ :{{ short_name }}:
57
+ </span>
58
+ </div>
59
+ <div class="emoji-mart-preview-emoticons">
60
+ <span class="emoji-mart-preview-emoticon" *ngFor="let emoticon of listedEmoticons">
61
+ {{ emoticon }}
62
+ </span>
63
+ </div>
64
+ </div>
65
+ </div>
66
+
67
+ <div class="emoji-mart-preview" *ngIf="!emoji">
68
+ <div class="emoji-mart-preview-emoji">
69
+ <ngx-emoji
70
+ *ngIf="idleEmoji && idleEmoji.length"
71
+ [isNative]="emojiIsNative"
72
+ [skin]="emojiSkin"
73
+ [set]="emojiSet"
74
+ [emoji]="idleEmoji"
75
+ [backgroundImageFn]="emojiBackgroundImageFn"
76
+ [size]="38"
77
+ [imageUrlFn]="emojiImageUrlFn"
78
+ ></ngx-emoji>
79
+ </div>
80
+
81
+ <div class="emoji-mart-preview-data">
82
+ <span class="emoji-mart-title-label">{{ title }}</span>
83
+ </div>
84
+
85
+ <div class="emoji-mart-preview-skins">
86
+ <emoji-skins [skin]="emojiSkin" (changeSkin)="skinChange.emit($event)" [i18n]="i18n">
87
+ </emoji-skins>
88
+ </div>
89
+ </div>
90
+ `, isInline: true, components: [{ 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", "emojiClick"] }, { type: i2.SkinComponent, selector: "emoji-skins", inputs: ["skin", "i18n"], outputs: ["changeSkin"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
91
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: PreviewComponent, decorators: [{
92
+ type: Component,
93
+ args: [{
94
+ selector: 'emoji-preview',
95
+ template: `
96
+ <div class="emoji-mart-preview" *ngIf="emoji && emojiData">
97
+ <div class="emoji-mart-preview-emoji">
98
+ <ngx-emoji
99
+ [emoji]="emoji"
100
+ [size]="38"
101
+ [isNative]="emojiIsNative"
102
+ [skin]="emojiSkin"
103
+ [size]="emojiSize"
104
+ [set]="emojiSet"
105
+ [sheetSize]="emojiSheetSize"
106
+ [backgroundImageFn]="emojiBackgroundImageFn"
107
+ [imageUrlFn]="emojiImageUrlFn"
108
+ ></ngx-emoji>
109
+ </div>
110
+
111
+ <div class="emoji-mart-preview-data">
112
+ <div class="emoji-mart-preview-name">{{ emojiData.name }}</div>
113
+ <div class="emoji-mart-preview-shortname">
114
+ <span
115
+ class="emoji-mart-preview-shortname"
116
+ *ngFor="let short_name of emojiData.shortNames"
117
+ >
118
+ :{{ short_name }}:
119
+ </span>
120
+ </div>
121
+ <div class="emoji-mart-preview-emoticons">
122
+ <span class="emoji-mart-preview-emoticon" *ngFor="let emoticon of listedEmoticons">
123
+ {{ emoticon }}
124
+ </span>
125
+ </div>
126
+ </div>
127
+ </div>
128
+
129
+ <div class="emoji-mart-preview" *ngIf="!emoji">
130
+ <div class="emoji-mart-preview-emoji">
131
+ <ngx-emoji
132
+ *ngIf="idleEmoji && idleEmoji.length"
133
+ [isNative]="emojiIsNative"
134
+ [skin]="emojiSkin"
135
+ [set]="emojiSet"
136
+ [emoji]="idleEmoji"
137
+ [backgroundImageFn]="emojiBackgroundImageFn"
138
+ [size]="38"
139
+ [imageUrlFn]="emojiImageUrlFn"
140
+ ></ngx-emoji>
141
+ </div>
142
+
143
+ <div class="emoji-mart-preview-data">
144
+ <span class="emoji-mart-title-label">{{ title }}</span>
145
+ </div>
146
+
147
+ <div class="emoji-mart-preview-skins">
148
+ <emoji-skins [skin]="emojiSkin" (changeSkin)="skinChange.emit($event)" [i18n]="i18n">
149
+ </emoji-skins>
150
+ </div>
151
+ </div>
152
+ `,
153
+ changeDetection: ChangeDetectionStrategy.OnPush,
154
+ preserveWhitespaces: false,
155
+ }]
156
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.EmojiService }]; }, propDecorators: { title: [{
157
+ type: Input
158
+ }], emoji: [{
159
+ type: Input
160
+ }], idleEmoji: [{
161
+ type: Input
162
+ }], i18n: [{
163
+ type: Input
164
+ }], emojiIsNative: [{
165
+ type: Input
166
+ }], emojiSkin: [{
167
+ type: Input
168
+ }], emojiSize: [{
169
+ type: Input
170
+ }], emojiSet: [{
171
+ type: Input
172
+ }], emojiSheetSize: [{
173
+ type: Input
174
+ }], emojiBackgroundImageFn: [{
175
+ type: Input
176
+ }], emojiImageUrlFn: [{
177
+ type: Input
178
+ }], skinChange: [{
179
+ type: Output
180
+ }] } });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3BpY2tlci9wcmV2aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFrRXZCLE1BQU0sT0FBTyxnQkFBZ0I7SUFnQjNCLFlBQW1CLEdBQXNCLEVBQVUsWUFBMEI7UUFBMUQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUpuRSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDekQsY0FBUyxHQUF1QixFQUFFLENBQUM7SUFHNkMsQ0FBQztJQUVqRixXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUN4QyxJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FDRCxDQUFDO1FBQ2YsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sZUFBZSxHQUFhLEVBQUUsQ0FBQztRQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDakQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtZQUNyQyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN2RCxPQUFPO2FBQ1I7WUFDRCxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUN2QyxJQUFJLENBQUMsR0FBRyxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQzVCLENBQUM7OzZHQXZDVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixpYUE3RGpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RFQ7MkZBSVUsZ0JBQWdCO2tCQS9ENUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RFQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLG1CQUFtQixFQUFFLEtBQUs7aUJBQzNCO21JQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbW9qaSwgRW1vamlEYXRhLCBFbW9qaVNlcnZpY2UgfSBmcm9tICdAY3RybC9uZ3gtZW1vamktbWFydC9uZ3gtZW1vamknO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Vtb2ppLXByZXZpZXcnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXdcIiAqbmdJZj1cImVtb2ppICYmIGVtb2ppRGF0YVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1lbW9qaVwiPlxuICAgICAgICA8bmd4LWVtb2ppXG4gICAgICAgICAgW2Vtb2ppXT1cImVtb2ppXCJcbiAgICAgICAgICBbc2l6ZV09XCIzOFwiXG4gICAgICAgICAgW2lzTmF0aXZlXT1cImVtb2ppSXNOYXRpdmVcIlxuICAgICAgICAgIFtza2luXT1cImVtb2ppU2tpblwiXG4gICAgICAgICAgW3NpemVdPVwiZW1vamlTaXplXCJcbiAgICAgICAgICBbc2V0XT1cImVtb2ppU2V0XCJcbiAgICAgICAgICBbc2hlZXRTaXplXT1cImVtb2ppU2hlZXRTaXplXCJcbiAgICAgICAgICBbYmFja2dyb3VuZEltYWdlRm5dPVwiZW1vamlCYWNrZ3JvdW5kSW1hZ2VGblwiXG4gICAgICAgICAgW2ltYWdlVXJsRm5dPVwiZW1vamlJbWFnZVVybEZuXCJcbiAgICAgICAgPjwvbmd4LWVtb2ppPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIj57eyBlbW9qaURhdGEubmFtZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZVwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWVcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNob3J0X25hbWUgb2YgZW1vamlEYXRhLnNob3J0TmFtZXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDp7eyBzaG9ydF9uYW1lIH19OlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb25zXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb25cIiAqbmdGb3I9XCJsZXQgZW1vdGljb24gb2YgbGlzdGVkRW1vdGljb25zXCI+XG4gICAgICAgICAgICB7eyBlbW90aWNvbiB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXdcIiAqbmdJZj1cIiFlbW9qaVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1lbW9qaVwiPlxuICAgICAgICA8bmd4LWVtb2ppXG4gICAgICAgICAgKm5nSWY9XCJpZGxlRW1vamkgJiYgaWRsZUVtb2ppLmxlbmd0aFwiXG4gICAgICAgICAgW2lzTmF0aXZlXT1cImVtb2ppSXNOYXRpdmVcIlxuICAgICAgICAgIFtza2luXT1cImVtb2ppU2tpblwiXG4gICAgICAgICAgW3NldF09XCJlbW9qaVNldFwiXG4gICAgICAgICAgW2Vtb2ppXT1cImlkbGVFbW9qaVwiXG4gICAgICAgICAgW2JhY2tncm91bmRJbWFnZUZuXT1cImVtb2ppQmFja2dyb3VuZEltYWdlRm5cIlxuICAgICAgICAgIFtzaXplXT1cIjM4XCJcbiAgICAgICAgICBbaW1hZ2VVcmxGbl09XCJlbW9qaUltYWdlVXJsRm5cIlxuICAgICAgICA+PC9uZ3gtZW1vamk+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1kYXRhXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZW1vamktbWFydC10aXRsZS1sYWJlbFwiPnt7IHRpdGxlIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctc2tpbnNcIj5cbiAgICAgICAgPGVtb2ppLXNraW5zIFtza2luXT1cImVtb2ppU2tpblwiIChjaGFuZ2VTa2luKT1cInNraW5DaGFuZ2UuZW1pdCgkZXZlbnQpXCIgW2kxOG5dPVwiaTE4blwiPlxuICAgICAgICA8L2Vtb2ppLXNraW5zPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgUHJldmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHRpdGxlPzogc3RyaW5nO1xuICBASW5wdXQoKSBlbW9qaTogYW55O1xuICBASW5wdXQoKSBpZGxlRW1vamk6IGFueTtcbiAgQElucHV0KCkgaTE4bjogYW55O1xuICBASW5wdXQoKSBlbW9qaUlzTmF0aXZlPzogRW1vamlbJ2lzTmF0aXZlJ107XG4gIEBJbnB1dCgpIGVtb2ppU2tpbj86IEVtb2ppWydza2luJ107XG4gIEBJbnB1dCgpIGVtb2ppU2l6ZT86IEVtb2ppWydzaXplJ107XG4gIEBJbnB1dCgpIGVtb2ppU2V0PzogRW1vamlbJ3NldCddO1xuICBASW5wdXQoKSBlbW9qaVNoZWV0U2l6ZT86IEVtb2ppWydzaGVldFNpemUnXTtcbiAgQElucHV0KCkgZW1vamlCYWNrZ3JvdW5kSW1hZ2VGbj86IEVtb2ppWydiYWNrZ3JvdW5kSW1hZ2VGbiddO1xuICBASW5wdXQoKSBlbW9qaUltYWdlVXJsRm4/OiBFbW9qaVsnaW1hZ2VVcmxGbiddO1xuICBAT3V0cHV0KCkgc2tpbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RW1vamlbJ3NraW4nXT4oKTtcbiAgZW1vamlEYXRhOiBQYXJ0aWFsPEVtb2ppRGF0YT4gPSB7fTtcbiAgbGlzdGVkRW1vdGljb25zPzogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZW1vamlTZXJ2aWNlOiBFbW9qaVNlcnZpY2UpIHt9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKCF0aGlzLmVtb2ppKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW1vamlEYXRhID0gdGhpcy5lbW9qaVNlcnZpY2UuZ2V0RGF0YShcbiAgICAgIHRoaXMuZW1vamksXG4gICAgICB0aGlzLmVtb2ppU2tpbixcbiAgICAgIHRoaXMuZW1vamlTZXQsXG4gICAgKSBhcyBFbW9qaURhdGE7XG4gICAgY29uc3Qga25vd25FbW90aWNvbnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbGlzdGVkRW1vdGljb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGVtb2l0Y29ucyA9IHRoaXMuZW1vamlEYXRhLmVtb3RpY29ucyB8fCBbXTtcbiAgICBlbW9pdGNvbnMuZm9yRWFjaCgoZW1vdGljb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGtub3duRW1vdGljb25zLmluZGV4T2YoZW1vdGljb24udG9Mb3dlckNhc2UoKSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBrbm93bkVtb3RpY29ucy5wdXNoKGVtb3RpY29uLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgbGlzdGVkRW1vdGljb25zLnB1c2goZW1vdGljb24pO1xuICAgIH0pO1xuICAgIHRoaXMubGlzdGVkRW1vdGljb25zID0gbGlzdGVkRW1vdGljb25zO1xuICAgIHRoaXMucmVmPy5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,165 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./emoji-search.service";
4
+ import * as i2 from "@angular/forms";
5
+ let id = 0;
6
+ export class SearchComponent {
7
+ constructor(emojiSearch) {
8
+ this.emojiSearch = emojiSearch;
9
+ this.maxResults = 75;
10
+ this.autoFocus = false;
11
+ this.include = [];
12
+ this.exclude = [];
13
+ this.custom = [];
14
+ this.searchResults = new EventEmitter();
15
+ this.enterKey = new EventEmitter();
16
+ this.isSearching = false;
17
+ this.query = '';
18
+ this.inputId = `emoji-mart-search-${++id}`;
19
+ }
20
+ ngOnInit() {
21
+ this.icon = this.icons.search;
22
+ }
23
+ ngAfterViewInit() {
24
+ if (this.autoFocus) {
25
+ this.inputRef.nativeElement.focus();
26
+ }
27
+ }
28
+ clear() {
29
+ this.query = '';
30
+ this.handleSearch('');
31
+ this.inputRef.nativeElement.focus();
32
+ }
33
+ handleEnterKey($event) {
34
+ if (!this.query) {
35
+ return;
36
+ }
37
+ this.enterKey.emit($event);
38
+ $event.preventDefault();
39
+ }
40
+ handleSearch(value) {
41
+ if (value === '') {
42
+ this.icon = this.icons.search;
43
+ this.isSearching = false;
44
+ }
45
+ else {
46
+ this.icon = this.icons.delete;
47
+ this.isSearching = true;
48
+ }
49
+ const emojis = this.emojiSearch.search(this.query, this.emojisToShowFilter, this.maxResults, this.include, this.exclude, this.custom);
50
+ this.searchResults.emit(emojis);
51
+ }
52
+ handleChange() {
53
+ this.handleSearch(this.query);
54
+ }
55
+ }
56
+ SearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SearchComponent, deps: [{ token: i1.EmojiSearch }], target: i0.ɵɵFactoryTarget.Component });
57
+ SearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: SearchComponent, selector: "emoji-search", inputs: { maxResults: "maxResults", autoFocus: "autoFocus", i18n: "i18n", include: "include", exclude: "exclude", custom: "custom", icons: "icons", emojisToShowFilter: "emojisToShowFilter" }, outputs: { searchResults: "searchResults", enterKey: "enterKey" }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true, static: true }], ngImport: i0, template: `
58
+ <div class="emoji-mart-search">
59
+ <input
60
+ [id]="inputId"
61
+ #inputRef
62
+ type="search"
63
+ (keyup.enter)="handleEnterKey($event)"
64
+ [placeholder]="i18n.search"
65
+ [autofocus]="autoFocus"
66
+ [(ngModel)]="query"
67
+ (ngModelChange)="handleChange()"
68
+ />
69
+ <!--
70
+ Use a <label> in addition to the placeholder for accessibility, but place it off-screen
71
+ http://www.maxability.co.in/2016/01/placeholder-attribute-and-why-it-is-not-accessible/
72
+ -->
73
+ <label class="emoji-mart-sr-only" [htmlFor]="inputId">
74
+ {{ i18n.search }}
75
+ </label>
76
+ <button
77
+ type="button"
78
+ class="emoji-mart-search-icon"
79
+ (click)="clear()"
80
+ (keyup.enter)="clear()"
81
+ [disabled]="!isSearching"
82
+ [attr.aria-label]="i18n.clear"
83
+ >
84
+ <svg
85
+ xmlns="http://www.w3.org/2000/svg"
86
+ viewBox="0 0 20 20"
87
+ width="13"
88
+ height="13"
89
+ opacity="0.5"
90
+ >
91
+ <path [attr.d]="icon" />
92
+ </svg>
93
+ </button>
94
+ </div>
95
+ `, isInline: true, directives: [{ type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SearchComponent, decorators: [{
97
+ type: Component,
98
+ args: [{
99
+ selector: 'emoji-search',
100
+ template: `
101
+ <div class="emoji-mart-search">
102
+ <input
103
+ [id]="inputId"
104
+ #inputRef
105
+ type="search"
106
+ (keyup.enter)="handleEnterKey($event)"
107
+ [placeholder]="i18n.search"
108
+ [autofocus]="autoFocus"
109
+ [(ngModel)]="query"
110
+ (ngModelChange)="handleChange()"
111
+ />
112
+ <!--
113
+ Use a <label> in addition to the placeholder for accessibility, but place it off-screen
114
+ http://www.maxability.co.in/2016/01/placeholder-attribute-and-why-it-is-not-accessible/
115
+ -->
116
+ <label class="emoji-mart-sr-only" [htmlFor]="inputId">
117
+ {{ i18n.search }}
118
+ </label>
119
+ <button
120
+ type="button"
121
+ class="emoji-mart-search-icon"
122
+ (click)="clear()"
123
+ (keyup.enter)="clear()"
124
+ [disabled]="!isSearching"
125
+ [attr.aria-label]="i18n.clear"
126
+ >
127
+ <svg
128
+ xmlns="http://www.w3.org/2000/svg"
129
+ viewBox="0 0 20 20"
130
+ width="13"
131
+ height="13"
132
+ opacity="0.5"
133
+ >
134
+ <path [attr.d]="icon" />
135
+ </svg>
136
+ </button>
137
+ </div>
138
+ `,
139
+ preserveWhitespaces: false,
140
+ }]
141
+ }], ctorParameters: function () { return [{ type: i1.EmojiSearch }]; }, propDecorators: { maxResults: [{
142
+ type: Input
143
+ }], autoFocus: [{
144
+ type: Input
145
+ }], i18n: [{
146
+ type: Input
147
+ }], include: [{
148
+ type: Input
149
+ }], exclude: [{
150
+ type: Input
151
+ }], custom: [{
152
+ type: Input
153
+ }], icons: [{
154
+ type: Input
155
+ }], emojisToShowFilter: [{
156
+ type: Input
157
+ }], searchResults: [{
158
+ type: Output
159
+ }], enterKey: [{
160
+ type: Output
161
+ }], inputRef: [{
162
+ type: ViewChild,
163
+ args: ['inputRef', { static: true }]
164
+ }] } });
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGlja2VyL3NlYXJjaC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7Ozs7QUFJdkIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBNkNYLE1BQU0sT0FBTyxlQUFlO0lBaUIxQixZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWhCbkMsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFDdkIsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUN2QixXQUFNLEdBQVUsRUFBRSxDQUFDO1FBR2xCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQztRQUMxQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUU3QyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsWUFBTyxHQUFHLHFCQUFxQixFQUFFLEVBQUUsRUFBRSxDQUFDO0lBRVMsQ0FBQztJQUVoRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNyQztJQUNILENBQUM7SUFDRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsY0FBYyxDQUFDLE1BQWE7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUNELFlBQVksQ0FBQyxLQUFhO1FBQ3hCLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQ3BDLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsTUFBTSxDQUNILENBQUM7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsWUFBWTtRQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7OzRHQTNEVSxlQUFlO2dHQUFmLGVBQWUsMmFBekNoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ1Q7MkZBR1UsZUFBZTtrQkEzQzNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ1Q7b0JBQ0QsbUJBQW1CLEVBQUUsS0FBSztpQkFDM0I7a0dBRVUsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDMEMsUUFBUTtzQkFBeEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRW1vamlTZWFyY2ggfSBmcm9tICcuL2Vtb2ppLXNlYXJjaC5zZXJ2aWNlJztcblxubGV0IGlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW1vamktc2VhcmNoJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1zZWFyY2hcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICNpbnB1dFJlZlxuICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImhhbmRsZUVudGVyS2V5KCRldmVudClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaTE4bi5zZWFyY2hcIlxuICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9Gb2N1c1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwicXVlcnlcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoKVwiXG4gICAgICAvPlxuICAgICAgPCEtLVxuICAgICAgVXNlIGEgPGxhYmVsPiBpbiBhZGRpdGlvbiB0byB0aGUgcGxhY2Vob2xkZXIgZm9yIGFjY2Vzc2liaWxpdHksIGJ1dCBwbGFjZSBpdCBvZmYtc2NyZWVuXG4gICAgICBodHRwOi8vd3d3Lm1heGFiaWxpdHkuY28uaW4vMjAxNi8wMS9wbGFjZWhvbGRlci1hdHRyaWJ1dGUtYW5kLXdoeS1pdC1pcy1ub3QtYWNjZXNzaWJsZS9cbiAgICAgIC0tPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiZW1vamktbWFydC1zci1vbmx5XCIgW2h0bWxGb3JdPVwiaW5wdXRJZFwiPlxuICAgICAgICB7eyBpMThuLnNlYXJjaCB9fVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiZW1vamktbWFydC1zZWFyY2gtaWNvblwiXG4gICAgICAgIChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImNsZWFyKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIWlzU2VhcmNoaW5nXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpMThuLmNsZWFyXCJcbiAgICAgID5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICAgIHdpZHRoPVwiMTNcIlxuICAgICAgICAgIGhlaWdodD1cIjEzXCJcbiAgICAgICAgICBvcGFjaXR5PVwiMC41XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwiaWNvblwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICBASW5wdXQoKSBtYXhSZXN1bHRzID0gNzU7XG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSBpMThuOiBhbnk7XG4gIEBJbnB1dCgpIGluY2x1ZGU6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGV4Y2x1ZGU6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGN1c3RvbTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaWNvbnMhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBASW5wdXQoKSBlbW9qaXNUb1Nob3dGaWx0ZXI/OiAoeDogYW55KSA9PiBib29sZWFuO1xuICBAT3V0cHV0KCkgc2VhcmNoUmVzdWx0cyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBlbnRlcktleSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAVmlld0NoaWxkKCdpbnB1dFJlZicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgaW5wdXRSZWYhOiBFbGVtZW50UmVmO1xuICBpc1NlYXJjaGluZyA9IGZhbHNlO1xuICBpY29uPzogc3RyaW5nO1xuICBxdWVyeSA9ICcnO1xuICBpbnB1dElkID0gYGVtb2ppLW1hcnQtc2VhcmNoLSR7KytpZH1gO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW1vamlTZWFyY2g6IEVtb2ppU2VhcmNoKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaWNvbiA9IHRoaXMuaWNvbnMuc2VhcmNoO1xuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuICBjbGVhcigpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgdGhpcy5oYW5kbGVTZWFyY2goJycpO1xuICAgIHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG4gIGhhbmRsZUVudGVyS2V5KCRldmVudDogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMucXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbnRlcktleS5lbWl0KCRldmVudCk7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgaGFuZGxlU2VhcmNoKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmljb24gPSB0aGlzLmljb25zLnNlYXJjaDtcbiAgICAgIHRoaXMuaXNTZWFyY2hpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pY29uID0gdGhpcy5pY29ucy5kZWxldGU7XG4gICAgICB0aGlzLmlzU2VhcmNoaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZW1vamlzID0gdGhpcy5lbW9qaVNlYXJjaC5zZWFyY2goXG4gICAgICB0aGlzLnF1ZXJ5LFxuICAgICAgdGhpcy5lbW9qaXNUb1Nob3dGaWx0ZXIsXG4gICAgICB0aGlzLm1heFJlc3VsdHMsXG4gICAgICB0aGlzLmluY2x1ZGUsXG4gICAgICB0aGlzLmV4Y2x1ZGUsXG4gICAgICB0aGlzLmN1c3RvbSxcbiAgICApIGFzIGFueVtdO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0cy5lbWl0KGVtb2ppcyk7XG4gIH1cbiAgaGFuZGxlQ2hhbmdlKCkge1xuICAgIHRoaXMuaGFuZGxlU2VhcmNoKHRoaXMucXVlcnkpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,108 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class SkinComponent {
5
+ constructor() {
6
+ this.changeSkin = new EventEmitter();
7
+ this.opened = false;
8
+ this.skinTones = [1, 2, 3, 4, 5, 6];
9
+ }
10
+ toggleOpen() {
11
+ this.opened = !this.opened;
12
+ }
13
+ isSelected(skinTone) {
14
+ return skinTone === this.skin;
15
+ }
16
+ isVisible(skinTone) {
17
+ return this.opened || this.isSelected(skinTone);
18
+ }
19
+ pressed(skinTone) {
20
+ return this.opened ? !!this.isSelected(skinTone) : '';
21
+ }
22
+ tabIndex(skinTone) {
23
+ return this.isVisible(skinTone) ? '0' : '';
24
+ }
25
+ expanded(skinTone) {
26
+ return this.isSelected(skinTone) ? this.opened : '';
27
+ }
28
+ handleClick(skin) {
29
+ if (!this.opened) {
30
+ this.opened = true;
31
+ return;
32
+ }
33
+ this.opened = false;
34
+ if (skin !== this.skin) {
35
+ this.changeSkin.emit(skin);
36
+ }
37
+ }
38
+ }
39
+ SkinComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SkinComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
40
+ SkinComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: SkinComponent, selector: "emoji-skins", inputs: { skin: "skin", i18n: "i18n" }, outputs: { changeSkin: "changeSkin" }, ngImport: i0, template: `
41
+ <section
42
+ class="emoji-mart-skin-swatches"
43
+ [class.opened]="opened"
44
+ >
45
+ <span
46
+ *ngFor="let skinTone of skinTones"
47
+ class="emoji-mart-skin-swatch"
48
+ [class.selected]="skinTone === skin"
49
+ >
50
+ <span
51
+ (click)="handleClick(skinTone)"
52
+ (keyup.enter)="handleClick(skinTone)"
53
+ (keyup.space)="handleClick(skinTone)"
54
+ class="emoji-mart-skin emoji-mart-skin-tone-{{ skinTone }}"
55
+ role="button"
56
+ [tabIndex]="tabIndex(skinTone)"
57
+ [attr.aria-hidden]="!isVisible(skinTone)"
58
+ [attr.aria-pressed]="pressed(skinTone)"
59
+ [attr.aria-haspopup]="!!isSelected(skinTone)"
60
+ [attr.aria-expanded]="expanded(skinTone)"
61
+ [attr.aria-label]="i18n.skintones[skinTone]"
62
+ [title]="i18n.skintones[skinTone]"
63
+ ></span>
64
+ </span>
65
+ </section>
66
+ `, isInline: true, directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: SkinComponent, decorators: [{
68
+ type: Component,
69
+ args: [{
70
+ selector: 'emoji-skins',
71
+ template: `
72
+ <section
73
+ class="emoji-mart-skin-swatches"
74
+ [class.opened]="opened"
75
+ >
76
+ <span
77
+ *ngFor="let skinTone of skinTones"
78
+ class="emoji-mart-skin-swatch"
79
+ [class.selected]="skinTone === skin"
80
+ >
81
+ <span
82
+ (click)="handleClick(skinTone)"
83
+ (keyup.enter)="handleClick(skinTone)"
84
+ (keyup.space)="handleClick(skinTone)"
85
+ class="emoji-mart-skin emoji-mart-skin-tone-{{ skinTone }}"
86
+ role="button"
87
+ [tabIndex]="tabIndex(skinTone)"
88
+ [attr.aria-hidden]="!isVisible(skinTone)"
89
+ [attr.aria-pressed]="pressed(skinTone)"
90
+ [attr.aria-haspopup]="!!isSelected(skinTone)"
91
+ [attr.aria-expanded]="expanded(skinTone)"
92
+ [attr.aria-label]="i18n.skintones[skinTone]"
93
+ [title]="i18n.skintones[skinTone]"
94
+ ></span>
95
+ </span>
96
+ </section>
97
+ `,
98
+ changeDetection: ChangeDetectionStrategy.OnPush,
99
+ preserveWhitespaces: false,
100
+ }]
101
+ }], propDecorators: { skin: [{
102
+ type: Input
103
+ }], i18n: [{
104
+ type: Input
105
+ }], changeSkin: [{
106
+ type: Output
107
+ }] } });
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tpbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9waWNrZXIvc2tpbnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOzs7QUFvQ3ZCLE1BQU0sT0FBTyxhQUFhO0lBaEMxQjtRQW9DWSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFDekQsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLGNBQVMsR0FBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBb0NqRDtJQWxDQyxVQUFVO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUF1QjtRQUNoQyxPQUFPLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTLENBQUMsUUFBdUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE9BQU8sQ0FBQyxRQUF1QjtRQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUF1QjtRQUM5QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCxRQUFRLENBQUMsUUFBdUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFtQjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7MEdBekNVLGFBQWE7OEZBQWIsYUFBYSxrSUE5QmQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUOzJGQUlVLGFBQWE7a0JBaEN6QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxtQkFBbUIsRUFBRSxLQUFLO2lCQUMzQjs4QkFHVSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFbW9qaSB9IGZyb20gJ0BjdHJsL25neC1lbW9qaS1tYXJ0L25neC1lbW9qaSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Vtb2ppLXNraW5zJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c2VjdGlvblxuICAgICAgY2xhc3M9XCJlbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXNcIlxuICAgICAgW2NsYXNzLm9wZW5lZF09XCJvcGVuZWRcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0Zvcj1cImxldCBza2luVG9uZSBvZiBza2luVG9uZXNcIlxuICAgICAgICBjbGFzcz1cImVtb2ppLW1hcnQtc2tpbi1zd2F0Y2hcIlxuICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwic2tpblRvbmUgPT09IHNraW5cIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljayhza2luVG9uZSlcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJoYW5kbGVDbGljayhza2luVG9uZSlcIlxuICAgICAgICAgIChrZXl1cC5zcGFjZSk9XCJoYW5kbGVDbGljayhza2luVG9uZSlcIlxuICAgICAgICAgIGNsYXNzPVwiZW1vamktbWFydC1za2luIGVtb2ppLW1hcnQtc2tpbi10b25lLXt7IHNraW5Ub25lIH19XCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoc2tpblRvbmUpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhaXNWaXNpYmxlKHNraW5Ub25lKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cInByZXNzZWQoc2tpblRvbmUpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cIiEhaXNTZWxlY3RlZChza2luVG9uZSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZXhwYW5kZWQoc2tpblRvbmUpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImkxOG4uc2tpbnRvbmVzW3NraW5Ub25lXVwiXG4gICAgICAgICAgW3RpdGxlXT1cImkxOG4uc2tpbnRvbmVzW3NraW5Ub25lXVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9zZWN0aW9uPlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFNraW5Db21wb25lbnQge1xuICAvKiogY3VycmVudGx5IHNlbGVjdGVkIHNraW4gKi9cbiAgQElucHV0KCkgc2tpbj86IEVtb2ppWydza2luJ107XG4gIEBJbnB1dCgpIGkxOG46IGFueTtcbiAgQE91dHB1dCgpIGNoYW5nZVNraW4gPSBuZXcgRXZlbnRFbWl0dGVyPEVtb2ppWydza2luJ10+KCk7XG4gIG9wZW5lZCA9IGZhbHNlO1xuICBza2luVG9uZXM6IEVtb2ppWydza2luJ11bXSA9IFsxLCAyLCAzLCA0LCA1LCA2XTtcblxuICB0b2dnbGVPcGVuKCkge1xuICAgIHRoaXMub3BlbmVkID0gIXRoaXMub3BlbmVkO1xuICB9XG5cbiAgaXNTZWxlY3RlZChza2luVG9uZTogRW1vamlbJ3NraW4nXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBza2luVG9uZSA9PT0gdGhpcy5za2luO1xuICB9XG5cbiAgaXNWaXNpYmxlKHNraW5Ub25lOiBFbW9qaVsnc2tpbiddKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3BlbmVkIHx8IHRoaXMuaXNTZWxlY3RlZChza2luVG9uZSk7XG4gIH1cblxuICBwcmVzc2VkKHNraW5Ub25lOiBFbW9qaVsnc2tpbiddKSB7XG4gICAgcmV0dXJuIHRoaXMub3BlbmVkID8gISF0aGlzLmlzU2VsZWN0ZWQoc2tpblRvbmUpIDogJyc7XG4gIH1cblxuICB0YWJJbmRleChza2luVG9uZTogRW1vamlbJ3NraW4nXSkge1xuICAgIHJldHVybiB0aGlzLmlzVmlzaWJsZShza2luVG9uZSkgPyAnMCcgOiAnJztcbiAgfVxuXG4gIGV4cGFuZGVkKHNraW5Ub25lOiBFbW9qaVsnc2tpbiddKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZChza2luVG9uZSkgPyB0aGlzLm9wZW5lZCA6ICcnO1xuICB9XG5cbiAgaGFuZGxlQ2xpY2soc2tpbjogRW1vamlbJ3NraW4nXSkge1xuICAgIGlmICghdGhpcy5vcGVuZWQpIHtcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vcGVuZWQgPSBmYWxzZTtcbiAgICBpZiAoc2tpbiAhPT0gdGhpcy5za2luKSB7XG4gICAgICB0aGlzLmNoYW5nZVNraW4uZW1pdChza2luKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==