@ctrl/ngx-emoji-mart 8.1.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +39 -14
  2. package/anchors.component.d.ts +1 -1
  3. package/category.component.d.ts +3 -3
  4. package/esm2022/anchors.component.mjs +100 -0
  5. package/esm2022/category.component.mjs +409 -0
  6. package/esm2022/emoji-frequently.service.mjs +90 -0
  7. package/esm2022/emoji-search.service.mjs +178 -0
  8. package/esm2022/ngx-emoji/emoji.component.mjs +299 -0
  9. package/esm2022/ngx-emoji/emoji.module.mjs +17 -0
  10. package/esm2022/ngx-emoji/emoji.service.mjs +145 -0
  11. package/esm2022/picker.component.mjs +522 -0
  12. package/esm2022/picker.module.mjs +40 -0
  13. package/esm2022/preview.component.mjs +206 -0
  14. package/esm2022/search.component.mjs +175 -0
  15. package/esm2022/skins.component.mjs +107 -0
  16. package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart-ngx-emoji.mjs +81 -68
  17. package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -1
  18. package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart.mjs +327 -261
  19. package/fesm2022/ctrl-ngx-emoji-mart.mjs.map +1 -0
  20. package/ngx-emoji/emoji.component.d.ts +10 -9
  21. package/ngx-emoji/emoji.module.d.ts +1 -2
  22. package/package.json +8 -16
  23. package/picker.component.d.ts +2 -2
  24. package/picker.module.d.ts +1 -4
  25. package/preview.component.d.ts +2 -2
  26. package/search.component.d.ts +1 -1
  27. package/skins.component.d.ts +2 -2
  28. package/esm2020/anchors.component.mjs +0 -83
  29. package/esm2020/category.component.mjs +0 -386
  30. package/esm2020/emoji-frequently.service.mjs +0 -88
  31. package/esm2020/emoji-search.service.mjs +0 -177
  32. package/esm2020/ngx-emoji/emoji.component.mjs +0 -283
  33. package/esm2020/ngx-emoji/emoji.module.mjs +0 -18
  34. package/esm2020/ngx-emoji/emoji.service.mjs +0 -144
  35. package/esm2020/picker.component.mjs +0 -508
  36. package/esm2020/picker.module.mjs +0 -49
  37. package/esm2020/preview.component.mjs +0 -187
  38. package/esm2020/search.component.mjs +0 -165
  39. package/esm2020/skins.component.mjs +0 -108
  40. package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.mjs +0 -34325
  41. package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +0 -1
  42. package/fesm2015/ctrl-ngx-emoji-mart.mjs +0 -1763
  43. package/fesm2015/ctrl-ngx-emoji-mart.mjs.map +0 -1
  44. package/fesm2020/ctrl-ngx-emoji-mart.mjs.map +0 -1
  45. /package/{esm2020 → esm2022}/ctrl-ngx-emoji-mart.mjs +0 -0
  46. /package/{esm2020 → esm2022}/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.mjs +0 -0
  47. /package/{esm2020 → esm2022}/ngx-emoji/data/categories.mjs +0 -0
  48. /package/{esm2020 → esm2022}/ngx-emoji/data/data.interfaces.mjs +0 -0
  49. /package/{esm2020 → esm2022}/ngx-emoji/data/emojis.mjs +0 -0
  50. /package/{esm2020 → esm2022}/ngx-emoji/data/skins.mjs +0 -0
  51. /package/{esm2020 → esm2022}/ngx-emoji/index.mjs +0 -0
  52. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  53. /package/{esm2020 → esm2022}/svgs/index.mjs +0 -0
  54. /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
