ng-jvx-multiselect 16.0.7 → 16.0.8
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.
|
@@ -385,10 +385,15 @@ export class NgJvxMultiselectComponent {
|
|
|
385
385
|
search: this.searchValue,
|
|
386
386
|
searchProp: this.searchProp,
|
|
387
387
|
pageSize: this.intPageSize
|
|
388
|
-
}).pipe(
|
|
388
|
+
}).pipe(map((val) => {
|
|
389
|
+
return val ?? [];
|
|
390
|
+
}), switchMap((val) => this.multiMapper.mapOptions(val)), switchMap((val) => {
|
|
389
391
|
let result = [];
|
|
390
|
-
if (
|
|
391
|
-
result = [
|
|
392
|
+
if (!val) {
|
|
393
|
+
result = [];
|
|
394
|
+
}
|
|
395
|
+
else if (this.listProp.length > 0) {
|
|
396
|
+
result = [...(val[this.listProp] ?? [])];
|
|
392
397
|
}
|
|
393
398
|
else {
|
|
394
399
|
result = [...val];
|
|
@@ -622,4 +627,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImpor
|
|
|
622
627
|
}], scrollEnd: [{
|
|
623
628
|
type: Output
|
|
624
629
|
}] } });
|
|
625
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctanZ4LW11bHRpc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWp2eC1tdWx0aXNlbGVjdC9zcmMvbGliL25nLWp2eC1tdWx0aXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1qdngtbXVsdGlzZWxlY3Qvc3JjL2xpYi9uZy1qdngtbXVsdGlzZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLElBQUksRUFFSixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixPQUFPLEVBQXNELGtCQUFrQixFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRXpILE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRzdFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUvRSxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUNqRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxP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QUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUVPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBY0csY0FBYztzQkFBdEIsS0FBSztnQkFHRixRQUFRO3NCQURYLEtBQUs7Z0JBY0YsUUFBUTtzQkFEWCxLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkF3QkksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSG9zdEJpbmRpbmcsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBTZWxmLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nSnZ4T3B0aW9uc1RlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuL2RpcmVjdGl2ZXMvbmctanZ4LW9wdGlvbnMtdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sLCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge01hdFNlbGVjdGlvbkxpc3QsIE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xyXG5pbXBvcnQge05nSnZ4T3B0aW9uQ29tcG9uZW50fSBmcm9tICcuL25nLWp2eC1vcHRpb24vbmctanZ4LW9wdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQge01hdE1lbnVUcmlnZ2VyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHtOZ0p2eE11bHRpc2VsZWN0U2VydmljZX0gZnJvbSAnLi9uZy1qdngtbXVsdGlzZWxlY3Quc2VydmljZSc7XHJcbmltcG9ydCB7SHR0cEhlYWRlcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtOZ1Njcm9sbGJhcn0gZnJvbSAnbmd4LXNjcm9sbGJhcic7XHJcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7Zm9ya0pvaW4sIGZyb21FdmVudCwgbm9vcCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRpbWVyfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtOZ0p2eE11bHRpT3B0aW9uTWFwcGVyLCBOZ0p2eE9wdGlvbk1hcHBlcn0gZnJvbSAnLi9pbnRlcmZhY2VzL25nLWp2eC1vcHRpb24tbWFwcGVyJztcclxuaW1wb3J0IHtOZ0p2eFNlbGVjdGlvblRlbXBsYXRlRGlyZWN0aXZlfSBmcm9tICcuL2RpcmVjdGl2ZXMvbmctanZ4LXNlbGVjdGlvbi10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge01hdEZvcm1GaWVsZENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQge2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHtOZ0p2eEdyb3VwSGVhZGVyRGlyZWN0aXZlfSBmcm9tICcuL2RpcmVjdGl2ZXMvbmctanZ4LWdyb3VwLWhlYWRlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge05nSnZ4U2VhcmNoTWFwcGVyfSBmcm9tICcuL2ludGVyZmFjZXMvbmctanZ4LXNlYXJjaC1tYXBwZXInO1xyXG5pbXBvcnQge05nSnZ4R3JvdXAsIE5nSnZ4R3JvdXBNYXBwZXJ9IGZyb20gJy4vaW50ZXJmYWNlcy9uZy1qdngtZ3JvdXAtbWFwcGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ25nLWp2eC1tdWx0aXNlbGVjdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25nLWp2eC1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmctanZ4LW11bHRpc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmdKdnhNdWx0aXNlbGVjdENvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5nSnZ4TXVsdGlzZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBNYXRGb3JtRmllbGRDb250cm9sPGFueT4sXHJcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIHN0YXRpYyBuZXh0SWQgPSAwO1xyXG4gIEBIb3N0QmluZGluZygpIGlkID0gYGp2eC1tdWx0aXNlbGVjdC0ke05nSnZ4TXVsdGlzZWxlY3RDb21wb25lbnQubmV4dElkKyt9YDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mbG9hdGluZycpXHJcbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnanZ4TXVsdGlzZWxlY3QnLCB7c3RhdGljOiB0cnVlfSkganZ4TXVsdGlzZWxlY3Q6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0aW9uQ29udGFpbmVyJywge3N0YXRpYzogZmFsc2V9KSBzZWxlY3Rpb25Db250YWluZXI6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0aW9uJywge3N0YXRpYzogdHJ1ZX0pIHNlbGVjdGlvbjogTWF0U2VsZWN0aW9uTGlzdDtcclxuICBAVmlld0NoaWxkKCd0cmlnZ2VyJywge3N0YXRpYzogdHJ1ZX0pIHRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyO1xyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbGJhcicsIHtzdGF0aWM6IGZhbHNlfSkgc2Nyb2xsYmFyOiBOZ1Njcm9sbGJhcjtcclxuICBAVmlld0NoaWxkKCdtdWx0aUNvbnRhaW5lcicsIHtzdGF0aWM6IGZhbHNlfSkgbXVsdGlDb250YWluZXI6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZHJlbihOZ0p2eE9wdGlvbkNvbXBvbmVudCkgb3B0aW9uQ29tcDogUXVlcnlMaXN0PE5nSnZ4T3B0aW9uQ29tcG9uZW50PjtcclxuICBAQ29udGVudENoaWxkKE5nSnZ4T3B0aW9uc1RlbXBsYXRlRGlyZWN0aXZlKSBvcHRpb25zVGVtcGxhdGU6IE5nSnZ4T3B0aW9uc1RlbXBsYXRlRGlyZWN0aXZlIHwgbnVsbCA9IG51bGw7XHJcbiAgQENvbnRlbnRDaGlsZChOZ0p2eFNlbGVjdGlvblRlbXBsYXRlRGlyZWN0aXZlKSBzZWxlY3Rpb25UZW1wbGF0ZTogTmdKdnhTZWxlY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSB8IG51bGwgPSBudWxsO1xyXG4gIEBDb250ZW50Q2hpbGQoTmdKdnhHcm91cEhlYWRlckRpcmVjdGl2ZSkgZ3JvdXBIZWFkZXJUZW1wbGF0ZTogTmdKdnhHcm91cEhlYWRlckRpcmVjdGl2ZSB8IG51bGwgPSBudWxsO1xyXG4gIC8vIEBDb250ZW50Q2hpbGQoTmdKdnhPcHRpb25Db21wb25lbnQpIG9wdGlvbkNvbXA6IE5nSnZ4T3B0aW9uQ29tcG9uZW50O1xyXG4gIC8vIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIG9wdGlvbnNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgbXVsdGkgPSBmYWxzZTtcclxuICBASW5wdXQoKSB1cmwgPSAnJztcclxuICBASW5wdXQoKSByZXF1ZXN0VHlwZTogJ2dldCcgfCAncG9zdCcgPSAnZ2V0JztcclxuICBASW5wdXQoKSBpdGVtVmFsdWUgPSAndmFsdWUnO1xyXG4gIEBJbnB1dCgpIGl0ZW1UZXh0ID0gJ3RleHQnO1xyXG4gIEBJbnB1dCgpIGlnbm9yZVBhZ2luYXRpb24gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjbG9zZU9uQ2xpY2sgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGhhc0Vycm9ycyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaE1vZGU6IG51bGwgfCAnc2VydmVyJyB8ICdjbGllbnQnID0gbnVsbDtcclxuICBASW5wdXQoKSBzZWFyY2hJbnB1dCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaExhYmVsID0gJ3NlYXJjaCc7XHJcbiAgQElucHV0KCkgbGlzdFByb3AgPSAnJztcclxuICBASW5wdXQoKSB0b3RhbFJvd3NQcm9wID0gJyc7XHJcbiAgQElucHV0KCkgcGFuZWxDbGFzcyA9ICcnO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFByb3AgPSAnc2VhcmNoJztcclxuICBASW5wdXQoKSBjbG9zZUJ1dHRvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1hcHBlcjogTmdKdnhPcHRpb25NYXBwZXI8YW55PiA9IHtcclxuICAgIG1hcE9wdGlvbihzb3VyY2U6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiBvZihzb3VyY2UpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgQElucHV0KCkgbXVsdGlNYXBwZXI6IE5nSnZ4TXVsdGlPcHRpb25NYXBwZXI8YW55PiA9IHtcclxuICAgIG1hcE9wdGlvbnMoc291cmNlOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIHJldHVybiBvZihzb3VyY2UpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgQElucHV0KCkgc2VhcmNoTWFwcGVyOiBOZ0p2eFNlYXJjaE1hcHBlcjxhbnk+ID0ge1xyXG4gICAgbWFwU2VhcmNoOiAoc291cmNlOiBzdHJpbmcsIG9wdGlvbnM6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgICAgcmV0dXJuIG9mKG9wdGlvbnMuZmlsdGVyKG8gPT4gb1t0aGlzLml0ZW1UZXh0XS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc291cmNlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkpKTtcclxuICAgIH1cclxuICB9O1xyXG4gIEBJbnB1dCgpIGdyb3VwQnk6IE5nSnZ4R3JvdXBNYXBwZXI8YW55PiB8IHN0cmluZyB8IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogYW55W10pIHtcclxuICAgIHRoaXMucFZhbHVlID0gdmFsdWUgPz8gW107XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS5zZXRWYWx1ZSh0aGlzLnBWYWx1ZS5tYXAodiA9PiB2W3RoaXMuaXRlbVZhbHVlXSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsdWUoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgcmVxdWVzdEhlYWRlcnM6IEh0dHBIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xyXG4gIH1cclxuXHJcbiAgc2V0IHJlcXVpcmVkKHJlcSkge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcblxyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICAgIHRoaXMuX2Rpc2FibGVkID8gdGhpcy5wYXJ0cy5kaXNhYmxlKCkgOiB0aGlzLnBhcnRzLmVuYWJsZSgpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgcGFnZVNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmludFBhZ2VTaXplO1xyXG4gIH1cclxuXHJcbiAgc2V0IHBhZ2VTaXplKHZhbDogbnVtYmVyKSB7XHJcbiAgICBpZiAodmFsIDwgMTUpIHtcclxuICAgICAgdGhpcy5pbnRQYWdlU2l6ZSA9IDE1O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnRQYWdlU2l6ZSA9IHZhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXHJcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuaW52YWxpZCAmJiB0aGlzLm5nQ29udHJvbC50b3VjaGVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuICBAT3V0cHV0KCkganZ4TXVsdGlzZWxlY3RPcGVuOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIGp2eE11bHRpc2VsZWN0T3BlbmVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIGp2eE11bHRpc2VsZWN0Q2xvc2U6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkganZ4TXVsdGlzZWxlY3RDbG9zZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgc2Nyb2xsRW5kOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBjb250cm9sVHlwZSA9ICduZy1qdngtbXVsdGlzZWxlY3QnO1xyXG4gIHB1YmxpYyBkb2N1bWVudCA9IGRvY3VtZW50O1xyXG4gIHB1YmxpYyB3aW5kb3cgPSB3aW5kb3c7XHJcbiAgcHVibGljIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHVibGljIGlzT3BlbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmcgPSBmYWxzZTtcclxuICBwdWJsaWMgc2hvd0xpc3QgPSB0cnVlO1xyXG4gIHB1YmxpYyBhc3luY09wdGlvbnM6IGFueSA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RhYmxlT3B0aW9ucyA9IFtdO1xyXG4gIHB1YmxpYyBvcmRlcmVkT3B0aW9uczogeyBncm91cDogYW55LCBvcHRpb25zOiBhbnlbXSB9W10gPSBbXTtcclxuICBwdWJsaWMgc2VhcmNoVmFsdWUgPSAnJztcclxuICBwdWJsaWMgeVBvc2l0aW9uOiAnYWJvdmUnIHwgJ2JlbG93JyA9ICdhYm92ZSc7XHJcbiAgcHVibGljIHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHVibGljIGN1cnJlbnRQYWdlID0gMDtcclxuICBwdWJsaWMgbGlzdENvbnRhaW5lclNpemU6IHsgaGVpZ2h0OiBzdHJpbmcsIG1pbkhlaWdodDogc3RyaW5nLCB3aWR0aDogc3RyaW5nIH0gPSB7aGVpZ2h0OiAnYXV0bycsIG1pbkhlaWdodDogJzAnLCB3aWR0aDogJzEwMCUnfTtcclxuICBwdWJsaWMgcGFydHM6IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIHB1YmxpYyB0b3VjaGVkID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIHB1YmxpYyBmb2N1c2VkID0gZmFsc2U7XHJcbiAgcHVibGljIG11bHRpQ29udGFpbmVyV2lkdGggPSAxMDA7XHJcblxyXG4gIHByaXZhdGUgc2VhcmNoVmFsdWVTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgc2VhcmNoVmFsdWUkID0gdGhpcy5zZWFyY2hWYWx1ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJpdmF0ZSBwVmFsdWU6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSBzaG91bGRMb2FkTW9yZSA9IHRydWU7XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSB0aGlzLnVuc3Vic2NyaWJlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHByaXZhdGUgaW50UGFnZVNpemUgPSAxNTtcclxuICBwdWJsaWMgb25Ub3VjaGVkID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsIHByaXZhdGUgc2VydmljZTogTmdKdnhNdWx0aXNlbGVjdFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLCBmYjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSBhY2Nlc3NvciBkaXJlY3RseSAoaW5zdGVhZCBvZiB1c2luZ1xyXG4gICAgICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXHJcbiAgICAgIHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFydHMgPSBmYi5ncm91cCh7XHJcbiAgICAgIGFyZWE6ICcnLFxyXG4gICAgICBleGNoYW5nZTogJycsXHJcbiAgICAgIHN1YnNjcmliZXI6ICcnLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgc2VsZWN0aW9uVmFsdWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5zZWxlY3Rpb25WYWx1ZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG4gICAgLy8gdGhpcy5zZXRTZWxlY3RhYmxlT3B0aW9ucyh0aGlzLm9wdGlvbnMpLnN1YnNjcmliZShub29wKTtcclxuICAgIHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zXTtcclxuICAgIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucykuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpLCBkZWJvdW5jZVRpbWUoMTAwKSwgbWFwKCgpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMubGlzdENvbnRhaW5lclNpemUud2lkdGggPSB0aGlzLmp2eE11bHRpc2VsZWN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xyXG5cclxuICAgIH0pLCBzd2l0Y2hNYXAoKCkgPT4gdGltZXIoMTAwKSksIHRhcCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubXVsdGlDb250YWluZXJXaWR0aCA9IHRoaXMubXVsdGlDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lm9mZnNldFdpZHRoID8/IDEwMDtcclxuICAgICAgdGhpcy55UG9zaXRpb24gPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0aGlzLmp2eE11bHRpc2VsZWN0Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPy50b3AgPCAyNjAgPyAnYWJvdmUnIDogJ2JlbG93JztcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pKS5zdWJzY3JpYmUobm9vcCk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hWYWx1ZSQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSgzMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4ge1xyXG4gICAgICAgIHJldHVybiBjdXJyID09PSB0aGlzLnNlYXJjaFZhbHVlO1xyXG4gICAgICB9KSwgc3dpdGNoTWFwKCh2YWw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9IHZhbDtcclxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoTW9kZSA9PT0gJ2NsaWVudCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50U2VhcmNoKCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXJsICYmIHRoaXMudXJsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmVyU2VhcmNoKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApXHJcbiAgICApLnN1YnNjcmliZSgodmFsOiBhbnlbXSkgPT4ge1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsaWVudFNlYXJjaCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgbGV0IG9iczogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgaWYgKHRoaXMudXJsICYmIHRoaXMudXJsLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucyA9IFtdO1xyXG4gICAgICB0aGlzLnVwZGF0ZU9yZGVyZWRPcHRpb25zKHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMpLnN1YnNjcmliZShub29wKTtcclxuICAgICAgdGhpcy5zaG91bGRMb2FkTW9yZSA9IHRydWU7XHJcbiAgICAgIG9icyA9IHRoaXMuZ2V0TGlzdCgpLnBpcGUobWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlT3B0aW9ucztcclxuICAgICAgfSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb2JzID0gb2YodGhpcy5vcHRpb25zKTtcclxuICAgIH1cclxuICAgIHJldHVybiBvYnMucGlwZShzd2l0Y2hNYXAoKHZhbCkgPT4gdGhpcy5zZWFyY2hNYXBwZXIubWFwU2VhcmNoKHRoaXMuc2VhcmNoVmFsdWUsIHZhbCkpLCBzd2l0Y2hNYXAoKHJlcykgPT4ge1xyXG4gICAgICAgIC8vIHJldHVybiB0aGlzLnNldFNlbGVjdGFibGVPcHRpb25zKHJlcyk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMucHVzaCguLi5yZXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9yZGVyZWRPcHRpb25zKHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICApKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0YWJsZU9wdGlvbnMob3B0aW9uczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucyA9IFtdO1xyXG4gICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPGFueT5bXSA9IG9wdGlvbnMucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcclxuICAgICAgYWNjLnB1c2godGhpcy5tYXBwZXIubWFwT3B0aW9uKGN1cnIpKTtcclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIFtdKTtcclxuXHJcbiAgICAvLyB0aGlzLm1hcHBlci5tYXBPcHRpb24ob3B0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZm9ya0pvaW4oWy4uLm9ic10pLnBpcGUoc3dpdGNoTWFwKCh2YWwpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5wdXNoKC4uLnZhbCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9yZGVyZWRPcHRpb25zKHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXJ2ZXJTZWFyY2goKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuc2hvdWxkTG9hZE1vcmUgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucyA9IFtdO1xyXG4gICAgdGhpcy5zaG91bGRMb2FkTW9yZSA9IHRydWU7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRMaXN0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmxpc3RDb250YWluZXJTaXplLndpZHRoID0gdGhpcy5qdnhNdWx0aXNlbGVjdC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgJ3B4JztcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnNjcm9sbGJhcikge1xyXG4gICAgICB0aGlzLnNjcm9sbGJhci5zY3JvbGxlZC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblNjcm9sbGVkKGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRpbWVyKDApLnBpcGUodGFwKCgpID0+IHtcclxuICAgICAgdGhpcy5tdWx0aUNvbnRhaW5lcldpZHRoID0gdGhpcy5tdWx0aUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMTAwO1xyXG4gICAgICB0aGlzLnlQb3NpdGlvbiA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuanZ4TXVsdGlzZWxlY3QubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/LnRvcCA8IDI2MCA/ICdhYm92ZScgOiAnYmVsb3cnO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSkpLnN1YnNjcmliZShub29wKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcclxuICAgICAgLy8gdGhpcy5zZXRTZWxlY3RhYmxlT3B0aW9ucyh0aGlzLm9wdGlvbnMpLnN1YnNjcmliZShub29wKTtcclxuICAgICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGdldCBzZWxlY3Rpb25WYWx1ZSgpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5tYXAoKHYpID0+IHtcclxuICAgICAgcmV0dXJuIHZbdGhpcy5pdGVtVmFsdWVdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBuID0gdGhpcy5wYXJ0cy52YWx1ZTtcclxuICAgIHJldHVybiAhbi5hcmVhICYmICFuLmV4Y2hhbmdlICYmICFuLnN1YnNjcmliZXI7XHJcbiAgfVxyXG5cclxuICBvbkNMaWNrT25NZW51KGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm11bHRpIHx8IHRoaXMuY2xvc2VPbkNsaWNrID09PSBmYWxzZSkge1xyXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgcHJvcGFnYXRlQ2hhbmdlKF86IGFueSk6IGFueSB7XHJcbiAgfVxyXG5cclxuICAvLyB0aGlzIGlzIHRoZSBpbml0aWFsIHZhbHVlIHNldCB0byB0aGUgY29tcG9uZW50XHJcbiAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IG9iajtcclxuICB9XHJcblxyXG4gIC8vIHJlZ2lzdGVycyAnZm4nIHRoYXQgd2lsbCBiZSBmaXJlZCB3aGVuIGNoYW5nZXMgYXJlIG1hZGVcclxuICAvLyB0aGlzIGlzIGhvdyB3ZSBlbWl0IHRoZSBjaGFuZ2VzIGJhY2sgdG8gdGhlIGZvcm1cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKGU6IE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2UpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgdmFscyA9IGUuc291cmNlLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZC5tYXAobyA9PiBvLnZhbHVlKTtcclxuICAgIHZhbHMgPSB0aGlzLnNlbGVjdGFibGVPcHRpb25zLmZpbHRlcihvID0+IHZhbHMuaW5jbHVkZXMob1t0aGlzLml0ZW1WYWx1ZV0pKTtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVJZHMgPSB0aGlzLnNlbGVjdGFibGVPcHRpb25zLm1hcChzID0+IHNbdGhpcy5pdGVtVmFsdWVdKTtcclxuICAgIGlmICh0aGlzLm11bHRpKSB7XHJcbiAgICAgIC8vIGlmIHNlYXJjaCBpcyBhY3RpdmUsIHByb2JhYmx5IHNvbWUgb2YgdGhlIGFscmVhZHkgc2VsZWN0ZWQgdmFsdWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHNlbGVjdGFibGUgb3B0aW9ucyxcclxuICAgICAgLy8gc28gd2UgaGF2ZSB0byBwdXNoIHRoZW0gaW4gdGhlIHNlbGVjdGVkIHZhbHVlcyBvZiB0aGUgbGlzdDtcclxuICAgICAgZm9yIChjb25zdCB2IG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICBpZiAoIXNlbGVjdGFibGVJZHMuaW5jbHVkZXModlt0aGlzLml0ZW1WYWx1ZV0pKSB7XHJcbiAgICAgICAgICB2YWxzID0gW3YsIC4uLnZhbHNdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFscy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIHJldHVybiB0eXBlb2YgYVt0aGlzLml0ZW1WYWx1ZV0gPT09ICdzdHJpbmcnID9cclxuICAgICAgICBhW3RoaXMuaXRlbVZhbHVlXS5sb2NhbGVDb21wYXJlKGJbdGhpcy5pdGVtVmFsdWVdKSA6IGFbdGhpcy5pdGVtVmFsdWVdIC0gYlt0aGlzLml0ZW1WYWx1ZV07XHJcbiAgICB9KTtcclxuICAgIHRoaXMudmFsdWUgPSBbLi4udmFsc107XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnNldFZhbHVlKHRoaXMudmFsdWUubWFwKHYgPT4gdlt0aGlzLml0ZW1WYWx1ZV0pKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Gb2N1c0luKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzT3V0KGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCkpIHtcclxuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTWVudU9wZW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5qdnhNdWx0aXNlbGVjdE9wZW4uZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25NZW51Q2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5qdnhNdWx0aXNlbGVjdENsb3NlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGRlc2VsZWN0KHZhbDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUuZmlsdGVyKHYgPT4gdlt0aGlzLml0ZW1WYWx1ZV0gIT09IHZhbFt0aGlzLml0ZW1WYWx1ZV0pXTtcclxuICAgIC8vIHRoaXMudmFsdWUuc3BsaWNlKHRoaXMudmFsdWUuZmluZEluZGV4KHYgPT4gdlt0aGlzLml0ZW1WYWx1ZV0gPT09IHZhbFt0aGlzLml0ZW1WYWx1ZV0pLCAxKTtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ3NlbGVjdGlvblZhbHVlJykuc2V0VmFsdWUodGhpcy52YWx1ZS5tYXAobSA9PiBtLnZhbHVlKSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGlvbkNvbnRhaW5lclNpemUoKTogdm9pZCB7XHJcbiAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db250YWluZXIpIHtcclxuICAgICAgICB0aGlzLmxpc3RDb250YWluZXJTaXplLmhlaWdodCA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMjYwID8gJzI2MHB4JyA6ICdhdXRvJztcclxuICAgICAgICB0aGlzLmxpc3RDb250YWluZXJTaXplLm1pbkhlaWdodCA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IDw9IDI2MCA/XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCArICdweCcgOiAnMjYwcHgnO1xyXG4gICAgICAgIHRoaXMubGlzdENvbnRhaW5lclNpemUud2lkdGggPSB0aGlzLmp2eE11bHRpc2VsZWN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbGlja09uTWVudVRyaWdnZXIoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0xpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG91bGRMb2FkTW9yZSA9IHRydWU7XHJcbiAgICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TGlzdCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9yZGVyZWRPcHRpb25zKHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMpO1xyXG4gICAgICAgICAgdGhpcy5nZXRMaXN0KCkuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25Db250YWluZXJTaXplKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRyaWdnZXIub3Blbk1lbnUoKTtcclxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQ29udGFpbmVyU2l6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExpc3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0TGlzdCh7XHJcbiAgICAgIHVybDogdGhpcy51cmwsXHJcbiAgICAgIHJlcXVlc3RUeXBlOiB0aGlzLnJlcXVlc3RUeXBlLFxyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgY3VycmVudFBhZ2U6ICsrdGhpcy5jdXJyZW50UGFnZSxcclxuICAgICAgaWdub3JlUGFnaW5hdGlvbjogdGhpcy5pZ25vcmVQYWdpbmF0aW9uLFxyXG4gICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcclxuICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFZhbHVlLFxyXG4gICAgICBzZWFyY2hQcm9wOiB0aGlzLnNlYXJjaFByb3AsXHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLmludFBhZ2VTaXplXHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKHZhbCkgPT4gdGhpcy5tdWx0aU1hcHBlci5tYXBPcHRpb25zKHZhbCkpLCBzd2l0Y2hNYXAoKHZhbCkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5saXN0UHJvcC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSBbLi4udmFsW3RoaXMubGlzdFByb3BdXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0ID0gWy4uLnZhbF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5zaG91bGRMb2FkTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbXTtcclxuXHJcbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdCBvZiByZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3T3B0aW9uID0gdGhpcy5tYXBwZXIubWFwT3B0aW9uKG9wdCk7XHJcbiAgICAgICAgICAgIG5ld09wdGlvbnMucHVzaChuZXdPcHRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZvcmtKb2luKG5ld09wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksIHN3aXRjaE1hcCgoZmluVmFsOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zLnB1c2goLi4uZmluVmFsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPcmRlcmVkT3B0aW9ucyh0aGlzLnNlbGVjdGFibGVPcHRpb25zKTtcclxuICAgICAgfSksIG1hcCgodmFsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRyaWdnZXIub3Blbk1lbnUoKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkNvbnRhaW5lclNpemUoKTtcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICB9KSwgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbGVkKGU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGUudGFyZ2V0LnNjcm9sbFRvcCArIDIyMCArICgodGhpcy5zZWFyY2hJbnB1dCA/IDAgOiAxKSAqIDQwKSA9PT0gdGhpcy5zZWxlY3Rpb25Db250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHRcclxuICAgICAgJiYgIXRoaXMuaXNMb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsRW5kLmVtaXQoKTtcclxuICAgICAgaWYgKHRoaXMudXJsICYmIHRoaXMudXJsLmxlbmd0aCA+IDAgJiYgIXRoaXMuaWdub3JlUGFnaW5hdGlvbiAmJiB0aGlzLnNob3VsZExvYWRNb3JlKSB7XHJcbiAgICAgICAgdGhpcy5nZXRMaXN0KCkuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk1lbnVPcGVuZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmp2eE11bHRpc2VsZWN0T3BlbmVkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG9uTWVudUNsb3NlZCgpOiB2b2lkIHtcclxuICAgIGlmICgoIXRoaXMudXJsIHx8IHRoaXMudXJsLmxlbmd0aCA9PT0gMCkgJiYgdGhpcy5zZWFyY2hNb2RlID09PSAnY2xpZW50Jykge1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlU3ViamVjdC5uZXh0KCcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLmp2eE11bHRpc2VsZWN0Q2xvc2VkLmVtaXQoKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaElucHV0Q2xpY2soZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoVmFsdWVDaGFuZ2UoZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlU3ViamVjdC5uZXh0KGUudGFyZ2V0LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKGU6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS5zZXRWYWx1ZSh0aGlzLnZhbHVlLm1hcCh2ID0+IHZbdGhpcy5pdGVtVmFsdWVdKSk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250cm9sRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgIC5xdWVyeVNlbGVjdG9yKCcubmctanZ4LW11bHRpc2VsZWN0Jyk7XHJcbiAgICBjb250cm9sRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBpZHMuam9pbignICcpKTtcclxuICB9XHJcblxyXG4gIG9uQ29udGFpbmVyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2lucHV0Jykge1xyXG4gICAgLy8gICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBzdGF0ZUNoYW5nZSQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlQ2hhbmdlcy5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU9yZGVyZWRPcHRpb25zKG9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgbGV0IG9icyA9IG9mKG9wdGlvbnMpO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xyXG4gICAgICB0aGlzLm9yZGVyZWRPcHRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgIGNvbnN0IG9ic0FyciA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdyb3VwQnkgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBvYnNBcnIucHVzaCh0aGlzLmdyb3VwQnkubWFwR3JvdXAob3B0aW9uKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9ic0Fyci5wdXNoKG9mKHtncm91cDogb3B0aW9uW3RoaXMuZ3JvdXBCeV0sIG9wdGlvbn0gYXMgTmdKdnhHcm91cDxhbnk+KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIG9icyA9IGZvcmtKb2luKG9ic0FycikucGlwZShtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gWy4uLm5ldyBTZXQocmVzLm1hcChpdGVtID0+IGl0ZW0uZ3JvdXApKV07XHJcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcclxuICAgICAgICAgIHRoaXMub3JkZXJlZE9wdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgICBvcHRpb25zOiByZXMuZmlsdGVyKHIgPT4gci5ncm91cCA9PT0gZ3JvdXApLm1hcChvID0+IG8ub3B0aW9uKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9yZGVyZWRPcHRpb25zO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlTWVudSgpOiB2b2lkIHtcclxuICAgIHRoaXMudHJpZ2dlci5jbG9zZU1lbnUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBkaXNhYmxlZCwgJ2hhcy1lcnJvcnMnOiBoYXNFcnJvcnN9XCIgI2p2eE11bHRpc2VsZWN0PlxyXG4gIDwhLS0gU1RBUlQgTUVOVSAtLT5cclxuICA8ZGl2IFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51UmVmXCIgKG9uTWVudU9wZW4pPVwib25NZW51T3BlbigpXCIgKG1lbnVPcGVuZWQpPVwib25NZW51T3BlbmVkKClcIlxyXG4gICAgICAgKG9uTWVudUNsb3NlKT1cIm9uTWVudUNsb3NlKClcIiAobWVudUNsb3NlZCk9XCJvbk1lbnVDbG9zZWQoKVwiXHJcbiAgICAgICAjdHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCI+XHJcbiAgICA8bWF0LW1lbnUgI21lbnVSZWY9XCJtYXRNZW51XCIgW2NsYXNzXT1cIlsnanZ4LW11bHRpc2VsZWN0LXBhbmVsJywgcGFuZWxDbGFzc10uam9pbignICcpXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCJcclxuICAgICAgICAgICAgICBbeVBvc2l0aW9uXT1cInlQb3NpdGlvblwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY2xvc2VCdXR0b25cIiBjbGFzcz1cImNsb3NlTWVudUJ1dHRvblwiPjxtYXQtaWNvbiA+Y2xvc2U8L21hdC1pY29uPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1saXN0LWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgI21lbnVMSXN0Q29udGFpbmVyXHJcbiAgICAgICAgICAgW25nU3R5bGVdPVwieydvdmVyZmxvdy15JzogJ2hpZGRlbicsICd3aWR0aCc6IGxpc3RDb250YWluZXJTaXplLndpZHRoLCAnbWF4LWhlaWdodCc6ICcyNjBweCcsICdoZWlnaHQnOiBsaXN0Q29udGFpbmVyU2l6ZS5oZWlnaHQsICdtaW4taGVpZ2h0JzogbGlzdENvbnRhaW5lclNpemUubWluSGVpZ2h0fVwiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiISFzZWFyY2hJbnB1dFwiIChjbGljayk9XCJvblNlYXJjaElucHV0Q2xpY2soJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInNlYXJjaExhYmVsXCIgW25nTW9kZWxdPVwic2VhcmNoVmFsdWVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICBbbmdKdnhGb2N1c109XCJpc09wZW5cIlxyXG4gICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvblNlYXJjaFZhbHVlQ2hhbmdlKCRldmVudClcIi8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7aGVpZ2h0OiBzZWFyY2hJbnB1dCAmJiBzZWxlY3Rpb25Db250YWluZXIuY2xpZW50SGVpZ2h0ID4gMjIwIHx8IHNlbGVjdGlvbkNvbnRhaW5lci5jbGllbnRIZWlnaHQgPiAyNjA/IDI2MCAtIChzZWFyY2hJbnB1dD8gNDAgOiAwKSArICdweCc6ICdhdXRvJ31cIj5cclxuICAgICAgICAgIDxuZy1zY3JvbGxiYXIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtb290aFNjcm9sbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmlzaWJpbGl0eV09XCInaG92ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiJ2NvbXBhY3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbnNvckRpc2FibGVkXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvSGVpZ2h0RGlzYWJsZWRdPVwiZmFsc2VcIiAjc2Nyb2xsYmFyPlxyXG4gICAgICAgICAgICA8ZGl2ICNzZWxlY3Rpb25Db250YWluZXIgKGNsaWNrKT1cIm9uQ0xpY2tPbk1lbnUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0aW9uLWxpc3QgI3NlbGVjdGlvbiBbbXVsdGlwbGVdPVwibXVsdGlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93TGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J3BhZGRpbmcnOiAwLCAnd2lkdGgnOiBsaXN0Q29udGFpbmVyU2l6ZS53aWR0aCwgJ21pbi13aWR0aC5weCc6IDExMn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGlvblZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFncm91cEJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdCBvZiBvcmRlcmVkT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBIZWFkZXJUZW1wbGF0ZT8gZ3JvdXBIZWFkZXJUZW1wbGF0ZS50ZW1wbGF0ZTogZGVmYXVsdEdyb3VwSGVhZGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogb3B0fVwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctanZ4LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbltpdGVtVmFsdWVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnNUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBvcHRpb259XCI+PC9uZy1jb250YWluZXI+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cInBhZGRpbmctaW5saW5lOiAxMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnNUZW1wbGF0ZT8gb3B0aW9uc1RlbXBsYXRlLnRlbXBsYXRlIDogZGVmYXVsdFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbn1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctanZ4LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ3JvdXBCeSB8fCBncm91cEJ5Lmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctanZ4LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHNlbGVjdGFibGVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbltpdGVtVmFsdWVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogb3B0aW9ufVwiPjwvbmctY29udGFpbmVyPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uc1RlbXBsYXRlPyBvcHRpb25zVGVtcGxhdGUudGVtcGxhdGUgOiBkZWZhdWx0VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbn1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1qdngtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1zY3JvbGxiYXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtZm9vdGVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25nLWp2eC1mb290ZXJdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRU5EIE1FTlUgLS0+XHJcbiAgPCEtLSBTVEFSVCBJTlBVVCAtLT5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnbmctanZ4LW11bHRpc2VsZWN0LXZhbHVlLWNvbnRhaW5lcic6IHRydWUsICdpcy1vcGVuJzogaXNPcGVufVwiXHJcbiAgICAgICAoY2xpY2spPVwiY2xpY2tPbk1lbnVUcmlnZ2VyKCRldmVudClcIlxyXG4gICAgICAgI3ZhbHVlQ29udGFpbmVyPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyXCIgKm5nSWY9XCJ2YWx1ZS5sZW5ndGggPT09IDBcIj5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BsYWNlaG9sZGVyXVwiPjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3QtdmFsdWUgbXVsdGktdmFsdWUtY29udGFpbmVyXCIgKm5nSWY9XCJtdWx0aVwiICNtdWx0aUNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0aW9uVGVtcGxhdGU/IHNlbGVjdGlvblRlbXBsYXRlLnRlbXBsYXRlIDogZGVmYXVsdE11bHRpU2VsZWN0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiB2YWx1ZX1cIj48L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdC12YWx1ZSBzaW5nbGUtdmFsdWUtY29udGFpbmVyXCIgKm5nSWY9XCIhbXVsdGlcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsIG9mIHZhbHVlXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0aW9uVGVtcGxhdGU/IHNlbGVjdGlvblRlbXBsYXRlLnRlbXBsYXRlIDogZGVmYXVsdFNlbGVjdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IHZhbH1cIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdF9fcmVtb3ZlLWJ1dHRvblwiICpuZ0lmPVwiY2xlYXJhYmxlICYmIHZhbHVlLmxlbmd0aCA+IDBcIiAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiPlxyXG4gICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1wiPmNsZWFyXHJcbiAgICAgIDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3QtYXJyb3dcIj5cclxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWlzTG9hZGluZ1wiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwibGRzLXJpbmdcIj5cclxuICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRU5EIElOUFVUIC0tPlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGUgbGV0LW9wdGlvbj5cclxuICA8ZGl2IHN0eWxlPVwibWF4LXdpZHRoOiAxMDAlO1xyXG4gICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcIj57e29wdGlvbltpdGVtVGV4dF19fVxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0U2VsZWN0aW9uVGVtcGxhdGUgbGV0LXZhbHVlPlxyXG4gIHt7dmFsdWVbaXRlbVRleHRdfX1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE11bHRpU2VsZWN0aW9uVGVtcGxhdGUgbGV0LXZhbHVlPlxyXG4gIDxtYXQtY2hpcC1saXN0Ym94ICNjaGlwTGlzdCBbZGlzYWJsZWRdPVwidGhpcy5kaXNhYmxlZFwiPlxyXG4gICAgPG1hdC1jaGlwLW9wdGlvbiBbY29sb3JdPVwiJ3ByaW1hcnknXCIgc2VsZWN0ZWQgKm5nRm9yPVwibGV0IHZhbCBvZiB2YWx1ZVwiIFtzZWxlY3RhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdC1jaGlwXCJcclxuICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlZCk9XCJkZXNlbGVjdCh2YWwpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAtY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21heC13aWR0aCc6IG11bHRpQ29udGFpbmVyV2lkdGggLSA1MCArJ3B4J31cIj57e3ZhbFtpdGVtVGV4dF19fTwvc3Bhbj5cclxuXHJcbiAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICA8L21hdC1jaGlwLW9wdGlvbj5cclxuICA8L21hdC1jaGlwLWxpc3Rib3g+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyb3VwSGVhZGVyVGVtcGxhdGUgbGV0LW9wdD5cclxuICA8ZGl2IHN0eWxlPVwicGFkZGluZy1pbmxpbmU6IDE1cHhcIj48c3Ryb25nPnt7b3B0Lmdyb3VwfX08L3N0cm9uZz48L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|
|
630
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctanZ4LW11bHRpc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWp2eC1tdWx0aXNlbGVjdC9zcmMvbGliL25nLWp2eC1tdWx0aXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1qdngtbXVsdGlzZWxlY3Qvc3JjL2xpYi9uZy1qdngtbXVsdGlzZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLElBQUksRUFFSixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUM3RixPQUFPLEVBQXNELGtCQUFrQixFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRXpILE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRzdFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUVqRCxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2xHLE9BQU8sRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUvRSxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUNqRyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxP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SztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRU8sS0FBSztzQkFBakIsS0FBSztnQkFjRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdGLFFBQVE7c0JBRFgsS0FBSztnQkFjRixRQUFRO3NCQURYLEtBQUs7Z0JBWUYsUUFBUTtzQkFEWCxLQUFLO2dCQXdCSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNlbGYsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdKdnhPcHRpb25zVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9uZy1qdngtb3B0aW9ucy10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TWF0U2VsZWN0aW9uTGlzdCwgTWF0U2VsZWN0aW9uTGlzdENoYW5nZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGlzdCc7XHJcbmltcG9ydCB7TmdKdnhPcHRpb25Db21wb25lbnR9IGZyb20gJy4vbmctanZ4LW9wdGlvbi9uZy1qdngtb3B0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TWF0TWVudVRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQge05nSnZ4TXVsdGlzZWxlY3RTZXJ2aWNlfSBmcm9tICcuL25nLWp2eC1tdWx0aXNlbGVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge05nU2Nyb2xsYmFyfSBmcm9tICduZ3gtc2Nyb2xsYmFyJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtmb3JrSm9pbiwgZnJvbUV2ZW50LCBub29wLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGltZXJ9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge05nSnZ4TXVsdGlPcHRpb25NYXBwZXIsIE5nSnZ4T3B0aW9uTWFwcGVyfSBmcm9tICcuL2ludGVyZmFjZXMvbmctanZ4LW9wdGlvbi1tYXBwZXInO1xyXG5pbXBvcnQge05nSnZ4U2VsZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9uZy1qdngtc2VsZWN0aW9uLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7TWF0Rm9ybUZpZWxkQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQge05nSnZ4R3JvdXBIZWFkZXJEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9uZy1qdngtZ3JvdXAtaGVhZGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7TmdKdnhTZWFyY2hNYXBwZXJ9IGZyb20gJy4vaW50ZXJmYWNlcy9uZy1qdngtc2VhcmNoLW1hcHBlcic7XHJcbmltcG9ydCB7TmdKdnhHcm91cCwgTmdKdnhHcm91cE1hcHBlcn0gZnJvbSAnLi9pbnRlcmZhY2VzL25nLWp2eC1ncm91cC1tYXBwZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnbmctanZ4LW11bHRpc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmctanZ4LW11bHRpc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uZy1qdngtbXVsdGlzZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ0p2eE11bHRpc2VsZWN0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdKdnhNdWx0aXNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE1hdEZvcm1GaWVsZENvbnRyb2w8YW55PixcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgQEhvc3RCaW5kaW5nKCkgaWQgPSBganZ4LW11bHRpc2VsZWN0LSR7TmdKdnhNdWx0aXNlbGVjdENvbXBvbmVudC5uZXh0SWQrK31gO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcclxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdqdnhNdWx0aXNlbGVjdCcsIHtzdGF0aWM6IHRydWV9KSBqdnhNdWx0aXNlbGVjdDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3Rpb25Db250YWluZXInLCB7c3RhdGljOiBmYWxzZX0pIHNlbGVjdGlvbkNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3Rpb24nLCB7c3RhdGljOiB0cnVlfSkgc2VsZWN0aW9uOiBNYXRTZWxlY3Rpb25MaXN0O1xyXG4gIEBWaWV3Q2hpbGQoJ3RyaWdnZXInLCB7c3RhdGljOiB0cnVlfSkgdHJpZ2dlcjogTWF0TWVudVRyaWdnZXI7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsYmFyJywge3N0YXRpYzogZmFsc2V9KSBzY3JvbGxiYXI6IE5nU2Nyb2xsYmFyO1xyXG4gIEBWaWV3Q2hpbGQoJ211bHRpQ29udGFpbmVyJywge3N0YXRpYzogZmFsc2V9KSBtdWx0aUNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkcmVuKE5nSnZ4T3B0aW9uQ29tcG9uZW50KSBvcHRpb25Db21wOiBRdWVyeUxpc3Q8TmdKdnhPcHRpb25Db21wb25lbnQ+O1xyXG4gIEBDb250ZW50Q2hpbGQoTmdKdnhPcHRpb25zVGVtcGxhdGVEaXJlY3RpdmUpIG9wdGlvbnNUZW1wbGF0ZTogTmdKdnhPcHRpb25zVGVtcGxhdGVEaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcclxuICBAQ29udGVudENoaWxkKE5nSnZ4U2VsZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUpIHNlbGVjdGlvblRlbXBsYXRlOiBOZ0p2eFNlbGVjdGlvblRlbXBsYXRlRGlyZWN0aXZlIHwgbnVsbCA9IG51bGw7XHJcbiAgQENvbnRlbnRDaGlsZChOZ0p2eEdyb3VwSGVhZGVyRGlyZWN0aXZlKSBncm91cEhlYWRlclRlbXBsYXRlOiBOZ0p2eEdyb3VwSGVhZGVyRGlyZWN0aXZlIHwgbnVsbCA9IG51bGw7XHJcbiAgLy8gQENvbnRlbnRDaGlsZChOZ0p2eE9wdGlvbkNvbXBvbmVudCkgb3B0aW9uQ29tcDogTmdKdnhPcHRpb25Db21wb25lbnQ7XHJcbiAgLy8gQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZikgb3B0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBtdWx0aSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVybCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJlcXVlc3RUeXBlOiAnZ2V0JyB8ICdwb3N0JyA9ICdnZXQnO1xyXG4gIEBJbnB1dCgpIGl0ZW1WYWx1ZSA9ICd2YWx1ZSc7XHJcbiAgQElucHV0KCkgaXRlbVRleHQgPSAndGV4dCc7XHJcbiAgQElucHV0KCkgaWdub3JlUGFnaW5hdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNsb3NlT25DbGljayA9IHRydWU7XHJcbiAgQElucHV0KCkgaGFzRXJyb3JzID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoTW9kZTogbnVsbCB8ICdzZXJ2ZXInIHwgJ2NsaWVudCcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNlYXJjaElucHV0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoTGFiZWwgPSAnc2VhcmNoJztcclxuICBASW5wdXQoKSBsaXN0UHJvcCA9ICcnO1xyXG4gIEBJbnB1dCgpIHRvdGFsUm93c1Byb3AgPSAnJztcclxuICBASW5wdXQoKSBwYW5lbENsYXNzID0gJyc7XHJcbiAgQElucHV0KCkgc2VhcmNoUHJvcCA9ICdzZWFyY2gnO1xyXG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWFwcGVyOiBOZ0p2eE9wdGlvbk1hcHBlcjxhbnk+ID0ge1xyXG4gICAgbWFwT3B0aW9uKHNvdXJjZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIG9mKHNvdXJjZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBASW5wdXQoKSBtdWx0aU1hcHBlcjogTmdKdnhNdWx0aU9wdGlvbk1hcHBlcjxhbnk+ID0ge1xyXG4gICAgbWFwT3B0aW9ucyhzb3VyY2U6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIG9mKHNvdXJjZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBASW5wdXQoKSBzZWFyY2hNYXBwZXI6IE5nSnZ4U2VhcmNoTWFwcGVyPGFueT4gPSB7XHJcbiAgICBtYXBTZWFyY2g6IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgICByZXR1cm4gb2Yob3B0aW9ucy5maWx0ZXIobyA9PiBvW3RoaXMuaXRlbVRleHRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzb3VyY2UudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSkpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgQElucHV0KCkgZ3JvdXBCeTogTmdKdnhHcm91cE1hcHBlcjxhbnk+IHwgc3RyaW5nIHwgbnVsbDtcclxuXHJcbiAgQElucHV0KCkgc2V0IHZhbHVlKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5wVmFsdWUgPSB2YWx1ZSA/PyBbXTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnNldFZhbHVlKHRoaXMucFZhbHVlLm1hcCh2ID0+IHZbdGhpcy5pdGVtVmFsdWVdKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2YWx1ZSgpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wVmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSByZXF1ZXN0SGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgcmVxdWlyZWQocmVxKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXEpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcclxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnBhcnRzLmRpc2FibGUoKSA6IHRoaXMucGFydHMuZW5hYmxlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuaW50UGFnZVNpemU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGFnZVNpemUodmFsOiBudW1iZXIpIHtcclxuICAgIGlmICh2YWwgPCAxNSkge1xyXG4gICAgICB0aGlzLmludFBhZ2VTaXplID0gMTU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludFBhZ2VTaXplID0gdmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcclxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICBnZXQgZXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm5nQ29udHJvbC5pbnZhbGlkICYmIHRoaXMubmdDb250cm9sLnRvdWNoZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG4gIEBPdXRwdXQoKSBqdnhNdWx0aXNlbGVjdE9wZW46IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkganZ4TXVsdGlzZWxlY3RPcGVuZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkganZ4TXVsdGlzZWxlY3RDbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBqdnhNdWx0aXNlbGVjdENsb3NlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBzY3JvbGxFbmQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGNvbnRyb2xUeXBlID0gJ25nLWp2eC1tdWx0aXNlbGVjdCc7XHJcbiAgcHVibGljIGRvY3VtZW50ID0gZG9jdW1lbnQ7XHJcbiAgcHVibGljIHdpbmRvdyA9IHdpbmRvdztcclxuICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93TGlzdCA9IHRydWU7XHJcbiAgcHVibGljIGFzeW5jT3B0aW9uczogYW55ID0gW107XHJcbiAgcHVibGljIHNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgcHVibGljIG9yZGVyZWRPcHRpb25zOiB7IGdyb3VwOiBhbnksIG9wdGlvbnM6IGFueVtdIH1bXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWFyY2hWYWx1ZSA9ICcnO1xyXG4gIHB1YmxpYyB5UG9zaXRpb246ICdhYm92ZScgfCAnYmVsb3cnID0gJ2Fib3ZlJztcclxuICBwdWJsaWMgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwdWJsaWMgY3VycmVudFBhZ2UgPSAwO1xyXG4gIHB1YmxpYyBsaXN0Q29udGFpbmVyU2l6ZTogeyBoZWlnaHQ6IHN0cmluZywgbWluSGVpZ2h0OiBzdHJpbmcsIHdpZHRoOiBzdHJpbmcgfSA9IHtoZWlnaHQ6ICdhdXRvJywgbWluSGVpZ2h0OiAnMCcsIHdpZHRoOiAnMTAwJSd9O1xyXG4gIHB1YmxpYyBwYXJ0czogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgcHVibGljIHRvdWNoZWQgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcHVibGljIGZvY3VzZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgbXVsdGlDb250YWluZXJXaWR0aCA9IDEwMDtcclxuXHJcbiAgcHJpdmF0ZSBzZWFyY2hWYWx1ZVN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcHJpdmF0ZSBzZWFyY2hWYWx1ZSQgPSB0aGlzLnNlYXJjaFZhbHVlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICBwcml2YXRlIHBWYWx1ZTogYW55W10gPSBbXTtcclxuICBwcml2YXRlIHNob3VsZExvYWRNb3JlID0gdHJ1ZTtcclxuICBwcml2YXRlIHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IHRoaXMudW5zdWJzY3JpYmUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJpdmF0ZSBpbnRQYWdlU2l6ZSA9IDE1O1xyXG4gIHB1YmxpYyBvblRvdWNoZWQgPSAoKSA9PiB7XHJcbiAgfTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlciwgcHJpdmF0ZSBzZXJ2aWNlOiBOZ0p2eE11bHRpc2VsZWN0U2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIpIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXHJcbiAgICAgIC8vIHRoZSBwcm92aWRlcnMpIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydC5cclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYXJ0cyA9IGZiLmdyb3VwKHtcclxuICAgICAgYXJlYTogJycsXHJcbiAgICAgIGV4Y2hhbmdlOiAnJyxcclxuICAgICAgc3Vic2NyaWJlcjogJycsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBzZWxlY3Rpb25WYWx1ZTogbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLnNlbGVjdGlvblZhbHVlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2UkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLnNldFNlbGVjdGFibGVPcHRpb25zKHRoaXMub3B0aW9ucykuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xyXG4gICAgdGhpcy51cGRhdGVPcmRlcmVkT3B0aW9ucyh0aGlzLnNlbGVjdGFibGVPcHRpb25zKS5zdWJzY3JpYmUobm9vcCk7XHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSgxMDApLCBtYXAoKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5saXN0Q29udGFpbmVyU2l6ZS53aWR0aCA9IHRoaXMuanZ4TXVsdGlzZWxlY3QubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XHJcblxyXG4gICAgfSksIHN3aXRjaE1hcCgoKSA9PiB0aW1lcigxMDApKSwgdGFwKCgpID0+IHtcclxuICAgICAgdGhpcy5tdWx0aUNvbnRhaW5lcldpZHRoID0gdGhpcy5tdWx0aUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMTAwO1xyXG4gICAgICB0aGlzLnlQb3NpdGlvbiA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuanZ4TXVsdGlzZWxlY3QubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/LnRvcCA8IDI2MCA/ICdhYm92ZScgOiAnYmVsb3cnO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSkpLnN1YnNjcmliZShub29wKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSwgZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnIgPT09IHRoaXMuc2VhcmNoVmFsdWU7XHJcbiAgICAgIH0pLCBzd2l0Y2hNYXAoKHZhbDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNb2RlID09PSAnY2xpZW50Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbGllbnRTZWFyY2goKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51cmwgJiYgdGhpcy51cmwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJTZWFyY2goKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICkuc3Vic2NyaWJlKCh2YWw6IGFueVtdKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xpZW50U2VhcmNoKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBpZiAodGhpcy51cmwgJiYgdGhpcy51cmwubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucykuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICB0aGlzLnNob3VsZExvYWRNb3JlID0gdHJ1ZTtcclxuICAgICAgb2JzID0gdGhpcy5nZXRMaXN0KCkucGlwZShtYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVPcHRpb25zO1xyXG4gICAgICB9KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYnMgPSBvZih0aGlzLm9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9icy5waXBlKHN3aXRjaE1hcCgodmFsKSA9PiB0aGlzLnNlYXJjaE1hcHBlci5tYXBTZWFyY2godGhpcy5zZWFyY2hWYWx1ZSwgdmFsKSksIHN3aXRjaE1hcCgocmVzKSA9PiB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMuc2V0U2VsZWN0YWJsZU9wdGlvbnMocmVzKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5wdXNoKC4uLnJlcyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RhYmxlT3B0aW9ucyhvcHRpb25zOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8YW55PltdID0gb3B0aW9ucy5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xyXG4gICAgICBhY2MucHVzaCh0aGlzLm1hcHBlci5tYXBPcHRpb24oY3VycikpO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW10pO1xyXG5cclxuICAgIC8vIHRoaXMubWFwcGVyLm1hcE9wdGlvbihvcHRpb24pO1xyXG5cclxuICAgIHJldHVybiBmb3JrSm9pbihbLi4ub2JzXSkucGlwZShzd2l0Y2hNYXAoKHZhbCkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zLnB1c2goLi4udmFsKTtcclxuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucyk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlcnZlclNlYXJjaCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5zaG91bGRMb2FkTW9yZSA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICB0aGlzLnNob3VsZExvYWRNb3JlID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzLmdldExpc3QoKTtcclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdENvbnRhaW5lclNpemUud2lkdGggPSB0aGlzLmp2eE11bHRpc2VsZWN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2Nyb2xsYmFyKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsYmFyLnNjcm9sbGVkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKChlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm9uU2Nyb2xsZWQoZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGltZXIoMCkucGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLm11bHRpQ29udGFpbmVyV2lkdGggPSB0aGlzLm11bHRpQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAxMDA7XHJcbiAgICAgIHRoaXMueVBvc2l0aW9uID0gd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5qdnhNdWx0aXNlbGVjdC5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8udG9wIDwgMjYwID8gJ2Fib3ZlJyA6ICdiZWxvdyc7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KSkuc3Vic2NyaWJlKG5vb3ApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMub3B0aW9ucykge1xyXG4gICAgICAvLyB0aGlzLnNldFNlbGVjdGFibGVPcHRpb25zKHRoaXMub3B0aW9ucykuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gWy4uLnRoaXMub3B0aW9uc107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IHNlbGVjdGlvblZhbHVlKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlLm1hcCgodikgPT4ge1xyXG4gICAgICByZXR1cm4gdlt0aGlzLml0ZW1WYWx1ZV07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG4gPSB0aGlzLnBhcnRzLnZhbHVlO1xyXG4gICAgcmV0dXJuICFuLmFyZWEgJiYgIW4uZXhjaGFuZ2UgJiYgIW4uc3Vic2NyaWJlcjtcclxuICB9XHJcblxyXG4gIG9uQ0xpY2tPbk1lbnUoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubXVsdGkgfHwgdGhpcy5jbG9zZU9uQ2xpY2sgPT09IGZhbHNlKSB7XHJcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBwcm9wYWdhdGVDaGFuZ2UoXzogYW55KTogYW55IHtcclxuICB9XHJcblxyXG4gIC8vIHRoaXMgaXMgdGhlIGluaXRpYWwgdmFsdWUgc2V0IHRvIHRoZSBjb21wb25lbnRcclxuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IGFueVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xyXG4gIH1cclxuXHJcbiAgLy8gcmVnaXN0ZXJzICdmbicgdGhhdCB3aWxsIGJlIGZpcmVkIHdoZW4gY2hhbmdlcyBhcmUgbWFkZVxyXG4gIC8vIHRoaXMgaXMgaG93IHdlIGVtaXQgdGhlIGNoYW5nZXMgYmFjayB0byB0aGUgZm9ybVxyXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UoZTogTWF0U2VsZWN0aW9uTGlzdENoYW5nZSk6IHZvaWQge1xyXG5cclxuICAgIGxldCB2YWxzID0gZS5zb3VyY2Uuc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLm1hcChvID0+IG8udmFsdWUpO1xyXG4gICAgdmFscyA9IHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMuZmlsdGVyKG8gPT4gdmFscy5pbmNsdWRlcyhvW3RoaXMuaXRlbVZhbHVlXSkpO1xyXG4gICAgY29uc3Qgc2VsZWN0YWJsZUlkcyA9IHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMubWFwKHMgPT4gc1t0aGlzLml0ZW1WYWx1ZV0pO1xyXG4gICAgaWYgKHRoaXMubXVsdGkpIHtcclxuICAgICAgLy8gaWYgc2VhcmNoIGlzIGFjdGl2ZSwgcHJvYmFibHkgc29tZSBvZiB0aGUgYWxyZWFkeSBzZWxlY3RlZCB2YWx1ZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgc2VsZWN0YWJsZSBvcHRpb25zLFxyXG4gICAgICAvLyBzbyB3ZSBoYXZlIHRvIHB1c2ggdGhlbSBpbiB0aGUgc2VsZWN0ZWQgdmFsdWVzIG9mIHRoZSBsaXN0O1xyXG4gICAgICBmb3IgKGNvbnN0IHYgb2YgdGhpcy52YWx1ZSkge1xyXG4gICAgICAgIGlmICghc2VsZWN0YWJsZUlkcy5pbmNsdWRlcyh2W3RoaXMuaXRlbVZhbHVlXSkpIHtcclxuICAgICAgICAgIHZhbHMgPSBbdiwgLi4udmFsc107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB2YWxzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgcmV0dXJuIHR5cGVvZiBhW3RoaXMuaXRlbVZhbHVlXSA9PT0gJ3N0cmluZycgP1xyXG4gICAgICAgIGFbdGhpcy5pdGVtVmFsdWVdLmxvY2FsZUNvbXBhcmUoYlt0aGlzLml0ZW1WYWx1ZV0pIDogYVt0aGlzLml0ZW1WYWx1ZV0gLSBiW3RoaXMuaXRlbVZhbHVlXTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy52YWx1ZSA9IFsuLi52YWxzXTtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ3NlbGVjdGlvblZhbHVlJykuc2V0VmFsdWUodGhpcy52YWx1ZS5tYXAodiA9PiB2W3RoaXMuaXRlbVZhbHVlXSkpO1xyXG5cclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG5cclxuICBvbkZvY3VzSW4oZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRm9jdXNPdXQoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBFbGVtZW50KSkge1xyXG4gICAgICB0aGlzLnRvdWNoZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25NZW51T3BlbigpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmp2eE11bHRpc2VsZWN0T3Blbi5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbk1lbnVDbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICB0aGlzLmp2eE11bHRpc2VsZWN0Q2xvc2UuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgZGVzZWxlY3QodmFsOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZS5maWx0ZXIodiA9PiB2W3RoaXMuaXRlbVZhbHVlXSAhPT0gdmFsW3RoaXMuaXRlbVZhbHVlXSldO1xyXG4gICAgLy8gdGhpcy52YWx1ZS5zcGxpY2UodGhpcy52YWx1ZS5maW5kSW5kZXgodiA9PiB2W3RoaXMuaXRlbVZhbHVlXSA9PT0gdmFsW3RoaXMuaXRlbVZhbHVlXSksIDEpO1xyXG4gICAgdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS5zZXRWYWx1ZSh0aGlzLnZhbHVlLm1hcChtID0+IG0udmFsdWUpKTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0aW9uQ29udGFpbmVyU2l6ZSgpOiB2b2lkIHtcclxuICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkNvbnRhaW5lcikge1xyXG4gICAgICAgIHRoaXMubGlzdENvbnRhaW5lclNpemUuaGVpZ2h0ID0gdGhpcy5zZWxlY3Rpb25Db250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgPiAyNjAgPyAnMjYwcHgnIDogJ2F1dG8nO1xyXG4gICAgICAgIHRoaXMubGlzdENvbnRhaW5lclNpemUubWluSGVpZ2h0ID0gdGhpcy5zZWxlY3Rpb25Db250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgPD0gMjYwID9cclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgJ3B4JyA6ICcyNjBweCc7XHJcbiAgICAgICAgdGhpcy5saXN0Q29udGFpbmVyU2l6ZS53aWR0aCA9IHRoaXMuanZ4TXVsdGlzZWxlY3QubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsaWNrT25NZW51VHJpZ2dlcihlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5zaG93TGlzdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3VsZExvYWRNb3JlID0gdHJ1ZTtcclxuICAgICAgdGltZXIoMCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dMaXN0ID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy51cmwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgICAgIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucyk7XHJcbiAgICAgICAgICB0aGlzLmdldExpc3QoKS5zdWJzY3JpYmUobm9vcCk7XHJcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkNvbnRhaW5lclNpemUoKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudHJpZ2dlci5vcGVuTWVudSgpO1xyXG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25Db250YWluZXJTaXplKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TGlzdCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5nZXRMaXN0KHtcclxuICAgICAgdXJsOiB0aGlzLnVybCxcclxuICAgICAgcmVxdWVzdFR5cGU6IHRoaXMucmVxdWVzdFR5cGUsXHJcbiAgICAgIGRhdGE6IHt9LFxyXG4gICAgICBjdXJyZW50UGFnZTogKyt0aGlzLmN1cnJlbnRQYWdlLFxyXG4gICAgICBpZ25vcmVQYWdpbmF0aW9uOiB0aGlzLmlnbm9yZVBhZ2luYXRpb24sXHJcbiAgICAgIHJlcXVlc3RIZWFkZXJzOiB0aGlzLnJlcXVlc3RIZWFkZXJzLFxyXG4gICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgIHNlYXJjaFByb3A6IHRoaXMuc2VhcmNoUHJvcCxcclxuICAgICAgcGFnZVNpemU6IHRoaXMuaW50UGFnZVNpemVcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgodmFsKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbCA/PyBbXTtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcCgodmFsKSA9PiB0aGlzLm11bHRpTWFwcGVyLm1hcE9wdGlvbnModmFsKSksIHN3aXRjaE1hcCgodmFsKSA9PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICByZXN1bHQgPSBbXTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGlzdFByb3AubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gWy4uLih2YWxbdGhpcy5saXN0UHJvcF0gPz8gW10pXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0ID0gWy4uLnZhbF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5zaG91bGRMb2FkTW9yZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbXTtcclxuXHJcbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdCBvZiByZXN1bHQpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3T3B0aW9uID0gdGhpcy5tYXBwZXIubWFwT3B0aW9uKG9wdCk7XHJcbiAgICAgICAgICAgIG5ld09wdGlvbnMucHVzaChuZXdPcHRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZvcmtKb2luKG5ld09wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksIHN3aXRjaE1hcCgoZmluVmFsOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zLnB1c2goLi4uZmluVmFsKTtcclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPcmRlcmVkT3B0aW9ucyh0aGlzLnNlbGVjdGFibGVPcHRpb25zKTtcclxuICAgICAgfSksIG1hcCgodmFsKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRyaWdnZXIub3Blbk1lbnUoKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkNvbnRhaW5lclNpemUoKTtcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICB9KSwgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbGVkKGU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKGUudGFyZ2V0LnNjcm9sbFRvcCArIDIyMCArICgodGhpcy5zZWFyY2hJbnB1dCA/IDAgOiAxKSAqIDQwKSA9PT0gdGhpcy5zZWxlY3Rpb25Db250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHRcclxuICAgICAgJiYgIXRoaXMuaXNMb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsRW5kLmVtaXQoKTtcclxuICAgICAgaWYgKHRoaXMudXJsICYmIHRoaXMudXJsLmxlbmd0aCA+IDAgJiYgIXRoaXMuaWdub3JlUGFnaW5hdGlvbiAmJiB0aGlzLnNob3VsZExvYWRNb3JlKSB7XHJcbiAgICAgICAgdGhpcy5nZXRMaXN0KCkuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk1lbnVPcGVuZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmp2eE11bHRpc2VsZWN0T3BlbmVkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG9uTWVudUNsb3NlZCgpOiB2b2lkIHtcclxuICAgIGlmICgoIXRoaXMudXJsIHx8IHRoaXMudXJsLmxlbmd0aCA9PT0gMCkgJiYgdGhpcy5zZWFyY2hNb2RlID09PSAnY2xpZW50Jykge1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlU3ViamVjdC5uZXh0KCcnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLmp2eE11bHRpc2VsZWN0Q2xvc2VkLmVtaXQoKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaElucHV0Q2xpY2soZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoVmFsdWVDaGFuZ2UoZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlU3ViamVjdC5uZXh0KGUudGFyZ2V0LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNsZWFyKGU6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS5zZXRWYWx1ZSh0aGlzLnZhbHVlLm1hcCh2ID0+IHZbdGhpcy5pdGVtVmFsdWVdKSk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250cm9sRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgIC5xdWVyeVNlbGVjdG9yKCcubmctanZ4LW11bHRpc2VsZWN0Jyk7XHJcbiAgICBjb250cm9sRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCBpZHMuam9pbignICcpKTtcclxuICB9XHJcblxyXG4gIG9uQ29udGFpbmVyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIGlmICgoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2lucHV0Jykge1xyXG4gICAgLy8gICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBzdGF0ZUNoYW5nZSQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlQ2hhbmdlcy5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU9yZGVyZWRPcHRpb25zKG9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgbGV0IG9icyA9IG9mKG9wdGlvbnMpO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xyXG4gICAgICB0aGlzLm9yZGVyZWRPcHRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgIGNvbnN0IG9ic0FyciA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdyb3VwQnkgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBvYnNBcnIucHVzaCh0aGlzLmdyb3VwQnkubWFwR3JvdXAob3B0aW9uKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9ic0Fyci5wdXNoKG9mKHtncm91cDogb3B0aW9uW3RoaXMuZ3JvdXBCeV0sIG9wdGlvbn0gYXMgTmdKdnhHcm91cDxhbnk+KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIG9icyA9IGZvcmtKb2luKG9ic0FycikucGlwZShtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gWy4uLm5ldyBTZXQocmVzLm1hcChpdGVtID0+IGl0ZW0uZ3JvdXApKV07XHJcbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcclxuICAgICAgICAgIHRoaXMub3JkZXJlZE9wdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgICBvcHRpb25zOiByZXMuZmlsdGVyKHIgPT4gci5ncm91cCA9PT0gZ3JvdXApLm1hcChvID0+IG8ub3B0aW9uKVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm9yZGVyZWRPcHRpb25zO1xyXG4gICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlTWVudSgpOiB2b2lkIHtcclxuICAgIHRoaXMudHJpZ2dlci5jbG9zZU1lbnUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBkaXNhYmxlZCwgJ2hhcy1lcnJvcnMnOiBoYXNFcnJvcnN9XCIgI2p2eE11bHRpc2VsZWN0PlxyXG4gIDwhLS0gU1RBUlQgTUVOVSAtLT5cclxuICA8ZGl2IFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51UmVmXCIgKG9uTWVudU9wZW4pPVwib25NZW51T3BlbigpXCIgKG1lbnVPcGVuZWQpPVwib25NZW51T3BlbmVkKClcIlxyXG4gICAgICAgKG9uTWVudUNsb3NlKT1cIm9uTWVudUNsb3NlKClcIiAobWVudUNsb3NlZCk9XCJvbk1lbnVDbG9zZWQoKVwiXHJcbiAgICAgICAjdHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCI+XHJcbiAgICA8bWF0LW1lbnUgI21lbnVSZWY9XCJtYXRNZW51XCIgW2NsYXNzXT1cIlsnanZ4LW11bHRpc2VsZWN0LXBhbmVsJywgcGFuZWxDbGFzc10uam9pbignICcpXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCJcclxuICAgICAgICAgICAgICBbeVBvc2l0aW9uXT1cInlQb3NpdGlvblwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiY2xvc2VCdXR0b25cIiBjbGFzcz1cImNsb3NlTWVudUJ1dHRvblwiPjxtYXQtaWNvbiA+Y2xvc2U8L21hdC1pY29uPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1saXN0LWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgI21lbnVMSXN0Q29udGFpbmVyXHJcbiAgICAgICAgICAgW25nU3R5bGVdPVwieydvdmVyZmxvdy15JzogJ2hpZGRlbicsICd3aWR0aCc6IGxpc3RDb250YWluZXJTaXplLndpZHRoLCAnbWF4LWhlaWdodCc6ICcyNjBweCcsICdoZWlnaHQnOiBsaXN0Q29udGFpbmVyU2l6ZS5oZWlnaHQsICdtaW4taGVpZ2h0JzogbGlzdENvbnRhaW5lclNpemUubWluSGVpZ2h0fVwiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiISFzZWFyY2hJbnB1dFwiIChjbGljayk9XCJvblNlYXJjaElucHV0Q2xpY2soJGV2ZW50KVwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInNlYXJjaExhYmVsXCIgW25nTW9kZWxdPVwic2VhcmNoVmFsdWVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICBbbmdKdnhGb2N1c109XCJpc09wZW5cIlxyXG4gICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvblNlYXJjaFZhbHVlQ2hhbmdlKCRldmVudClcIi8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7aGVpZ2h0OiBzZWFyY2hJbnB1dCAmJiBzZWxlY3Rpb25Db250YWluZXIuY2xpZW50SGVpZ2h0ID4gMjIwIHx8IHNlbGVjdGlvbkNvbnRhaW5lci5jbGllbnRIZWlnaHQgPiAyNjA/IDI2MCAtIChzZWFyY2hJbnB1dD8gNDAgOiAwKSArICdweCc6ICdhdXRvJ31cIj5cclxuICAgICAgICAgIDxuZy1zY3JvbGxiYXIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtb290aFNjcm9sbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmlzaWJpbGl0eV09XCInaG92ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiJ2NvbXBhY3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbnNvckRpc2FibGVkXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvSGVpZ2h0RGlzYWJsZWRdPVwiZmFsc2VcIiAjc2Nyb2xsYmFyPlxyXG4gICAgICAgICAgICA8ZGl2ICNzZWxlY3Rpb25Db250YWluZXIgKGNsaWNrKT1cIm9uQ0xpY2tPbk1lbnUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0aW9uLWxpc3QgI3NlbGVjdGlvbiBbbXVsdGlwbGVdPVwibXVsdGlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93TGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J3BhZGRpbmcnOiAwLCAnd2lkdGgnOiBsaXN0Q29udGFpbmVyU2l6ZS53aWR0aCwgJ21pbi13aWR0aC5weCc6IDExMn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGlvblZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFncm91cEJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdCBvZiBvcmRlcmVkT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBIZWFkZXJUZW1wbGF0ZT8gZ3JvdXBIZWFkZXJUZW1wbGF0ZS50ZW1wbGF0ZTogZGVmYXVsdEdyb3VwSGVhZGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogb3B0fVwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctanZ4LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbltpdGVtVmFsdWVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnNUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBvcHRpb259XCI+PC9uZy1jb250YWluZXI+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cInBhZGRpbmctaW5saW5lOiAxMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnNUZW1wbGF0ZT8gb3B0aW9uc1RlbXBsYXRlLnRlbXBsYXRlIDogZGVmYXVsdFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbn1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctanZ4LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ3JvdXBCeSB8fCBncm91cEJ5Lmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctanZ4LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHNlbGVjdGFibGVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbltpdGVtVmFsdWVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogb3B0aW9ufVwiPjwvbmctY29udGFpbmVyPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uc1RlbXBsYXRlPyBvcHRpb25zVGVtcGxhdGUudGVtcGxhdGUgOiBkZWZhdWx0VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbn1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1qdngtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1zY3JvbGxiYXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtZm9vdGVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25nLWp2eC1mb290ZXJdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L21hdC1tZW51PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRU5EIE1FTlUgLS0+XHJcbiAgPCEtLSBTVEFSVCBJTlBVVCAtLT5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnbmctanZ4LW11bHRpc2VsZWN0LXZhbHVlLWNvbnRhaW5lcic6IHRydWUsICdpcy1vcGVuJzogaXNPcGVufVwiXHJcbiAgICAgICAoY2xpY2spPVwiY2xpY2tPbk1lbnVUcmlnZ2VyKCRldmVudClcIlxyXG4gICAgICAgI3ZhbHVlQ29udGFpbmVyPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyXCIgKm5nSWY9XCJ2YWx1ZS5sZW5ndGggPT09IDBcIj5cclxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BsYWNlaG9sZGVyXVwiPjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3QtdmFsdWUgbXVsdGktdmFsdWUtY29udGFpbmVyXCIgKm5nSWY9XCJtdWx0aVwiICNtdWx0aUNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0aW9uVGVtcGxhdGU/IHNlbGVjdGlvblRlbXBsYXRlLnRlbXBsYXRlIDogZGVmYXVsdE11bHRpU2VsZWN0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiB2YWx1ZX1cIj48L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdC12YWx1ZSBzaW5nbGUtdmFsdWUtY29udGFpbmVyXCIgKm5nSWY9XCIhbXVsdGlcIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsIG9mIHZhbHVlXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0aW9uVGVtcGxhdGU/IHNlbGVjdGlvblRlbXBsYXRlLnRlbXBsYXRlIDogZGVmYXVsdFNlbGVjdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IHZhbH1cIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdF9fcmVtb3ZlLWJ1dHRvblwiICpuZ0lmPVwiY2xlYXJhYmxlICYmIHZhbHVlLmxlbmd0aCA+IDBcIiAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiPlxyXG4gICAgICA8bWF0LWljb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1wiPmNsZWFyXHJcbiAgICAgIDwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3QtYXJyb3dcIj5cclxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWlzTG9hZGluZ1wiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwibGRzLXJpbmdcIj5cclxuICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRU5EIElOUFVUIC0tPlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGUgbGV0LW9wdGlvbj5cclxuICA8ZGl2IHN0eWxlPVwibWF4LXdpZHRoOiAxMDAlO1xyXG4gICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcIj57e29wdGlvbltpdGVtVGV4dF19fVxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0U2VsZWN0aW9uVGVtcGxhdGUgbGV0LXZhbHVlPlxyXG4gIHt7dmFsdWVbaXRlbVRleHRdfX1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE11bHRpU2VsZWN0aW9uVGVtcGxhdGUgbGV0LXZhbHVlPlxyXG4gIDxtYXQtY2hpcC1saXN0Ym94ICNjaGlwTGlzdCBbZGlzYWJsZWRdPVwidGhpcy5kaXNhYmxlZFwiPlxyXG4gICAgPG1hdC1jaGlwLW9wdGlvbiBbY29sb3JdPVwiJ3ByaW1hcnknXCIgc2VsZWN0ZWQgKm5nRm9yPVwibGV0IHZhbCBvZiB2YWx1ZVwiIFtzZWxlY3RhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdC1jaGlwXCJcclxuICAgICAgICAgICAgICBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlZCk9XCJkZXNlbGVjdCh2YWwpXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXAtY29udGVudFwiXHJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21heC13aWR0aCc6IG11bHRpQ29udGFpbmVyV2lkdGggLSA1MCArJ3B4J31cIj57e3ZhbFtpdGVtVGV4dF19fTwvc3Bhbj5cclxuXHJcbiAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICA8L21hdC1jaGlwLW9wdGlvbj5cclxuICA8L21hdC1jaGlwLWxpc3Rib3g+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyb3VwSGVhZGVyVGVtcGxhdGUgbGV0LW9wdD5cclxuICA8ZGl2IHN0eWxlPVwicGFkZGluZy1pbmxpbmU6IDE1cHhcIj48c3Ryb25nPnt7b3B0Lmdyb3VwfX08L3N0cm9uZz48L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|
|
@@ -601,10 +601,15 @@ class NgJvxMultiselectComponent {
|
|
|
601
601
|
search: this.searchValue,
|
|
602
602
|
searchProp: this.searchProp,
|
|
603
603
|
pageSize: this.intPageSize
|
|
604
|
-
}).pipe(
|
|
604
|
+
}).pipe(map((val) => {
|
|
605
|
+
return val ?? [];
|
|
606
|
+
}), switchMap((val) => this.multiMapper.mapOptions(val)), switchMap((val) => {
|
|
605
607
|
let result = [];
|
|
606
|
-
if (
|
|
607
|
-
result = [
|
|
608
|
+
if (!val) {
|
|
609
|
+
result = [];
|
|
610
|
+
}
|
|
611
|
+
else if (this.listProp.length > 0) {
|
|
612
|
+
result = [...(val[this.listProp] ?? [])];
|
|
608
613
|
}
|
|
609
614
|
else {
|
|
610
615
|
result = [...val];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-jvx-multiselect.mjs","sources":["../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-option/ng-jvx-option.component.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-option/ng-jvx-option.component.html","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-options-template.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-selection-template.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-group-header.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-disabled-option.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/utils.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.service.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-focus.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.component.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.component.html","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-panel/ng-jvx-panel.component.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-panel/ng-jvx-panel.component.html","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.module.ts","../../../projects/ng-jvx-multiselect/src/public-api.ts","../../../projects/ng-jvx-multiselect/src/ng-jvx-multiselect.ts"],"sourcesContent":["import {AfterViewChecked, Component, ContentChild, DoCheck, ElementRef, Input, OnInit, ViewChild} from '@angular/core';\r\nimport {MatListOption} from '@angular/material/list';\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'ng-jvx-option',\r\n templateUrl: './ng-jvx-option.component.html',\r\n styleUrls: ['./ng-jvx-option.component.scss']\r\n})\r\nexport class NgJvxOptionComponent implements OnInit, DoCheck {\r\n @ViewChild('listOption', {static: true}) listOption: MatListOption;\r\n @Input() value: any;\r\n public isSelected = false;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n ngDoCheck(): void {\r\n if (this.isSelected !== this.listOption.selected) {\r\n this.isSelected = this.listOption.selected;\r\n }\r\n }\r\n\r\n deselect(): void{\r\n this.listOption.selected = false;\r\n }\r\n}\r\n","<mat-list-option [value]=\"value\" [ngClass]=\"{'ng-jvx-option': true, 'mat-list-single-selected-option': isSelected}\" #listOption>\r\n <ng-content></ng-content>\r\n <div class=\"list-option-background\"></div>\r\n</mat-list-option>\r\n","import {Directive, ElementRef, HostListener, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxOptionsTemplate]'\r\n})\r\nexport class NgJvxOptionsTemplateDirective {\r\n\r\n constructor(\r\n private el: ElementRef,\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n\r\n\r\n @Input() set ngJvxOptionsTemplateOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxSelectionTemplate]'\r\n})\r\nexport class NgJvxSelectionTemplateDirective {\r\n\r\n constructor(\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n @Input() set ngJvxSelectionTemplateOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxGroupHeader]'\r\n})\r\nexport class NgJvxGroupHeaderDirective {\r\n\r\n constructor(\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n @Input() set ngJvxGroupHeaderOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n\r\n}\r\n","import {Directive, ElementRef, HostListener, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {fromEvent, Subject} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxDisabledOption]'\r\n})\r\nexport class NgJvxDisabledOptionDirective implements OnInit, OnDestroy {\r\n private isDisabled = false;\r\n private originalOpacity = 1;\r\n\r\n private unsubs = new Subject<void>();\r\n\r\n @Input() set ngJvxDisabledOption(source: boolean) {\r\n this.isDisabled = source;\r\n if (this.isDisabled) {\r\n this.el.nativeElement.style.opacity = this.originalOpacity ? this.originalOpacity / 2 : 0.5;\r\n } else {\r\n this.el.nativeElement.style.opacity = this.originalOpacity;\r\n }\r\n }\r\n\r\n constructor(\r\n private el: ElementRef) {\r\n this.originalOpacity = el.nativeElement.style.opacity;\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n fromEvent(this.el.nativeElement.closest('.mat-list-item-content'), 'click', {\r\n capture: true,\r\n }).pipe(takeUntil(this.unsubs)).subscribe((e: MouseEvent) => {\r\n if (this.isDisabled) {\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubs.next();\r\n this.unsubs.complete();\r\n }\r\n}\r\n","import {HttpContext, HttpContextToken} from '@angular/common/http';\r\n\r\nexport const JVXMULTISELECT = new HttpContextToken<boolean>(() => false);\r\nexport const setJvxCall = (): any => new HttpContext().set(JVXMULTISELECT, true);\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {HttpClient, HttpParams} from '@angular/common/http';\r\nimport {setJvxCall} from './utils';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgJvxMultiselectService {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getList({\r\n url,\r\n ignorePagination = false,\r\n currentPage,\r\n pageSize,\r\n requestType = 'get',\r\n requestHeaders,\r\n search,\r\n searchProp = 'search',\r\n data\r\n }: {\r\n url: string, ignorePagination: boolean,\r\n currentPage: number,\r\n pageSize: number,\r\n requestType: 'get' | 'post',\r\n requestHeaders: any,\r\n search?: string,\r\n searchProp?: string,\r\n data: any\r\n }): Observable<any> {\r\n let params = new HttpParams();\r\n if (search && search.length > 0) {\r\n params = params.set(searchProp, search);\r\n }\r\n if (!ignorePagination) {\r\n params = params.set('page', currentPage.toString())\r\n .set('size', pageSize.toString());\r\n }\r\n const options = {\r\n mode: 'no-cors', // cors\r\n headers: requestHeaders,\r\n context: setJvxCall(),\r\n // withCredentials: true,\r\n // credentials: 'same-origin', // cache: 'default',\r\n data,\r\n params\r\n };\r\n if (requestType === 'get') {\r\n return this.http.get(url, options);\r\n } else {\r\n return this.http.post(url, options);\r\n }\r\n }\r\n}\r\n","import {AfterContentInit, Directive, ElementRef, Input, OnChanges, OnInit, SimpleChanges} from '@angular/core';\r\nimport {timer} from 'rxjs';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxFocus]'\r\n})\r\nexport class NgJvxFocusDirective implements OnInit, OnChanges {\r\n @Input() ngJvxFocus: boolean;\r\n\r\n constructor(private el: ElementRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.ngJvxFocus) {\r\n this.el.nativeElement.focus();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.hasOwnProperty('ngJvxFocus') && changes.ngJvxFocus.currentValue === true) {\r\n this.el.nativeElement.focus();\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n QueryList,\r\n Self,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {NgJvxOptionsTemplateDirective} from './directives/ng-jvx-options-template.directive';\r\nimport {ControlValueAccessor, NgControl, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup} from '@angular/forms';\r\nimport {MatSelectionList, MatSelectionListChange} from '@angular/material/list';\r\nimport {NgJvxOptionComponent} from './ng-jvx-option/ng-jvx-option.component';\r\nimport {MatMenuTrigger} from '@angular/material/menu';\r\nimport {NgJvxMultiselectService} from './ng-jvx-multiselect.service';\r\nimport {HttpHeaders} from '@angular/common/http';\r\nimport {NgScrollbar} from 'ngx-scrollbar';\r\nimport {debounceTime, distinctUntilChanged, map, switchMap, takeUntil, tap} from 'rxjs/operators';\r\nimport {forkJoin, fromEvent, noop, Observable, of, Subject, timer} from 'rxjs';\r\nimport {NgJvxMultiOptionMapper, NgJvxOptionMapper} from './interfaces/ng-jvx-option-mapper';\r\nimport {NgJvxSelectionTemplateDirective} from './directives/ng-jvx-selection-template.directive';\r\nimport {MatFormFieldControl} from '@angular/material/form-field';\r\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\r\nimport {NgJvxGroupHeaderDirective} from './directives/ng-jvx-group-header.directive';\r\nimport {NgJvxSearchMapper} from './interfaces/ng-jvx-search-mapper';\r\nimport {NgJvxGroup, NgJvxGroupMapper} from './interfaces/ng-jvx-group-mapper';\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'ng-jvx-multiselect',\r\n templateUrl: './ng-jvx-multiselect.component.html',\r\n styleUrls: ['./ng-jvx-multiselect.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n {\r\n provide: MatFormFieldControl,\r\n useExisting: forwardRef(() => NgJvxMultiselectComponent),\r\n multi: true,\r\n }]\r\n})\r\nexport class NgJvxMultiselectComponent implements OnInit, OnDestroy, AfterViewInit, OnChanges, MatFormFieldControl<any>,\r\n ControlValueAccessor {\r\n static nextId = 0;\r\n @HostBinding() id = `jvx-multiselect-${NgJvxMultiselectComponent.nextId++}`;\r\n\r\n @HostBinding('class.floating')\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n @ViewChild('jvxMultiselect', {static: true}) jvxMultiselect: ElementRef;\r\n @ViewChild('selectionContainer', {static: false}) selectionContainer: ElementRef;\r\n @ViewChild('selection', {static: true}) selection: MatSelectionList;\r\n @ViewChild('trigger', {static: true}) trigger: MatMenuTrigger;\r\n @ViewChild('scrollbar', {static: false}) scrollbar: NgScrollbar;\r\n @ViewChild('multiContainer', {static: false}) multiContainer: ElementRef;\r\n @ViewChildren(NgJvxOptionComponent) optionComp: QueryList<NgJvxOptionComponent>;\r\n @ContentChild(NgJvxOptionsTemplateDirective) optionsTemplate: NgJvxOptionsTemplateDirective | null = null;\r\n @ContentChild(NgJvxSelectionTemplateDirective) selectionTemplate: NgJvxSelectionTemplateDirective | null = null;\r\n @ContentChild(NgJvxGroupHeaderDirective) groupHeaderTemplate: NgJvxGroupHeaderDirective | null = null;\r\n // @ContentChild(NgJvxOptionComponent) optionComp: NgJvxOptionComponent;\r\n // @ContentChild(TemplateRef) optionsTemplate: TemplateRef<any> | null = null;\r\n @Input() options: any[] = [];\r\n @Input() multi = false;\r\n @Input() url = '';\r\n @Input() requestType: 'get' | 'post' = 'get';\r\n @Input() itemValue = 'value';\r\n @Input() itemText = 'text';\r\n @Input() ignorePagination = false;\r\n @Input() clearable = false;\r\n @Input() closeOnClick = true;\r\n @Input() hasErrors = false;\r\n @Input() searchMode: null | 'server' | 'client' = null;\r\n @Input() searchInput = false;\r\n @Input() searchLabel = 'search';\r\n @Input() listProp = '';\r\n @Input() totalRowsProp = '';\r\n @Input() panelClass = '';\r\n @Input() searchProp = 'search';\r\n @Input() closeButton = false;\r\n @Input() mapper: NgJvxOptionMapper<any> = {\r\n mapOption(source: any): Observable<any> {\r\n return of(source);\r\n }\r\n };\r\n @Input() multiMapper: NgJvxMultiOptionMapper<any> = {\r\n mapOptions(source: any[]): Observable<any> {\r\n return of(source);\r\n }\r\n };\r\n @Input() searchMapper: NgJvxSearchMapper<any> = {\r\n mapSearch: (source: string, options: any[]): Observable<any> => {\r\n return of(options.filter(o => o[this.itemText].toString().toLowerCase().includes(source.toString().toLowerCase())));\r\n }\r\n };\r\n @Input() groupBy: NgJvxGroupMapper<any> | string | null;\r\n\r\n @Input() set value(value: any[]) {\r\n this.pValue = value ?? [];\r\n if (value) {\r\n this.form.get('selectionValue').setValue(this.pValue.map(v => v[this.itemValue]));\r\n } else {\r\n this.form.get('selectionValue').setValue(value);\r\n }\r\n this.stateChanges.next();\r\n }\r\n\r\n get value(): any[] {\r\n return this.pValue;\r\n }\r\n\r\n @Input() requestHeaders: HttpHeaders = new HttpHeaders();\r\n\r\n @Input()\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n\r\n set required(req) {\r\n this._required = coerceBooleanProperty(req);\r\n this.stateChanges.next();\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this._disabled ? this.parts.disable() : this.parts.enable();\r\n this.stateChanges.next();\r\n }\r\n\r\n @Input()\r\n get pageSize(): number {\r\n return this.intPageSize;\r\n }\r\n\r\n set pageSize(val: number) {\r\n if (val < 15) {\r\n this.intPageSize = 15;\r\n } else {\r\n this.intPageSize = val;\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _disabled = false;\r\n\r\n get errorState(): boolean {\r\n if (this.ngControl != null) {\r\n return this.ngControl.invalid && this.ngControl.touched;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n @Output() valueChange: EventEmitter<any[]> = new EventEmitter<any[]>();\r\n @Output() jvxMultiselectOpen: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectOpened: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectClose: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectClosed: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() scrollEnd: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n public controlType = 'ng-jvx-multiselect';\r\n public document = document;\r\n public window = window;\r\n public form: UntypedFormGroup;\r\n public isOpen = false;\r\n public isLoading = false;\r\n public showList = true;\r\n public asyncOptions: any = [];\r\n public selectableOptions = [];\r\n public orderedOptions: { group: any, options: any[] }[] = [];\r\n public searchValue = '';\r\n public yPosition: 'above' | 'below' = 'above';\r\n public stateChanges = new Subject<void>();\r\n public currentPage = 0;\r\n public listContainerSize: { height: string, minHeight: string, width: string } = {height: 'auto', minHeight: '0', width: '100%'};\r\n public parts: UntypedFormGroup;\r\n\r\n public touched = false;\r\n\r\n public placeholder: string;\r\n public focused = false;\r\n public multiContainerWidth = 100;\r\n\r\n private searchValueSubject = new Subject<string>();\r\n private searchValue$ = this.searchValueSubject.asObservable();\r\n private pValue: any[] = [];\r\n private shouldLoadMore = true;\r\n private unsubscribe = new Subject<void>();\r\n private unsubscribe$ = this.unsubscribe.asObservable();\r\n private intPageSize = 15;\r\n public onTouched = () => {\r\n };\r\n\r\n\r\n constructor(private formBuilder: UntypedFormBuilder, private service: NgJvxMultiselectService,\r\n private elementRef: ElementRef,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n @Optional() @Self() public ngControl: NgControl, fb: UntypedFormBuilder) {\r\n if (this.ngControl != null) {\r\n // Setting the value accessor directly (instead of using\r\n // the providers) to avoid running into a circular import.\r\n this.ngControl.valueAccessor = this;\r\n }\r\n\r\n this.parts = fb.group({\r\n area: '',\r\n exchange: '',\r\n subscriber: '',\r\n });\r\n this.form = this.formBuilder.group({\r\n selectionValue: new UntypedFormControl(this.selectionValue)\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.stateChange$.pipe(takeUntil(this.unsubscribe)).subscribe(() => {\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n // this.setSelectableOptions(this.options).subscribe(noop);\r\n this.selectableOptions = [...this.options];\r\n this.updateOrderedOptions(this.selectableOptions).subscribe(noop);\r\n fromEvent(window, 'resize').pipe(takeUntil(this.unsubscribe), debounceTime(100), map(() => {\r\n return this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n\r\n }), switchMap(() => timer(100)), tap(() => {\r\n this.multiContainerWidth = this.multiContainer?.nativeElement?.offsetWidth ?? 100;\r\n this.yPosition = window.innerHeight - this.jvxMultiselect.nativeElement?.getBoundingClientRect()?.top < 260 ? 'above' : 'below';\r\n this.changeDetectorRef.markForCheck();\r\n })).subscribe(noop);\r\n\r\n this.searchValue$.pipe(takeUntil(this.unsubscribe), debounceTime(300), distinctUntilChanged((prev, curr) => {\r\n return curr === this.searchValue;\r\n }), switchMap((val: string) => {\r\n this.searchValue = val;\r\n this.currentPage = 0;\r\n if (this.searchMode === 'client') {\r\n return this.clientSearch();\r\n } else if (this.url && this.url.length > 0) {\r\n return this.serverSearch();\r\n }\r\n }\r\n )\r\n ).subscribe((val: any[]) => {\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n }\r\n\r\n private clientSearch(): Observable<any> {\r\n let obs: Observable<any>;\r\n if (this.url && this.url.length > 0) {\r\n this.selectableOptions = [];\r\n this.updateOrderedOptions(this.selectableOptions).subscribe(noop);\r\n this.shouldLoadMore = true;\r\n obs = this.getList().pipe(map(() => {\r\n return this.selectableOptions;\r\n }));\r\n } else {\r\n obs = of(this.options);\r\n }\r\n return obs.pipe(switchMap((val) => this.searchMapper.mapSearch(this.searchValue, val)), switchMap((res) => {\r\n // return this.setSelectableOptions(res);\r\n this.selectableOptions = [];\r\n this.selectableOptions.push(...res);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }\r\n ));\r\n }\r\n\r\n private setSelectableOptions(options: any[]): Observable<any> {\r\n this.selectableOptions = [];\r\n const obs: Observable<any>[] = options.reduce((acc, curr) => {\r\n acc.push(this.mapper.mapOption(curr));\r\n return acc;\r\n }, []);\r\n\r\n // this.mapper.mapOption(option);\r\n\r\n return forkJoin([...obs]).pipe(switchMap((val) => {\r\n this.selectableOptions.push(...val);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }));\r\n }\r\n\r\n private serverSearch(): Observable<any> {\r\n this.shouldLoadMore = true;\r\n this.selectableOptions = [];\r\n this.shouldLoadMore = true;\r\n return this.getList();\r\n }\r\n\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.stateChanges.complete();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n timer(0).subscribe(() => {\r\n this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n });\r\n\r\n if (this.scrollbar) {\r\n this.scrollbar.scrolled.pipe(takeUntil(this.unsubscribe$)).subscribe((e: any) => {\r\n this.onScrolled(e);\r\n });\r\n }\r\n timer(0).pipe(tap(() => {\r\n this.multiContainerWidth = this.multiContainer?.nativeElement?.offsetWidth ?? 100;\r\n this.yPosition = window.innerHeight - this.jvxMultiselect.nativeElement?.getBoundingClientRect()?.top < 260 ? 'above' : 'below';\r\n this.changeDetectorRef.markForCheck();\r\n })).subscribe(noop);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.options) {\r\n // this.setSelectableOptions(this.options).subscribe(noop);\r\n this.selectableOptions = [...this.options];\r\n }\r\n }\r\n\r\n\r\n get selectionValue(): any[] {\r\n return this.value.map((v) => {\r\n return v[this.itemValue];\r\n });\r\n }\r\n\r\n get empty(): boolean {\r\n const n = this.parts.value;\r\n return !n.area && !n.exchange && !n.subscriber;\r\n }\r\n\r\n onCLickOnMenu(e: MouseEvent): void {\r\n if (this.multi || this.closeOnClick === false) {\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n\r\n private propagateChange(_: any): any {\r\n }\r\n\r\n // this is the initial value set to the component\r\n public writeValue(obj: any[]): void {\r\n this.value = obj;\r\n }\r\n\r\n // registers 'fn' that will be fired when changes are made\r\n // this is how we emit the changes back to the form\r\n public registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n onChange(e: MatSelectionListChange): void {\r\n\r\n let vals = e.source.selectedOptions.selected.map(o => o.value);\r\n vals = this.selectableOptions.filter(o => vals.includes(o[this.itemValue]));\r\n const selectableIds = this.selectableOptions.map(s => s[this.itemValue]);\r\n if (this.multi) {\r\n // if search is active, probably some of the already selected values are not included in the selectable options,\r\n // so we have to push them in the selected values of the list;\r\n for (const v of this.value) {\r\n if (!selectableIds.includes(v[this.itemValue])) {\r\n vals = [v, ...vals];\r\n }\r\n }\r\n }\r\n vals.sort((a, b) => {\r\n return typeof a[this.itemValue] === 'string' ?\r\n a[this.itemValue].localeCompare(b[this.itemValue]) : a[this.itemValue] - b[this.itemValue];\r\n });\r\n this.value = [...vals];\r\n this.form.get('selectionValue').setValue(this.value.map(v => v[this.itemValue]));\r\n\r\n this.valueChange.emit(this.value);\r\n this.propagateChange(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n\r\n onFocusIn(event: FocusEvent): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onFocusOut(event: FocusEvent): void {\r\n if (!this.elementRef.nativeElement.contains(event.relatedTarget as Element)) {\r\n this.touched = true;\r\n this.focused = false;\r\n this.onTouched();\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onMenuOpen(): void {\r\n this.isOpen = true;\r\n\r\n this.jvxMultiselectOpen.emit();\r\n }\r\n\r\n onMenuClose(): void {\r\n this.isOpen = false;\r\n this.jvxMultiselectClose.emit();\r\n }\r\n\r\n deselect(val: any): void {\r\n this.value = [...this.value.filter(v => v[this.itemValue] !== val[this.itemValue])];\r\n // this.value.splice(this.value.findIndex(v => v[this.itemValue] === val[this.itemValue]), 1);\r\n this.form.get('selectionValue').setValue(this.value.map(m => m.value));\r\n this.valueChange.emit(this.value);\r\n this.propagateChange(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n private setSelectionContainerSize(): void {\r\n timer(0).subscribe(() => {\r\n if (this.selectionContainer) {\r\n this.listContainerSize.height = this.selectionContainer.nativeElement.offsetHeight > 260 ? '260px' : 'auto';\r\n this.listContainerSize.minHeight = this.selectionContainer.nativeElement.offsetHeight <= 260 ?\r\n this.selectionContainer.nativeElement.offsetHeight + 'px' : '260px';\r\n this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n }\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n\r\n clickOnMenuTrigger(e: MouseEvent): void {\r\n if (!this.disabled) {\r\n this.showList = false;\r\n this.shouldLoadMore = true;\r\n timer(0).subscribe(() => {\r\n this.showList = true;\r\n if (this.url.length > 0) {\r\n e.preventDefault();\r\n\r\n this.selectableOptions.length = 0;\r\n this.updateOrderedOptions(this.selectableOptions);\r\n this.getList().subscribe(noop);\r\n this.setSelectionContainerSize();\r\n\r\n } else {\r\n this.trigger.openMenu();\r\n this.setSelectionContainerSize();\r\n }\r\n });\r\n }\r\n }\r\n\r\n private getList(): Observable<any> {\r\n this.isLoading = true;\r\n return this.service.getList({\r\n url: this.url,\r\n requestType: this.requestType,\r\n data: {},\r\n currentPage: ++this.currentPage,\r\n ignorePagination: this.ignorePagination,\r\n requestHeaders: this.requestHeaders,\r\n search: this.searchValue,\r\n searchProp: this.searchProp,\r\n pageSize: this.intPageSize\r\n }).pipe(\r\n switchMap((val) => this.multiMapper.mapOptions(val)), switchMap((val) => {\r\n let result = [];\r\n if (this.listProp.length > 0) {\r\n result = [...val[this.listProp]];\r\n } else {\r\n result = [...val];\r\n }\r\n\r\n if (result.length === 0) {\r\n this.shouldLoadMore = false;\r\n this.isLoading = false;\r\n return of([]);\r\n } else {\r\n const newOptions = [];\r\n\r\n for (const opt of result) {\r\n const newOption = this.mapper.mapOption(opt);\r\n newOptions.push(newOption);\r\n }\r\n return forkJoin(newOptions);\r\n }\r\n }), switchMap((finVal: any) => {\r\n this.selectableOptions.push(...finVal);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }), map((val) => {\r\n this.isLoading = false;\r\n this.trigger.openMenu();\r\n this.setSelectionContainerSize();\r\n return val;\r\n }), tap(() => {\r\n this.changeDetectorRef.markForCheck();\r\n }));\r\n }\r\n\r\n onScrolled(e: any): void {\r\n if (e.target.scrollTop + 220 + ((this.searchInput ? 0 : 1) * 40) === this.selectionContainer.nativeElement.offsetHeight\r\n && !this.isLoading) {\r\n this.scrollEnd.emit();\r\n if (this.url && this.url.length > 0 && !this.ignorePagination && this.shouldLoadMore) {\r\n this.getList().subscribe(noop);\r\n }\r\n }\r\n }\r\n\r\n onMenuOpened(): void {\r\n this.jvxMultiselectOpened.emit();\r\n }\r\n\r\n onMenuClosed(): void {\r\n if ((!this.url || this.url.length === 0) && this.searchMode === 'client') {\r\n this.searchValueSubject.next('');\r\n } else {\r\n this.searchValue = '';\r\n this.currentPage = 0;\r\n }\r\n this.jvxMultiselectClosed.emit();\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n onSearchInputClick(e: MouseEvent): void {\r\n e.stopPropagation();\r\n }\r\n\r\n onSearchValueChange(e: any): void {\r\n this.searchValueSubject.next(e.target.value);\r\n }\r\n\r\n clear(e: Event): void {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.value = [];\r\n this.form.get('selectionValue').setValue(this.value.map(v => v[this.itemValue]));\r\n this.propagateChange(this.value);\r\n this.valueChange.emit(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n const controlElement = this.elementRef.nativeElement\r\n .querySelector('.ng-jvx-multiselect');\r\n controlElement.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n\r\n onContainerClick(event: MouseEvent): void {\r\n // if ((event.target as Element).tagName.toLowerCase() !== 'input') {\r\n // this.elementRef.nativeElement.querySelector('input').focus();\r\n // }\r\n }\r\n\r\n private get stateChange$(): Observable<any> {\r\n return this.stateChanges.asObservable();\r\n }\r\n\r\n updateOrderedOptions(options): Observable<any> {\r\n let obs = of(options);\r\n if (this.groupBy) {\r\n this.orderedOptions.length = 0;\r\n const obsArr = [];\r\n for (const option of options) {\r\n if (typeof this.groupBy !== 'string') {\r\n obsArr.push(this.groupBy.mapGroup(option));\r\n } else {\r\n obsArr.push(of({group: option[this.groupBy], option} as NgJvxGroup<any>));\r\n }\r\n }\r\n obs = forkJoin(obsArr).pipe(map((res: any) => {\r\n const groups = [...new Set(res.map(item => item.group))];\r\n for (const group of groups) {\r\n this.orderedOptions.push({\r\n group,\r\n options: res.filter(r => r.group === group).map(o => o.option)\r\n });\r\n }\r\n return this.orderedOptions;\r\n }));\r\n }\r\n return obs;\r\n }\r\n\r\n public closeMenu(): void {\r\n this.trigger.closeMenu();\r\n }\r\n}\r\n","<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [matMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n #trigger=\"matMenuTrigger\">\r\n <mat-menu #menuRef=\"matMenu\" [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n <div *ngIf=\"closeButton\" class=\"closeMenuButton\"><mat-icon >close</mat-icon></div>\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <mat-selection-list #selection [multiple]=\"multi\"\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n (selectionChange)=\"onChange($event)\"\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\" [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <span style=\"padding-inline: 10px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </span>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </mat-selection-list>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </mat-menu>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n\r\n <div class=\"ng-jvx-multiselect__placeholder\" *ngIf=\"value.length === 0\">\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container></div>\r\n </div>\r\n <div class=\"ng-jvx-multiselect__remove-button\" *ngIf=\"clearable && value.length > 0\" (click)=\"clear($event)\">\r\n <mat-icon style=\"font-size: 18px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\">clear\r\n </mat-icon>\r\n </div>\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n <mat-icon *ngIf=\"!isLoading\">expand_more</mat-icon>\r\n <div *ngIf=\"isLoading\" class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"max-width: 100%;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{option[itemText]}}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{value[itemText]}}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <mat-chip-listbox #chipList [disabled]=\"this.disabled\">\r\n <mat-chip-option [color]=\"'primary'\" selected *ngFor=\"let val of value\" [selectable]=\"false\"\r\n class=\"ng-jvx-multiselect-chip\"\r\n [removable]=\"true\" (removed)=\"deselect(val)\">\r\n <span class=\"chip-content\"\r\n [ngStyle]=\"{'max-width': multiContainerWidth - 50 +'px'}\">{{val[itemText]}}</span>\r\n\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-option>\r\n </mat-chip-listbox>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{opt.group}}</strong></div>\r\n</ng-template>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport {ChangeDetectionStrategy, Component, ElementRef, Inject, NgZone, ViewEncapsulation,} from '@angular/core';\r\nimport {\r\n MAT_MENU_DEFAULT_OPTIONS,\r\n MAT_MENU_PANEL,\r\n matMenuAnimations,\r\n MatMenuDefaultOptions\r\n} from '@angular/material/menu';\r\nimport {_MatMenuBase, MatMenu} from '@angular/material/menu';\r\n\r\n\r\n/** @docs-public MatMenu */\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'ngJvxPanel',\r\n templateUrl: 'ng-jvx-panel.component.html',\r\n styleUrls: ['ng-jvx-panel.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n exportAs: 'ngJvxPanel',\r\n // tslint:disable-next-line:no-host-metadata-property\r\n host: {\r\n '[attr.aria-label]': 'null',\r\n '[attr.aria-labelledby]': 'null',\r\n '[attr.aria-describedby]': 'null',\r\n },\r\n animations: [\r\n matMenuAnimations.transformMenu,\r\n matMenuAnimations.fadeInItems\r\n ],\r\n providers: [\r\n {provide: MAT_MENU_PANEL, useExisting: MatMenu},\r\n ]\r\n})\r\nexport class NgJvxPanelComponent extends _MatMenuBase {\r\n constructor(elementRef: ElementRef<HTMLElement>, ngZone: NgZone,\r\n @Inject(MAT_MENU_DEFAULT_OPTIONS) defaultOptions: MatMenuDefaultOptions) {\r\n super(elementRef, ngZone, defaultOptions);\r\n }\r\n}\r\n\r\n","<ng-template>\r\n <div\r\n class=\"mat-menu-panel\"\r\n [id]=\"panelId\"\r\n [ngClass]=\"_classList\"\r\n (keydown)=\"_handleKeydown($event)\"\r\n (click)=\"closed.emit('click')\"\r\n [@transformMenu]=\"_panelAnimationState\"\r\n (@transformMenu.start)=\"_onAnimationStart($event)\"\r\n (@transformMenu.done)=\"_onAnimationDone($event)\"\r\n tabindex=\"-1\"\r\n role=\"menu\"\r\n [attr.aria-label]=\"ariaLabel || null\"\r\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\r\n [attr.aria-describedby]=\"ariaDescribedby || null\">\r\n <div class=\"mat-menu-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n","import {NgModule} from '@angular/core';\r\nimport {NgJvxMultiselectComponent} from './ng-jvx-multiselect.component';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatOptionModule} from '@angular/material/core';\r\nimport {MatSelectModule} from '@angular/material/select';\r\nimport {CommonModule} from '@angular/common';\r\nimport {NgJvxOptionComponent} from './ng-jvx-option/ng-jvx-option.component';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {NgJvxOptionsTemplateDirective} from './directives/ng-jvx-options-template.directive';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {NgJvxPanelComponent} from './ng-jvx-panel/ng-jvx-panel.component';\r\nimport {MatListModule} from '@angular/material/list';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatChipsModule} from '@angular/material/chips';\r\nimport {NgScrollbarModule} from 'ngx-scrollbar';\r\nimport {SmoothScrollModule} from 'ngx-scrollbar/smooth-scroll';\r\nimport {NgJvxSelectionTemplateDirective} from './directives/ng-jvx-selection-template.directive';\r\nimport {NgJvxDisabledOptionDirective} from './directives/ng-jvx-disabled-option.directive';\r\nimport {NgJvxGroupHeaderDirective} from './directives/ng-jvx-group-header.directive';\r\nimport {NgJvxFocusDirective} from './directives/ng-jvx-focus.directive';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n NgJvxMultiselectComponent,\r\n NgJvxOptionComponent,\r\n NgJvxOptionsTemplateDirective,\r\n NgJvxPanelComponent,\r\n NgJvxSelectionTemplateDirective,\r\n NgJvxDisabledOptionDirective,\r\n NgJvxGroupHeaderDirective,\r\n NgJvxFocusDirective],\r\n imports: [\r\n MatButtonModule,\r\n MatOptionModule,\r\n MatSelectModule,\r\n MatMenuModule,\r\n CommonModule,\r\n MatIconModule,\r\n MatListModule,\r\n MatChipsModule,\r\n ReactiveFormsModule,\r\n NgScrollbarModule,\r\n SmoothScrollModule,\r\n FormsModule\r\n ],\r\n exports: [NgJvxMultiselectComponent,\r\n NgJvxOptionComponent,\r\n NgJvxOptionsTemplateDirective,\r\n NgJvxSelectionTemplateDirective,\r\n NgJvxDisabledOptionDirective,\r\n NgJvxGroupHeaderDirective]\r\n})\r\nexport class NgJvxMultiselectModule {\r\n}\r\n","/*\r\n * Public API Surface of ng-jvx-multiselect\r\n */\r\n\r\nexport * from './lib/ng-jvx-option/ng-jvx-option.component';\r\nexport * from './lib/directives/ng-jvx-options-template.directive';\r\nexport * from './lib/directives/ng-jvx-selection-template.directive';\r\nexport * from './lib/directives/ng-jvx-group-header.directive';\r\nexport * from './lib/directives/ng-jvx-disabled-option.directive';\r\nexport * from './lib/ng-jvx-multiselect.service';\r\nexport * from './lib/ng-jvx-multiselect.component';\r\nexport * from './lib/ng-jvx-multiselect.module';\r\nexport * from './lib/interfaces/ng-jvx-option-mapper';\r\nexport * from './lib/interfaces/ng-jvx-search-mapper';\r\nexport * from './lib/interfaces/ng-jvx-group-mapper';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.NgJvxMultiselectService","i6","i10.NgJvxOptionComponent","i11.NgJvxFocusDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-jvx-multiselect.mjs","sources":["../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-option/ng-jvx-option.component.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-option/ng-jvx-option.component.html","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-options-template.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-selection-template.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-group-header.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-disabled-option.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/utils.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.service.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-focus.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.component.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.component.html","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-panel/ng-jvx-panel.component.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-panel/ng-jvx-panel.component.html","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.module.ts","../../../projects/ng-jvx-multiselect/src/public-api.ts","../../../projects/ng-jvx-multiselect/src/ng-jvx-multiselect.ts"],"sourcesContent":["import {AfterViewChecked, Component, ContentChild, DoCheck, ElementRef, Input, OnInit, ViewChild} from '@angular/core';\r\nimport {MatListOption} from '@angular/material/list';\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'ng-jvx-option',\r\n templateUrl: './ng-jvx-option.component.html',\r\n styleUrls: ['./ng-jvx-option.component.scss']\r\n})\r\nexport class NgJvxOptionComponent implements OnInit, DoCheck {\r\n @ViewChild('listOption', {static: true}) listOption: MatListOption;\r\n @Input() value: any;\r\n public isSelected = false;\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n\r\n ngDoCheck(): void {\r\n if (this.isSelected !== this.listOption.selected) {\r\n this.isSelected = this.listOption.selected;\r\n }\r\n }\r\n\r\n deselect(): void{\r\n this.listOption.selected = false;\r\n }\r\n}\r\n","<mat-list-option [value]=\"value\" [ngClass]=\"{'ng-jvx-option': true, 'mat-list-single-selected-option': isSelected}\" #listOption>\r\n <ng-content></ng-content>\r\n <div class=\"list-option-background\"></div>\r\n</mat-list-option>\r\n","import {Directive, ElementRef, HostListener, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxOptionsTemplate]'\r\n})\r\nexport class NgJvxOptionsTemplateDirective {\r\n\r\n constructor(\r\n private el: ElementRef,\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n\r\n\r\n @Input() set ngJvxOptionsTemplateOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxSelectionTemplate]'\r\n})\r\nexport class NgJvxSelectionTemplateDirective {\r\n\r\n constructor(\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n @Input() set ngJvxSelectionTemplateOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxGroupHeader]'\r\n})\r\nexport class NgJvxGroupHeaderDirective {\r\n\r\n constructor(\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n @Input() set ngJvxGroupHeaderOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n\r\n}\r\n","import {Directive, ElementRef, HostListener, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {fromEvent, Subject} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxDisabledOption]'\r\n})\r\nexport class NgJvxDisabledOptionDirective implements OnInit, OnDestroy {\r\n private isDisabled = false;\r\n private originalOpacity = 1;\r\n\r\n private unsubs = new Subject<void>();\r\n\r\n @Input() set ngJvxDisabledOption(source: boolean) {\r\n this.isDisabled = source;\r\n if (this.isDisabled) {\r\n this.el.nativeElement.style.opacity = this.originalOpacity ? this.originalOpacity / 2 : 0.5;\r\n } else {\r\n this.el.nativeElement.style.opacity = this.originalOpacity;\r\n }\r\n }\r\n\r\n constructor(\r\n private el: ElementRef) {\r\n this.originalOpacity = el.nativeElement.style.opacity;\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n fromEvent(this.el.nativeElement.closest('.mat-list-item-content'), 'click', {\r\n capture: true,\r\n }).pipe(takeUntil(this.unsubs)).subscribe((e: MouseEvent) => {\r\n if (this.isDisabled) {\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubs.next();\r\n this.unsubs.complete();\r\n }\r\n}\r\n","import {HttpContext, HttpContextToken} from '@angular/common/http';\r\n\r\nexport const JVXMULTISELECT = new HttpContextToken<boolean>(() => false);\r\nexport const setJvxCall = (): any => new HttpContext().set(JVXMULTISELECT, true);\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport {HttpClient, HttpParams} from '@angular/common/http';\r\nimport {setJvxCall} from './utils';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgJvxMultiselectService {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getList({\r\n url,\r\n ignorePagination = false,\r\n currentPage,\r\n pageSize,\r\n requestType = 'get',\r\n requestHeaders,\r\n search,\r\n searchProp = 'search',\r\n data\r\n }: {\r\n url: string, ignorePagination: boolean,\r\n currentPage: number,\r\n pageSize: number,\r\n requestType: 'get' | 'post',\r\n requestHeaders: any,\r\n search?: string,\r\n searchProp?: string,\r\n data: any\r\n }): Observable<any> {\r\n let params = new HttpParams();\r\n if (search && search.length > 0) {\r\n params = params.set(searchProp, search);\r\n }\r\n if (!ignorePagination) {\r\n params = params.set('page', currentPage.toString())\r\n .set('size', pageSize.toString());\r\n }\r\n const options = {\r\n mode: 'no-cors', // cors\r\n headers: requestHeaders,\r\n context: setJvxCall(),\r\n // withCredentials: true,\r\n // credentials: 'same-origin', // cache: 'default',\r\n data,\r\n params\r\n };\r\n if (requestType === 'get') {\r\n return this.http.get(url, options);\r\n } else {\r\n return this.http.post(url, options);\r\n }\r\n }\r\n}\r\n","import {AfterContentInit, Directive, ElementRef, Input, OnChanges, OnInit, SimpleChanges} from '@angular/core';\r\nimport {timer} from 'rxjs';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxFocus]'\r\n})\r\nexport class NgJvxFocusDirective implements OnInit, OnChanges {\r\n @Input() ngJvxFocus: boolean;\r\n\r\n constructor(private el: ElementRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.ngJvxFocus) {\r\n this.el.nativeElement.focus();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.hasOwnProperty('ngJvxFocus') && changes.ngJvxFocus.currentValue === true) {\r\n this.el.nativeElement.focus();\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n QueryList,\r\n Self,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {NgJvxOptionsTemplateDirective} from './directives/ng-jvx-options-template.directive';\r\nimport {ControlValueAccessor, NgControl, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup} from '@angular/forms';\r\nimport {MatSelectionList, MatSelectionListChange} from '@angular/material/list';\r\nimport {NgJvxOptionComponent} from './ng-jvx-option/ng-jvx-option.component';\r\nimport {MatMenuTrigger} from '@angular/material/menu';\r\nimport {NgJvxMultiselectService} from './ng-jvx-multiselect.service';\r\nimport {HttpHeaders} from '@angular/common/http';\r\nimport {NgScrollbar} from 'ngx-scrollbar';\r\nimport {debounceTime, distinctUntilChanged, map, switchMap, takeUntil, tap} from 'rxjs/operators';\r\nimport {forkJoin, fromEvent, noop, Observable, of, Subject, timer} from 'rxjs';\r\nimport {NgJvxMultiOptionMapper, NgJvxOptionMapper} from './interfaces/ng-jvx-option-mapper';\r\nimport {NgJvxSelectionTemplateDirective} from './directives/ng-jvx-selection-template.directive';\r\nimport {MatFormFieldControl} from '@angular/material/form-field';\r\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\r\nimport {NgJvxGroupHeaderDirective} from './directives/ng-jvx-group-header.directive';\r\nimport {NgJvxSearchMapper} from './interfaces/ng-jvx-search-mapper';\r\nimport {NgJvxGroup, NgJvxGroupMapper} from './interfaces/ng-jvx-group-mapper';\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'ng-jvx-multiselect',\r\n templateUrl: './ng-jvx-multiselect.component.html',\r\n styleUrls: ['./ng-jvx-multiselect.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n {\r\n provide: MatFormFieldControl,\r\n useExisting: forwardRef(() => NgJvxMultiselectComponent),\r\n multi: true,\r\n }]\r\n})\r\nexport class NgJvxMultiselectComponent implements OnInit, OnDestroy, AfterViewInit, OnChanges, MatFormFieldControl<any>,\r\n ControlValueAccessor {\r\n static nextId = 0;\r\n @HostBinding() id = `jvx-multiselect-${NgJvxMultiselectComponent.nextId++}`;\r\n\r\n @HostBinding('class.floating')\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n @ViewChild('jvxMultiselect', {static: true}) jvxMultiselect: ElementRef;\r\n @ViewChild('selectionContainer', {static: false}) selectionContainer: ElementRef;\r\n @ViewChild('selection', {static: true}) selection: MatSelectionList;\r\n @ViewChild('trigger', {static: true}) trigger: MatMenuTrigger;\r\n @ViewChild('scrollbar', {static: false}) scrollbar: NgScrollbar;\r\n @ViewChild('multiContainer', {static: false}) multiContainer: ElementRef;\r\n @ViewChildren(NgJvxOptionComponent) optionComp: QueryList<NgJvxOptionComponent>;\r\n @ContentChild(NgJvxOptionsTemplateDirective) optionsTemplate: NgJvxOptionsTemplateDirective | null = null;\r\n @ContentChild(NgJvxSelectionTemplateDirective) selectionTemplate: NgJvxSelectionTemplateDirective | null = null;\r\n @ContentChild(NgJvxGroupHeaderDirective) groupHeaderTemplate: NgJvxGroupHeaderDirective | null = null;\r\n // @ContentChild(NgJvxOptionComponent) optionComp: NgJvxOptionComponent;\r\n // @ContentChild(TemplateRef) optionsTemplate: TemplateRef<any> | null = null;\r\n @Input() options: any[] = [];\r\n @Input() multi = false;\r\n @Input() url = '';\r\n @Input() requestType: 'get' | 'post' = 'get';\r\n @Input() itemValue = 'value';\r\n @Input() itemText = 'text';\r\n @Input() ignorePagination = false;\r\n @Input() clearable = false;\r\n @Input() closeOnClick = true;\r\n @Input() hasErrors = false;\r\n @Input() searchMode: null | 'server' | 'client' = null;\r\n @Input() searchInput = false;\r\n @Input() searchLabel = 'search';\r\n @Input() listProp = '';\r\n @Input() totalRowsProp = '';\r\n @Input() panelClass = '';\r\n @Input() searchProp = 'search';\r\n @Input() closeButton = false;\r\n @Input() mapper: NgJvxOptionMapper<any> = {\r\n mapOption(source: any): Observable<any> {\r\n return of(source);\r\n }\r\n };\r\n @Input() multiMapper: NgJvxMultiOptionMapper<any> = {\r\n mapOptions(source: any[]): Observable<any> {\r\n return of(source);\r\n }\r\n };\r\n @Input() searchMapper: NgJvxSearchMapper<any> = {\r\n mapSearch: (source: string, options: any[]): Observable<any> => {\r\n return of(options.filter(o => o[this.itemText].toString().toLowerCase().includes(source.toString().toLowerCase())));\r\n }\r\n };\r\n @Input() groupBy: NgJvxGroupMapper<any> | string | null;\r\n\r\n @Input() set value(value: any[]) {\r\n this.pValue = value ?? [];\r\n if (value) {\r\n this.form.get('selectionValue').setValue(this.pValue.map(v => v[this.itemValue]));\r\n } else {\r\n this.form.get('selectionValue').setValue(value);\r\n }\r\n this.stateChanges.next();\r\n }\r\n\r\n get value(): any[] {\r\n return this.pValue;\r\n }\r\n\r\n @Input() requestHeaders: HttpHeaders = new HttpHeaders();\r\n\r\n @Input()\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n\r\n set required(req) {\r\n this._required = coerceBooleanProperty(req);\r\n this.stateChanges.next();\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this._disabled ? this.parts.disable() : this.parts.enable();\r\n this.stateChanges.next();\r\n }\r\n\r\n @Input()\r\n get pageSize(): number {\r\n return this.intPageSize;\r\n }\r\n\r\n set pageSize(val: number) {\r\n if (val < 15) {\r\n this.intPageSize = 15;\r\n } else {\r\n this.intPageSize = val;\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _disabled = false;\r\n\r\n get errorState(): boolean {\r\n if (this.ngControl != null) {\r\n return this.ngControl.invalid && this.ngControl.touched;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n @Output() valueChange: EventEmitter<any[]> = new EventEmitter<any[]>();\r\n @Output() jvxMultiselectOpen: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectOpened: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectClose: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectClosed: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() scrollEnd: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n public controlType = 'ng-jvx-multiselect';\r\n public document = document;\r\n public window = window;\r\n public form: UntypedFormGroup;\r\n public isOpen = false;\r\n public isLoading = false;\r\n public showList = true;\r\n public asyncOptions: any = [];\r\n public selectableOptions = [];\r\n public orderedOptions: { group: any, options: any[] }[] = [];\r\n public searchValue = '';\r\n public yPosition: 'above' | 'below' = 'above';\r\n public stateChanges = new Subject<void>();\r\n public currentPage = 0;\r\n public listContainerSize: { height: string, minHeight: string, width: string } = {height: 'auto', minHeight: '0', width: '100%'};\r\n public parts: UntypedFormGroup;\r\n\r\n public touched = false;\r\n\r\n public placeholder: string;\r\n public focused = false;\r\n public multiContainerWidth = 100;\r\n\r\n private searchValueSubject = new Subject<string>();\r\n private searchValue$ = this.searchValueSubject.asObservable();\r\n private pValue: any[] = [];\r\n private shouldLoadMore = true;\r\n private unsubscribe = new Subject<void>();\r\n private unsubscribe$ = this.unsubscribe.asObservable();\r\n private intPageSize = 15;\r\n public onTouched = () => {\r\n };\r\n\r\n\r\n constructor(private formBuilder: UntypedFormBuilder, private service: NgJvxMultiselectService,\r\n private elementRef: ElementRef,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n @Optional() @Self() public ngControl: NgControl, fb: UntypedFormBuilder) {\r\n if (this.ngControl != null) {\r\n // Setting the value accessor directly (instead of using\r\n // the providers) to avoid running into a circular import.\r\n this.ngControl.valueAccessor = this;\r\n }\r\n\r\n this.parts = fb.group({\r\n area: '',\r\n exchange: '',\r\n subscriber: '',\r\n });\r\n this.form = this.formBuilder.group({\r\n selectionValue: new UntypedFormControl(this.selectionValue)\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.stateChange$.pipe(takeUntil(this.unsubscribe)).subscribe(() => {\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n // this.setSelectableOptions(this.options).subscribe(noop);\r\n this.selectableOptions = [...this.options];\r\n this.updateOrderedOptions(this.selectableOptions).subscribe(noop);\r\n fromEvent(window, 'resize').pipe(takeUntil(this.unsubscribe), debounceTime(100), map(() => {\r\n return this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n\r\n }), switchMap(() => timer(100)), tap(() => {\r\n this.multiContainerWidth = this.multiContainer?.nativeElement?.offsetWidth ?? 100;\r\n this.yPosition = window.innerHeight - this.jvxMultiselect.nativeElement?.getBoundingClientRect()?.top < 260 ? 'above' : 'below';\r\n this.changeDetectorRef.markForCheck();\r\n })).subscribe(noop);\r\n\r\n this.searchValue$.pipe(takeUntil(this.unsubscribe), debounceTime(300), distinctUntilChanged((prev, curr) => {\r\n return curr === this.searchValue;\r\n }), switchMap((val: string) => {\r\n this.searchValue = val;\r\n this.currentPage = 0;\r\n if (this.searchMode === 'client') {\r\n return this.clientSearch();\r\n } else if (this.url && this.url.length > 0) {\r\n return this.serverSearch();\r\n }\r\n }\r\n )\r\n ).subscribe((val: any[]) => {\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n }\r\n\r\n private clientSearch(): Observable<any> {\r\n let obs: Observable<any>;\r\n if (this.url && this.url.length > 0) {\r\n this.selectableOptions = [];\r\n this.updateOrderedOptions(this.selectableOptions).subscribe(noop);\r\n this.shouldLoadMore = true;\r\n obs = this.getList().pipe(map(() => {\r\n return this.selectableOptions;\r\n }));\r\n } else {\r\n obs = of(this.options);\r\n }\r\n return obs.pipe(switchMap((val) => this.searchMapper.mapSearch(this.searchValue, val)), switchMap((res) => {\r\n // return this.setSelectableOptions(res);\r\n this.selectableOptions = [];\r\n this.selectableOptions.push(...res);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }\r\n ));\r\n }\r\n\r\n private setSelectableOptions(options: any[]): Observable<any> {\r\n this.selectableOptions = [];\r\n const obs: Observable<any>[] = options.reduce((acc, curr) => {\r\n acc.push(this.mapper.mapOption(curr));\r\n return acc;\r\n }, []);\r\n\r\n // this.mapper.mapOption(option);\r\n\r\n return forkJoin([...obs]).pipe(switchMap((val) => {\r\n this.selectableOptions.push(...val);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }));\r\n }\r\n\r\n private serverSearch(): Observable<any> {\r\n this.shouldLoadMore = true;\r\n this.selectableOptions = [];\r\n this.shouldLoadMore = true;\r\n return this.getList();\r\n }\r\n\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.stateChanges.complete();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n timer(0).subscribe(() => {\r\n this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n });\r\n\r\n if (this.scrollbar) {\r\n this.scrollbar.scrolled.pipe(takeUntil(this.unsubscribe$)).subscribe((e: any) => {\r\n this.onScrolled(e);\r\n });\r\n }\r\n timer(0).pipe(tap(() => {\r\n this.multiContainerWidth = this.multiContainer?.nativeElement?.offsetWidth ?? 100;\r\n this.yPosition = window.innerHeight - this.jvxMultiselect.nativeElement?.getBoundingClientRect()?.top < 260 ? 'above' : 'below';\r\n this.changeDetectorRef.markForCheck();\r\n })).subscribe(noop);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.options) {\r\n // this.setSelectableOptions(this.options).subscribe(noop);\r\n this.selectableOptions = [...this.options];\r\n }\r\n }\r\n\r\n\r\n get selectionValue(): any[] {\r\n return this.value.map((v) => {\r\n return v[this.itemValue];\r\n });\r\n }\r\n\r\n get empty(): boolean {\r\n const n = this.parts.value;\r\n return !n.area && !n.exchange && !n.subscriber;\r\n }\r\n\r\n onCLickOnMenu(e: MouseEvent): void {\r\n if (this.multi || this.closeOnClick === false) {\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n\r\n private propagateChange(_: any): any {\r\n }\r\n\r\n // this is the initial value set to the component\r\n public writeValue(obj: any[]): void {\r\n this.value = obj;\r\n }\r\n\r\n // registers 'fn' that will be fired when changes are made\r\n // this is how we emit the changes back to the form\r\n public registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n onChange(e: MatSelectionListChange): void {\r\n\r\n let vals = e.source.selectedOptions.selected.map(o => o.value);\r\n vals = this.selectableOptions.filter(o => vals.includes(o[this.itemValue]));\r\n const selectableIds = this.selectableOptions.map(s => s[this.itemValue]);\r\n if (this.multi) {\r\n // if search is active, probably some of the already selected values are not included in the selectable options,\r\n // so we have to push them in the selected values of the list;\r\n for (const v of this.value) {\r\n if (!selectableIds.includes(v[this.itemValue])) {\r\n vals = [v, ...vals];\r\n }\r\n }\r\n }\r\n vals.sort((a, b) => {\r\n return typeof a[this.itemValue] === 'string' ?\r\n a[this.itemValue].localeCompare(b[this.itemValue]) : a[this.itemValue] - b[this.itemValue];\r\n });\r\n this.value = [...vals];\r\n this.form.get('selectionValue').setValue(this.value.map(v => v[this.itemValue]));\r\n\r\n this.valueChange.emit(this.value);\r\n this.propagateChange(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n\r\n onFocusIn(event: FocusEvent): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onFocusOut(event: FocusEvent): void {\r\n if (!this.elementRef.nativeElement.contains(event.relatedTarget as Element)) {\r\n this.touched = true;\r\n this.focused = false;\r\n this.onTouched();\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onMenuOpen(): void {\r\n this.isOpen = true;\r\n\r\n this.jvxMultiselectOpen.emit();\r\n }\r\n\r\n onMenuClose(): void {\r\n this.isOpen = false;\r\n this.jvxMultiselectClose.emit();\r\n }\r\n\r\n deselect(val: any): void {\r\n this.value = [...this.value.filter(v => v[this.itemValue] !== val[this.itemValue])];\r\n // this.value.splice(this.value.findIndex(v => v[this.itemValue] === val[this.itemValue]), 1);\r\n this.form.get('selectionValue').setValue(this.value.map(m => m.value));\r\n this.valueChange.emit(this.value);\r\n this.propagateChange(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n private setSelectionContainerSize(): void {\r\n timer(0).subscribe(() => {\r\n if (this.selectionContainer) {\r\n this.listContainerSize.height = this.selectionContainer.nativeElement.offsetHeight > 260 ? '260px' : 'auto';\r\n this.listContainerSize.minHeight = this.selectionContainer.nativeElement.offsetHeight <= 260 ?\r\n this.selectionContainer.nativeElement.offsetHeight + 'px' : '260px';\r\n this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n }\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n\r\n clickOnMenuTrigger(e: MouseEvent): void {\r\n if (!this.disabled) {\r\n this.showList = false;\r\n this.shouldLoadMore = true;\r\n timer(0).subscribe(() => {\r\n this.showList = true;\r\n if (this.url.length > 0) {\r\n e.preventDefault();\r\n\r\n this.selectableOptions.length = 0;\r\n this.updateOrderedOptions(this.selectableOptions);\r\n this.getList().subscribe(noop);\r\n this.setSelectionContainerSize();\r\n\r\n } else {\r\n this.trigger.openMenu();\r\n this.setSelectionContainerSize();\r\n }\r\n });\r\n }\r\n }\r\n\r\n private getList(): Observable<any> {\r\n this.isLoading = true;\r\n return this.service.getList({\r\n url: this.url,\r\n requestType: this.requestType,\r\n data: {},\r\n currentPage: ++this.currentPage,\r\n ignorePagination: this.ignorePagination,\r\n requestHeaders: this.requestHeaders,\r\n search: this.searchValue,\r\n searchProp: this.searchProp,\r\n pageSize: this.intPageSize\r\n }).pipe(\r\n map((val) => {\r\n return val ?? [];\r\n }),\r\n switchMap((val) => this.multiMapper.mapOptions(val)), switchMap((val) => {\r\n let result = [];\r\n if (!val) {\r\n result = [];\r\n } else if (this.listProp.length > 0) {\r\n result = [...(val[this.listProp] ?? [])];\r\n } else {\r\n result = [...val];\r\n }\r\n\r\n if (result.length === 0) {\r\n this.shouldLoadMore = false;\r\n this.isLoading = false;\r\n return of([]);\r\n } else {\r\n const newOptions = [];\r\n\r\n for (const opt of result) {\r\n const newOption = this.mapper.mapOption(opt);\r\n newOptions.push(newOption);\r\n }\r\n return forkJoin(newOptions);\r\n }\r\n }), switchMap((finVal: any) => {\r\n this.selectableOptions.push(...finVal);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }), map((val) => {\r\n this.isLoading = false;\r\n this.trigger.openMenu();\r\n this.setSelectionContainerSize();\r\n return val;\r\n }), tap(() => {\r\n this.changeDetectorRef.markForCheck();\r\n }));\r\n }\r\n\r\n onScrolled(e: any): void {\r\n if (e.target.scrollTop + 220 + ((this.searchInput ? 0 : 1) * 40) === this.selectionContainer.nativeElement.offsetHeight\r\n && !this.isLoading) {\r\n this.scrollEnd.emit();\r\n if (this.url && this.url.length > 0 && !this.ignorePagination && this.shouldLoadMore) {\r\n this.getList().subscribe(noop);\r\n }\r\n }\r\n }\r\n\r\n onMenuOpened(): void {\r\n this.jvxMultiselectOpened.emit();\r\n }\r\n\r\n onMenuClosed(): void {\r\n if ((!this.url || this.url.length === 0) && this.searchMode === 'client') {\r\n this.searchValueSubject.next('');\r\n } else {\r\n this.searchValue = '';\r\n this.currentPage = 0;\r\n }\r\n this.jvxMultiselectClosed.emit();\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n onSearchInputClick(e: MouseEvent): void {\r\n e.stopPropagation();\r\n }\r\n\r\n onSearchValueChange(e: any): void {\r\n this.searchValueSubject.next(e.target.value);\r\n }\r\n\r\n clear(e: Event): void {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.value = [];\r\n this.form.get('selectionValue').setValue(this.value.map(v => v[this.itemValue]));\r\n this.propagateChange(this.value);\r\n this.valueChange.emit(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n const controlElement = this.elementRef.nativeElement\r\n .querySelector('.ng-jvx-multiselect');\r\n controlElement.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n\r\n onContainerClick(event: MouseEvent): void {\r\n // if ((event.target as Element).tagName.toLowerCase() !== 'input') {\r\n // this.elementRef.nativeElement.querySelector('input').focus();\r\n // }\r\n }\r\n\r\n private get stateChange$(): Observable<any> {\r\n return this.stateChanges.asObservable();\r\n }\r\n\r\n updateOrderedOptions(options): Observable<any> {\r\n let obs = of(options);\r\n if (this.groupBy) {\r\n this.orderedOptions.length = 0;\r\n const obsArr = [];\r\n for (const option of options) {\r\n if (typeof this.groupBy !== 'string') {\r\n obsArr.push(this.groupBy.mapGroup(option));\r\n } else {\r\n obsArr.push(of({group: option[this.groupBy], option} as NgJvxGroup<any>));\r\n }\r\n }\r\n obs = forkJoin(obsArr).pipe(map((res: any) => {\r\n const groups = [...new Set(res.map(item => item.group))];\r\n for (const group of groups) {\r\n this.orderedOptions.push({\r\n group,\r\n options: res.filter(r => r.group === group).map(o => o.option)\r\n });\r\n }\r\n return this.orderedOptions;\r\n }));\r\n }\r\n return obs;\r\n }\r\n\r\n public closeMenu(): void {\r\n this.trigger.closeMenu();\r\n }\r\n}\r\n","<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [matMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n #trigger=\"matMenuTrigger\">\r\n <mat-menu #menuRef=\"matMenu\" [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n <div *ngIf=\"closeButton\" class=\"closeMenuButton\"><mat-icon >close</mat-icon></div>\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <mat-selection-list #selection [multiple]=\"multi\"\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n (selectionChange)=\"onChange($event)\"\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\" [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <span style=\"padding-inline: 10px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </span>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </mat-selection-list>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </mat-menu>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n\r\n <div class=\"ng-jvx-multiselect__placeholder\" *ngIf=\"value.length === 0\">\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container></div>\r\n </div>\r\n <div class=\"ng-jvx-multiselect__remove-button\" *ngIf=\"clearable && value.length > 0\" (click)=\"clear($event)\">\r\n <mat-icon style=\"font-size: 18px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\">clear\r\n </mat-icon>\r\n </div>\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n <mat-icon *ngIf=\"!isLoading\">expand_more</mat-icon>\r\n <div *ngIf=\"isLoading\" class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"max-width: 100%;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{option[itemText]}}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{value[itemText]}}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <mat-chip-listbox #chipList [disabled]=\"this.disabled\">\r\n <mat-chip-option [color]=\"'primary'\" selected *ngFor=\"let val of value\" [selectable]=\"false\"\r\n class=\"ng-jvx-multiselect-chip\"\r\n [removable]=\"true\" (removed)=\"deselect(val)\">\r\n <span class=\"chip-content\"\r\n [ngStyle]=\"{'max-width': multiContainerWidth - 50 +'px'}\">{{val[itemText]}}</span>\r\n\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-option>\r\n </mat-chip-listbox>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{opt.group}}</strong></div>\r\n</ng-template>\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport {ChangeDetectionStrategy, Component, ElementRef, Inject, NgZone, ViewEncapsulation,} from '@angular/core';\r\nimport {\r\n MAT_MENU_DEFAULT_OPTIONS,\r\n MAT_MENU_PANEL,\r\n matMenuAnimations,\r\n MatMenuDefaultOptions\r\n} from '@angular/material/menu';\r\nimport {_MatMenuBase, MatMenu} from '@angular/material/menu';\r\n\r\n\r\n/** @docs-public MatMenu */\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'ngJvxPanel',\r\n templateUrl: 'ng-jvx-panel.component.html',\r\n styleUrls: ['ng-jvx-panel.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n exportAs: 'ngJvxPanel',\r\n // tslint:disable-next-line:no-host-metadata-property\r\n host: {\r\n '[attr.aria-label]': 'null',\r\n '[attr.aria-labelledby]': 'null',\r\n '[attr.aria-describedby]': 'null',\r\n },\r\n animations: [\r\n matMenuAnimations.transformMenu,\r\n matMenuAnimations.fadeInItems\r\n ],\r\n providers: [\r\n {provide: MAT_MENU_PANEL, useExisting: MatMenu},\r\n ]\r\n})\r\nexport class NgJvxPanelComponent extends _MatMenuBase {\r\n constructor(elementRef: ElementRef<HTMLElement>, ngZone: NgZone,\r\n @Inject(MAT_MENU_DEFAULT_OPTIONS) defaultOptions: MatMenuDefaultOptions) {\r\n super(elementRef, ngZone, defaultOptions);\r\n }\r\n}\r\n\r\n","<ng-template>\r\n <div\r\n class=\"mat-menu-panel\"\r\n [id]=\"panelId\"\r\n [ngClass]=\"_classList\"\r\n (keydown)=\"_handleKeydown($event)\"\r\n (click)=\"closed.emit('click')\"\r\n [@transformMenu]=\"_panelAnimationState\"\r\n (@transformMenu.start)=\"_onAnimationStart($event)\"\r\n (@transformMenu.done)=\"_onAnimationDone($event)\"\r\n tabindex=\"-1\"\r\n role=\"menu\"\r\n [attr.aria-label]=\"ariaLabel || null\"\r\n [attr.aria-labelledby]=\"ariaLabelledby || null\"\r\n [attr.aria-describedby]=\"ariaDescribedby || null\">\r\n <div class=\"mat-menu-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</ng-template>\r\n","import {NgModule} from '@angular/core';\r\nimport {NgJvxMultiselectComponent} from './ng-jvx-multiselect.component';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatOptionModule} from '@angular/material/core';\r\nimport {MatSelectModule} from '@angular/material/select';\r\nimport {CommonModule} from '@angular/common';\r\nimport {NgJvxOptionComponent} from './ng-jvx-option/ng-jvx-option.component';\r\nimport {MatMenuModule} from '@angular/material/menu';\r\nimport {NgJvxOptionsTemplateDirective} from './directives/ng-jvx-options-template.directive';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {NgJvxPanelComponent} from './ng-jvx-panel/ng-jvx-panel.component';\r\nimport {MatListModule} from '@angular/material/list';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatChipsModule} from '@angular/material/chips';\r\nimport {NgScrollbarModule} from 'ngx-scrollbar';\r\nimport {SmoothScrollModule} from 'ngx-scrollbar/smooth-scroll';\r\nimport {NgJvxSelectionTemplateDirective} from './directives/ng-jvx-selection-template.directive';\r\nimport {NgJvxDisabledOptionDirective} from './directives/ng-jvx-disabled-option.directive';\r\nimport {NgJvxGroupHeaderDirective} from './directives/ng-jvx-group-header.directive';\r\nimport {NgJvxFocusDirective} from './directives/ng-jvx-focus.directive';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n NgJvxMultiselectComponent,\r\n NgJvxOptionComponent,\r\n NgJvxOptionsTemplateDirective,\r\n NgJvxPanelComponent,\r\n NgJvxSelectionTemplateDirective,\r\n NgJvxDisabledOptionDirective,\r\n NgJvxGroupHeaderDirective,\r\n NgJvxFocusDirective],\r\n imports: [\r\n MatButtonModule,\r\n MatOptionModule,\r\n MatSelectModule,\r\n MatMenuModule,\r\n CommonModule,\r\n MatIconModule,\r\n MatListModule,\r\n MatChipsModule,\r\n ReactiveFormsModule,\r\n NgScrollbarModule,\r\n SmoothScrollModule,\r\n FormsModule\r\n ],\r\n exports: [NgJvxMultiselectComponent,\r\n NgJvxOptionComponent,\r\n NgJvxOptionsTemplateDirective,\r\n NgJvxSelectionTemplateDirective,\r\n NgJvxDisabledOptionDirective,\r\n NgJvxGroupHeaderDirective]\r\n})\r\nexport class NgJvxMultiselectModule {\r\n}\r\n","/*\r\n * Public API Surface of ng-jvx-multiselect\r\n */\r\n\r\nexport * from './lib/ng-jvx-option/ng-jvx-option.component';\r\nexport * from './lib/directives/ng-jvx-options-template.directive';\r\nexport * from './lib/directives/ng-jvx-selection-template.directive';\r\nexport * from './lib/directives/ng-jvx-group-header.directive';\r\nexport * from './lib/directives/ng-jvx-disabled-option.directive';\r\nexport * from './lib/ng-jvx-multiselect.service';\r\nexport * from './lib/ng-jvx-multiselect.component';\r\nexport * from './lib/ng-jvx-multiselect.module';\r\nexport * from './lib/interfaces/ng-jvx-option-mapper';\r\nexport * from './lib/interfaces/ng-jvx-search-mapper';\r\nexport * from './lib/interfaces/ng-jvx-group-mapper';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2.NgJvxMultiselectService","i6","i10.NgJvxOptionComponent","i11.NgJvxFocusDirective"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ng-jvx-multiselect",
|
|
3
|
-
"version": "16.0.
|
|
3
|
+
"version": "16.0.8",
|
|
4
4
|
"description": "ng-jvx-multiselect is a select based on angular material. It handles both single and multiple selections and allows to retrieves the options via asynchronous calls.",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|