@ctrl/ngx-emoji-mart 8.2.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -14
- package/anchors.component.d.ts +1 -1
- package/category.component.d.ts +1 -1
- package/esm2022/anchors.component.mjs +100 -0
- package/esm2022/category.component.mjs +409 -0
- package/esm2022/emoji-frequently.service.mjs +90 -0
- package/esm2022/emoji-search.service.mjs +178 -0
- package/esm2022/ngx-emoji/emoji.component.mjs +299 -0
- package/esm2022/ngx-emoji/emoji.module.mjs +17 -0
- package/esm2022/ngx-emoji/emoji.service.mjs +145 -0
- package/esm2022/picker.component.mjs +522 -0
- package/esm2022/picker.module.mjs +40 -0
- package/esm2022/preview.component.mjs +206 -0
- package/esm2022/search.component.mjs +175 -0
- package/esm2022/skins.component.mjs +107 -0
- package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart-ngx-emoji.mjs +62 -54
- package/{fesm2015 → fesm2022}/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ctrl-ngx-emoji-mart.mjs +320 -254
- package/fesm2022/ctrl-ngx-emoji-mart.mjs.map +1 -0
- package/ngx-emoji/emoji.component.d.ts +1 -1
- package/ngx-emoji/emoji.module.d.ts +1 -2
- package/package.json +8 -16
- package/picker.component.d.ts +2 -2
- package/picker.module.d.ts +1 -4
- package/preview.component.d.ts +2 -2
- package/search.component.d.ts +1 -1
- package/skins.component.d.ts +2 -2
- package/esm2020/anchors.component.mjs +0 -83
- package/esm2020/category.component.mjs +0 -386
- package/esm2020/emoji-frequently.service.mjs +0 -88
- package/esm2020/emoji-search.service.mjs +0 -177
- package/esm2020/ngx-emoji/emoji.component.mjs +0 -288
- package/esm2020/ngx-emoji/emoji.module.mjs +0 -18
- package/esm2020/ngx-emoji/emoji.service.mjs +0 -144
- package/esm2020/picker.component.mjs +0 -508
- package/esm2020/picker.module.mjs +0 -49
- package/esm2020/preview.component.mjs +0 -187
- package/esm2020/search.component.mjs +0 -165
- package/esm2020/skins.component.mjs +0 -108
- package/fesm2015/ctrl-ngx-emoji-mart-ngx-emoji.mjs +0 -34330
- package/fesm2015/ctrl-ngx-emoji-mart.mjs +0 -1763
- package/fesm2015/ctrl-ngx-emoji-mart.mjs.map +0 -1
- package/fesm2020/ctrl-ngx-emoji-mart-ngx-emoji.mjs.map +0 -1
- package/fesm2020/ctrl-ngx-emoji-mart.mjs.map +0 -1
- /package/{esm2020 → esm2022}/ctrl-ngx-emoji-mart.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/ctrl-ngx-emoji-mart-ngx-emoji.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/data/categories.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/data/data.interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/data/emojis.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/data/skins.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-emoji/index.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/svgs/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/index.mjs +0 -0
package/README.md
CHANGED
@@ -13,6 +13,10 @@ This project is a port of [emoji-mart](https://github.com/missive/emoji-mart) by
|
|
13
13
|
|
14
14
|
```sh
|
15
15
|
npm install @ctrl/ngx-emoji-mart
|
16
|
+
# Or if you're using yarn
|
17
|
+
yarn add @ctrl/ngx-emoji-mart
|
18
|
+
# Or if you're using pnpm
|
19
|
+
pnpm install @ctrl/ngx-emoji-mart
|
16
20
|
```
|
17
21
|
|
18
22
|
## Dependencies
|
@@ -26,34 +30,52 @@ Latest version available for each version of Angular
|
|
26
30
|
| 5.1.2 | 10.x 11.x |
|
27
31
|
| 6.2.0 | 12.x 13.x |
|
28
32
|
| 7.1.0 | 14.x |
|
29
|
-
|
|
33
|
+
| 8.2.0 | 15.x |
|
34
|
+
| current | >=16.x |
|
30
35
|
|
31
36
|
## Components
|
32
37
|
|
33
38
|
### Picker
|
34
39
|
|
35
|
-
|
40
|
+
Add `PickerComponent` to your module imports:
|
36
41
|
|
37
42
|
```ts
|
38
|
-
import {
|
43
|
+
import { PickerComponent } from '@ctrl/ngx-emoji-mart';
|
44
|
+
|
45
|
+
@NgModule({
|
46
|
+
imports: [PickerComponent],
|
47
|
+
})
|
48
|
+
export class AppModule {}
|
49
|
+
|
50
|
+
// Or if using standalone components
|
51
|
+
|
52
|
+
@Component({
|
53
|
+
standalone: true,
|
54
|
+
imports: [PickerComponent],
|
55
|
+
})
|
56
|
+
export class AppComponent {}
|
39
57
|
```
|
40
58
|
|
41
|
-
Import styles in styles.scss
|
59
|
+
Import styles in `styles.scss`:
|
42
60
|
|
43
61
|
```scss
|
44
|
-
@import '
|
62
|
+
@import '@ctrl/ngx-emoji-mart/picker';
|
45
63
|
```
|
46
64
|
|
47
|
-
Or
|
65
|
+
Or bundle those styles through `angular.json` configuration:
|
48
66
|
|
49
|
-
```
|
50
|
-
"
|
51
|
-
"
|
52
|
-
|
53
|
-
|
67
|
+
```json
|
68
|
+
"build": {
|
69
|
+
"options": {
|
70
|
+
"styles": [
|
71
|
+
"src/styles.scss",
|
72
|
+
"node_modules/@ctrl/ngx-emoji-mart/picker.css"
|
73
|
+
]
|
74
|
+
}
|
75
|
+
}
|
54
76
|
```
|
55
77
|
|
56
|
-
use component
|
78
|
+
Now we can use the `emoji-mart` component:
|
57
79
|
|
58
80
|
```html
|
59
81
|
<emoji-mart title="Pick your emoji…" emoji="point_up"></emoji-mart>
|
@@ -195,8 +217,10 @@ Sheets are served from [unpkg](https://unpkg.com), a global CDN that serves file
|
|
195
217
|
|
196
218
|
### Emoji
|
197
219
|
|
220
|
+
Add `EmojiComponent` to your module or standalone component `imports`:
|
221
|
+
|
198
222
|
```ts
|
199
|
-
import {
|
223
|
+
import { EmojiComponent } from '@ctrl/ngx-emoji-mart/ngx-emoji';
|
200
224
|
```
|
201
225
|
|
202
226
|
```html
|
@@ -206,7 +230,7 @@ import { EmojiModule } from '@ctrl/ngx-emoji-mart/ngx-emoji';
|
|
206
230
|
```
|
207
231
|
|
208
232
|
| Prop | Required | Default | Description |
|
209
|
-
| -------------------------------------------- | :------: | ------------------------- |
|
233
|
+
| -------------------------------------------- | :------: | ------------------------- | ---------------------------------------------------------------------------------------------------------------- | --- |
|
210
234
|
| **emoji** | ✓ | | Either a string or an `emoji` object |
|
211
235
|
| **size** | ✓ | | The emoji width and height. |
|
212
236
|
| **isNative** | | `false` | Renders the native unicode emoji |
|
@@ -276,6 +300,7 @@ The `Picker` doesn’t have to be mounted for you to take advantage of the advan
|
|
276
300
|
|
277
301
|
```ts
|
278
302
|
import { EmojiSearch } from '@ctrl/ngx-emoji-mart';
|
303
|
+
|
279
304
|
class ex {
|
280
305
|
constructor(private emojiSearch: EmojiSearch) {
|
281
306
|
this.emojiSearch.search('christmas').map(o => o.native);
|
package/anchors.component.d.ts
CHANGED
@@ -16,5 +16,5 @@ export declare class AnchorsComponent {
|
|
16
16
|
trackByFn(idx: number, cat: EmojiCategory): string;
|
17
17
|
handleClick($event: Event, index: number): void;
|
18
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<AnchorsComponent, never>;
|
19
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AnchorsComponent, "emoji-mart-anchors", never, { "categories": "categories"; "color": "color"; "selected": "selected"; "i18n": "i18n"; "icons": "icons"; }, { "anchorClick": "anchorClick"; }, never, never,
|
19
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AnchorsComponent, "emoji-mart-anchors", never, { "categories": { "alias": "categories"; "required": false; }; "color": { "alias": "color"; "required": false; }; "selected": { "alias": "selected"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; "icons": { "alias": "icons"; "required": false; }; }, { "anchorClick": "anchorClick"; }, never, never, true, never>;
|
20
20
|
}
|
package/category.component.d.ts
CHANGED
@@ -61,5 +61,5 @@ export declare class CategoryComponent implements OnChanges, OnInit, AfterViewIn
|
|
61
61
|
trackById(index: number, item: any): any;
|
62
62
|
private filterEmojis;
|
63
63
|
static ɵfac: i0.ɵɵFactoryDeclaration<CategoryComponent, never>;
|
64
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<CategoryComponent, "emoji-category", never, { "emojis": "emojis"; "hasStickyPosition": "hasStickyPosition"; "name": "name"; "perLine": "perLine"; "totalFrequentLines": "totalFrequentLines"; "recent": "recent"; "custom": "custom"; "i18n": "i18n"; "id": "id"; "hideObsolete": "hideObsolete"; "notFoundEmoji": "notFoundEmoji"; "virtualize": "virtualize"; "virtualizeOffset": "virtualizeOffset"; "emojiIsNative": "emojiIsNative"; "emojiSkin": "emojiSkin"; "emojiSize": "emojiSize"; "emojiSet": "emojiSet"; "emojiSheetSize": "emojiSheetSize"; "emojiForceSize": "emojiForceSize"; "emojiTooltip": "emojiTooltip"; "emojiBackgroundImageFn": "emojiBackgroundImageFn"; "emojiImageUrlFn": "emojiImageUrlFn"; "emojiUseButton": "emojiUseButton"; }, { "emojiClick": "emojiClick"; "emojiOverOutsideAngular": "emojiOverOutsideAngular"; "emojiLeaveOutsideAngular": "emojiLeaveOutsideAngular"; }, never, never,
|
64
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CategoryComponent, "emoji-category", never, { "emojis": { "alias": "emojis"; "required": false; }; "hasStickyPosition": { "alias": "hasStickyPosition"; "required": false; }; "name": { "alias": "name"; "required": false; }; "perLine": { "alias": "perLine"; "required": false; }; "totalFrequentLines": { "alias": "totalFrequentLines"; "required": false; }; "recent": { "alias": "recent"; "required": false; }; "custom": { "alias": "custom"; "required": false; }; "i18n": { "alias": "i18n"; "required": false; }; "id": { "alias": "id"; "required": false; }; "hideObsolete": { "alias": "hideObsolete"; "required": false; }; "notFoundEmoji": { "alias": "notFoundEmoji"; "required": false; }; "virtualize": { "alias": "virtualize"; "required": false; }; "virtualizeOffset": { "alias": "virtualizeOffset"; "required": false; }; "emojiIsNative": { "alias": "emojiIsNative"; "required": false; }; "emojiSkin": { "alias": "emojiSkin"; "required": false; }; "emojiSize": { "alias": "emojiSize"; "required": false; }; "emojiSet": { "alias": "emojiSet"; "required": false; }; "emojiSheetSize": { "alias": "emojiSheetSize"; "required": false; }; "emojiForceSize": { "alias": "emojiForceSize"; "required": false; }; "emojiTooltip": { "alias": "emojiTooltip"; "required": false; }; "emojiBackgroundImageFn": { "alias": "emojiBackgroundImageFn"; "required": false; }; "emojiImageUrlFn": { "alias": "emojiImageUrlFn"; "required": false; }; "emojiUseButton": { "alias": "emojiUseButton"; "required": false; }; }, { "emojiClick": "emojiClick"; "emojiOverOutsideAngular": "emojiOverOutsideAngular"; "emojiLeaveOutsideAngular": "emojiLeaveOutsideAngular"; }, never, never, true, never>;
|
65
65
|
}
|
@@ -0,0 +1,100 @@
|
|
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 AnchorsComponent {
|
6
|
+
categories = [];
|
7
|
+
color;
|
8
|
+
selected;
|
9
|
+
i18n;
|
10
|
+
icons = {};
|
11
|
+
anchorClick = new EventEmitter();
|
12
|
+
trackByFn(idx, cat) {
|
13
|
+
return cat.id;
|
14
|
+
}
|
15
|
+
handleClick($event, index) {
|
16
|
+
this.anchorClick.emit({
|
17
|
+
category: this.categories[index],
|
18
|
+
index,
|
19
|
+
});
|
20
|
+
}
|
21
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AnchorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
22
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: AnchorsComponent, isStandalone: true, selector: "emoji-mart-anchors", inputs: { categories: "categories", color: "color", selected: "selected", i18n: "i18n", icons: "icons" }, outputs: { anchorClick: "anchorClick" }, ngImport: i0, template: `
|
23
|
+
<div class="emoji-mart-anchors">
|
24
|
+
<ng-template
|
25
|
+
ngFor
|
26
|
+
let-category
|
27
|
+
[ngForOf]="categories"
|
28
|
+
let-idx="index"
|
29
|
+
[ngForTrackBy]="trackByFn"
|
30
|
+
>
|
31
|
+
<span
|
32
|
+
*ngIf="category.anchor !== false"
|
33
|
+
[attr.title]="i18n.categories[category.id]"
|
34
|
+
(click)="this.handleClick($event, idx)"
|
35
|
+
class="emoji-mart-anchor"
|
36
|
+
[class.emoji-mart-anchor-selected]="category.name === selected"
|
37
|
+
[style.color]="category.name === selected ? color : null"
|
38
|
+
>
|
39
|
+
<div>
|
40
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
41
|
+
<path [attr.d]="icons[category.id]" />
|
42
|
+
</svg>
|
43
|
+
</div>
|
44
|
+
<span class="emoji-mart-anchor-bar" [style.background-color]="color"></span>
|
45
|
+
</span>
|
46
|
+
</ng-template>
|
47
|
+
</div>
|
48
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
49
|
+
}
|
50
|
+
export { AnchorsComponent };
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: AnchorsComponent, decorators: [{
|
52
|
+
type: Component,
|
53
|
+
args: [{
|
54
|
+
selector: 'emoji-mart-anchors',
|
55
|
+
template: `
|
56
|
+
<div class="emoji-mart-anchors">
|
57
|
+
<ng-template
|
58
|
+
ngFor
|
59
|
+
let-category
|
60
|
+
[ngForOf]="categories"
|
61
|
+
let-idx="index"
|
62
|
+
[ngForTrackBy]="trackByFn"
|
63
|
+
>
|
64
|
+
<span
|
65
|
+
*ngIf="category.anchor !== false"
|
66
|
+
[attr.title]="i18n.categories[category.id]"
|
67
|
+
(click)="this.handleClick($event, idx)"
|
68
|
+
class="emoji-mart-anchor"
|
69
|
+
[class.emoji-mart-anchor-selected]="category.name === selected"
|
70
|
+
[style.color]="category.name === selected ? color : null"
|
71
|
+
>
|
72
|
+
<div>
|
73
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24">
|
74
|
+
<path [attr.d]="icons[category.id]" />
|
75
|
+
</svg>
|
76
|
+
</div>
|
77
|
+
<span class="emoji-mart-anchor-bar" [style.background-color]="color"></span>
|
78
|
+
</span>
|
79
|
+
</ng-template>
|
80
|
+
</div>
|
81
|
+
`,
|
82
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
83
|
+
preserveWhitespaces: false,
|
84
|
+
standalone: true,
|
85
|
+
imports: [CommonModule],
|
86
|
+
}]
|
87
|
+
}], propDecorators: { categories: [{
|
88
|
+
type: Input
|
89
|
+
}], color: [{
|
90
|
+
type: Input
|
91
|
+
}], selected: [{
|
92
|
+
type: Input
|
93
|
+
}], i18n: [{
|
94
|
+
type: Input
|
95
|
+
}], icons: [{
|
96
|
+
type: Input
|
97
|
+
}], anchorClick: [{
|
98
|
+
type: Output
|
99
|
+
}] } });
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5jaG9ycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3BpY2tlci9hbmNob3JzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBSWhHLE1Ba0NhLGdCQUFnQjtJQUNsQixVQUFVLEdBQW9CLEVBQUUsQ0FBQztJQUNqQyxLQUFLLENBQVU7SUFDZixRQUFRLENBQVU7SUFDbEIsSUFBSSxDQUFNO0lBQ1YsS0FBSyxHQUE4QixFQUFFLENBQUM7SUFDckMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUE4QyxDQUFDO0lBRXZGLFNBQVMsQ0FBQyxHQUFXLEVBQUUsR0FBa0I7UUFDdkMsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYSxFQUFFLEtBQWE7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEIsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQ2hDLEtBQUs7U0FDTixDQUFDLENBQUM7SUFDTCxDQUFDO3VHQWpCVSxnQkFBZ0I7MkZBQWhCLGdCQUFnQixpT0FoQ2pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCVCwyREFJUyxZQUFZOztTQUVYLGdCQUFnQjsyRkFBaEIsZ0JBQWdCO2tCQWxDNUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxtQkFBbUIsRUFBRSxLQUFLO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4Qjs4QkFFVSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRW1vamlDYXRlZ29yeSB9IGZyb20gJ0BjdHJsL25neC1lbW9qaS1tYXJ0L25neC1lbW9qaSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Vtb2ppLW1hcnQtYW5jaG9ycycsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImVtb2ppLW1hcnQtYW5jaG9yc1wiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgIG5nRm9yXG4gICAgICAgIGxldC1jYXRlZ29yeVxuICAgICAgICBbbmdGb3JPZl09XCJjYXRlZ29yaWVzXCJcbiAgICAgICAgbGV0LWlkeD1cImluZGV4XCJcbiAgICAgICAgW25nRm9yVHJhY2tCeV09XCJ0cmFja0J5Rm5cIlxuICAgICAgPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiY2F0ZWdvcnkuYW5jaG9yICE9PSBmYWxzZVwiXG4gICAgICAgICAgW2F0dHIudGl0bGVdPVwiaTE4bi5jYXRlZ29yaWVzW2NhdGVnb3J5LmlkXVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRoaXMuaGFuZGxlQ2xpY2soJGV2ZW50LCBpZHgpXCJcbiAgICAgICAgICBjbGFzcz1cImVtb2ppLW1hcnQtYW5jaG9yXCJcbiAgICAgICAgICBbY2xhc3MuZW1vamktbWFydC1hbmNob3Itc2VsZWN0ZWRdPVwiY2F0ZWdvcnkubmFtZSA9PT0gc2VsZWN0ZWRcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJjYXRlZ29yeS5uYW1lID09PSBzZWxlY3RlZCA/IGNvbG9yIDogbnVsbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiPlxuICAgICAgICAgICAgICA8cGF0aCBbYXR0ci5kXT1cImljb25zW2NhdGVnb3J5LmlkXVwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImVtb2ppLW1hcnQtYW5jaG9yLWJhclwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImNvbG9yXCI+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBBbmNob3JzQ29tcG9uZW50IHtcbiAgQElucHV0KCkgY2F0ZWdvcmllczogRW1vamlDYXRlZ29yeVtdID0gW107XG4gIEBJbnB1dCgpIGNvbG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RlZD86IHN0cmluZztcbiAgQElucHV0KCkgaTE4bjogYW55O1xuICBASW5wdXQoKSBpY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBAT3V0cHV0KCkgYW5jaG9yQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY2F0ZWdvcnk6IEVtb2ppQ2F0ZWdvcnk7IGluZGV4OiBudW1iZXIgfT4oKTtcblxuICB0cmFja0J5Rm4oaWR4OiBudW1iZXIsIGNhdDogRW1vamlDYXRlZ29yeSkge1xuICAgIHJldHVybiBjYXQuaWQ7XG4gIH1cblxuICBoYW5kbGVDbGljaygkZXZlbnQ6IEV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5hbmNob3JDbGljay5lbWl0KHtcbiAgICAgIGNhdGVnb3J5OiB0aGlzLmNhdGVnb3JpZXNbaW5kZXhdLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|