UNPKG

ngx-mat-tag-input

Version:
173 lines 19.7 kB
import { __decorate } from "tslib"; import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core'; import { FormControl, NG_VALUE_ACCESSOR } from '@angular/forms'; import { COMMA, ENTER } from '@angular/cdk/keycodes'; import { map, startWith } from 'rxjs/operators'; var NgxMatTagInputComponent = /** @class */ (function () { function NgxMatTagInputComponent() { this.items = []; this.selectedTags = []; this.reset = new EventEmitter(); this.ngModelChange = new EventEmitter(); this.change = new EventEmitter(); this.focus = new EventEmitter(); this.select = new EventEmitter(); this.touched = new EventEmitter(); this.separatorKeysCodes = [ENTER, COMMA]; this.searchControl = new FormControl(); this.onChange = function () { }; this.onTouched = function () { }; } NgxMatTagInputComponent_1 = NgxMatTagInputComponent; Object.defineProperty(NgxMatTagInputComponent.prototype, "value", { get: function () { return this.selectedTags; }, set: function (value) { this.selectedTags = value; this.onChange(value); this._change(value); this.onTouched(); }, enumerable: true, configurable: true }); NgxMatTagInputComponent.prototype.ngOnInit = function () { var _this = this; this.filteredItems = this.searchControl.valueChanges.pipe(startWith(null), map(function (tag) { return tag ? _this._filter(tag) : _this.items.slice(); })); }; NgxMatTagInputComponent.prototype.writeValue = function (obj) { if (obj) { this.value = obj; } if (obj === null) { this.value = []; } }; NgxMatTagInputComponent.prototype.registerOnChange = function (fn) { this.change.emit(fn); this.onChange = fn; }; NgxMatTagInputComponent.prototype.registerOnTouched = function (fn) { this.onTouched = fn; this.touched.emit(fn); }; NgxMatTagInputComponent.prototype.setDisabledState = function (isDisabled) { this.searchControl.disable(); }; NgxMatTagInputComponent.prototype._modelChange = function (event) { this.ngModelChange.emit(event); }; NgxMatTagInputComponent.prototype._change = function (event) { this.change.emit(event); }; NgxMatTagInputComponent.prototype._focus = function (event) { this.focus.emit(event); }; NgxMatTagInputComponent.prototype.add = function (event) { var input = event.input; var value = event.value; if ((value || '').trim()) { this.selectedTags.push(value.trim()); } if (input) { input.value = ''; } this.searchControl.setValue(null); this._change(this.selectedTags); }; NgxMatTagInputComponent.prototype.remove = function (fruit) { var index = this.selectedTags.indexOf(fruit); if (index >= 0) { this.selectedTags.splice(index, 1); } this._change(this.selectedTags); }; NgxMatTagInputComponent.prototype.selected = function (event) { this.pushTag(event.option.value); this.tagsInput.nativeElement.value = ''; this.searchControl.setValue(null); this.select.emit(event.option.value); }; NgxMatTagInputComponent.prototype.clear = function () { this.selectedTags = []; }; NgxMatTagInputComponent.prototype.pushTag = function (tag) { if (!this.selectedTags.includes(tag)) { this.selectedTags.push(tag); this._change(this.selectedTags); } }; NgxMatTagInputComponent.prototype._filter = function (value) { var _this = this; var filterValue = (this.displayBy && value[this.displayBy] ? value[this.displayBy] : value).toLowerCase(); if (this.displayBy) { return this.items.filter(function (option) { return option[_this.displayBy].toLowerCase().includes(filterValue); }); } else { return this.items.filter(function (option) { return option.toLowerCase().includes(filterValue); }); } }; var NgxMatTagInputComponent_1; __decorate([ Input() ], NgxMatTagInputComponent.prototype, "appearance", void 0); __decorate([ Input() ], NgxMatTagInputComponent.prototype, "readonly", void 0); __decorate([ Input() ], NgxMatTagInputComponent.prototype, "items", void 0); __decorate([ Input() ], NgxMatTagInputComponent.prototype, "placeholder", void 0); __decorate([ Input() ], NgxMatTagInputComponent.prototype, "displayBy", void 0); __decorate([ Input() ], NgxMatTagInputComponent.prototype, "isLoading", void 0); __decorate([ Input() ], NgxMatTagInputComponent.prototype, "selectedTags", void 0); __decorate([ Output() ], NgxMatTagInputComponent.prototype, "reset", void 0); __decorate([ Output() ], NgxMatTagInputComponent.prototype, "ngModelChange", void 0); __decorate([ Output() ], NgxMatTagInputComponent.prototype, "change", void 0); __decorate([ Output() ], NgxMatTagInputComponent.prototype, "focus", void 0); __decorate([ Output() ], NgxMatTagInputComponent.prototype, "select", void 0); __decorate([ Output() ], NgxMatTagInputComponent.prototype, "touched", void 0); __decorate([ ViewChild('tagsInput') ], NgxMatTagInputComponent.prototype, "tagsInput", void 0); NgxMatTagInputComponent = NgxMatTagInputComponent_1 = __decorate([ Component({ selector: 'ngx-mat-tag-input', template: "<mat-form-field [appearance]=\"appearance\" class=\"mat-tag-input-container\">\r\n <mat-chip-list #chipList>\r\n <mat-chip (removed)=\"remove(item)\" *ngFor=\"let item of selectedTags\" [removable]=\"true\" [selectable]=\"true\">\r\n {{displayBy ? item[displayBy] : item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input #tagsInput\r\n (focus)=\"_focus($event)\" (matChipInputTokenEnd)=\"add($event)\" (ngModelChange)=\"_modelChange($event)\"\r\n [formControl]=\"searchControl\" [matAutocomplete]=\"auto\" [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [placeholder]=\"placeholder\">\r\n </mat-chip-list>\r\n <button (click)=\"clear()\" *ngIf=\"selectedTags.length !== 0\" mat-button mat-icon-button\r\n matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\r\n <mat-option *ngIf=\"isLoading\" class=\"centered\">\r\n <mat-spinner diameter=\"40\"></mat-spinner>\r\n </mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems | async\" [value]=\"item\">\r\n {{displayBy ? item[displayBy] : item}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(function () { return NgxMatTagInputComponent_1; }), multi: true } ], styles: [".mat-tag-input-container{width:100%}.centered{width:100%;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center;align-items:center}.centered mat-spinner{left:45%}"] }) ], NgxMatTagInputComponent); return NgxMatTagInputComponent; }()); export { NgxMatTagInputComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hdC10YWctaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdC10YWctaW5wdXQvIiwic291cmNlcyI6WyJsaWIvbmd4LW1hdC10YWctaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFjLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUF1QixXQUFXLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBTW5ELE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFjOUM7SUF1QkU7UUFuQlMsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUlsQixpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUV4QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDNUIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0IsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDNUIsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFJaEMsdUJBQWtCLEdBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUMsa0JBQWEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBd0J6QyxhQUFRLEdBQVE7UUFDaEIsQ0FBQyxDQUFBO1FBRUQsY0FBUyxHQUFRO1FBQ2pCLENBQUMsQ0FBQTtJQXZCRCxDQUFDO2dDQXpCVSx1QkFBdUI7SUEyQmxDLHNCQUFJLDBDQUFLO2FBQVQ7WUFDRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0IsQ0FBQzthQUVELFVBQVUsS0FBWTtZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7OztPQVBBO0lBU0QsMENBQVEsR0FBUjtRQUFBLGlCQUlDO1FBSEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3ZELFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDZixHQUFHLENBQUMsVUFBQyxHQUFlLElBQUssT0FBQSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQTVDLENBQTRDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFRRCw0Q0FBVSxHQUFWLFVBQVcsR0FBUTtRQUNqQixJQUFJLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVELGtEQUFnQixHQUFoQixVQUFpQixFQUFPO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxtREFBaUIsR0FBakIsVUFBa0IsRUFBTztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsa0RBQWdCLEdBQWhCLFVBQWtCLFVBQW1CO1FBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELDhDQUFZLEdBQVosVUFBYSxLQUFLO1FBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRCx5Q0FBTyxHQUFQLFVBQVEsS0FBSztRQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCx3Q0FBTSxHQUFOLFVBQU8sS0FBSztRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxxQ0FBRyxHQUFILFVBQUksS0FBd0I7UUFDMUIsSUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELHdDQUFNLEdBQU4sVUFBTyxLQUFVO1FBQ2YsSUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELDBDQUFRLEdBQVIsVUFBUyxLQUFtQztRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx1Q0FBSyxHQUFMO1FBQ0UsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELHlDQUFPLEdBQVAsVUFBUSxHQUFRO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVPLHlDQUFPLEdBQWYsVUFBZ0IsS0FBVTtRQUExQixpQkFPQztRQU5DLElBQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1RyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFBLE1BQU0sSUFBSSxPQUFBLE1BQU0sQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUExRCxDQUEwRCxDQUFDLENBQUM7U0FDaEc7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBQSxNQUFNLElBQUksT0FBQSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUExQyxDQUEwQyxDQUFDLENBQUM7U0FDaEY7SUFDSCxDQUFDOztJQWpJUTtRQUFSLEtBQUssRUFBRTsrREFBb0M7SUFDbkM7UUFBUixLQUFLLEVBQUU7NkRBQW1CO0lBQ2xCO1FBQVIsS0FBSyxFQUFFOzBEQUFtQjtJQUNsQjtRQUFSLEtBQUssRUFBRTtnRUFBcUI7SUFDcEI7UUFBUixLQUFLLEVBQUU7OERBQW1CO0lBQ2xCO1FBQVIsS0FBSyxFQUFFOzhEQUFvQjtJQUNuQjtRQUFSLEtBQUssRUFBRTtpRUFBMEI7SUFFeEI7UUFBVCxNQUFNLEVBQUU7MERBQTRCO0lBQzNCO1FBQVQsTUFBTSxFQUFFO2tFQUFvQztJQUNuQztRQUFULE1BQU0sRUFBRTsyREFBNkI7SUFDNUI7UUFBVCxNQUFNLEVBQUU7MERBQTRCO0lBQzNCO1FBQVQsTUFBTSxFQUFFOzJEQUE2QjtJQUM1QjtRQUFULE1BQU0sRUFBRTs0REFBOEI7SUFFZjtRQUF2QixTQUFTLENBQUMsV0FBVyxDQUFDOzhEQUF5QztJQWpCckQsdUJBQXVCO1FBWm5DLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsNHpDQUFpRDtZQUVqRCxTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEseUJBQXVCLEVBQXZCLENBQXVCLENBQUM7b0JBQ3RELEtBQUssRUFBRSxJQUFJO2lCQUNaO2FBQ0Y7O1NBQ0YsQ0FBQztPQUNXLHVCQUF1QixDQXNJbkM7SUFBRCw4QkFBQztDQUFBLEFBdElELElBc0lDO1NBdElZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtDT01NQSwgRU5URVJ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQge01hdEZvcm1GaWVsZEFwcGVhcmFuY2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHtNYXRDaGlwSW5wdXRFdmVudH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHN0YXJ0V2l0aH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ3gtbWF0LXRhZy1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZ3gtbWF0LXRhZy1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25neC1tYXQtdGFnLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmd4TWF0VGFnSW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4TWF0VGFnSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlO1xuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXRlbXM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc3BsYXlCeTogc3RyaW5nO1xuICBASW5wdXQoKSBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNlbGVjdGVkVGFnczogYW55W10gPSBbXTtcblxuICBAT3V0cHV0KCkgcmVzZXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBuZ01vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB0b3VjaGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhZ3NJbnB1dCcpIHRhZ3NJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBwdWJsaWMgc2VwYXJhdG9yS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUFdO1xuICBwdWJsaWMgc2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBwdWJsaWMgZmlsdGVyZWRJdGVtczogT2JzZXJ2YWJsZTxhbnlbXT47XG5cbiAgY29uc3RydWN0b3IoKSB7XG5cbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWdzO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMuc2VsZWN0ZWRUYWdzID0gdmFsdWU7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy5fY2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgbWFwKCh0YWc6IGFueSB8IG51bGwpID0+IHRhZyA/IHRoaXMuX2ZpbHRlcih0YWcpIDogdGhpcy5pdGVtcy5zbGljZSgpKSk7XG4gIH1cblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge1xuICB9XG5cbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7XG4gIH1cblxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgaWYgKG9iaikge1xuICAgICAgdGhpcy52YWx1ZSA9IG9iajtcbiAgICB9XG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQoZm4pO1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIHRoaXMudG91Y2hlZC5lbWl0KGZuKTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wuZGlzYWJsZSgpO1xuICB9XG5cbiAgX21vZGVsQ2hhbmdlKGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5uZ01vZGVsQ2hhbmdlLmVtaXQoZXZlbnQpXG4gIH1cblxuICBfY2hhbmdlKGV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBfZm9jdXMoZXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzLmVtaXQoZXZlbnQpXG4gIH1cblxuICBhZGQoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC5pbnB1dDtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgIGlmICgodmFsdWUgfHwgJycpLnRyaW0oKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhZ3MucHVzaCh2YWx1ZS50cmltKCkpO1xuICAgIH1cbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICB0aGlzLl9jaGFuZ2UodGhpcy5zZWxlY3RlZFRhZ3MpO1xuICB9XG5cbiAgcmVtb3ZlKGZydWl0OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWdzLmluZGV4T2YoZnJ1aXQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFncy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLl9jaGFuZ2UodGhpcy5zZWxlY3RlZFRhZ3MpO1xuICB9XG5cbiAgc2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnB1c2hUYWcoZXZlbnQub3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLnRhZ3NJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuc2VsZWN0LmVtaXQoZXZlbnQub3B0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRUYWdzID0gW107XG4gIH1cblxuICBwdXNoVGFnKHRhZzogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVGFncy5pbmNsdWRlcyh0YWcpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFncy5wdXNoKHRhZyk7XG4gICAgICB0aGlzLl9jaGFuZ2UodGhpcy5zZWxlY3RlZFRhZ3MpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpbHRlcih2YWx1ZTogYW55KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGZpbHRlclZhbHVlID0gKHRoaXMuZGlzcGxheUJ5ICYmIHZhbHVlW3RoaXMuZGlzcGxheUJ5XSA/IHZhbHVlW3RoaXMuZGlzcGxheUJ5XSA6IHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0aGlzLmRpc3BsYXlCeSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb25bdGhpcy5kaXNwbGF5QnldLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG5cbn1cbiJdfQ==