@fundamental-ngx/cdk 0.43.6 → 0.43.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/utils/directives/auto-complete/auto-complete.directive.mjs +8 -3
- package/esm2020/utils/drag-and-drop/dnd-list/dnd-list.directive.mjs +22 -17
- package/fesm2015/fundamental-ngx-cdk-utils.mjs +26 -17
- package/fesm2015/fundamental-ngx-cdk-utils.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-cdk-utils.mjs +27 -17
- package/fesm2020/fundamental-ngx-cdk-utils.mjs.map +1 -1
- package/fundamental-ngx-cdk-v0.43.7.tgz +0 -0
- package/package.json +2 -2
- package/utils/directives/auto-complete/auto-complete.directive.d.ts +3 -1
- package/utils/drag-and-drop/dnd-list/dnd-list.directive.d.ts +7 -5
- package/fundamental-ngx-cdk-v0.43.6.tgz +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/member-ordering */
|
|
1
2
|
import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
3
|
import { BACKSPACE, CONTROL, DELETE, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';
|
|
3
4
|
import { KeyUtil } from '../../functions/key-util';
|
|
@@ -32,6 +33,8 @@ export class AutoCompleteDirective {
|
|
|
32
33
|
this._elementRef = _elementRef;
|
|
33
34
|
/** Whether the auto complete directive should be enabled */
|
|
34
35
|
this.enable = true;
|
|
36
|
+
/** Matcher function for testing the str for a search term */
|
|
37
|
+
this.matcher = (str, searchTerm) => str.startsWith(searchTerm);
|
|
35
38
|
/** Display function. Accepts an object of the same type as the
|
|
36
39
|
* items passed to dropdownValues as argument, and outputs a string.
|
|
37
40
|
* An arrow function can be used to access the *this* keyword in the calling component.
|
|
@@ -65,7 +68,7 @@ export class AutoCompleteDirective {
|
|
|
65
68
|
return;
|
|
66
69
|
}
|
|
67
70
|
this.oldValue = this.inputText;
|
|
68
|
-
const item = this.options.find((option) => this.displayFn(option).toLocaleLowerCase()
|
|
71
|
+
const item = this.options.find((option) => this.matcher(this.displayFn(option).toLocaleLowerCase(), this.inputText.toLocaleLowerCase()));
|
|
69
72
|
if (item) {
|
|
70
73
|
this._typeahead(this.displayFn(item));
|
|
71
74
|
}
|
|
@@ -112,7 +115,7 @@ export class AutoCompleteDirective {
|
|
|
112
115
|
}
|
|
113
116
|
}
|
|
114
117
|
AutoCompleteDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AutoCompleteDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
115
|
-
AutoCompleteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AutoCompleteDirective, isStandalone: true, selector: "[fdkAutoComplete], [fdAutoComplete], [fd-auto-complete]", inputs: { options: "options", inputText: "inputText", enable: "enable", displayFn: "displayFn" }, outputs: { onComplete: "onComplete" }, host: { listeners: { "keyup": "handleKeyboardEvent($event)" } }, ngImport: i0 });
|
|
118
|
+
AutoCompleteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AutoCompleteDirective, isStandalone: true, selector: "[fdkAutoComplete], [fdAutoComplete], [fd-auto-complete]", inputs: { options: "options", inputText: "inputText", enable: "enable", matcher: "matcher", displayFn: "displayFn" }, outputs: { onComplete: "onComplete" }, host: { listeners: { "keyup": "handleKeyboardEvent($event)" } }, ngImport: i0 });
|
|
116
119
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AutoCompleteDirective, decorators: [{
|
|
117
120
|
type: Directive,
|
|
118
121
|
args: [{
|
|
@@ -125,6 +128,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
125
128
|
type: Input
|
|
126
129
|
}], enable: [{
|
|
127
130
|
type: Input
|
|
131
|
+
}], matcher: [{
|
|
132
|
+
type: Input
|
|
128
133
|
}], displayFn: [{
|
|
129
134
|
type: Input
|
|
130
135
|
}], onComplete: [{
|
|
@@ -133,4 +138,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
133
138
|
type: HostListener,
|
|
134
139
|
args: ['keyup', ['$event']]
|
|
135
140
|
}] } });
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1jb21wbGV0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL3V0aWxzL2RpcmVjdGl2ZXMvYXV0by1jb21wbGV0ZS9hdXRvLWNvbXBsZXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGdDQUFnQyxFQUNoQyxrQkFBa0IsRUFDckIsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFrQnpDLE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxrQkFBa0I7OzRIQUExRCwrQkFBK0I7Z0hBQS9CLCtCQUErQixtRkFQN0I7UUFDUDtZQUNJLE9BQU8sRUFBRSxnQ0FBZ0M7WUFDekMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLHNDQUFzQyxDQUFDO1NBQzVGO0tBQ0o7MkZBRVEsK0JBQStCO2tCQVgzQyxTQUFTO21CQUFDO29CQUNQLDhEQUE4RDtvQkFDOUQsUUFBUSxFQUFFLHNDQUFzQztvQkFDaEQsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsZ0NBQWdDOzRCQUN6QyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsbUJBQW1CLEVBQUUsc0NBQXNDLENBQUM7eUJBQzVGO3FCQUNKO2lCQUNKOztBQU9ELE1BQU0sT0FBTyxxQkFBcUI7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QWM7SUFDTixpQkFBaUI7UUFDckIsSUFDSSxJQUFJLENBQUMsY0FBYztZQUNuQixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDO1lBQy9DLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFDbEM7WUFDRSxPQUFPLEtBQUssQ0FBQztTQUNoQjthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sa0JBQWtCLENBQUMsVUFBbUI7UUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUs7WUFDMUMsVUFBVTtTQUNiLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ04sNkJBQTZCO1FBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDdkYsQ0FBQzs7a0hBdkhRLHFCQUFxQjtzR0FBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlEQUF5RDtvQkFDbkUsVUFBVSxFQUFFLElBQUk7aUJBQ25CO2lHQUlHLE9BQU87c0JBRE4sS0FBSztnQkFRTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQVFOLFNBQVM7c0JBRFIsS0FBSztnQkFNRyxVQUFVO3NCQUZsQixNQUFNO2dCQXdCUCxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQkFDS1NQQUNFLCBDT05UUk9MLCBERUxFVEUsIEVOVEVSLCBFU0NBUEUsIExFRlRfQVJST1csIFJJR0hUX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IEtleVV0aWwgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMva2V5LXV0aWwnO1xuaW1wb3J0IHtcbiAgICBEZXByZWNhdGVkU2VsZWN0b3IsXG4gICAgRkRfREVQUkVDQVRFRF9ESVJFQ1RJVkVfU0VMRUNUT1IsXG4gICAgZ2V0RGVwcmVjYXRlZE1vZGVsXG59IGZyb20gJy4uLy4uL2RlcHJlY2F0ZWQtc2VsZWN0b3IuY2xhc3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9Db21wbGV0ZUV2ZW50IHtcbiAgICB0ZXJtOiBzdHJpbmc7XG4gICAgZm9yY2VDbG9zZTogYm9vbGVhbjtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tmZEF1dG9Db21wbGV0ZV0sIFtmZC1hdXRvLWNvbXBsZXRlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfREVQUkVDQVRFRF9ESVJFQ1RJVkVfU0VMRUNUT1IsXG4gICAgICAgICAgICB1c2VWYWx1ZTogZ2V0RGVwcmVjYXRlZE1vZGVsKCdbZmRrQXV0b0NvbXBsZXRlXScsICdbZmRBdXRvQ29tcGxldGVdLCBbZmQtYXV0by1jb21wbGV0ZV0nKVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEZXByZWNhdGVkQXV0b0NvbXBsZXRlRGlyZWN0aXZlIGV4dGVuZHMgRGVwcmVjYXRlZFNlbGVjdG9yIHt9XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2Zka0F1dG9Db21wbGV0ZV0sIFtmZEF1dG9Db21wbGV0ZV0sIFtmZC1hdXRvLWNvbXBsZXRlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBBdXRvQ29tcGxldGVEaXJlY3RpdmUge1xuICAgIC8qKiBWYWx1ZXMgdGhhdCB3aWxsIGZpbGwgbWlzc2luZyB0ZXh0IGluIHRoZSBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG9wdGlvbnM6IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogSW5wdXQgdGV4dCwgdGhhdCBpcyB0YWtlbiBmcm9tIG5nTW9kZWwgb2YgZm9ybUNvbnRyb2wsXG4gICAgICogdGhlcmUgaGFzIHRvIGJlIGRpZmZlcmVuY2UgYmV0d2VlbiBuYXRpdmUgaW5wdXQgdmFsdWUgYW5kIG1vZGVsIHZhbHVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpbnB1dFRleHQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhdXRvIGNvbXBsZXRlIGRpcmVjdGl2ZSBzaG91bGQgYmUgZW5hYmxlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlID0gdHJ1ZTtcblxuICAgIC8qKiBEaXNwbGF5IGZ1bmN0aW9uLiBBY2NlcHRzIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZVxuICAgICAqIGl0ZW1zIHBhc3NlZCB0byBkcm9wZG93blZhbHVlcyBhcyBhcmd1bWVudCwgYW5kIG91dHB1dHMgYSBzdHJpbmcuXG4gICAgICogQW4gYXJyb3cgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSAqdGhpcyoga2V5d29yZCBpbiB0aGUgY2FsbGluZyBjb21wb25lbnQuXG4gICAgICogU2VlIHNlYXJjaCBpbnB1dCBleGFtcGxlcyBmb3IgZGV0YWlscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlGbiA9IHRoaXMuX2RlZmF1bHREaXNwbGF5O1xuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiB0aGUgYXV0byBhaGVhZCB0ZXh0IGlzIGFjY2VwdGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgcmVhZG9ubHkgb25Db21wbGV0ZTogRXZlbnRFbWl0dGVyPEF1dG9Db21wbGV0ZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXV0b0NvbXBsZXRlRXZlbnQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbXBsZXRlS2V5czogbnVtYmVyW10gPSBbRU5URVJdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9maWxsS2V5czogbnVtYmVyW10gPSBbTEVGVF9BUlJPVywgUklHSFRfQVJST1ddO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdG9wS2V5czogbnVtYmVyW10gPSBbQkFDS1NQQUNFLCBERUxFVEUsIEVTQ0FQRV07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgb2xkVmFsdWU6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBsYXN0S2V5VXBFdmVudDogS2V5Ym9hcmRFdmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlKSB7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIHRoaXMuX3N0b3BLZXlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuaW5wdXRUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgdGhpcy5fY29tcGxldGVLZXlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbmRDb21wbGV0ZUV2ZW50KHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVJbmRpY2F0b3JUb0xhc3RDaGFyYWN0ZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIHRoaXMuX2ZpbGxLZXlzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbmRDb21wbGV0ZUV2ZW50KGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzQ29udHJvbEtleShldmVudCkgJiYgdGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgICAgICAvKiogUHJldmVudGlvbiBmcm9tIHRyaWdnZXJpbmcgdHlwZWFoZWFkLCB3aGVuIGhhdmluZyBjcnRsL2NtZCArIGtleXMgKi9cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3RyaWdnZXJUeXBlQWhlYWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMuaW5wdXRUZXh0O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMub3B0aW9ucy5maW5kKChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUZuKG9wdGlvbikudG9Mb2NhbGVMb3dlckNhc2UoKS5zdGFydHNXaXRoKHRoaXMuaW5wdXRUZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3R5cGVhaGVhZCh0aGlzLmRpc3BsYXlGbihpdGVtKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubGFzdEtleVVwRXZlbnQgPSBldmVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3R5cGVhaGVhZChkaXNwbGF5ZWRWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IGRpc3BsYXllZFZhbHVlO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGFydEluZGV4ID0gdGhpcy5pbnB1dFRleHQubGVuZ3RoO1xuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsZWN0aW9uU3RhcnRJbmRleCwgZGlzcGxheWVkVmFsdWUubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzQ29udHJvbEtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIENPTlRST0wpIHx8IGV2ZW50LmN0cmxLZXk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0RGlzcGxheSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJpZ2dlclR5cGVBaGVhZCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5sYXN0S2V5VXBFdmVudCAmJlxuICAgICAgICAgICAgS2V5VXRpbC5pc0tleUNvZGUodGhpcy5sYXN0S2V5VXBFdmVudCwgQ09OVFJPTCkgJiZcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0ID09PSB0aGlzLm9sZFZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbmRDb21wbGV0ZUV2ZW50KGZvcmNlQ2xvc2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoe1xuICAgICAgICAgICAgdGVybTogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlLFxuICAgICAgICAgICAgZm9yY2VDbG9zZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21vdmVJbmRpY2F0b3JUb0xhc3RDaGFyYWN0ZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0VGV4dExlbmd0aCA9IHRoaXMuaW5wdXRUZXh0Py5sZW5ndGggPz8gMDtcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKGlucHV0VGV4dExlbmd0aCwgaW5wdXRUZXh0TGVuZ3RoKTtcbiAgICB9XG59XG4iXX0=
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0by1jb21wbGV0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nkay9zcmMvbGliL3V0aWxzL2RpcmVjdGl2ZXMvYXV0by1jb21wbGV0ZS9hdXRvLWNvbXBsZXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkQsT0FBTyxFQUNILGtCQUFrQixFQUNsQixnQ0FBZ0MsRUFDaEMsa0JBQWtCLEVBQ3JCLE1BQU0saUNBQWlDLENBQUM7O0FBa0J6QyxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsa0JBQWtCOzs0SEFBMUQsK0JBQStCO2dIQUEvQiwrQkFBK0IsbUZBUDdCO1FBQ1A7WUFDSSxPQUFPLEVBQUUsZ0NBQWdDO1lBQ3pDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBRSxzQ0FBc0MsQ0FBQztTQUM1RjtLQUNKOzJGQUVRLCtCQUErQjtrQkFYM0MsU0FBUzttQkFBQztvQkFDUCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxzQ0FBc0M7b0JBQ2hELFVBQVUsRUFBRSxJQUFJO29CQUNoQixTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGdDQUFnQzs0QkFDekMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLHNDQUFzQyxDQUFDO3lCQUM1RjtxQkFDSjtpQkFDSjs7QUFPRCxNQUFN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TTtnQkF3QlAsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbmltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJBQ0tTUEFDRSwgQ09OVFJPTCwgREVMRVRFLCBFTlRFUiwgRVNDQVBFLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBLZXlVdGlsIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL2tleS11dGlsJztcbmltcG9ydCB7XG4gICAgRGVwcmVjYXRlZFNlbGVjdG9yLFxuICAgIEZEX0RFUFJFQ0FURURfRElSRUNUSVZFX1NFTEVDVE9SLFxuICAgIGdldERlcHJlY2F0ZWRNb2RlbFxufSBmcm9tICcuLi8uLi9kZXByZWNhdGVkLXNlbGVjdG9yLmNsYXNzJztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRvQ29tcGxldGVFdmVudCB7XG4gICAgdGVybTogc3RyaW5nO1xuICAgIGZvcmNlQ2xvc2U6IGJvb2xlYW47XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbZmRBdXRvQ29tcGxldGVdLCBbZmQtYXV0by1jb21wbGV0ZV0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0RFUFJFQ0FURURfRElSRUNUSVZFX1NFTEVDVE9SLFxuICAgICAgICAgICAgdXNlVmFsdWU6IGdldERlcHJlY2F0ZWRNb2RlbCgnW2Zka0F1dG9Db21wbGV0ZV0nLCAnW2ZkQXV0b0NvbXBsZXRlXSwgW2ZkLWF1dG8tY29tcGxldGVdJylcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRGVwcmVjYXRlZEF1dG9Db21wbGV0ZURpcmVjdGl2ZSBleHRlbmRzIERlcHJlY2F0ZWRTZWxlY3RvciB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZGtBdXRvQ29tcGxldGVdLCBbZmRBdXRvQ29tcGxldGVdLCBbZmQtYXV0by1jb21wbGV0ZV0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQXV0b0NvbXBsZXRlRGlyZWN0aXZlIHtcbiAgICAvKiogVmFsdWVzIHRoYXQgd2lsbCBmaWxsIG1pc3NpbmcgdGV4dCBpbiB0aGUgaW5wdXQuICovXG4gICAgQElucHV0KClcbiAgICBvcHRpb25zOiBhbnlbXTtcblxuICAgIC8qKlxuICAgICAqIElucHV0IHRleHQsIHRoYXQgaXMgdGFrZW4gZnJvbSBuZ01vZGVsIG9mIGZvcm1Db250cm9sLFxuICAgICAqIHRoZXJlIGhhcyB0byBiZSBkaWZmZXJlbmNlIGJldHdlZW4gbmF0aXZlIGlucHV0IHZhbHVlIGFuZCBtb2RlbCB2YWx1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRUZXh0OiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgYXV0byBjb21wbGV0ZSBkaXJlY3RpdmUgc2hvdWxkIGJlIGVuYWJsZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIGVuYWJsZSA9IHRydWU7XG5cbiAgICAvKiogTWF0Y2hlciBmdW5jdGlvbiBmb3IgdGVzdGluZyB0aGUgc3RyIGZvciBhIHNlYXJjaCB0ZXJtICovXG4gICAgQElucHV0KClcbiAgICBtYXRjaGVyID0gKHN0cjogc3RyaW5nLCBzZWFyY2hUZXJtOiBzdHJpbmcpOiBib29sZWFuID0+IHN0ci5zdGFydHNXaXRoKHNlYXJjaFRlcm0pO1xuXG4gICAgLyoqIERpc3BsYXkgZnVuY3Rpb24uIEFjY2VwdHMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlXG4gICAgICogaXRlbXMgcGFzc2VkIHRvIGRyb3Bkb3duVmFsdWVzIGFzIGFyZ3VtZW50LCBhbmQgb3V0cHV0cyBhIHN0cmluZy5cbiAgICAgKiBBbiBhcnJvdyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlICp0aGlzKiBrZXl3b3JkIGluIHRoZSBjYWxsaW5nIGNvbXBvbmVudC5cbiAgICAgKiBTZWUgc2VhcmNoIGlucHV0IGV4YW1wbGVzIGZvciBkZXRhaWxzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUZuID0gdGhpcy5fZGVmYXVsdERpc3BsYXk7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIHRoZSBhdXRvIGFoZWFkIHRleHQgaXMgYWNjZXB0ZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICByZWFkb25seSBvbkNvbXBsZXRlOiBFdmVudEVtaXR0ZXI8QXV0b0NvbXBsZXRlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBdXRvQ29tcGxldGVFdmVudD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29tcGxldGVLZXlzOiBudW1iZXJbXSA9IFtFTlRFUl07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZpbGxLZXlzOiBudW1iZXJbXSA9IFtMRUZUX0FSUk9XLCBSSUdIVF9BUlJPV107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0b3BLZXlzOiBudW1iZXJbXSA9IFtCQUNLU1BBQ0UsIERFTEVURSwgRVNDQVBFXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBvbGRWYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGxhc3RLZXlVcEV2ZW50OiBLZXlib2FyZEV2ZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbmFibGUpIHtcbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgdGhpcy5fc3RvcEtleXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5pbnB1dFRleHQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLl9jb21wbGV0ZUtleXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VuZENvbXBsZXRlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZUluZGljYXRvclRvTGFzdENoYXJhY3RlcigpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgdGhpcy5fZmlsbEtleXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VuZENvbXBsZXRlRXZlbnQoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNDb250cm9sS2V5KGV2ZW50KSAmJiB0aGlzLmlucHV0VGV4dCkge1xuICAgICAgICAgICAgICAgIC8qKiBQcmV2ZW50aW9uIGZyb20gdHJpZ2dlcmluZyB0eXBlYWhlYWQsIHdoZW4gaGF2aW5nIGNydGwvY21kICsga2V5cyAqL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fdHJpZ2dlclR5cGVBaGVhZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy5pbnB1dFRleHQ7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVyKHRoaXMuZGlzcGxheUZuKG9wdGlvbikudG9Mb2NhbGVMb3dlckNhc2UoKSwgdGhpcy5pbnB1dFRleHQudG9Mb2NhbGVMb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHlwZWFoZWFkKHRoaXMuZGlzcGxheUZuKGl0ZW0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sYXN0S2V5VXBFdmVudCA9IGV2ZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHlwZWFoZWFkKGRpc3BsYXllZFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gZGlzcGxheWVkVmFsdWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0SW5kZXggPSB0aGlzLmlucHV0VGV4dC5sZW5ndGg7XG4gICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydEluZGV4LCBkaXNwbGF5ZWRWYWx1ZS5sZW5ndGgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNDb250cm9sS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgQ09OVFJPTCkgfHwgZXZlbnQuY3RybEtleTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHREaXNwbGF5KHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90cmlnZ2VyVHlwZUFoZWFkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmxhc3RLZXlVcEV2ZW50ICYmXG4gICAgICAgICAgICBLZXlVdGlsLmlzS2V5Q29kZSh0aGlzLmxhc3RLZXlVcEV2ZW50LCBDT05UUk9MKSAmJlxuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPT09IHRoaXMub2xkVmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VuZENvbXBsZXRlRXZlbnQoZm9yY2VDbG9zZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdCh7XG4gICAgICAgICAgICB0ZXJtOiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUsXG4gICAgICAgICAgICBmb3JjZUNsb3NlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbW92ZUluZGljYXRvclRvTGFzdENoYXJhY3RlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXRUZXh0TGVuZ3RoID0gdGhpcy5pbnB1dFRleHQ/Lmxlbmd0aCA/PyAwO1xuICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoaW5wdXRUZXh0TGVuZ3RoLCBpbnB1dFRleHRMZW5ndGgpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/member-ordering */
|
|
1
2
|
import { ContentChildren, Directive, EventEmitter, forwardRef, HostBinding, Input, Output, QueryList } from '@angular/core';
|
|
2
3
|
import { merge, Subject } from 'rxjs';
|
|
3
|
-
import { startWith,
|
|
4
|
+
import { startWith, take, takeUntil } from 'rxjs/operators';
|
|
4
5
|
import { selectStrategy } from '../../async-strategy';
|
|
5
6
|
import { DND_ITEM, DND_LIST } from '../tokens';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
@@ -42,6 +43,8 @@ export class DndListDirective {
|
|
|
42
43
|
/** Event that is thrown when predicate function returned false. */
|
|
43
44
|
this.dropCancelled = new EventEmitter();
|
|
44
45
|
/** @hidden */
|
|
46
|
+
this._initialClass = 'fd-dnd-list';
|
|
47
|
+
/** @hidden */
|
|
45
48
|
this._closestItemIndex = null;
|
|
46
49
|
/** @hidden */
|
|
47
50
|
this._closestItemPosition = null;
|
|
@@ -52,8 +55,6 @@ export class DndListDirective {
|
|
|
52
55
|
/** @hidden */
|
|
53
56
|
this._draggable = true;
|
|
54
57
|
/** @hidden */
|
|
55
|
-
this._initialClass = 'fd-dnd-list';
|
|
56
|
-
/** @hidden */
|
|
57
58
|
this._linesRemoved = true;
|
|
58
59
|
/** @hidden */
|
|
59
60
|
this._indicatorsRemoved = true;
|
|
@@ -83,13 +84,29 @@ export class DndListDirective {
|
|
|
83
84
|
/** @hidden */
|
|
84
85
|
ngAfterContentInit() {
|
|
85
86
|
this._changeDraggableState(this._draggable);
|
|
86
|
-
this.dndItems.changes
|
|
87
|
+
this.dndItems.changes
|
|
88
|
+
.pipe(startWith(null), takeUntil(this._onDestroy$))
|
|
89
|
+
.subscribe(() => this.refreshQueryList());
|
|
87
90
|
}
|
|
88
91
|
/** @hidden */
|
|
89
92
|
ngOnDestroy() {
|
|
90
93
|
this._onDestroy$.next();
|
|
91
94
|
this._onDestroy$.complete();
|
|
92
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Refreshes the indexes of the items.
|
|
98
|
+
*/
|
|
99
|
+
refreshQueryList() {
|
|
100
|
+
const refresh$ = merge(this._refresh$, this._onDestroy$);
|
|
101
|
+
this._refresh$.next();
|
|
102
|
+
this._dndItemReference = this.dndItems.toArray();
|
|
103
|
+
this._changeDraggableState(this._draggable);
|
|
104
|
+
this.dndItems.forEach((item, index) => {
|
|
105
|
+
item.moved.pipe(takeUntil(refresh$)).subscribe((position) => this.onMove(position, index));
|
|
106
|
+
item.started.pipe(takeUntil(refresh$)).subscribe(() => this.dragStart(index));
|
|
107
|
+
item.released.pipe(takeUntil(refresh$)).subscribe(async () => await this.dragEnd(index));
|
|
108
|
+
});
|
|
109
|
+
}
|
|
93
110
|
/** Method called when the item is being moved by 1 px */
|
|
94
111
|
onMove(mousePosition, draggedItemIndex) {
|
|
95
112
|
/** Temporary object, to store lowest distance values */
|
|
@@ -270,18 +287,6 @@ export class DndListDirective {
|
|
|
270
287
|
this._indicatorsRemoved = false;
|
|
271
288
|
this._dndItemReference[closestItemIndex].createReplaceIndicator();
|
|
272
289
|
}
|
|
273
|
-
/** @hidden */
|
|
274
|
-
_refreshQueryList() {
|
|
275
|
-
const refresh$ = merge(this._refresh$, this._onDestroy$);
|
|
276
|
-
this._refresh$.next();
|
|
277
|
-
this._dndItemReference = this.dndItems.toArray();
|
|
278
|
-
this._changeDraggableState(this._draggable);
|
|
279
|
-
this.dndItems.forEach((item, index) => {
|
|
280
|
-
item.moved.pipe(takeUntil(refresh$)).subscribe((position) => this.onMove(position, index));
|
|
281
|
-
item.started.pipe(takeUntil(refresh$)).subscribe(() => this.dragStart(index));
|
|
282
|
-
item.released.pipe(takeUntil(refresh$)).subscribe(async () => await this.dragEnd(index));
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
290
|
/**
|
|
286
291
|
* @hidden
|
|
287
292
|
* Return information if an element is placed before the dragged element
|
|
@@ -388,4 +393,4 @@ function getElementBoundaries(coordinates, threshold) {
|
|
|
388
393
|
}
|
|
389
394
|
};
|
|
390
395
|
}
|
|
391
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWxpc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9kcmFnLWFuZC1kcm9wL2RuZC1saXN0L2RuZC1saXN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsZUFBZSxFQUNmLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBa0IvQyxNQUFNLE9BQU8sZ0JBQWdCO0lBSjdCO1FBS0k7OztXQUdHO1FBRUgsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQjs7Ozs7Ozs7O1dBU0c7UUFFSCxhQUFRLEdBQWtCLE9BQU8sQ0FBQztRQUVsQzs7V0FFRztRQUVILGNBQVMsR0FBRyxHQUFHLENBQUM7UUFvQmhCLGNBQWM7UUFDTixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUU3QiwwQ0FBMEM7UUFFMUMsVUFBSyxHQUFhLEVBQUUsQ0FBQztRQW9CckI7OztXQUdHO1FBRUgsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUV2RCxvREFBb0Q7UUFFM0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBRXBELG9EQUFvRDtRQUUzQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBRTFELG1FQUFtRTtRQUUx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QUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDcEcsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDbEUsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUNyRyxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsWUFBWSxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUNwRSxPQUFPO1FBQ0gsQ0FBQyxFQUFFO1lBQ0MsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNwQyxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3JDO1FBQ0QsQ0FBQyxFQUFFO1lBQ0MsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUNwQyxHQUFHLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3JDO0tBQ0osQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgc2VsZWN0U3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9hc3luYy1zdHJhdGVneSc7XG5pbXBvcnQgeyBFbGVtZW50Q2hvcmQsIEZkRHJvcEV2ZW50LCBMaW5rUG9zaXRpb24sIEVsZW1lbnRQb3NpdGlvbiwgRG5kSXRlbSwgRmREbmREcm9wVHlwZSB9IGZyb20gJy4uL2RuZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IERORF9JVEVNLCBETkRfTElTVCB9IGZyb20gJy4uL3Rva2Vucyc7XG5cbmV4cG9ydCB0eXBlIERyb3BQcmVkaWNhdGU8VD4gPSAoXG4gICAgZHJhZ0l0ZW06IFQsXG4gICAgZHJvcEl0ZW06IFQsXG4gICAgZXZlbnQ6IEZkRHJvcEV2ZW50PFQ+XG4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcbmV4cG9ydCB0eXBlIERyYWdvdmVyUHJlZGljYXRlPFQ+ID0gKFxuICAgIGRyYWdJdGVtOiBULFxuICAgIGRyYWdPdmVySXRlbTogVCxcbiAgICBkcmFnSXRlbUluZGV4OiBudW1iZXIsXG4gICAgZHJhZ092ZXJJdGVtSW5kZXg6IG51bWJlclxuKSA9PiBib29sZWFuO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tmZGtEbmRMaXN0XSwgW2ZkLWRuZC1saXN0XScsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBETkRfTElTVCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRG5kTGlzdERpcmVjdGl2ZSkgfV1cbn0pXG5leHBvcnQgY2xhc3MgRG5kTGlzdERpcmVjdGl2ZTxUPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBpZiB0aGUgZWxlbWVudCBpcyBhbGxvd2VkIHRvIGJlIGRyYWdnZWQgaW4gMiBkaW1lbnNpb25zLFxuICAgICAqIFdoZW4gdHJ1ZSAtIHJlcGxhY2UgaW5kaWNhdG9yIHdpbGwgYmUgZGlzcGxheWVkIHZlcnRpY2FsbHlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdyaWRNb2RlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGRyb3Agc3RyYXRlZ3k6XG4gICAgICogKiBgc2hpZnRgIG1vZGUgd2lsbCBjcmVhdGUgbGluZSBhZnRlciB0aGUgY2xvc2VzdCBkcm9wIGVsZW1lbnQuXG4gICAgICogKiBgZ3JvdXBgIG1vZGUgd2lsbCBjcmVhdGUgcmVwbGFjZSBpbmRpY2F0b3Igb24gYSB3aG9sZSBjbG9zZXN0IGRyb3AgZWxlbWVudC5cbiAgICAgKiAqIGBhdXRvYCBtb2RlIHdpbGwgY3JlYXRlIGEgbGluZSBhZnRlciB0aGUgY2xvc2VzdCBkcm9wIGVsZW1lbnRcbiAgICAgKiBpZiBkcmFnZ2VkIGVsZW1lbnQgY29vcmRpbmF0ZXMgYXJlIHNoaWZ0ZWQgZm9yIDMwJSBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIGNsb3Nlc3QgZHJvcCBlbGVtZW50LlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCBjcmVhdGUgcmVwbGFjZSBpbmRpY2F0b3Igb24gYSB3aG9sZSBjbG9zZXN0IGRyb3AgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIGBzaGlmdGAgbW9kZSBpcyB0aGUgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3BNb2RlOiBGZERuZERyb3BUeXBlID0gJ3NoaWZ0JztcblxuICAgIC8qKlxuICAgICAqIFRocmVzaG9sZCBvZiBkcmFnZ2VkIGl0ZW0gb3ZlciBhbm90aGVyIGl0ZW0gdG8gZGVmaW5lIHdoaWNoIHR5cGUgb2YgYGRyb3BNb2RlYCBzaG91bGQgYmUgdXNlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRocmVzaG9sZCA9IDAuMztcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogVXNlIGBkcm9wTW9kZWAgcHJvcGVydHkgZm9yIGJldHRlciBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogV2hlbiBlbmFibGVkLCB0aGUgUmVwbGFjZSBJbmRpY2F0b3Igd2lsbCBhcHBlYXIgb24gYSB3aG9sZSBlbGVtZW50LCBpbnN0ZWFkIG9mIGhvcml6b250YWwvdmVydGljYWwgbGluZSBiZWZvcmUvYWZ0ZXIgYW4gZWxlbWVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByZXBsYWNlTW9kZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yZXBsYWNlTW9kZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmRyb3BNb2RlID0gdmFsdWUgPyAnZ3JvdXAnIDogJ3NoaWZ0JztcbiAgICAgICAgdGhpcy5fZGV0ZWN0ZWREcm9wTW9kZSA9IHRoaXMuZHJvcE1vZGU7XG4gICAgfVxuXG4gICAgZ2V0IHJlcGxhY2VNb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVwbGFjZU1vZGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXBsYWNlTW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqIEFycmF5IG9mIGl0ZW1zLCB0aGF0IHdpbGwgYmUgc29ydGVkICovXG4gICAgQElucHV0KClcbiAgICBpdGVtczogQXJyYXk8VD4gPSBbXTtcblxuICAgIC8qKiBEZWZpbmVzIGlmIGRyYWcgYW5kIGRyb3AgZmVhdHVyZSBzaG91bGQgYmUgZW5hYmxlZCBmb3IgbGlzdCBpdGVtcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRyYWdnYWJsZShkcmFnZ2FibGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gZHJhZ2dhYmxlO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEcmFnZ2FibGVTdGF0ZShkcmFnZ2FibGUpO1xuICAgIH1cblxuICAgIC8qKiBQcmVkaWNhdGUgZnVuY3Rpb24gdGhhdCBjaGVja3Mgd2hldGhlciB0aGUgaXRlbSBjYW4gYmUgZHJvcHBlZCBvdmVyIGFub3RoZXIgaXRlbS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3BQcmVkaWNhdGU6IERyb3BQcmVkaWNhdGU8VD4gfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBQcmVkaWNhdGUgZnVuY3Rpb24gdGhhdCBjaGVja3Mgd2hldGhlciB0aGUgaXRlbSBjYW4gYmUgZHJhZ2dlZCBvdmVyIGFub3RoZXIgaXRlbS5cbiAgICAgKiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBgZmFsc2VgLCBkcmFnZ2VkIG92ZXIgaXRlbSB3aWxsIG5vdCBiZSBoaWdobGlnaHRlZCwgYW5kIGRyb3AgZXZlbnQgd2lsbCBiZSBjYW5jZWxlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRyYWdvdmVyUHJlZGljYXRlOiBEcmFnb3ZlclByZWRpY2F0ZTxUPiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBgZHJvcFByZWRpY2F0ZWAgZnVuY3Rpb24gZXZhbHVhdGlvbiBjaGFuZ2VzLlxuICAgICAqIEVtaXRzIGB0cnVlYCB3aGVuIGV2YWx1YXRpb24gc3RhcnRlZCwgYW5kIGBmYWxzZWAgd2hlbiBjb21wbGV0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZHJvcFByZWRpY2F0ZUNhbGN1bGF0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEV2ZW50IHRoYXQgaXMgdGhyb3duIHdoZW4gaXRlbXMgYXJlIHJlb3JkZXJlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxUPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aGF0IGlzIHRocm93biB3aGVuIHRoZSBpdGVtIGlzIGRyb3BwZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpdGVtRHJvcHBlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmREcm9wRXZlbnQ8VD4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhhdCBpcyB0aHJvd24gd2hlbiBwcmVkaWNhdGUgZnVuY3Rpb24gcmV0dXJuZWQgZmFsc2UuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZHJvcENhbmNlbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihETkRfSVRFTSlcbiAgICBkbmRJdGVtczogUXVlcnlMaXN0PERuZEl0ZW08VD4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lbGVtZW50c0Nvb3JkaW5hdGVzOiBFbGVtZW50Q2hvcmRbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2xvc2VzdEl0ZW1JbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Nsb3Nlc3RJdGVtUG9zaXRpb246ICdiZWZvcmUnIHwgJ2FmdGVyJyB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgY3VycmVudCBkYXRhIHN0cmVhbSAoZm9yIHVuc3Vic2NyaWJpbmcpICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlZnJlc2gkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAgKi9cbiAgICBwcml2YXRlIF9kbmRJdGVtUmVmZXJlbmNlOiBEbmRJdGVtW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RyYWdnYWJsZSA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxDbGFzcyA9ICdmZC1kbmQtbGlzdCc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RldGVjdGVkRHJvcE1vZGU6ICdzaGlmdCcgfCAnZ3JvdXAnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saW5lc1JlbW92ZWQgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbmRpY2F0b3JzUmVtb3ZlZCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RyYWdnZWRJdGVtOiBUIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pZ25vcmVEcm9wID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRHJhZ2dhYmxlU3RhdGUodGhpcy5fZHJhZ2dhYmxlKTtcbiAgICAgICAgdGhpcy5kbmRJdGVtcy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLCBzdGFydFdpdGgoMCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWZyZXNoUXVlcnlMaXN0KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBjYWxsZWQgd2hlbiB0aGUgaXRlbSBpcyBiZWluZyBtb3ZlZCBieSAxIHB4ICovXG4gICAgb25Nb3ZlKG1vdXNlUG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbiwgZHJhZ2dlZEl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8qKiBUZW1wb3Jhcnkgb2JqZWN0LCB0byBzdG9yZSBsb3dlc3QgZGlzdGFuY2UgdmFsdWVzICovXG4gICAgICAgIGxldCBjbG9zZXN0SXRlbUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgICBjb25zdCBjbG9zZXN0RG5kSXRlbSA9IHRoaXMuX2VsZW1lbnRzQ29vcmRpbmF0ZXMuZmluZCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIC8qKiBDaGVjayBpZiBhbiBlbGVtZW50IGNhbiBiZSByZXBsYWNlZCAqL1xuICAgICAgICAgICAgaWYgKCFlbGVtZW50LnN0aWNrVG9Qb3NpdGlvbiAmJiBjbG9zZXN0SXRlbUluZGV4ICE9PSBpbmRleCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTW91c2VPbkVsZW1lbnQgPSBfaXNNb3VzZU9uRWxlbWVudChlbGVtZW50LCBtb3VzZVBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNb3VzZU9uRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0SXRlbUluZGV4ID0gaW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWNsb3Nlc3REbmRJdGVtKSB7XG4gICAgICAgICAgICBjbG9zZXN0SXRlbUluZGV4ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBJZiB0aGUgY2xvc2VzdCBlbGVtZW50IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgb25lLCB0aGUgbmV3IG9uZSBpcyBwaWNrZWQuIEl0IHByZXZlbnRzIGZyb20gcGVyZm9ybWFuY2UgaXNzdWVzICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChjbG9zZXN0SXRlbUluZGV4IHx8IGNsb3Nlc3RJdGVtSW5kZXggPT09IDApICYmXG4gICAgICAgICAgICAoY2xvc2VzdEl0ZW1JbmRleCAhPT0gdGhpcy5fY2xvc2VzdEl0ZW1JbmRleCB8fCB0aGlzLmRyb3BNb2RlID09PSAnYXV0bycpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTGluZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFJlcGxhY2VJbmRpY2F0b3JzKCk7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbUluZGV4ID0gY2xvc2VzdEl0ZW1JbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24gPSB0aGlzLl9lbGVtZW50c0Nvb3JkaW5hdGVzW2Nsb3Nlc3RJdGVtSW5kZXhdLnBvc2l0aW9uO1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdEl0ZW0gPSB0aGlzLml0ZW1zW3RoaXMuX2Nsb3Nlc3RJdGVtSW5kZXhdO1xuICAgICAgICAgICAgLy8gSWYgY2xvc2VzdCBpdGVtIGluZGV4IGlzIHNhbWUgYXMgZHJhZ2dlZCBpdGVtLCBqdXN0IHJlbW92ZSBpbmRpY2F0b3JzXG4gICAgICAgICAgICBpZiAoY2xvc2VzdEl0ZW1JbmRleCA9PT0gZHJhZ2dlZEl0ZW1JbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbExpbmVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnb3ZlclByZWRpY2F0ZSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2RyYWdnZWRJdGVtICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuZHJhZ292ZXJQcmVkaWNhdGUodGhpcy5fZHJhZ2dlZEl0ZW0sIGNsb3Nlc3RJdGVtLCBkcmFnZ2VkSXRlbUluZGV4LCB0aGlzLl9jbG9zZXN0SXRlbUluZGV4KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faWdub3JlRHJvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RGlzYWJsZWRJdGVtKHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3NldERpc2FibGVkSXRlbSgtMSk7XG4gICAgICAgICAgICAvKiogR2VuZXJhdGluZyBsaW5lLCB0aGF0IHNob3dzIHdoZXJlIHRoZSBlbGVtZW50IHdpbGwgYmUgcGxhY2VkLCBvbiBhIGRyb3AgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3BNb2RlID09PSAnZ3JvdXAnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUmVwbGFjZUluZGljYXRvcih0aGlzLl9jbG9zZXN0SXRlbUluZGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcm9wTW9kZSA9PT0gJ3NoaWZ0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUxpbmUodGhpcy5fY2xvc2VzdEl0ZW1JbmRleCwgdGhpcy5fY2xvc2VzdEl0ZW1Qb3NpdGlvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdERyb3BNb2RlSW5kaWNhdG9yKGRyYWdnZWRJdGVtSW5kZXgsIGNsb3Nlc3REbmRJdGVtLCBjbG9zZXN0SXRlbUluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgY2FsbGVkIHdoZW4gYW4gZWxlbWVudCBpcyBzdGFydGVkIHRvIGJlIGRyYWdnZWQgKi9cbiAgICBkcmFnU3RhcnQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbUVsZW1lbnQgPSB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlW2luZGV4XS5lbGVtZW50UmVmO1xuICAgICAgICB0aGlzLl9kcmFnZ2VkSXRlbSA9IHRoaXMuaXRlbXNbaW5kZXhdO1xuICAgICAgICAvKiogQ291bnRpbmcgYWxsIHRoZSBlbGVtZW50J3MgY2hvcmRzICovXG4gICAgICAgIHRoaXMuX2VsZW1lbnRzQ29vcmRpbmF0ZXMgPSB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlLm1hcCgoaXRlbTogRG5kSXRlbSkgPT5cbiAgICAgICAgICAgIGl0ZW0uZ2V0RWxlbWVudENvb3JkaW5hdGVzKHRoaXMuX2lzQmVmb3JlKGRyYWdnZWRJdGVtRWxlbWVudCwgaXRlbS5lbGVtZW50UmVmKSwgdGhpcy5ncmlkTW9kZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGNhbGxlZCB3aGVuIGFuIGVsZW1lbnQgaXMgcmVsZWFzZWQgKi9cbiAgICBhc3luYyBkcmFnRW5kKGRyYWdnZWRJdGVtSW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9kcmFnZ2VkSXRlbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLnNsaWNlKCk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VkSXRlbUluZGV4ID0gdGhpcy5fY2xvc2VzdEl0ZW1JbmRleDtcbiAgICAgICAgdGhpcy5fc2V0RGlzYWJsZWRJdGVtKC0xKTtcblxuICAgICAgICBpZiAodGhpcy5faWdub3JlRHJvcCkge1xuICAgICAgICAgICAgdGhpcy5faWdub3JlRHJvcCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcGxhY2VkSXRlbUluZGV4ID09PSBudWxsIHx8IHJlcGxhY2VkSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHJhZ2dlZERuZEl0ZW0gPSB0aGlzLmRuZEl0ZW1zLmdldChkcmFnZ2VkSXRlbUluZGV4KT8uaXRlbSA/PyBpdGVtc1tkcmFnZ2VkSXRlbUluZGV4XTtcbiAgICAgICAgY29uc3QgcmVwbGFjZWREbmRJdGVtID0gdGhpcy5kbmRJdGVtcy5nZXQocmVwbGFjZWRJdGVtSW5kZXgpPy5pdGVtID8/IGl0ZW1zW3JlcGxhY2VkSXRlbUluZGV4XTtcblxuICAgICAgICBjb25zdCBwcmVkaWNhdGVTdWJqID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgICAgICBjb25zdCBldnQ6IEZkRHJvcEV2ZW50PFQ+ID0ge1xuICAgICAgICAgICAgcmVwbGFjZWRJdGVtSW5kZXgsXG4gICAgICAgICAgICBkcmFnZ2VkSXRlbUluZGV4LFxuICAgICAgICAgICAgaXRlbXMsXG4gICAgICAgICAgICBpbnNlcnRBdDogdGhpcy5fY2xvc2VzdEl0ZW1Qb3NpdGlvbixcbiAgICAgICAgICAgIG1vZGU6IHRoaXMuZHJvcE1vZGUgIT09ICdhdXRvJyA/IHRoaXMuZHJvcE1vZGUgOiB0aGlzLl9kZXRlY3RlZERyb3BNb2RlXG4gICAgICAgIH07XG5cbiAgICAgICAgcHJlZGljYXRlU3Viai5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTtcblxuICAgICAgICAgICAgLyoqIFJlc2V0ICovXG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50c0Nvb3JkaW5hdGVzID0gW107XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbUluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24gPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcENhbmNlbGxlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZHJhZ2dlZEl0ZW1JbmRleCAhPT0gcmVwbGFjZWRJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZHJhZ2dlZEl0ZW1JbmRleCA8IHJlcGxhY2VkSXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBkcmFnZ2VkSXRlbUluZGV4OyBpIDwgcmVwbGFjZWRJdGVtSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbaV0gPSBpdGVtc1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZHJhZ2dlZEl0ZW1JbmRleDsgaSA+IHJlcGxhY2VkSXRlbUluZGV4OyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zW2ldID0gaXRlbXNbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqIFJlcGxhY2luZyBpdGVtcyAqL1xuICAgICAgICAgICAgICAgIGl0ZW1zW3JlcGxhY2VkSXRlbUluZGV4XSA9IGRyYWdnZWREbmRJdGVtO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KGl0ZW1zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pdGVtRHJvcHBlZC5lbWl0KGV2dCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmRyb3BQcmVkaWNhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wUHJlZGljYXRlQ2FsY3VsYXRpbmcuZW1pdCh0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHRoaXMuZHJvcFByZWRpY2F0ZShkcmFnZ2VkRG5kSXRlbSwgcmVwbGFjZWREbmRJdGVtLCBldnQpO1xuICAgICAgICAgICAgY29uc3Qgc3RyYXRlZ3kgPSBzZWxlY3RTdHJhdGVneShvYmopO1xuXG4gICAgICAgICAgICBhd2FpdCBzdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24ob2JqLCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcHJlZGljYXRlU3Viai5uZXh0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wUHJlZGljYXRlQ2FsY3VsYXRpbmcuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZWRpY2F0ZVN1YmoubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0RGlzYWJsZWRJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG5kSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2V0RGlzYWJsZWRTdGF0ZShpbmRleCA9PT0gaXRlbUluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3REcm9wTW9kZUluZGljYXRvcihcbiAgICAgICAgZHJhZ2dlZEl0ZW1JbmRleDogbnVtYmVyLFxuICAgICAgICBjbG9zZXN0SXRlbTogRWxlbWVudENob3JkIHwgdW5kZWZpbmVkLFxuICAgICAgICBjbG9zZXN0SXRlbUluZGV4OiBudW1iZXJcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjbG9zZXN0SXRlbSB8fCAhdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtkcmFnZ2VkSXRlbUluZGV4XSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5ld0RldGVjdGVkRHJvcE1vZGU6ICdzaGlmdCcgfCAnZ3JvdXAnO1xuICAgICAgICBjb25zdCBkcmFnZ2VkRWxtQ29vcmRzID1cbiAgICAgICAgICAgIHRoaXMuX2RuZEl0ZW1SZWZlcmVuY2VbZHJhZ2dlZEl0ZW1JbmRleF0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IGNsb3Nlc3RJdGVtQm91bmRhcmllcyA9IGdldEVsZW1lbnRCb3VuZGFyaWVzKGNsb3Nlc3RJdGVtLCB0aGlzLnRocmVzaG9sZCk7XG4gICAgICAgIGNvbnN0IGRyYWdnZWRJdGVtU3RhcnRDb29yZHMgPSBnZXRFbGVtZW50U3RhcnRDb29yZHMoZHJhZ2dlZEVsbUNvb3JkcywgY2xvc2VzdEl0ZW0ucG9zaXRpb24pO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIF9iZXR3ZWVuKGRyYWdnZWRJdGVtU3RhcnRDb29yZHMueCwgY2xvc2VzdEl0ZW1Cb3VuZGFyaWVzLnguc3RhcnQsIGNsb3Nlc3RJdGVtQm91bmRhcmllcy54LmVuZCkgJiZcbiAgICAgICAgICAgIF9iZXR3ZWVuKGRyYWdnZWRJdGVtU3RhcnRDb29yZHMueSwgY2xvc2VzdEl0ZW1Cb3VuZGFyaWVzLnkuc3RhcnQsIGNsb3Nlc3RJdGVtQm91bmRhcmllcy55LmVuZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBuZXdEZXRlY3RlZERyb3BNb2RlID0gJ2dyb3VwJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0RldGVjdGVkRHJvcE1vZGUgPSAnc2hpZnQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0RldGVjdGVkRHJvcE1vZGUgPT09IHRoaXMuX2RldGVjdGVkRHJvcE1vZGUgJiYgKCF0aGlzLl9saW5lc1JlbW92ZWQgfHwgIXRoaXMuX2luZGljYXRvcnNSZW1vdmVkKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGV0ZWN0ZWREcm9wTW9kZSA9IG5ld0RldGVjdGVkRHJvcE1vZGU7XG5cbiAgICAgICAgaWYgKHRoaXMuX2RldGVjdGVkRHJvcE1vZGUgPT09ICdzaGlmdCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUxpbmUoY2xvc2VzdEl0ZW1JbmRleCwgdGhpcy5fZWxlbWVudHNDb29yZGluYXRlc1tjbG9zZXN0SXRlbUluZGV4XS5wb3NpdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKGNsb3Nlc3RJdGVtSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZW1vdmVBbGxMaW5lcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGluZXNSZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kbmRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLnJlbW92ZUxpbmUoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc1JlbW92ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmRuZEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0ucmVtb3ZlUmVwbGFjZUluZGljYXRvcigpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZUxpbmUoY2xvc2VzdEl0ZW1JbmRleDogbnVtYmVyLCBsaW5rUG9zaXRpb246IExpbmtQb3NpdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpO1xuICAgICAgICB0aGlzLl9saW5lc1JlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtjbG9zZXN0SXRlbUluZGV4XS5jcmVhdGVMaW5lKGxpbmtQb3NpdGlvbiwgdGhpcy5ncmlkTW9kZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKGNsb3Nlc3RJdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICB0aGlzLl9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpO1xuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzUmVtb3ZlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlW2Nsb3Nlc3RJdGVtSW5kZXhdLmNyZWF0ZVJlcGxhY2VJbmRpY2F0b3IoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hRdWVyeUxpc3QoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2gkID0gbWVyZ2UodGhpcy5fcmVmcmVzaCQsIHRoaXMuX29uRGVzdHJveSQpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoJC5uZXh0KCk7XG5cbiAgICAgICAgdGhpcy5fZG5kSXRlbVJlZmVyZW5jZSA9IHRoaXMuZG5kSXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURyYWdnYWJsZVN0YXRlKHRoaXMuX2RyYWdnYWJsZSk7XG5cbiAgICAgICAgdGhpcy5kbmRJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5tb3ZlZC5waXBlKHRha2VVbnRpbChyZWZyZXNoJCkpLnN1YnNjcmliZSgocG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikgPT4gdGhpcy5vbk1vdmUocG9zaXRpb24sIGluZGV4KSk7XG4gICAgICAgICAgICBpdGVtLnN0YXJ0ZWQucGlwZSh0YWtlVW50aWwocmVmcmVzaCQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kcmFnU3RhcnQoaW5kZXgpKTtcbiAgICAgICAgICAgIGl0ZW0ucmVsZWFzZWQucGlwZSh0YWtlVW50aWwocmVmcmVzaCQpKS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5kcmFnRW5kKGluZGV4KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBAaGlkZGVuXG4gICAgICogUmV0dXJuIGluZm9ybWF0aW9uIGlmIGFuIGVsZW1lbnQgaXMgcGxhY2VkIGJlZm9yZSB0aGUgZHJhZ2dlZCBlbGVtZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBfaXNCZWZvcmUoZHJhZ2dlZEVsZW1lbnQ6IEVsZW1lbnRSZWYsIHRhcmdldEVsZW1lbnQ6IEVsZW1lbnRSZWYpOiBib29sZWFuIHtcbiAgICAgICAgLyoqIFNvbWV0aW1lcyB0aGUgZWxlbWVudHMgYXJlIG5vdCBzdHJhaWdodCBpbiBvbmUgY29sdW1uLCB0aGF0J3Mgd2h5IG9mZnNldCBpcyBuZWVkZWQgKi9cbiAgICAgICAgY29uc3QgVkVSVElDQUxfT0ZGU0VUID0gMjA7XG5cbiAgICAgICAgLyoqIERpc3RhbmNlcyBmcm9tIHRoZSB0b3Agb2YgdGhlIHNjcmVlbiAqL1xuICAgICAgICBjb25zdCBkcmFnZ2VkRWxlbWVudEJvdW5kID0gPERPTVJlY3Q+ZHJhZ2dlZEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudEJvdW5kID0gPERPTVJlY3Q+dGFyZ2V0RWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChkcmFnZ2VkRWxlbWVudEJvdW5kLnRvcCAtIHRhcmdldEVsZW1lbnRCb3VuZC50b3AgPiBWRVJUSUNBTF9PRkZTRVQpIHtcbiAgICAgICAgICAgIC8qKiBJZiBhbiBlbGVtZW50IGlzIGhpZ2hlciB0aGFuIHRoZSBkcmFnZ2VkIGVsZW1lbnQsIGl0J3MgZm9yIHN1cmUgYmVmb3JlICovXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRFbGVtZW50Qm91bmQudG9wIC0gZHJhZ2dlZEVsZW1lbnRCb3VuZC50b3AgPiBWRVJUSUNBTF9PRkZTRVQpIHtcbiAgICAgICAgICAgIC8qKiBJZiBhbiBlbGVtZW50IGlzIGxvd2VyIHRoYW4gdGhlIGRyYWdnZWQgZWxlbWVudCwgaXQncyBmb3Igc3VyZSBhZnRlciAqL1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyoqIElmIGVsZW1lbnRzIGFyZSBpbiBzYW1lIGxldmVsLCB0aGUgaG9yaXpvbnRhbCBwb3NpdGlvbiBkZWNpZGVzIGlmIGl0J3MgYmVmb3JlL2FmdGVyICovXG4gICAgICAgICAgICByZXR1cm4gZHJhZ2dlZEVsZW1lbnRCb3VuZC5sZWZ0IC0gdGFyZ2V0RWxlbWVudEJvdW5kLmxlZnQgPiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGFuZ2VEcmFnZ2FibGVTdGF0ZShkcmFnZ2FibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG5kSXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMuZG5kSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW0ubGlzdERyYWdnYWJsZSA9IGRyYWdnYWJsZTtcbiAgICAgICAgICAgICAgICBpdGVtLmNoYW5nZUNES0RyYWdTdGF0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9pc01vdXNlT25FbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnRDaG9yZCwgbW91c2VQb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RhcnRYID0gZWxlbWVudC54O1xuICAgIGNvbnN0IGVuZFggPSBlbGVtZW50LnggKyBlbGVtZW50LndpZHRoO1xuXG4gICAgY29uc3Qgc3RhcnRZID0gZWxlbWVudC55O1xuICAgIGNvbnN0IGVuZFkgPSBlbGVtZW50LnkgKyBlbGVtZW50LmhlaWdodDtcblxuICAgIHJldHVybiBfYmV0d2Vlbihtb3VzZVBvc2l0aW9uLngsIHN0YXJ0WCwgZW5kWCkgJiYgX2JldHdlZW4obW91c2VQb3NpdGlvbi55LCBzdGFydFksIGVuZFkpO1xufVxuXG5mdW5jdGlvbiBfYmV0d2Vlbih4OiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB4ID49IG1pbiAmJiB4IDw9IG1heDtcbn1cblxuaW50ZXJmYWNlIEVsZW1lbnRCb3VuZGFyaWVzIHtcbiAgICB4OiB7XG4gICAgICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgICAgIGVuZDogbnVtYmVyO1xuICAgIH07XG4gICAgeToge1xuICAgICAgICBzdGFydDogbnVtYmVyO1xuICAgICAgICBlbmQ6IG51bWJlcjtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50U3RhcnRDb29yZHMocmVjdDogRE9NUmVjdCwgcG9zaXRpb246IEVsZW1lbnRDaG9yZFsncG9zaXRpb24nXSk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcG9zaXRpb24gPT09ICdhZnRlcicgPyByZWN0LnggKyByZWN0LndpZHRoIDogcmVjdC54LFxuICAgICAgICB5OiBwb3NpdGlvbiA9PT0gJ2FmdGVyJyA/IHJlY3QueSArIHJlY3QuaGVpZ2h0IDogcmVjdC55XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEJvdW5kYXJpZXMoY29vcmRpbmF0ZXM6IEVsZW1lbnRDaG9yZCwgdGhyZXNob2xkOiBudW1iZXIpOiBFbGVtZW50Qm91bmRhcmllcyB7XG4gICAgY29uc3Qgd2lkdGhPZmZzZXQgPSBjb29yZGluYXRlcy53aWR0aCAqIChjb29yZGluYXRlcy5wb3NpdGlvbiA9PT0gJ2FmdGVyJyA/IDEgOiAtMSk7XG4gICAgY29uc3QgaGVpZ2h0T2Zmc2V0ID0gY29vcmRpbmF0ZXMuaGVpZ2h0ICogKGNvb3JkaW5hdGVzLnBvc2l0aW9uID09PSAnYWZ0ZXInID8gMSA6IC0xKTtcbiAgICBjb25zdCB4U3RhcnQgPSBjb29yZGluYXRlcy5wb3NpdGlvbiA9PT0gJ2FmdGVyJyA/IGNvb3JkaW5hdGVzLnggOiBjb29yZGluYXRlcy54ICsgY29vcmRpbmF0ZXMud2lkdGg7XG4gICAgY29uc3QgeEVuZCA9IHhTdGFydCArIHdpZHRoT2Zmc2V0ICsgKHdpZHRoT2Zmc2V0IC8gMikgKiB0aHJlc2hvbGQ7XG4gICAgY29uc3QgeVN0YXJ0ID0gY29vcmRpbmF0ZXMucG9zaXRpb24gPT09ICdhZnRlcicgPyBjb29yZGluYXRlcy55IDogY29vcmRpbmF0ZXMueSArIGNvb3JkaW5hdGVzLmhlaWdodDtcbiAgICBjb25zdCB5RW5kID0geVN0YXJ0ICsgaGVpZ2h0T2Zmc2V0ICsgKGhlaWdodE9mZnNldCAvIDIpICogdGhyZXNob2xkO1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHtcbiAgICAgICAgICAgIHN0YXJ0OiB4U3RhcnQgPiB4RW5kID8geEVuZCA6IHhTdGFydCxcbiAgICAgICAgICAgIGVuZDogeFN0YXJ0ID4geEVuZCA/IHhTdGFydCA6IHhFbmRcbiAgICAgICAgfSxcbiAgICAgICAgeToge1xuICAgICAgICAgICAgc3RhcnQ6IHlTdGFydCA+IHlFbmQgPyB5RW5kIDogeVN0YXJ0LFxuICAgICAgICAgICAgZW5kOiB5U3RhcnQgPiB5RW5kID8geVN0YXJ0IDogeUVuZFxuICAgICAgICB9XG4gICAgfTtcbn1cbiJdfQ==
|
|
396
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLWxpc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jZGsvc3JjL2xpYi91dGlscy9kcmFnLWFuZC1kcm9wL2RuZC1saXN0L2RuZC1saXN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUVILGVBQWUsRUFDZixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQWtCL0MsTUFBTSxPQUFPLGdCQUFnQjtJQUo3QjtRQUtJOzs7V0FHRztRQUVILGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakI7Ozs7Ozs7OztXQVNHO1FBRUgsYUFBUSxHQUFrQixPQUFPLENBQUM7UUFFbEM7O1dBRUc7UUFFSCxjQUFTLEdBQUcsR0FBRyxDQUFDO1FBb0JoQixjQUFjO1FBQ04saUJBQVksR0FBRyxLQUFLLENBQUM7UUFFN0IsMENBQTBDO1FBRTFDLFVBQUssR0FBYSxFQUFFLENBQUM7UUFvQnJCOzs7V0FHRztRQUVILDZCQUF3QixHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFFdkQsb0RBQW9EO1FBRTNDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUVwRCxvREFBb0Q7UUFFM0MsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUUx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QVcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNwRyxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsV0FBVyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUNsRSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQ3JHLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxZQUFZLEdBQUcsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQ3BFLE9BQU87UUFDSCxDQUFDLEVBQUU7WUFDQyxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQ3BDLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDckM7UUFDRCxDQUFDLEVBQUU7WUFDQyxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQ3BDLEdBQUcsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUk7U0FDckM7S0FDSixDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3RhcnRXaXRoLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBzZWxlY3RTdHJhdGVneSB9IGZyb20gJy4uLy4uL2FzeW5jLXN0cmF0ZWd5JztcbmltcG9ydCB7IERuZEl0ZW0sIEVsZW1lbnRDaG9yZCwgRWxlbWVudFBvc2l0aW9uLCBGZERuZERyb3BUeXBlLCBGZERyb3BFdmVudCwgTGlua1Bvc2l0aW9uIH0gZnJvbSAnLi4vZG5kLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgRE5EX0lURU0sIERORF9MSVNUIH0gZnJvbSAnLi4vdG9rZW5zJztcblxuZXhwb3J0IHR5cGUgRHJvcFByZWRpY2F0ZTxUPiA9IChcbiAgICBkcmFnSXRlbTogVCxcbiAgICBkcm9wSXRlbTogVCxcbiAgICBldmVudDogRmREcm9wRXZlbnQ8VD5cbikgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuZXhwb3J0IHR5cGUgRHJhZ292ZXJQcmVkaWNhdGU8VD4gPSAoXG4gICAgZHJhZ0l0ZW06IFQsXG4gICAgZHJhZ092ZXJJdGVtOiBULFxuICAgIGRyYWdJdGVtSW5kZXg6IG51bWJlcixcbiAgICBkcmFnT3Zlckl0ZW1JbmRleDogbnVtYmVyXG4pID0+IGJvb2xlYW47XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2Zka0RuZExpc3RdLCBbZmQtZG5kLWxpc3RdJyxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IERORF9MSVNULCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEbmRMaXN0RGlyZWN0aXZlKSB9XVxufSlcbmV4cG9ydCBjbGFzcyBEbmRMaXN0RGlyZWN0aXZlPFQ+IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGlmIHRoZSBlbGVtZW50IGlzIGFsbG93ZWQgdG8gYmUgZHJhZ2dlZCBpbiAyIGRpbWVuc2lvbnMsXG4gICAgICogV2hlbiB0cnVlIC0gcmVwbGFjZSBpbmRpY2F0b3Igd2lsbCBiZSBkaXNwbGF5ZWQgdmVydGljYWxseVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ3JpZE1vZGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZHJvcCBzdHJhdGVneTpcbiAgICAgKiAqIGBzaGlmdGAgbW9kZSB3aWxsIGNyZWF0ZSBsaW5lIGFmdGVyIHRoZSBjbG9zZXN0IGRyb3AgZWxlbWVudC5cbiAgICAgKiAqIGBncm91cGAgbW9kZSB3aWxsIGNyZWF0ZSByZXBsYWNlIGluZGljYXRvciBvbiBhIHdob2xlIGNsb3Nlc3QgZHJvcCBlbGVtZW50LlxuICAgICAqICogYGF1dG9gIG1vZGUgd2lsbCBjcmVhdGUgYSBsaW5lIGFmdGVyIHRoZSBjbG9zZXN0IGRyb3AgZWxlbWVudFxuICAgICAqIGlmIGRyYWdnZWQgZWxlbWVudCBjb29yZGluYXRlcyBhcmUgc2hpZnRlZCBmb3IgMzAlIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgY2xvc2VzdCBkcm9wIGVsZW1lbnQuXG4gICAgICogT3RoZXJ3aXNlLCBpdCB3aWxsIGNyZWF0ZSByZXBsYWNlIGluZGljYXRvciBvbiBhIHdob2xlIGNsb3Nlc3QgZHJvcCBlbGVtZW50LlxuICAgICAqXG4gICAgICogYHNoaWZ0YCBtb2RlIGlzIHRoZSBkZWZhdWx0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJvcE1vZGU6IEZkRG5kRHJvcFR5cGUgPSAnc2hpZnQnO1xuXG4gICAgLyoqXG4gICAgICogVGhyZXNob2xkIG9mIGRyYWdnZWQgaXRlbSBvdmVyIGFub3RoZXIgaXRlbSB0byBkZWZpbmUgd2hpY2ggdHlwZSBvZiBgZHJvcE1vZGVgIHNob3VsZCBiZSB1c2VkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGhyZXNob2xkID0gMC4zO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKiBVc2UgYGRyb3BNb2RlYCBwcm9wZXJ0eSBmb3IgYmV0dGVyIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBSZXBsYWNlIEluZGljYXRvciB3aWxsIGFwcGVhciBvbiBhIHdob2xlIGVsZW1lbnQsIGluc3RlYWQgb2YgaG9yaXpvbnRhbC92ZXJ0aWNhbCBsaW5lIGJlZm9yZS9hZnRlciBhbiBlbGVtZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJlcGxhY2VNb2RlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3JlcGxhY2VNb2RlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZHJvcE1vZGUgPSB2YWx1ZSA/ICdncm91cCcgOiAnc2hpZnQnO1xuICAgICAgICB0aGlzLl9kZXRlY3RlZERyb3BNb2RlID0gdGhpcy5kcm9wTW9kZTtcbiAgICB9XG5cbiAgICBnZXQgcmVwbGFjZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBsYWNlTW9kZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlcGxhY2VNb2RlID0gZmFsc2U7XG5cbiAgICAvKiogQXJyYXkgb2YgaXRlbXMsIHRoYXQgd2lsbCBiZSBzb3J0ZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1zOiBBcnJheTxUPiA9IFtdO1xuXG4gICAgLyoqIERlZmluZXMgaWYgZHJhZyBhbmQgZHJvcCBmZWF0dXJlIHNob3VsZCBiZSBlbmFibGVkIGZvciBsaXN0IGl0ZW1zICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZHJhZ2dhYmxlKGRyYWdnYWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgIHRoaXMuX2NoYW5nZURyYWdnYWJsZVN0YXRlKGRyYWdnYWJsZSk7XG4gICAgfVxuXG4gICAgLyoqIFByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyB3aGV0aGVyIHRoZSBpdGVtIGNhbiBiZSBkcm9wcGVkIG92ZXIgYW5vdGhlciBpdGVtLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJvcFByZWRpY2F0ZTogRHJvcFByZWRpY2F0ZTxUPiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyB3aGV0aGVyIHRoZSBpdGVtIGNhbiBiZSBkcmFnZ2VkIG92ZXIgYW5vdGhlciBpdGVtLlxuICAgICAqIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGBmYWxzZWAsIGRyYWdnZWQgb3ZlciBpdGVtIHdpbGwgbm90IGJlIGhpZ2hsaWdodGVkLCBhbmQgZHJvcCBldmVudCB3aWxsIGJlIGNhbmNlbGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJhZ292ZXJQcmVkaWNhdGU6IERyYWdvdmVyUHJlZGljYXRlPFQ+IHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGBkcm9wUHJlZGljYXRlYCBmdW5jdGlvbiBldmFsdWF0aW9uIGNoYW5nZXMuXG4gICAgICogRW1pdHMgYHRydWVgIHdoZW4gZXZhbHVhdGlvbiBzdGFydGVkLCBhbmQgYGZhbHNlYCB3aGVuIGNvbXBsZXRlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkcm9wUHJlZGljYXRlQ2FsY3VsYXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgdGhhdCBpcyB0aHJvd24gd2hlbiBpdGVtcyBhcmUgcmVvcmRlcmVkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXRlbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQ+PigpO1xuXG4gICAgLyoqIEV2ZW50IHRoYXQgaXMgdGhyb3duIHdoZW4gdGhlIGl0ZW0gaXMgZHJvcHBlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IGl0ZW1Ecm9wcGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGZERyb3BFdmVudDxUPj4oKTtcblxuICAgIC8qKiBFdmVudCB0aGF0IGlzIHRocm93biB3aGVuIHByZWRpY2F0ZSBmdW5jdGlvbiByZXR1cm5lZCBmYWxzZS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBkcm9wQ2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKERORF9JVEVNKVxuICAgIGRuZEl0ZW1zOiBRdWVyeUxpc3Q8RG5kSXRlbTxUPj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxDbGFzcyA9ICdmZC1kbmQtbGlzdCc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnRzQ29vcmRpbmF0ZXM6IEVsZW1lbnRDaG9yZFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jbG9zZXN0SXRlbUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2xvc2VzdEl0ZW1Qb3NpdGlvbjogJ2JlZm9yZScgfCAnYWZ0ZXInIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBjdXJyZW50IGRhdGEgc3RyZWFtIChmb3IgdW5zdWJzY3JpYmluZykgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICAqL1xuICAgIHByaXZhdGUgX2RuZEl0ZW1SZWZlcmVuY2U6IERuZEl0ZW1bXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHJhZ2dhYmxlID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGV0ZWN0ZWREcm9wTW9kZTogJ3NoaWZ0JyB8ICdncm91cCc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpbmVzUmVtb3ZlZCA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luZGljYXRvcnNSZW1vdmVkID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHJhZ2dlZEl0ZW06IFQgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lnbm9yZURyb3AgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEcmFnZ2FibGVTdGF0ZSh0aGlzLl9kcmFnZ2FibGUpO1xuICAgICAgICB0aGlzLmRuZEl0ZW1zLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aChudWxsKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlZnJlc2hRdWVyeUxpc3QoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWZyZXNoZXMgdGhlIGluZGV4ZXMgb2YgdGhlIGl0ZW1zLlxuICAgICAqL1xuICAgIHJlZnJlc2hRdWVyeUxpc3QoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZnJlc2gkID0gbWVyZ2UodGhpcy5fcmVmcmVzaCQsIHRoaXMuX29uRGVzdHJveSQpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoJC5uZXh0KCk7XG5cbiAgICAgICAgdGhpcy5fZG5kSXRlbVJlZmVyZW5jZSA9IHRoaXMuZG5kSXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5nZURyYWdnYWJsZVN0YXRlKHRoaXMuX2RyYWdnYWJsZSk7XG5cbiAgICAgICAgdGhpcy5kbmRJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5tb3ZlZC5waXBlKHRha2VVbnRpbChyZWZyZXNoJCkpLnN1YnNjcmliZSgocG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbikgPT4gdGhpcy5vbk1vdmUocG9zaXRpb24sIGluZGV4KSk7XG4gICAgICAgICAgICBpdGVtLnN0YXJ0ZWQucGlwZSh0YWtlVW50aWwocmVmcmVzaCQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kcmFnU3RhcnQoaW5kZXgpKTtcbiAgICAgICAgICAgIGl0ZW0ucmVsZWFzZWQucGlwZSh0YWtlVW50aWwocmVmcmVzaCQpKS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5kcmFnRW5kKGluZGV4KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGl0ZW0gaXMgYmVpbmcgbW92ZWQgYnkgMSBweCAqL1xuICAgIG9uTW92ZShtb3VzZVBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24sIGRyYWdnZWRJdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvKiogVGVtcG9yYXJ5IG9iamVjdCwgdG8gc3RvcmUgbG93ZXN0IGRpc3RhbmNlIHZhbHVlcyAqL1xuICAgICAgICBsZXQgY2xvc2VzdEl0ZW1JbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgY29uc3QgY2xvc2VzdERuZEl0ZW0gPSB0aGlzLl9lbGVtZW50c0Nvb3JkaW5hdGVzLmZpbmQoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAvKiogQ2hlY2sgaWYgYW4gZWxlbWVudCBjYW4gYmUgcmVwbGFjZWQgKi9cbiAgICAgICAgICAgIGlmICghZWxlbWVudC5zdGlja1RvUG9zaXRpb24gJiYgY2xvc2VzdEl0ZW1JbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc01vdXNlT25FbGVtZW50ID0gX2lzTW91c2VPbkVsZW1lbnQoZWxlbWVudCwgbW91c2VQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgaWYgKGlzTW91c2VPbkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdEl0ZW1JbmRleCA9IGluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFjbG9zZXN0RG5kSXRlbSkge1xuICAgICAgICAgICAgY2xvc2VzdEl0ZW1JbmRleCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogSWYgdGhlIGNsb3Nlc3QgZWxlbWVudCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIG9uZSwgdGhlIG5ldyBvbmUgaXMgcGlja2VkLiBJdCBwcmV2ZW50cyBmcm9tIHBlcmZvcm1hbmNlIGlzc3VlcyAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY2xvc2VzdEl0ZW1JbmRleCB8fCBjbG9zZXN0SXRlbUluZGV4ID09PSAwKSAmJlxuICAgICAgICAgICAgKGNsb3Nlc3RJdGVtSW5kZXggIT09IHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXggfHwgdGhpcy5kcm9wTW9kZSA9PT0gJ2F1dG8nKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbExpbmVzKCk7XG4gICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxSZXBsYWNlSW5kaWNhdG9ycygpO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VzdEl0ZW1JbmRleCA9IGNsb3Nlc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbVBvc2l0aW9uID0gdGhpcy5fZWxlbWVudHNDb29yZGluYXRlc1tjbG9zZXN0SXRlbUluZGV4XS5wb3NpdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RJdGVtID0gdGhpcy5pdGVtc1t0aGlzLl9jbG9zZXN0SXRlbUluZGV4XTtcbiAgICAgICAgICAgIC8vIElmIGNsb3Nlc3QgaXRlbSBpbmRleCBpcyBzYW1lIGFzIGRyYWdnZWQgaXRlbSwganVzdCByZW1vdmUgaW5kaWNhdG9yc1xuICAgICAgICAgICAgaWYgKGNsb3Nlc3RJdGVtSW5kZXggPT09IGRyYWdnZWRJdGVtSW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVBbGxMaW5lcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFJlcGxhY2VJbmRpY2F0b3JzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ292ZXJQcmVkaWNhdGUgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9kcmFnZ2VkSXRlbSAmJlxuICAgICAgICAgICAgICAgICF0aGlzLmRyYWdvdmVyUHJlZGljYXRlKHRoaXMuX2RyYWdnZWRJdGVtLCBjbG9zZXN0SXRlbSwgZHJhZ2dlZEl0ZW1JbmRleCwgdGhpcy5fY2xvc2VzdEl0ZW1JbmRleClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lnbm9yZURyb3AgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldERpc2FibGVkSXRlbSh0aGlzLl9jbG9zZXN0SXRlbUluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zZXREaXNhYmxlZEl0ZW0oLTEpO1xuICAgICAgICAgICAgLyoqIEdlbmVyYXRpbmcgbGluZSwgdGhhdCBzaG93cyB3aGVyZSB0aGUgZWxlbWVudCB3aWxsIGJlIHBsYWNlZCwgb24gYSBkcm9wICovXG4gICAgICAgICAgICBpZiAodGhpcy5kcm9wTW9kZSA9PT0gJ2dyb3VwJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVJlcGxhY2VJbmRpY2F0b3IodGhpcy5fY2xvc2VzdEl0ZW1JbmRleCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJvcE1vZGUgPT09ICdzaGlmdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVMaW5lKHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXgsIHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3REcm9wTW9kZUluZGljYXRvcihkcmFnZ2VkSXRlbUluZGV4LCBjbG9zZXN0RG5kSXRlbSwgY2xvc2VzdEl0ZW1JbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGNhbGxlZCB3aGVuIGFuIGVsZW1lbnQgaXMgc3RhcnRlZCB0byBiZSBkcmFnZ2VkICovXG4gICAgZHJhZ1N0YXJ0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZHJhZ2dlZEl0ZW1FbGVtZW50ID0gdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtpbmRleF0uZWxlbWVudFJlZjtcbiAgICAgICAgdGhpcy5fZHJhZ2dlZEl0ZW0gPSB0aGlzLml0ZW1zW2luZGV4XTtcbiAgICAgICAgLyoqIENvdW50aW5nIGFsbCB0aGUgZWxlbWVudCdzIGNob3JkcyAqL1xuICAgICAgICB0aGlzLl9lbGVtZW50c0Nvb3JkaW5hdGVzID0gdGhpcy5fZG5kSXRlbVJlZmVyZW5jZS5tYXAoKGl0ZW06IERuZEl0ZW0pID0+XG4gICAgICAgICAgICBpdGVtLmdldEVsZW1lbnRDb29yZGluYXRlcyh0aGlzLl9pc0JlZm9yZShkcmFnZ2VkSXRlbUVsZW1lbnQsIGl0ZW0uZWxlbWVudFJlZiksIHRoaXMuZ3JpZE1vZGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBjYWxsZWQgd2hlbiBhbiBlbGVtZW50IGlzIHJlbGVhc2VkICovXG4gICAgYXN5bmMgZHJhZ0VuZChkcmFnZ2VkSXRlbUluZGV4OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fZHJhZ2dlZEl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcy5zbGljZSgpO1xuICAgICAgICBjb25zdCByZXBsYWNlZEl0ZW1JbmRleCA9IHRoaXMuX2Nsb3Nlc3RJdGVtSW5kZXg7XG4gICAgICAgIHRoaXMuX3NldERpc2FibGVkSXRlbSgtMSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2lnbm9yZURyb3ApIHtcbiAgICAgICAgICAgIHRoaXMuX2lnbm9yZURyb3AgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXBsYWNlZEl0ZW1JbmRleCA9PT0gbnVsbCB8fCByZXBsYWNlZEl0ZW1JbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyYWdnZWREbmRJdGVtID0gdGhpcy5kbmRJdGVtcy5nZXQoZHJhZ2dlZEl0ZW1JbmRleCk/Lml0ZW0gPz8gaXRlbXNbZHJhZ2dlZEl0ZW1JbmRleF07XG4gICAgICAgIGNvbnN0IHJlcGxhY2VkRG5kSXRlbSA9IHRoaXMuZG5kSXRlbXMuZ2V0KHJlcGxhY2VkSXRlbUluZGV4KT8uaXRlbSA/PyBpdGVtc1tyZXBsYWNlZEl0ZW1JbmRleF07XG5cbiAgICAgICAgY29uc3QgcHJlZGljYXRlU3ViaiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAgICAgY29uc3QgZXZ0OiBGZERyb3BFdmVudDxUPiA9IHtcbiAgICAgICAgICAgIHJlcGxhY2VkSXRlbUluZGV4LFxuICAgICAgICAgICAgZHJhZ2dlZEl0ZW1JbmRleCxcbiAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgaW5zZXJ0QXQ6IHRoaXMuX2Nsb3Nlc3RJdGVtUG9zaXRpb24sXG4gICAgICAgICAgICBtb2RlOiB0aGlzLmRyb3BNb2RlICE9PSAnYXV0bycgPyB0aGlzLmRyb3BNb2RlIDogdGhpcy5fZGV0ZWN0ZWREcm9wTW9kZVxuICAgICAgICB9O1xuXG4gICAgICAgIHByZWRpY2F0ZVN1YmoucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTGluZXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3JlbW92ZUFsbFJlcGxhY2VJbmRpY2F0b3JzKCk7XG5cbiAgICAgICAgICAgIC8qKiBSZXNldCAqL1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudHNDb29yZGluYXRlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VzdEl0ZW1JbmRleCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZXN0SXRlbVBvc2l0aW9uID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BDYW5jZWxsZWQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRyYWdnZWRJdGVtSW5kZXggIT09IHJlcGxhY2VkSXRlbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRyYWdnZWRJdGVtSW5kZXggPCByZXBsYWNlZEl0ZW1JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZHJhZ2dlZEl0ZW1JbmRleDsgaSA8IHJlcGxhY2VkSXRlbUluZGV4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zW2ldID0gaXRlbXNbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGRyYWdnZWRJdGVtSW5kZXg7IGkgPiByZXBsYWNlZEl0ZW1JbmRleDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1tpXSA9IGl0ZW1zW2kgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiBSZXBsYWNpbmcgaXRlbXMgKi9cbiAgICAgICAgICAgICAgICBpdGVtc1tyZXBsYWNlZEl0ZW1JbmRleF0gPSBkcmFnZ2VkRG5kSXRlbTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdChpdGVtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaXRlbURyb3BwZWQuZW1pdChldnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5kcm9wUHJlZGljYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcFByZWRpY2F0ZUNhbGN1bGF0aW5nLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLmRyb3BQcmVkaWNhdGUoZHJhZ2dlZERuZEl0ZW0sIHJlcGxhY2VkRG5kSXRlbSwgZXZ0KTtcbiAgICAgICAgICAgIGNvbnN0IHN0cmF0ZWd5ID0gc2VsZWN0U3RyYXRlZ3kob2JqKTtcblxuICAgICAgICAgICAgYXdhaXQgc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKG9iaiwgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHByZWRpY2F0ZVN1YmoubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcFByZWRpY2F0ZUNhbGN1bGF0aW5nLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmVkaWNhdGVTdWJqLm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldERpc2FibGVkSXRlbShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmRuZEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNldERpc2FibGVkU3RhdGUoaW5kZXggPT09IGl0ZW1JbmRleCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0RHJvcE1vZGVJbmRpY2F0b3IoXG4gICAgICAgIGRyYWdnZWRJdGVtSW5kZXg6IG51bWJlcixcbiAgICAgICAgY2xvc2VzdEl0ZW06IEVsZW1lbnRDaG9yZCB8IHVuZGVmaW5lZCxcbiAgICAgICAgY2xvc2VzdEl0ZW1JbmRleDogbnVtYmVyXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghY2xvc2VzdEl0ZW0gfHwgIXRoaXMuX2RuZEl0ZW1SZWZlcmVuY2VbZHJhZ2dlZEl0ZW1JbmRleF0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBuZXdEZXRlY3RlZERyb3BNb2RlOiAnc2hpZnQnIHwgJ2dyb3VwJztcbiAgICAgICAgY29uc3QgZHJhZ2dlZEVsbUNvb3JkcyA9XG4gICAgICAgICAgICB0aGlzLl9kbmRJdGVtUmVmZXJlbmNlW2RyYWdnZWRJdGVtSW5kZXhdLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCBjbG9zZXN0SXRlbUJvdW5kYXJpZXMgPSBnZXRFbGVtZW50Qm91bmRhcmllcyhjbG9zZXN0SXRlbSwgdGhpcy50aHJlc2hvbGQpO1xuICAgICAgICBjb25zdCBkcmFnZ2VkSXRlbVN0YXJ0Q29vcmRzID0gZ2V0RWxlbWVudFN0YXJ0Q29vcmRzKGRyYWdnZWRFbG1Db29yZHMsIGNsb3Nlc3RJdGVtLnBvc2l0aW9uKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBfYmV0d2VlbihkcmFnZ2VkSXRlbVN0YXJ0Q29vcmRzLngsIGNsb3Nlc3RJdGVtQm91bmRhcmllcy54LnN0YXJ0LCBjbG9zZXN0SXRlbUJvdW5kYXJpZXMueC5lbmQpICYmXG4gICAgICAgICAgICBfYmV0d2VlbihkcmFnZ2VkSXRlbVN0YXJ0Q29vcmRzLnksIGNsb3Nlc3RJdGVtQm91bmRhcmllcy55LnN0YXJ0LCBjbG9zZXN0SXRlbUJvdW5kYXJpZXMueS5lbmQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgbmV3RGV0ZWN0ZWREcm9wTW9kZSA9ICdncm91cCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdEZXRlY3RlZERyb3BNb2RlID0gJ3NoaWZ0JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdEZXRlY3RlZERyb3BNb2RlID09PSB0aGlzLl9kZXRlY3RlZERyb3BNb2RlICYmICghdGhpcy5fbGluZXNSZW1vdmVkIHx8ICF0aGlzLl9pbmRpY2F0b3JzUmVtb3ZlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RldGVjdGVkRHJvcE1vZGUgPSBuZXdEZXRlY3RlZERyb3BNb2RlO1xuXG4gICAgICAgIGlmICh0aGlzLl9kZXRlY3RlZERyb3BNb2RlID09PSAnc2hpZnQnKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVMaW5lKGNsb3Nlc3RJdGVtSW5kZXgsIHRoaXMuX2VsZW1lbnRzQ29vcmRpbmF0ZXNbY2xvc2VzdEl0ZW1JbmRleF0ucG9zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlUmVwbGFjZUluZGljYXRvcihjbG9zZXN0SXRlbUluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQWxsTGluZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpbmVzUmVtb3ZlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZG5kSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5yZW1vdmVMaW5lKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luZGljYXRvcnNSZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kbmRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLnJlbW92ZVJlcGxhY2VJbmRpY2F0b3IoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jcmVhdGVMaW5lKGNsb3Nlc3RJdGVtSW5kZXg6IG51bWJlciwgbGlua1Bvc2l0aW9uOiBMaW5rUG9zaXRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTGluZXMoKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTtcbiAgICAgICAgdGhpcy5fbGluZXNSZW1vdmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2RuZEl0ZW1SZWZlcmVuY2VbY2xvc2VzdEl0ZW1JbmRleF0uY3JlYXRlTGluZShsaW5rUG9zaXRpb24sIHRoaXMuZ3JpZE1vZGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlUmVwbGFjZUluZGljYXRvcihjbG9zZXN0SXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsTGluZXMoKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlQWxsUmVwbGFjZUluZGljYXRvcnMoKTtcbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc1JlbW92ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZG5kSXRlbVJlZmVyZW5jZVtjbG9zZXN0SXRlbUluZGV4XS5jcmVhdGVSZXBsYWNlSW5kaWNhdG9yKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIEBoaWRkZW5cbiAgICAgKiBSZXR1cm4gaW5mb3JtYXRpb24gaWYgYW4gZWxlbWVudCBpcyBwbGFjZWQgYmVmb3JlIHRoZSBkcmFnZ2VkIGVsZW1lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc0JlZm9yZShkcmFnZ2VkRWxlbWVudDogRWxlbWVudFJlZiwgdGFyZ2V0RWxlbWVudDogRWxlbWVudFJlZik6IGJvb2xlYW4ge1xuICAgICAgICAvKiogU29tZXRpbWVzIHRoZSBlbGVtZW50cyBhcmUgbm90IHN0cmFpZ2h0IGluIG9uZSBjb2x1bW4sIHRoYXQncyB3aHkgb2Zmc2V0IGlzIG5lZWRlZCAqL1xuICAgICAgICBjb25zdCBWRVJUSUNBTF9PRkZTRVQgPSAyMDtcblxuICAgICAgICAvKiogRGlzdGFuY2VzIGZyb20gdGhlIHRvcCBvZiB0aGUgc2NyZWVuICovXG4gICAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50Qm91bmQgPSA8RE9NUmVjdD5kcmFnZ2VkRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50Qm91bmQgPSA8RE9NUmVjdD50YXJnZXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgaWYgKGRyYWdnZWRFbGVtZW50Qm91bmQudG9wIC0gdGFyZ2V0RWxlbWVudEJvdW5kLnRvcCA+IFZFUlRJQ0FMX09GRlNFVCkge1xuICAgICAgICAgICAgLyoqIElmIGFuIGVsZW1lbnQgaXMgaGlnaGVyIHRoYW4gdGhlIGRyYWdnZWQgZWxlbWVudCwgaXQncyBmb3Igc3VyZSBiZWZvcmUgKi9cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldEVsZW1lbnRCb3VuZC50b3AgLSBkcmFnZ2VkRWxlbWVudEJvdW5kLnRvcCA+IFZFUlRJQ0FMX09GRlNFVCkge1xuICAgICAgICAgICAgLyoqIElmIGFuIGVsZW1lbnQgaXMgbG93ZXIgdGhhbiB0aGUgZHJhZ2dlZCBlbGVtZW50LCBpdCdzIGZvciBzdXJlIGFmdGVyICovXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvKiogSWYgZWxlbWVudHMgYXJlIGluIHNhbWUgbGV2ZWwsIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIGRlY2lkZXMgaWYgaXQncyBiZWZvcmUvYWZ0ZXIgKi9cbiAgICAgICAgICAgIHJldHVybiBkcmFnZ2VkRWxlbWVudEJvdW5kLmxlZnQgLSB0YXJnZXRFbGVtZW50Qm91bmQubGVmdCA+IDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NoYW5nZURyYWdnYWJsZVN0YXRlKGRyYWdnYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kbmRJdGVtcykge1xuICAgICAgICAgICAgdGhpcy5kbmRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5saXN0RHJhZ2dhYmxlID0gZHJhZ2dhYmxlO1xuICAgICAgICAgICAgICAgIGl0ZW0uY2hhbmdlQ0RLRHJhZ1N0YXRlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gX2lzTW91c2VPbkVsZW1lbnQoZWxlbWVudDogRWxlbWVudENob3JkLCBtb3VzZVBvc2l0aW9uOiBFbGVtZW50UG9zaXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGFydFggPSBlbGVtZW50Lng7XG4gICAgY29uc3QgZW5kWCA9IGVsZW1lbnQueCArIGVsZW1lbnQud2lkdGg7XG5cbiAgICBjb25zdCBzdGFydFkgPSBlbGVtZW50Lnk7XG4gICAgY29uc3QgZW5kWSA9IGVsZW1lbnQueSArIGVsZW1lbnQuaGVpZ2h0O1xuXG4gICAgcmV0dXJuIF9iZXR3ZWVuKG1vdXNlUG9zaXRpb24ueCwgc3RhcnRYLCBlbmRYKSAmJiBfYmV0d2Vlbihtb3VzZVBvc2l0aW9uLnksIHN0YXJ0WSwgZW5kWSk7XG59XG5cbmZ1bmN0aW9uIF9iZXR3ZWVuKHg6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHggPj0gbWluICYmIHggPD0gbWF4O1xufVxuXG5pbnRlcmZhY2UgRWxlbWVudEJvdW5kYXJpZXMge1xuICAgIHg6IHtcbiAgICAgICAgc3RhcnQ6IG51bWJlcjtcbiAgICAgICAgZW5kOiBudW1iZXI7XG4gICAgfTtcbiAgICB5OiB7XG4gICAgICAgIHN0YXJ0OiBudW1iZXI7XG4gICAgICAgIGVuZDogbnVtYmVyO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRTdGFydENvb3JkcyhyZWN0OiBET01SZWN0LCBwb3NpdGlvbjogRWxlbWVudENob3JkWydwb3NpdGlvbiddKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBwb3NpdGlvbiA9PT0gJ2FmdGVyJyA/IHJlY3QueCArIHJlY3Qud2lkdGggOiByZWN0LngsXG4gICAgICAgIHk6IHBvc2l0aW9uID09PSAnYWZ0ZXInID8gcmVjdC55ICsgcmVjdC5oZWlnaHQgOiByZWN0LnlcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50Qm91bmRhcmllcyhjb29yZGluYXRlczogRWxlbWVudENob3JkLCB0aHJlc2hvbGQ6IG51bWJlcik6IEVsZW1lbnRCb3VuZGFyaWVzIHtcbiAgICBjb25zdCB3aWR0aE9mZnNldCA9IGNvb3JkaW5hdGVzLndpZHRoICogKGNvb3JkaW5hdGVzLnBvc2l0aW9uID09PSAnYWZ0ZXInID8gMSA6IC0xKTtcbiAgICBjb25zdCBoZWlnaHRPZmZzZXQgPSBjb29yZGluYXRlcy5oZWlnaHQgKiAoY29vcmRpbmF0ZXMucG9zaXRpb24gPT09ICdhZnRlcicgPyAxIDogLTEpO1xuICAgIGNvbnN0IHhTdGFydCA9IGNvb3JkaW5hdGVzLnBvc2l0aW9uID09PSAnYWZ0ZXInID8gY29vcmRpbmF0ZXMueCA6IGNvb3JkaW5hdGVzLnggKyBjb29yZGluYXRlcy53aWR0aDtcbiAgICBjb25zdCB4RW5kID0geFN0YXJ0ICsgd2lkdGhPZmZzZXQgKyAod2lkdGhPZmZzZXQgLyAyKSAqIHRocmVzaG9sZDtcbiAgICBjb25zdCB5U3RhcnQgPSBjb29yZGluYXRlcy5wb3NpdGlvbiA9PT0gJ2FmdGVyJyA/IGNvb3JkaW5hdGVzLnkgOiBjb29yZGluYXRlcy55ICsgY29vcmRpbmF0ZXMuaGVpZ2h0O1xuICAgIGNvbnN0IHlFbmQgPSB5U3RhcnQgKyBoZWlnaHRPZmZzZXQgKyAoaGVpZ2h0T2Zmc2V0IC8gMikgKiB0aHJlc2hvbGQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDoge1xuICAgICAgICAgICAgc3RhcnQ6IHhTdGFydCA+IHhFbmQgPyB4RW5kIDogeFN0YXJ0LFxuICAgICAgICAgICAgZW5kOiB4U3RhcnQgPiB4RW5kID8geFN0YXJ0IDogeEVuZFxuICAgICAgICB9LFxuICAgICAgICB5OiB7XG4gICAgICAgICAgICBzdGFydDogeVN0YXJ0ID4geUVuZCA/IHlFbmQgOiB5U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHlTdGFydCA+IHlFbmQgPyB5U3RhcnQgOiB5RW5kXG4gICAgICAgIH1cbiAgICB9O1xufVxuIl19
|
|
@@ -318,6 +318,7 @@ class DeprecatedSelector {
|
|
|
318
318
|
}
|
|
319
319
|
}
|
|
320
320
|
|
|
321
|
+
/* eslint-disable @typescript-eslint/member-ordering */
|
|
321
322
|
class DeprecatedAutoCompleteDirective extends DeprecatedSelector {
|
|
322
323
|
}
|
|
323
324
|
DeprecatedAutoCompleteDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DeprecatedAutoCompleteDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
@@ -347,6 +348,8 @@ class AutoCompleteDirective {
|
|
|
347
348
|
this._elementRef = _elementRef;
|
|
348
349
|
/** Whether the auto complete directive should be enabled */
|
|
349
350
|
this.enable = true;
|
|
351
|
+
/** Matcher function for testing the str for a search term */
|
|
352
|
+
this.matcher = (str, searchTerm) => str.startsWith(searchTerm);
|
|
350
353
|
/** Display function. Accepts an object of the same type as the
|
|
351
354
|
* items passed to dropdownValues as argument, and outputs a string.
|
|
352
355
|
* An arrow function can be used to access the *this* keyword in the calling component.
|
|
@@ -380,7 +383,7 @@ class AutoCompleteDirective {
|
|
|
380
383
|
return;
|
|
381
384
|
}
|
|
382
385
|
this.oldValue = this.inputText;
|
|
383
|
-
const item = this.options.find((option) => this.displayFn(option).toLocaleLowerCase()
|
|
386
|
+
const item = this.options.find((option) => this.matcher(this.displayFn(option).toLocaleLowerCase(), this.inputText.toLocaleLowerCase()));
|
|
384
387
|
if (item) {
|
|
385
388
|
this._typeahead(this.displayFn(item));
|
|
386
389
|
}
|
|
@@ -428,7 +431,7 @@ class AutoCompleteDirective {
|
|
|
428
431
|
}
|
|
429
432
|
}
|
|
430
433
|
AutoCompleteDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AutoCompleteDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
431
|
-
AutoCompleteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AutoCompleteDirective, isStandalone: true, selector: "[fdkAutoComplete], [fdAutoComplete], [fd-auto-complete]", inputs: { options: "options", inputText: "inputText", enable: "enable", displayFn: "displayFn" }, outputs: { onComplete: "onComplete" }, host: { listeners: { "keyup": "handleKeyboardEvent($event)" } }, ngImport: i0 });
|
|
434
|
+
AutoCompleteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: AutoCompleteDirective, isStandalone: true, selector: "[fdkAutoComplete], [fdAutoComplete], [fd-auto-complete]", inputs: { options: "options", inputText: "inputText", enable: "enable", matcher: "matcher", displayFn: "displayFn" }, outputs: { onComplete: "onComplete" }, host: { listeners: { "keyup": "handleKeyboardEvent($event)" } }, ngImport: i0 });
|
|
432
435
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AutoCompleteDirective, decorators: [{
|
|
433
436
|
type: Directive,
|
|
434
437
|
args: [{
|
|
@@ -441,6 +444,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
441
444
|
type: Input
|
|
442
445
|
}], enable: [{
|
|
443
446
|
type: Input
|
|
447
|
+
}], matcher: [{
|
|
448
|
+
type: Input
|
|
444
449
|
}], displayFn: [{
|
|
445
450
|
type: Input
|
|
446
451
|
}], onComplete: [{
|
|
@@ -5324,6 +5329,8 @@ class DndListDirective {
|
|
|
5324
5329
|
/** Event that is thrown when predicate function returned false. */
|
|
5325
5330
|
this.dropCancelled = new EventEmitter();
|
|
5326
5331
|
/** @hidden */
|
|
5332
|
+
this._initialClass = 'fd-dnd-list';
|
|
5333
|
+
/** @hidden */
|
|
5327
5334
|
this._closestItemIndex = null;
|
|
5328
5335
|
/** @hidden */
|
|
5329
5336
|
this._closestItemPosition = null;
|
|
@@ -5334,8 +5341,6 @@ class DndListDirective {
|
|
|
5334
5341
|
/** @hidden */
|
|
5335
5342
|
this._draggable = true;
|
|
5336
5343
|
/** @hidden */
|
|
5337
|
-
this._initialClass = 'fd-dnd-list';
|
|
5338
|
-
/** @hidden */
|
|
5339
5344
|
this._linesRemoved = true;
|
|
5340
5345
|
/** @hidden */
|
|
5341
5346
|
this._indicatorsRemoved = true;
|
|
@@ -5365,13 +5370,29 @@ class DndListDirective {
|
|
|
5365
5370
|
/** @hidden */
|
|
5366
5371
|
ngAfterContentInit() {
|
|
5367
5372
|
this._changeDraggableState(this._draggable);
|
|
5368
|
-
this.dndItems.changes
|
|
5373
|
+
this.dndItems.changes
|
|
5374
|
+
.pipe(startWith(null), takeUntil(this._onDestroy$))
|
|
5375
|
+
.subscribe(() => this.refreshQueryList());
|
|
5369
5376
|
}
|
|
5370
5377
|
/** @hidden */
|
|
5371
5378
|
ngOnDestroy() {
|
|
5372
5379
|
this._onDestroy$.next();
|
|
5373
5380
|
this._onDestroy$.complete();
|
|
5374
5381
|
}
|
|
5382
|
+
/**
|
|
5383
|
+
* Refreshes the indexes of the items.
|
|
5384
|
+
*/
|
|
5385
|
+
refreshQueryList() {
|
|
5386
|
+
const refresh$ = merge(this._refresh$, this._onDestroy$);
|
|
5387
|
+
this._refresh$.next();
|
|
5388
|
+
this._dndItemReference = this.dndItems.toArray();
|
|
5389
|
+
this._changeDraggableState(this._draggable);
|
|
5390
|
+
this.dndItems.forEach((item, index) => {
|
|
5391
|
+
item.moved.pipe(takeUntil(refresh$)).subscribe((position) => this.onMove(position, index));
|
|
5392
|
+
item.started.pipe(takeUntil(refresh$)).subscribe(() => this.dragStart(index));
|
|
5393
|
+
item.released.pipe(takeUntil(refresh$)).subscribe(() => __awaiter(this, void 0, void 0, function* () { return yield this.dragEnd(index); }));
|
|
5394
|
+
});
|
|
5395
|
+
}
|
|
5375
5396
|
/** Method called when the item is being moved by 1 px */
|
|
5376
5397
|
onMove(mousePosition, draggedItemIndex) {
|
|
5377
5398
|
/** Temporary object, to store lowest distance values */
|
|
@@ -5555,18 +5576,6 @@ class DndListDirective {
|
|
|
5555
5576
|
this._indicatorsRemoved = false;
|
|
5556
5577
|
this._dndItemReference[closestItemIndex].createReplaceIndicator();
|
|
5557
5578
|
}
|
|
5558
|
-
/** @hidden */
|
|
5559
|
-
_refreshQueryList() {
|
|
5560
|
-
const refresh$ = merge(this._refresh$, this._onDestroy$);
|
|
5561
|
-
this._refresh$.next();
|
|
5562
|
-
this._dndItemReference = this.dndItems.toArray();
|
|
5563
|
-
this._changeDraggableState(this._draggable);
|
|
5564
|
-
this.dndItems.forEach((item, index) => {
|
|
5565
|
-
item.moved.pipe(takeUntil(refresh$)).subscribe((position) => this.onMove(position, index));
|
|
5566
|
-
item.started.pipe(takeUntil(refresh$)).subscribe(() => this.dragStart(index));
|
|
5567
|
-
item.released.pipe(takeUntil(refresh$)).subscribe(() => __awaiter(this, void 0, void 0, function* () { return yield this.dragEnd(index); }));
|
|
5568
|
-
});
|
|
5569
|
-
}
|
|
5570
5579
|
/**
|
|
5571
5580
|
* @hidden
|
|
5572
5581
|
* Return information if an element is placed before the dragged element
|