@@ -0,0 +1,40 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { AnchorsComponent } from './anchors.component';
3
+ import { CategoryComponent } from './category.component';
4
+ import { PickerComponent } from './picker.component';
5
+ import { PreviewComponent } from './preview.component';
6
+ import { SearchComponent } from './search.component';
7
+ import { SkinComponent } from './skins.component';
8
+ import * as i0 from "@angular/core";
9
+ const components = [
10
+ PickerComponent,
11
+ AnchorsComponent,
12
+ CategoryComponent,
13
+ SearchComponent,
14
+ PreviewComponent,
15
+ SkinComponent,
16
+ ];
17
+ class PickerModule {
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.0", ngImport: i0, type: PickerModule, imports: [PickerComponent,
20
+ AnchorsComponent,
21
+ CategoryComponent,
22
+ SearchComponent,
23
+ PreviewComponent,
24
+ SkinComponent], exports: [PickerComponent,
25
+ AnchorsComponent,
26
+ CategoryComponent,
27
+ SearchComponent,
28
+ PreviewComponent,
29
+ SkinComponent] });
30
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PickerModule, imports: [components] });
31
+ }
32
+ export { PickerModule };
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PickerModule, decorators: [{
34
+ type: NgModule,
35
+ args: [{
36
+ imports: components,
37
+ exports: components,
38
+ }]
39
+ }] });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGlja2VyL3BpY2tlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFbEQsTUFBTSxVQUFVLEdBQUc7SUFDakIsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixhQUFhO0NBQ2QsQ0FBQztBQUVGLE1BSWEsWUFBWTt1R0FBWixZQUFZO3dHQUFaLFlBQVksWUFadkIsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixhQUFhLGFBTGIsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixpQkFBaUI7WUFDakIsZUFBZTtZQUNmLGdCQUFnQjtZQUNoQixhQUFhO3dHQU9GLFlBQVksWUFIZCxVQUFVOztTQUdSLFlBQVk7MkZBQVosWUFBWTtrQkFKeEIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsVUFBVTtvQkFDbkIsT0FBTyxFQUFFLFVBQVU7aUJBQ3BCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQW5jaG9yc0NvbXBvbmVudCB9IGZyb20gJy4vYW5jaG9ycy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2F0ZWdvcnlDb21wb25lbnQgfSBmcm9tICcuL2NhdGVnb3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL3BpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi9zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IFNraW5Db21wb25lbnQgfSBmcm9tICcuL3NraW5zLmNvbXBvbmVudCc7XG5cbmNvbnN0IGNvbXBvbmVudHMgPSBbXG4gIFBpY2tlckNvbXBvbmVudCxcbiAgQW5jaG9yc0NvbXBvbmVudCxcbiAgQ2F0ZWdvcnlDb21wb25lbnQsXG4gIFNlYXJjaENvbXBvbmVudCxcbiAgUHJldmlld0NvbXBvbmVudCxcbiAgU2tpbkNvbXBvbmVudCxcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IGNvbXBvbmVudHMsXG4gIGV4cG9ydHM6IGNvbXBvbmVudHMsXG59KVxuZXhwb3J0IGNsYXNzIFBpY2tlck1vZHVsZSB7fVxuIl19
@@ -0,0 +1,206 @@
1
+ import { EmojiComponent } from '@ctrl/ngx-emoji-mart/ngx-emoji';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import { SkinComponent } from './skins.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@ctrl/ngx-emoji-mart/ngx-emoji";
7
+ import * as i2 from "@angular/common";
8
+ class PreviewComponent {
9
+ ref;
10
+ emojiService;
11
+ title;
12
+ emoji;
13
+ idleEmoji;
14
+ i18n;
15
+ emojiIsNative;
16
+ emojiSkin;
17
+ emojiSize;
18
+ emojiSet;
19
+ emojiSheetSize;
20
+ emojiBackgroundImageFn;
21
+ emojiImageUrlFn;
22
+ skinChange = new EventEmitter();
23
+ emojiData = {};
24
+ listedEmoticons;
25
+ constructor(ref, emojiService) {
26
+ this.ref = ref;
27
+ this.emojiService = emojiService;
28
+ }
29
+ ngOnChanges() {
30
+ if (!this.emoji) {
31
+ return;
32
+ }
33
+ this.emojiData = this.emojiService.getData(this.emoji, this.emojiSkin, this.emojiSet);
34
+ const knownEmoticons = [];
35
+ const listedEmoticons = [];
36
+ const emoitcons = this.emojiData.emoticons || [];
37
+ emoitcons.forEach((emoticon) => {
38
+ if (knownEmoticons.indexOf(emoticon.toLowerCase()) >= 0) {
39
+ return;
40
+ }
41
+ knownEmoticons.push(emoticon.toLowerCase());
42
+ listedEmoticons.push(emoticon);
43
+ });
44
+ this.listedEmoticons = listedEmoticons;
45
+ this.ref?.detectChanges();
46
+ }
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PreviewComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.EmojiService }], target: i0.ɵɵFactoryTarget.Component });
48
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: PreviewComponent, isStandalone: true, 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: `
49
+ <div class="emoji-mart-preview" *ngIf="emoji && emojiData">
50
+ <div class="emoji-mart-preview-emoji">
51
+ <ngx-emoji
52
+ [emoji]="emoji"
53
+ [size]="38"
54
+ [isNative]="emojiIsNative"
55
+ [skin]="emojiSkin"
56
+ [size]="emojiSize"
57
+ [set]="emojiSet"
58
+ [sheetSize]="emojiSheetSize"
59
+ [backgroundImageFn]="emojiBackgroundImageFn"
60
+ [imageUrlFn]="emojiImageUrlFn"
61
+ ></ngx-emoji>
62
+ </div>
63
+
64
+ <div class="emoji-mart-preview-data">
65
+ <div class="emoji-mart-preview-name">{{ emojiData.name }}</div>
66
+ <div class="emoji-mart-preview-shortname">
67
+ <span
68
+ class="emoji-mart-preview-shortname"
69
+ *ngFor="let short_name of emojiData.shortNames"
70
+ >
71
+ :{{ short_name }}:
72
+ </span>
73
+ </div>
74
+ <div class="emoji-mart-preview-emoticons">
75
+ <span class="emoji-mart-preview-emoticon" *ngFor="let emoticon of listedEmoticons">
76
+ {{ emoticon }}
77
+ </span>
78
+ </div>
79
+ </div>
80
+ </div>
81
+
82
+ <div class="emoji-mart-preview" [hidden]="emoji">
83
+ <div class="emoji-mart-preview-emoji">
84
+ <ngx-emoji
85
+ *ngIf="idleEmoji && idleEmoji.length"
86
+ [isNative]="emojiIsNative"
87
+ [skin]="emojiSkin"
88
+ [set]="emojiSet"
89
+ [emoji]="idleEmoji"
90
+ [backgroundImageFn]="emojiBackgroundImageFn"
91
+ [size]="38"
92
+ [imageUrlFn]="emojiImageUrlFn"
93
+ ></ngx-emoji>
94
+ </div>
95
+
96
+ <div class="emoji-mart-preview-data">
97
+ <span class="emoji-mart-title-label">{{ title }}</span>
98
+ </div>
99
+
100
+ <div class="emoji-mart-preview-skins">
101
+ <emoji-skins
102
+ [skin]="emojiSkin"
103
+ (changeSkin)="skinChange.emit($event)"
104
+ [i18n]="i18n"
105
+ ></emoji-skins>
106
+ </div>
107
+ </div>
108
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: EmojiComponent, selector: "ngx-emoji", inputs: ["skin", "set", "sheetSize", "isNative", "forceSize", "tooltip", "size", "emoji", "fallback", "hideObsolete", "sheetRows", "sheetColumns", "useButton", "backgroundImageFn", "imageUrlFn"], outputs: ["emojiClick", "emojiOver", "emojiOverOutsideAngular", "emojiLeave", "emojiLeaveOutsideAngular"] }, { kind: "component", type: SkinComponent, selector: "emoji-skins", inputs: ["skin", "i18n"], outputs: ["changeSkin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
109
+ }
110
+ export { PreviewComponent };
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: PreviewComponent, decorators: [{
112
+ type: Component,
113
+ args: [{
114
+ selector: 'emoji-preview',
115
+ template: `
116
+ <div class="emoji-mart-preview" *ngIf="emoji && emojiData">
117
+ <div class="emoji-mart-preview-emoji">
118
+ <ngx-emoji
119
+ [emoji]="emoji"
120
+ [size]="38"
121
+ [isNative]="emojiIsNative"
122
+ [skin]="emojiSkin"
123
+ [size]="emojiSize"
124
+ [set]="emojiSet"
125
+ [sheetSize]="emojiSheetSize"
126
+ [backgroundImageFn]="emojiBackgroundImageFn"
127
+ [imageUrlFn]="emojiImageUrlFn"
128
+ ></ngx-emoji>
129
+ </div>
130
+
131
+ <div class="emoji-mart-preview-data">
132
+ <div class="emoji-mart-preview-name">{{ emojiData.name }}</div>
133
+ <div class="emoji-mart-preview-shortname">
134
+ <span
135
+ class="emoji-mart-preview-shortname"
136
+ *ngFor="let short_name of emojiData.shortNames"
137
+ >
138
+ :{{ short_name }}:
139
+ </span>
140
+ </div>
141
+ <div class="emoji-mart-preview-emoticons">
142
+ <span class="emoji-mart-preview-emoticon" *ngFor="let emoticon of listedEmoticons">
143
+ {{ emoticon }}
144
+ </span>
145
+ </div>
146
+ </div>
147
+ </div>
148
+
149
+ <div class="emoji-mart-preview" [hidden]="emoji">
150
+ <div class="emoji-mart-preview-emoji">
151
+ <ngx-emoji
152
+ *ngIf="idleEmoji && idleEmoji.length"
153
+ [isNative]="emojiIsNative"
154
+ [skin]="emojiSkin"
155
+ [set]="emojiSet"
156
+ [emoji]="idleEmoji"
157
+ [backgroundImageFn]="emojiBackgroundImageFn"
158
+ [size]="38"
159
+ [imageUrlFn]="emojiImageUrlFn"
160
+ ></ngx-emoji>
161
+ </div>
162
+
163
+ <div class="emoji-mart-preview-data">
164
+ <span class="emoji-mart-title-label">{{ title }}</span>
165
+ </div>
166
+
167
+ <div class="emoji-mart-preview-skins">
168
+ <emoji-skins
169
+ [skin]="emojiSkin"
170
+ (changeSkin)="skinChange.emit($event)"
171
+ [i18n]="i18n"
172
+ ></emoji-skins>
173
+ </div>
174
+ </div>
175
+ `,
176
+ changeDetection: ChangeDetectionStrategy.OnPush,
177
+ preserveWhitespaces: false,
178
+ standalone: true,
179
+ imports: [CommonModule, EmojiComponent, SkinComponent],
180
+ }]
181
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.EmojiService }]; }, propDecorators: { title: [{
182
+ type: Input
183
+ }], emoji: [{
184
+ type: Input
185
+ }], idleEmoji: [{
186
+ type: Input
187
+ }], i18n: [{
188
+ type: Input
189
+ }], emojiIsNative: [{
190
+ type: Input
191
+ }], emojiSkin: [{
192
+ type: Input
193
+ }], emojiSize: [{
194
+ type: Input
195
+ }], emojiSet: [{
196
+ type: Input
197
+ }], emojiSheetSize: [{
198
+ type: Input
199
+ }], emojiBackgroundImageFn: [{
200
+ type: Input
201
+ }], emojiImageUrlFn: [{
202
+ type: Input
203
+ }], skinChange: [{
204
+ type: Output
205
+ }] } });
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3BpY2tlci9wcmV2aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVMsY0FBYyxFQUEyQixNQUFNLGdDQUFnQyxDQUFDO0FBQ2hHLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFFbEQsTUFvRWEsZ0JBQWdCO0lBZ0JSO0lBQWdDO0lBZjFDLEtBQUssQ0FBVTtJQUNmLEtBQUssQ0FBTTtJQUNYLFNBQVMsQ0FBTTtJQUNmLElBQUksQ0FBTTtJQUNWLGFBQWEsQ0FBcUI7SUFDbEMsU0FBUyxDQUFpQjtJQUMxQixTQUFTLENBQWlCO0lBQzFCLFFBQVEsQ0FBZ0I7SUFDeEIsY0FBYyxDQUFzQjtJQUNwQyxzQkFBc0IsQ0FBOEI7SUFDcEQsZUFBZSxDQUF1QjtJQUNyQyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDekQsU0FBUyxHQUF1QixFQUFFLENBQUM7SUFDbkMsZUFBZSxDQUFZO0lBRTNCLFlBQW1CLEdBQXNCLEVBQVUsWUFBMEI7UUFBMUQsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUFHLENBQUM7SUFFakYsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDeEMsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsU0FBUyxFQUNkLElBQUksQ0FBQyxRQUFRLENBQ0QsQ0FBQztRQUNmLE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQztRQUNwQyxNQUFNLGVBQWUsR0FBYSxFQUFFLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ2pELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7WUFDckMsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdkQsT0FBTzthQUNSO1lBQ0QsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUM1QyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUM1QixDQUFDO3VHQXZDVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQixxYkFsRWpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0RFQsMkRBSVMsWUFBWSxnUUFBRSxjQUFjLHFXQUFFLGFBQWE7O1NBRTFDLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQXBFNUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0RFQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQztpQkFDdkQ7bUlBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVtb2ppLCBFbW9qaUNvbXBvbmVudCwgRW1vamlEYXRhLCBFbW9qaVNlcnZpY2UgfSBmcm9tICdAY3RybC9uZ3gtZW1vamktbWFydC9uZ3gtZW1vamknO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IFNraW5Db21wb25lbnQgfSBmcm9tICcuL3NraW5zLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Vtb2ppLXByZXZpZXcnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXdcIiAqbmdJZj1cImVtb2ppICYmIGVtb2ppRGF0YVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1lbW9qaVwiPlxuICAgICAgICA8bmd4LWVtb2ppXG4gICAgICAgICAgW2Vtb2ppXT1cImVtb2ppXCJcbiAgICAgICAgICBbc2l6ZV09XCIzOFwiXG4gICAgICAgICAgW2lzTmF0aXZlXT1cImVtb2ppSXNOYXRpdmVcIlxuICAgICAgICAgIFtza2luXT1cImVtb2ppU2tpblwiXG4gICAgICAgICAgW3NpemVdPVwiZW1vamlTaXplXCJcbiAgICAgICAgICBbc2V0XT1cImVtb2ppU2V0XCJcbiAgICAgICAgICBbc2hlZXRTaXplXT1cImVtb2ppU2hlZXRTaXplXCJcbiAgICAgICAgICBbYmFja2dyb3VuZEltYWdlRm5dPVwiZW1vamlCYWNrZ3JvdW5kSW1hZ2VGblwiXG4gICAgICAgICAgW2ltYWdlVXJsRm5dPVwiZW1vamlJbWFnZVVybEZuXCJcbiAgICAgICAgPjwvbmd4LWVtb2ppPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZGF0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LW5hbWVcIj57eyBlbW9qaURhdGEubmFtZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LXNob3J0bmFtZVwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1zaG9ydG5hbWVcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNob3J0X25hbWUgb2YgZW1vamlEYXRhLnNob3J0TmFtZXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDp7eyBzaG9ydF9uYW1lIH19OlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb25zXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXctZW1vdGljb25cIiAqbmdGb3I9XCJsZXQgZW1vdGljb24gb2YgbGlzdGVkRW1vdGljb25zXCI+XG4gICAgICAgICAgICB7eyBlbW90aWNvbiB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJlbW9qaS1tYXJ0LXByZXZpZXdcIiBbaGlkZGVuXT1cImVtb2ppXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWVtb2ppXCI+XG4gICAgICAgIDxuZ3gtZW1vamlcbiAgICAgICAgICAqbmdJZj1cImlkbGVFbW9qaSAmJiBpZGxlRW1vamkubGVuZ3RoXCJcbiAgICAgICAgICBbaXNOYXRpdmVdPVwiZW1vamlJc05hdGl2ZVwiXG4gICAgICAgICAgW3NraW5dPVwiZW1vamlTa2luXCJcbiAgICAgICAgICBbc2V0XT1cImVtb2ppU2V0XCJcbiAgICAgICAgICBbZW1vamldPVwiaWRsZUVtb2ppXCJcbiAgICAgICAgICBbYmFja2dyb3VuZEltYWdlRm5dPVwiZW1vamlCYWNrZ3JvdW5kSW1hZ2VGblwiXG4gICAgICAgICAgW3NpemVdPVwiMzhcIlxuICAgICAgICAgIFtpbWFnZVVybEZuXT1cImVtb2ppSW1hZ2VVcmxGblwiXG4gICAgICAgID48L25neC1lbW9qaT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1wcmV2aWV3LWRhdGFcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJlbW9qaS1tYXJ0LXRpdGxlLWxhYmVsXCI+e3sgdGl0bGUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtcHJldmlldy1za2luc1wiPlxuICAgICAgICA8ZW1vamktc2tpbnNcbiAgICAgICAgICBbc2tpbl09XCJlbW9qaVNraW5cIlxuICAgICAgICAgIChjaGFuZ2VTa2luKT1cInNraW5DaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICBbaTE4bl09XCJpMThuXCJcbiAgICAgICAgPjwvZW1vamktc2tpbnM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBFbW9qaUNvbXBvbmVudCwgU2tpbkNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFByZXZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSB0aXRsZT86IHN0cmluZztcbiAgQElucHV0KCkgZW1vamk6IGFueTtcbiAgQElucHV0KCkgaWRsZUVtb2ppOiBhbnk7XG4gIEBJbnB1dCgpIGkxOG46IGFueTtcbiAgQElucHV0KCkgZW1vamlJc05hdGl2ZT86IEVtb2ppWydpc05hdGl2ZSddO1xuICBASW5wdXQoKSBlbW9qaVNraW4/OiBFbW9qaVsnc2tpbiddO1xuICBASW5wdXQoKSBlbW9qaVNpemU/OiBFbW9qaVsnc2l6ZSddO1xuICBASW5wdXQoKSBlbW9qaVNldD86IEVtb2ppWydzZXQnXTtcbiAgQElucHV0KCkgZW1vamlTaGVldFNpemU/OiBFbW9qaVsnc2hlZXRTaXplJ107XG4gIEBJbnB1dCgpIGVtb2ppQmFja2dyb3VuZEltYWdlRm4/OiBFbW9qaVsnYmFja2dyb3VuZEltYWdlRm4nXTtcbiAgQElucHV0KCkgZW1vamlJbWFnZVVybEZuPzogRW1vamlbJ2ltYWdlVXJsRm4nXTtcbiAgQE91dHB1dCgpIHNraW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEVtb2ppWydza2luJ10+KCk7XG4gIGVtb2ppRGF0YTogUGFydGlhbDxFbW9qaURhdGE+ID0ge307XG4gIGxpc3RlZEVtb3RpY29ucz86IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGVtb2ppU2VydmljZTogRW1vamlTZXJ2aWNlKSB7fVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmICghdGhpcy5lbW9qaSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVtb2ppRGF0YSA9IHRoaXMuZW1vamlTZXJ2aWNlLmdldERhdGEoXG4gICAgICB0aGlzLmVtb2ppLFxuICAgICAgdGhpcy5lbW9qaVNraW4sXG4gICAgICB0aGlzLmVtb2ppU2V0LFxuICAgICkgYXMgRW1vamlEYXRhO1xuICAgIGNvbnN0IGtub3duRW1vdGljb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGxpc3RlZEVtb3RpY29uczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlbW9pdGNvbnMgPSB0aGlzLmVtb2ppRGF0YS5lbW90aWNvbnMgfHwgW107XG4gICAgZW1vaXRjb25zLmZvckVhY2goKGVtb3RpY29uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChrbm93bkVtb3RpY29ucy5pbmRleE9mKGVtb3RpY29uLnRvTG93ZXJDYXNlKCkpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAga25vd25FbW90aWNvbnMucHVzaChlbW90aWNvbi50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGxpc3RlZEVtb3RpY29ucy5wdXNoKGVtb3RpY29uKTtcbiAgICB9KTtcbiAgICB0aGlzLmxpc3RlZEVtb3RpY29ucyA9IGxpc3RlZEVtb3RpY29ucztcbiAgICB0aGlzLnJlZj8uZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,175 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./emoji-search.service";
5
+ import * as i2 from "@angular/forms";
6
+ let id = 0;
7
+ class SearchComponent {
8
+ emojiSearch;
9
+ maxResults = 75;
10
+ autoFocus = false;
11
+ i18n;
12
+ include = [];
13
+ exclude = [];
14
+ custom = [];
15
+ icons;
16
+ emojisToShowFilter;
17
+ searchResults = new EventEmitter();
18
+ enterKey = new EventEmitter();
19
+ inputRef;
20
+ isSearching = false;
21
+ icon;
22
+ query = '';
23
+ inputId = `emoji-mart-search-${++id}`;
24
+ constructor(emojiSearch) {
25
+ this.emojiSearch = emojiSearch;
26
+ }
27
+ ngOnInit() {
28
+ this.icon = this.icons.search;
29
+ }
30
+ ngAfterViewInit() {
31
+ if (this.autoFocus) {
32
+ this.inputRef.nativeElement.focus();
33
+ }
34
+ }
35
+ clear() {
36
+ this.query = '';
37
+ this.handleSearch('');
38
+ this.inputRef.nativeElement.focus();
39
+ }
40
+ handleEnterKey($event) {
41
+ if (!this.query) {
42
+ return;
43
+ }
44
+ this.enterKey.emit($event);
45
+ $event.preventDefault();
46
+ }
47
+ handleSearch(value) {
48
+ if (value === '') {
49
+ this.icon = this.icons.search;
50
+ this.isSearching = false;
51
+ }
52
+ else {
53
+ this.icon = this.icons.delete;
54
+ this.isSearching = true;
55
+ }
56
+ const emojis = this.emojiSearch.search(this.query, this.emojisToShowFilter, this.maxResults, this.include, this.exclude, this.custom);
57
+ this.searchResults.emit(emojis);
58
+ }
59
+ handleChange() {
60
+ this.handleSearch(this.query);
61
+ }
62
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SearchComponent, deps: [{ token: i1.EmojiSearch }], target: i0.ɵɵFactoryTarget.Component });
63
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: SearchComponent, isStandalone: true, 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: `
64
+ <div class="emoji-mart-search">
65
+ <input
66
+ [id]="inputId"
67
+ #inputRef
68
+ type="search"
69
+ (keyup.enter)="handleEnterKey($event)"
70
+ [placeholder]="i18n.search"
71
+ [autofocus]="autoFocus"
72
+ [(ngModel)]="query"
73
+ (ngModelChange)="handleChange()"
74
+ />
75
+ <!--
76
+ Use a <label> in addition to the placeholder for accessibility, but place it off-screen
77
+ http://www.maxability.co.in/2016/01/placeholder-attribute-and-why-it-is-not-accessible/
78
+ -->
79
+ <label class="emoji-mart-sr-only" [htmlFor]="inputId">
80
+ {{ i18n.search }}
81
+ </label>
82
+ <button
83
+ type="button"
84
+ class="emoji-mart-search-icon"
85
+ (click)="clear()"
86
+ (keyup.enter)="clear()"
87
+ [disabled]="!isSearching"
88
+ [attr.aria-label]="i18n.clear"
89
+ >
90
+ <svg
91
+ xmlns="http://www.w3.org/2000/svg"
92
+ viewBox="0 0 20 20"
93
+ width="13"
94
+ height="13"
95
+ opacity="0.5"
96
+ >
97
+ <path [attr.d]="icon" />
98
+ </svg>
99
+ </button>
100
+ </div>
101
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", 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]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
102
+ }
103
+ export { SearchComponent };
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SearchComponent, decorators: [{
105
+ type: Component,
106
+ args: [{
107
+ selector: 'emoji-search',
108
+ template: `
109
+ <div class="emoji-mart-search">
110
+ <input
111
+ [id]="inputId"
112
+ #inputRef
113
+ type="search"
114
+ (keyup.enter)="handleEnterKey($event)"
115
+ [placeholder]="i18n.search"
116
+ [autofocus]="autoFocus"
117
+ [(ngModel)]="query"
118
+ (ngModelChange)="handleChange()"
119
+ />
120
+ <!--
121
+ Use a <label> in addition to the placeholder for accessibility, but place it off-screen
122
+ http://www.maxability.co.in/2016/01/placeholder-attribute-and-why-it-is-not-accessible/
123
+ -->
124
+ <label class="emoji-mart-sr-only" [htmlFor]="inputId">
125
+ {{ i18n.search }}
126
+ </label>
127
+ <button
128
+ type="button"
129
+ class="emoji-mart-search-icon"
130
+ (click)="clear()"
131
+ (keyup.enter)="clear()"
132
+ [disabled]="!isSearching"
133
+ [attr.aria-label]="i18n.clear"
134
+ >
135
+ <svg
136
+ xmlns="http://www.w3.org/2000/svg"
137
+ viewBox="0 0 20 20"
138
+ width="13"
139
+ height="13"
140
+ opacity="0.5"
141
+ >
142
+ <path [attr.d]="icon" />
143
+ </svg>
144
+ </button>
145
+ </div>
146
+ `,
147
+ preserveWhitespaces: false,
148
+ standalone: true,
149
+ imports: [FormsModule],
150
+ }]
151
+ }], ctorParameters: function () { return [{ type: i1.EmojiSearch }]; }, propDecorators: { maxResults: [{
152
+ type: Input
153
+ }], autoFocus: [{
154
+ type: Input
155
+ }], i18n: [{
156
+ type: Input
157
+ }], include: [{
158
+ type: Input
159
+ }], exclude: [{
160
+ type: Input
161
+ }], custom: [{
162
+ type: Input
163
+ }], icons: [{
164
+ type: Input
165
+ }], emojisToShowFilter: [{
166
+ type: Input
167
+ }], searchResults: [{
168
+ type: Output
169
+ }], enterKey: [{
170
+ type: Output
171
+ }], inputRef: [{
172
+ type: ViewChild,
173
+ args: ['inputRef', { static: true }]
174
+ }] } });
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcGlja2VyL3NlYXJjaC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBSTdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUVYLE1BNkNhLGVBQWU7SUFpQk47SUFoQlgsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNoQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLElBQUksQ0FBTTtJQUNWLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDdkIsT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUN2QixNQUFNLEdBQVUsRUFBRSxDQUFDO0lBQ25CLEtBQUssQ0FBNkI7SUFDbEMsa0JBQWtCLENBQXVCO0lBQ3hDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBQzFDLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ0ksUUFBUSxDQUFjO0lBQ3ZFLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsSUFBSSxDQUFVO0lBQ2QsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLE9BQU8sR0FBRyxxQkFBcUIsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUV0QyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFHLENBQUM7SUFFaEQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDaEMsQ0FBQztJQUNELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBQ0QsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUNELGNBQWMsQ0FBQyxNQUFhO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztTQUMxQjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjtRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUNwQyxJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLE1BQU0sQ0FDSCxDQUFDO1FBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELFlBQVk7UUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO3VHQTNEVSxlQUFlOzJGQUFmLGVBQWUsK2JBM0NoQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQ1QsMkRBR1MsV0FBVzs7U0FFVixlQUFlOzJGQUFmLGVBQWU7a0JBN0MzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0NUO29CQUNELG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUM7aUJBQ3ZCO2tHQUVVLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQzBDLFFBQVE7c0JBQXhELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgRW1vamlTZWFyY2ggfSBmcm9tICcuL2Vtb2ppLXNlYXJjaC5zZXJ2aWNlJztcblxubGV0IGlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW1vamktc2VhcmNoJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZW1vamktbWFydC1zZWFyY2hcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICNpbnB1dFJlZlxuICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImhhbmRsZUVudGVyS2V5KCRldmVudClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaTE4bi5zZWFyY2hcIlxuICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9Gb2N1c1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwicXVlcnlcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVDaGFuZ2UoKVwiXG4gICAgICAvPlxuICAgICAgPCEtLVxuICAgICAgVXNlIGEgPGxhYmVsPiBpbiBhZGRpdGlvbiB0byB0aGUgcGxhY2Vob2xkZXIgZm9yIGFjY2Vzc2liaWxpdHksIGJ1dCBwbGFjZSBpdCBvZmYtc2NyZWVuXG4gICAgICBodHRwOi8vd3d3Lm1heGFiaWxpdHkuY28uaW4vMjAxNi8wMS9wbGFjZWhvbGRlci1hdHRyaWJ1dGUtYW5kLXdoeS1pdC1pcy1ub3QtYWNjZXNzaWJsZS9cbiAgICAgIC0tPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiZW1vamktbWFydC1zci1vbmx5XCIgW2h0bWxGb3JdPVwiaW5wdXRJZFwiPlxuICAgICAgICB7eyBpMThuLnNlYXJjaCB9fVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiZW1vamktbWFydC1zZWFyY2gtaWNvblwiXG4gICAgICAgIChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImNsZWFyKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIWlzU2VhcmNoaW5nXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpMThuLmNsZWFyXCJcbiAgICAgID5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICAgIHdpZHRoPVwiMTNcIlxuICAgICAgICAgIGhlaWdodD1cIjEzXCJcbiAgICAgICAgICBvcGFjaXR5PVwiMC41XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwYXRoIFthdHRyLmRdPVwiaWNvblwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICBASW5wdXQoKSBtYXhSZXN1bHRzID0gNzU7XG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IGZhbHNlO1xuICBASW5wdXQoKSBpMThuOiBhbnk7XG4gIEBJbnB1dCgpIGluY2x1ZGU6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGV4Y2x1ZGU6IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIGN1c3RvbTogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaWNvbnMhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBASW5wdXQoKSBlbW9qaXNUb1Nob3dGaWx0ZXI/OiAoeDogYW55KSA9PiBib29sZWFuO1xuICBAT3V0cHV0KCkgc2VhcmNoUmVzdWx0cyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoKSBlbnRlcktleSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAVmlld0NoaWxkKCdpbnB1dFJlZicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgaW5wdXRSZWYhOiBFbGVtZW50UmVmO1xuICBpc1NlYXJjaGluZyA9IGZhbHNlO1xuICBpY29uPzogc3RyaW5nO1xuICBxdWVyeSA9ICcnO1xuICBpbnB1dElkID0gYGVtb2ppLW1hcnQtc2VhcmNoLSR7KytpZH1gO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZW1vamlTZWFyY2g6IEVtb2ppU2VhcmNoKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaWNvbiA9IHRoaXMuaWNvbnMuc2VhcmNoO1xuICB9XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuICBjbGVhcigpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgdGhpcy5oYW5kbGVTZWFyY2goJycpO1xuICAgIHRoaXMuaW5wdXRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG4gIGhhbmRsZUVudGVyS2V5KCRldmVudDogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMucXVlcnkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbnRlcktleS5lbWl0KCRldmVudCk7XG4gICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgaGFuZGxlU2VhcmNoKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLmljb24gPSB0aGlzLmljb25zLnNlYXJjaDtcbiAgICAgIHRoaXMuaXNTZWFyY2hpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pY29uID0gdGhpcy5pY29ucy5kZWxldGU7XG4gICAgICB0aGlzLmlzU2VhcmNoaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZW1vamlzID0gdGhpcy5lbW9qaVNlYXJjaC5zZWFyY2goXG4gICAgICB0aGlzLnF1ZXJ5LFxuICAgICAgdGhpcy5lbW9qaXNUb1Nob3dGaWx0ZXIsXG4gICAgICB0aGlzLm1heFJlc3VsdHMsXG4gICAgICB0aGlzLmluY2x1ZGUsXG4gICAgICB0aGlzLmV4Y2x1ZGUsXG4gICAgICB0aGlzLmN1c3RvbSxcbiAgICApIGFzIGFueVtdO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0cy5lbWl0KGVtb2ppcyk7XG4gIH1cbiAgaGFuZGxlQ2hhbmdlKCkge1xuICAgIHRoaXMuaGFuZGxlU2VhcmNoKHRoaXMucXVlcnkpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,107 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ class SkinComponent {
6
+ /** currently selected skin */
7
+ skin;
8
+ i18n;
9
+ changeSkin = new EventEmitter();
10
+ opened = false;
11
+ skinTones = [1, 2, 3, 4, 5, 6];
12
+ toggleOpen() {
13
+ this.opened = !this.opened;
14
+ }
15
+ isSelected(skinTone) {
16
+ return skinTone === this.skin;
17
+ }
18
+ isVisible(skinTone) {
19
+ return this.opened || this.isSelected(skinTone);
20
+ }
21
+ pressed(skinTone) {
22
+ return this.opened ? !!this.isSelected(skinTone) : '';
23
+ }
24
+ tabIndex(skinTone) {
25
+ return this.isVisible(skinTone) ? '0' : '';
26
+ }
27
+ expanded(skinTone) {
28
+ return this.isSelected(skinTone) ? this.opened : '';
29
+ }
30
+ handleClick(skin) {
31
+ if (!this.opened) {
32
+ this.opened = true;
33
+ return;
34
+ }
35
+ this.opened = false;
36
+ if (skin !== this.skin) {
37
+ this.changeSkin.emit(skin);
38
+ }
39
+ }
40
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SkinComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
41
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: SkinComponent, isStandalone: true, selector: "emoji-skins", inputs: { skin: "skin", i18n: "i18n" }, outputs: { changeSkin: "changeSkin" }, ngImport: i0, template: `
42
+ <section class="emoji-mart-skin-swatches" [class.opened]="opened">
43
+ <span
44
+ *ngFor="let skinTone of skinTones"
45
+ class="emoji-mart-skin-swatch"
46
+ [class.selected]="skinTone === skin"
47
+ >
48
+ <span
49
+ (click)="handleClick(skinTone)"
50
+ (keyup.enter)="handleClick(skinTone)"
51
+ (keyup.space)="handleClick(skinTone)"
52
+ class="emoji-mart-skin emoji-mart-skin-tone-{{ skinTone }}"
53
+ role="button"
54
+ [tabIndex]="tabIndex(skinTone)"
55
+ [attr.aria-hidden]="!isVisible(skinTone)"
56
+ [attr.aria-pressed]="pressed(skinTone)"
57
+ [attr.aria-haspopup]="!!isSelected(skinTone)"
58
+ [attr.aria-expanded]="expanded(skinTone)"
59
+ [attr.aria-label]="i18n.skintones[skinTone]"
60
+ [attr.title]="i18n.skintones[skinTone]"
61
+ ></span>
62
+ </span>
63
+ </section>
64
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
65
+ }
66
+ export { SkinComponent };
67
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: SkinComponent, decorators: [{
68
+ type: Component,
69
+ args: [{
70
+ selector: 'emoji-skins',
71
+ template: `
72
+ <section class="emoji-mart-skin-swatches" [class.opened]="opened">
73
+ <span
74
+ *ngFor="let skinTone of skinTones"
75
+ class="emoji-mart-skin-swatch"
76
+ [class.selected]="skinTone === skin"
77
+ >
78
+ <span
79
+ (click)="handleClick(skinTone)"
80
+ (keyup.enter)="handleClick(skinTone)"
81
+ (keyup.space)="handleClick(skinTone)"
82
+ class="emoji-mart-skin emoji-mart-skin-tone-{{ skinTone }}"
83
+ role="button"
84
+ [tabIndex]="tabIndex(skinTone)"
85
+ [attr.aria-hidden]="!isVisible(skinTone)"
86
+ [attr.aria-pressed]="pressed(skinTone)"
87
+ [attr.aria-haspopup]="!!isSelected(skinTone)"
88
+ [attr.aria-expanded]="expanded(skinTone)"
89
+ [attr.aria-label]="i18n.skintones[skinTone]"
90
+ [attr.title]="i18n.skintones[skinTone]"
91
+ ></span>
92
+ </span>
93
+ </section>
94
+ `,
95
+ changeDetection: ChangeDetectionStrategy.OnPush,
96
+ preserveWhitespaces: false,
97
+ standalone: true,
98
+ imports: [CommonModule],
99
+ }]
100
+ }], propDecorators: { skin: [{
101
+ type: Input
102
+ }], i18n: [{
103
+ type: Input
104
+ }], changeSkin: [{
105
+ type: Output
106
+ }] } });
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tpbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9waWNrZXIvc2tpbnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFJaEcsTUErQmEsYUFBYTtJQUN4Qiw4QkFBOEI7SUFDckIsSUFBSSxDQUFpQjtJQUNyQixJQUFJLENBQU07SUFDVCxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDekQsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLFNBQVMsR0FBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWhELFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUM3QixDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQXVCO1FBQ2hDLE9BQU8sUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUF1QjtRQUMvQixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQXVCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQsUUFBUSxDQUFDLFFBQXVCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELFFBQVEsQ0FBQyxRQUF1QjtRQUM5QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQW1CO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO3VHQXpDVSxhQUFhOzJGQUFiLGFBQWEsc0pBN0JkOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCVCwyREFJUyxZQUFZOztTQUVYLGFBQWE7MkZBQWIsYUFBYTtrQkEvQnpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1QlQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLG1CQUFtQixFQUFFLEtBQUs7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3hCOzhCQUdVLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRW1vamkgfSBmcm9tICdAY3RybC9uZ3gtZW1vamktbWFydC9uZ3gtZW1vamknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlbW9qaS1za2lucycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJlbW9qaS1tYXJ0LXNraW4tc3dhdGNoZXNcIiBbY2xhc3Mub3BlbmVkXT1cIm9wZW5lZFwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nRm9yPVwibGV0IHNraW5Ub25lIG9mIHNraW5Ub25lc1wiXG4gICAgICAgIGNsYXNzPVwiZW1vamktbWFydC1za2luLXN3YXRjaFwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJza2luVG9uZSA9PT0gc2tpblwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKHNraW5Ub25lKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cImhhbmRsZUNsaWNrKHNraW5Ub25lKVwiXG4gICAgICAgICAgKGtleXVwLnNwYWNlKT1cImhhbmRsZUNsaWNrKHNraW5Ub25lKVwiXG4gICAgICAgICAgY2xhc3M9XCJlbW9qaS1tYXJ0LXNraW4gZW1vamktbWFydC1za2luLXRvbmUte3sgc2tpblRvbmUgfX1cIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleChza2luVG9uZSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFpc1Zpc2libGUoc2tpblRvbmUpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwicHJlc3NlZChza2luVG9uZSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiISFpc1NlbGVjdGVkKHNraW5Ub25lKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJleHBhbmRlZChza2luVG9uZSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaTE4bi5za2ludG9uZXNbc2tpblRvbmVdXCJcbiAgICAgICAgICBbYXR0ci50aXRsZV09XCJpMThuLnNraW50b25lc1tza2luVG9uZV1cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvc2VjdGlvbj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2tpbkNvbXBvbmVudCB7XG4gIC8qKiBjdXJyZW50bHkgc2VsZWN0ZWQgc2tpbiAqL1xuICBASW5wdXQoKSBza2luPzogRW1vamlbJ3NraW4nXTtcbiAgQElucHV0KCkgaTE4bjogYW55O1xuICBAT3V0cHV0KCkgY2hhbmdlU2tpbiA9IG5ldyBFdmVudEVtaXR0ZXI8RW1vamlbJ3NraW4nXT4oKTtcbiAgb3BlbmVkID0gZmFsc2U7XG4gIHNraW5Ub25lczogRW1vamlbJ3NraW4nXVtdID0gWzEsIDIsIDMsIDQsIDUsIDZdO1xuXG4gIHRvZ2dsZU9wZW4oKSB7XG4gICAgdGhpcy5vcGVuZWQgPSAhdGhpcy5vcGVuZWQ7XG4gIH1cblxuICBpc1NlbGVjdGVkKHNraW5Ub25lOiBFbW9qaVsnc2tpbiddKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNraW5Ub25lID09PSB0aGlzLnNraW47XG4gIH1cblxuICBpc1Zpc2libGUoc2tpblRvbmU6IEVtb2ppWydza2luJ10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuZWQgfHwgdGhpcy5pc1NlbGVjdGVkKHNraW5Ub25lKTtcbiAgfVxuXG4gIHByZXNzZWQoc2tpblRvbmU6IEVtb2ppWydza2luJ10pIHtcbiAgICByZXR1cm4gdGhpcy5vcGVuZWQgPyAhIXRoaXMuaXNTZWxlY3RlZChza2luVG9uZSkgOiAnJztcbiAgfVxuXG4gIHRhYkluZGV4KHNraW5Ub25lOiBFbW9qaVsnc2tpbiddKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlKHNraW5Ub25lKSA/ICcwJyA6ICcnO1xuICB9XG5cbiAgZXhwYW5kZWQoc2tpblRvbmU6IEVtb2ppWydza2luJ10pIHtcbiAgICByZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHNraW5Ub25lKSA/IHRoaXMub3BlbmVkIDogJyc7XG4gIH1cblxuICBoYW5kbGVDbGljayhza2luOiBFbW9qaVsnc2tpbiddKSB7XG4gICAgaWYgKCF0aGlzLm9wZW5lZCkge1xuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xuICAgIGlmIChza2luICE9PSB0aGlzLnNraW4pIHtcbiAgICAgIHRoaXMuY2hhbmdlU2tpbi5lbWl0KHNraW4pO1xuICAgIH1cbiAgfVxufVxuIl19