@sumaris-net/ngx-components 1.19.5 → 1.19.6-rc1
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/bundles/sumaris-net.ngx-components.umd.js +79 -63
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/esm2015/src/app/shared/material/autocomplete/material.autocomplete.js +75 -59
- package/esm2015/src/app/shared/material/autocomplete/testing/autocomplete.test.js +5 -6
- package/fesm2015/sumaris-net.ngx-components.js +79 -64
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/theme/_ngx-components.scss +14 -10
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -50,8 +50,7 @@ export class AutocompleteTestPage {
|
|
|
50
50
|
this.autocompleteFields.add('entity-suggestFn', {
|
|
51
51
|
suggestFn: (value, filter) => this.suggest(value, filter),
|
|
52
52
|
attributes: ['label', 'name'],
|
|
53
|
-
displayWith: this.entityToString
|
|
54
|
-
showAllOnFocus: false
|
|
53
|
+
displayWith: this.entityToString
|
|
55
54
|
});
|
|
56
55
|
// From items array
|
|
57
56
|
this.autocompleteFields.add('entity-items', {
|
|
@@ -91,7 +90,7 @@ export class AutocompleteTestPage {
|
|
|
91
90
|
suggest: (value, filter) => this.suggest(value, filter)
|
|
92
91
|
},
|
|
93
92
|
attributes: ['label', 'name'],
|
|
94
|
-
multiple: true
|
|
93
|
+
multiple: true
|
|
95
94
|
});
|
|
96
95
|
}
|
|
97
96
|
ngAfterViewInit() {
|
|
@@ -143,7 +142,7 @@ export class AutocompleteTestPage {
|
|
|
143
142
|
total,
|
|
144
143
|
data: res.data,
|
|
145
144
|
fetchMore: (variables) => __awaiter(this, void 0, void 0, function* () {
|
|
146
|
-
yield sleep(1000);
|
|
145
|
+
yield sleep(1000); // Simulate access to server
|
|
147
146
|
return this.suggest(value, Object.assign(Object.assign({}, filter), variables));
|
|
148
147
|
})
|
|
149
148
|
};
|
|
@@ -186,7 +185,7 @@ export class AutocompleteTestPage {
|
|
|
186
185
|
AutocompleteTestPage.decorators = [
|
|
187
186
|
{ type: Component, args: [{
|
|
188
187
|
selector: 'app-autocomplete-test',
|
|
189
|
-
template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Autocomplete field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar>\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!--<ion-grid *ngIf=\"mode === 'temp'\">\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n </ion-grid>-->\n\n\n <ion-grid *ngIf=\"mode === 'memory'\">\n\n <!-- debugging memory leak -->\n <ion-row>\n <ion-col>\n <ion-text><h4>Debug memory leak</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"2\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Items type\">\n <mat-select (selectionChange)=\"memoryAutocompleteFieldName=$event.value\" [value]=\"memoryAutocompleteFieldName\">\n <mat-option value=\"entity-$items\">Observable</mat-option>\n <mat-option value=\"entity-suggestFn\">Suggest function</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n <ion-col size=\"1\" class=\"ion-no-padding\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Mobile ?\">\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\" color=\"tertiary\">Start</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\" color=\"tertiary\">Stop</ion-button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n *ngIf=\"!memoryHide && memoryAutocompleteFieldName\"\n [config]=\"autocompleteFields.get(memoryAutocompleteFieldName)\"\n [mobile]=\"memoryMobile\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-memory-leak]'\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <!-- Mobile mode -->\n <ion-grid *ngIf=\"mode === 'mobile'\">\n\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Entity far in the list (not in first page)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>value: {{stringify(form.controls.farEntity.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"farEntity\" #farEntityField\n [config]=\"autocompleteFields.get('entity-far')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-far]'\"\n [debug]=\"true\"\n [required]=\"true\"\n [floatLabel]=\"'never'\"\n placeholder=\"Far entity (in the list)\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Suggest() function\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, suggestFn: (searchText, filter) => any[]</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-1]'\"\n [required]=\"true\"\n placeholder=\"Suggest field\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Items is an Observable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-observable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [clearable]=\"true\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n search with a suggestLengthThreshold\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any>\nsuggestLengthThreshold: '3'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-mobile-suggestLengthThreshold]'\"\n required\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Multiple value\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>multiple: true</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entities\"\n [config]=\"autocompleteFields.get('entities-items-filter')\"\n [placeholder]=\"'Multiple'\"\n mobile=\"true\"\n multiple=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-multiple]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Change filter\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-button (click)=\"updateFilter(filterChangeField, 'entity-items-filter')\">Filter on: {{autocompleteFields.get('entity-items-filter').filter?.searchAttribute }}</ion-button>\n </ion-col>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\" #filterChangeField\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-filter]'\"\n ></mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class=\"min-width-large\"</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"true\"\n class=\"min-width-large\"\n panelWidth=\"400px\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Readonly toggle\n </ion-text>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid>\n <ion-row>\n <ion-col size=\"3\">\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n Readonly ?\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-readonly]'\"\n [readonly]=\"true\"\n [clearable]=\"!readonlyField.readonly\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Fullscreen\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class: 'mat-autocomplete-panel-full-size'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-mobile-full-size]'\"\n [debug]=\"true\"\n [showAllOnFocus]=\"true\"\n [showPanelOnFocus]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Desktop mode -->\n <ion-grid *ngIf=\"mode === 'desktop'\">\n <ion-row>\n <ion-col>\n <ion-text><h4>Desktop mode</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n items from suggest function\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-suggest]'\">\n </mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n search with a suggestLengthThreshold\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any>\nsuggestLengthThreshold: '3'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-desktop-suggestLengthThreshold]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an array\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: [], value: {{stringify(form.controls.entity.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [logPrefix]=\"'[combo-desktop-array-1]'\"\n [equals]=\"equals\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [equals]=\"equals\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Multiple value\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>multiple: true</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entities\"\n [config]=\"autocompleteFields.get('entities-items-filter')\"\n [placeholder]=\"'Multiple'\"\n mobile=\"false\"\n multiple=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-multiple]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-missing]'\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size panel\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class: 'mat-autocomplete-panel-full-size'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n [debug]=\"true\"\n [showAllOnFocus]=\"true\"\n [showPanelOnFocus]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-disable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class=\"mat-autocomplete-panel-full-size\"</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n class=\"mat-autocomplete-panel-full-size\"\n panelWidth=\"100vw\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>panelWidth: string</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n panelWidth=\"400px\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Readonly toggle\n </ion-text>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid>\n <ion-row>\n <ion-col size=\"3\">\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n Readonly ?\n </mat-checkbox>\n </ion-col>\n <ion-col size=\"3\">\n <mat-checkbox #showIcons [checked]=\"false\">\n Icons ?\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n [clearable]=\"!readonlyField.readonly\">\n <mat-icon matPrefix *ngIf=\"showIcons.checked\">keyboard_arrow_right</mat-icon>\n <mat-icon matSuffix *ngIf=\"showIcons.checked\">keyboard_arrow_left</mat-icon>\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </form>\n\n</ion-content>\n"
|
|
188
|
+
template: "<ion-header>\n <ion-toolbar color=\"primary\">\n\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Autocomplete field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n\n <!-- Tab nav - mobile/desktop mode -->\n <nav mat-tab-nav-bar>\n <a mat-tab-link\n [active]=\"mode==='mobile'\"\n (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='desktop'\"\n (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode==='memory'\"\n (click)=\"toggleMode('memory')\">\n <mat-label>Memory leak debug</mat-label>\n </a>\n <a mat-tab-link\n [active]=\"mode==='temp'\"\n (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n\n <!--<ion-grid *ngIf=\"mode === 'temp'\">\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>items: Observable<any[]></pre></small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [compareWith]=\"compareWithFn\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n </ion-row>\n\n\n </ion-grid>-->\n\n\n <ion-grid *ngIf=\"mode === 'memory'\">\n\n <!-- debugging memory leak -->\n <ion-row>\n <ion-col>\n <ion-text><h4>Debug memory leak</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"2\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Items type\">\n <mat-select (selectionChange)=\"memoryAutocompleteFieldName=$event.value\" [value]=\"memoryAutocompleteFieldName\">\n <mat-option value=\"entity-$items\">Observable</mat-option>\n <mat-option value=\"entity-suggestFn\">Suggest function</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n <ion-col size=\"1\" class=\"ion-no-padding\">\n <mat-form-field floatLabel=\"always\">\n <input matInput type=\"text\" hidden placeholder=\"Mobile ?\">\n <mat-checkbox (change)=\"memoryMobile=$event.checked\" [checked]=\"memoryMobile\">\n </mat-checkbox>\n </mat-form-field>\n </ion-col>\n\n <ion-col size=\"2\">\n <ion-button *ngIf=\"!memoryTimer\" (click)=\"startMemoryTimer()\" color=\"tertiary\">Start</ion-button>\n <ion-button *ngIf=\"memoryTimer\" (click)=\"stopMemoryTimer()\" color=\"tertiary\">Stop</ion-button>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\"\n *ngIf=\"!memoryHide && memoryAutocompleteFieldName\"\n [config]=\"autocompleteFields.get(memoryAutocompleteFieldName)\"\n [mobile]=\"memoryMobile\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-memory-leak]'\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n <!-- Mobile mode -->\n <ion-grid *ngIf=\"mode === 'mobile'\">\n\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Entity far in the list (not in first page)\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre style=\"white-space: normal !important;\">value: {{stringify(form.controls.farEntity.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"farEntity\" #farEntityField\n [config]=\"autocompleteFields.get('entity-far')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-far]'\"\n [debug]=\"true\"\n [required]=\"true\"\n [clearable]=\"true\"\n placeholder=\"Far entity (in the list)\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Suggest() function\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, suggestFn: (searchText, filter) => any[]</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-1]'\"\n [required]=\"true\"\n placeholder=\"Suggest field\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Items is an Observable\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-observable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>mobile: true, items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [clearable]=\"true\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n search with a suggestLengthThreshold\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any>\nsuggestLengthThreshold: '3'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-mobile-suggestLengthThreshold]'\"\n required\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Multiple value\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>multiple: true</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entities\"\n [config]=\"autocompleteFields.get('entities-items-filter')\"\n [placeholder]=\"'Multiple'\"\n mobile=\"true\"\n multiple=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-multiple]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-2]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Change filter\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <ion-button (click)=\"updateFilter(filterChangeField, 'entity-items-filter')\">Filter on: {{autocompleteFields.get('entity-items-filter').filter?.searchAttribute }}</ion-button>\n </ion-col>\n <ion-col>\n <mat-autocomplete-field formControlName=\"entity\" #filterChangeField\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-filter]'\"\n ></mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class=\"min-width-large\"</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"true\"\n class=\"min-width-large\"\n panelWidth=\"400px\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Readonly toggle\n </ion-text>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid>\n <ion-row>\n <ion-col size=\"3\">\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n Readonly ?\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-mobile-readonly]'\"\n [readonly]=\"true\"\n [clearable]=\"!readonlyField.readonly\">\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Fullscreen\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class: 'mat-autocomplete-panel-full-size'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"true\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-mobile-full-size]'\"\n [debug]=\"true\"\n [showAllOnFocus]=\"true\"\n [showPanelOnFocus]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Desktop mode -->\n <ion-grid *ngIf=\"mode === 'desktop'\">\n <ion-row>\n <ion-col>\n <ion-text><h4>Desktop mode</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n items from suggest function\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [clearable]=\"true\"\n [logPrefix]=\"'[combo-desktop-suggest]'\">\n </mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n search with a suggestLengthThreshold\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>suggest: (value, filter) => LoadResult<any>\nsuggestLengthThreshold: '3'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n suggestLengthThreshold=\"3\"\n [logPrefix]=\"'[combo-desktop-suggestLengthThreshold]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an array\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: [], value: {{stringify(form.controls.entity.value)}}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [logPrefix]=\"'[combo-desktop-array-1]'\"\n [equals]=\"equals\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Items is an Observable\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [logPrefix]=\"'[combo-desktop-2]'\"\n [equals]=\"equals\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Multiple value\n </ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small><pre>multiple: true</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entities\"\n [config]=\"autocompleteFields.get('entities-items-filter')\"\n [placeholder]=\"'Multiple'\"\n mobile=\"false\"\n multiple=\"true\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-multiple]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Control value if missing in items\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>items: Observable<any[]></pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"missingEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-missing]'\"\n [mobile]=\"false\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size panel\n </ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class: 'mat-autocomplete-panel-full-size'</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [class]=\"'mat-autocomplete-panel-full-size'\"\n [matAutocompletePosition]=\"'above'\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n [debug]=\"true\"\n [showAllOnFocus]=\"true\"\n [showPanelOnFocus]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Disabled control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-disable]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Readonly control\n </ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-$items')\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size=\"9\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Full size combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>class=\"mat-autocomplete-panel-full-size\"</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n class=\"mat-autocomplete-panel-full-size\"\n panelWidth=\"100vw\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-full-size]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"3\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">\n Large combo\n </ion-label>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>panelWidth: string</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-autocomplete-field formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-large')\"\n [mobile]=\"false\"\n panelWidth=\"400px\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-large]'\"\n ></mat-autocomplete-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">\n Readonly toggle\n </ion-text>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <ion-grid>\n <ion-row>\n <ion-col size=\"3\">\n <mat-checkbox (change)=\"readonlyField.readonly=$event.checked\" [checked]=\"readonlyField.readonly\">\n Readonly ?\n </mat-checkbox>\n </ion-col>\n <ion-col size=\"3\">\n <mat-checkbox #showIcons [checked]=\"false\">\n Icons ?\n </mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-autocomplete-field #readonlyField formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-items-filter')\"\n [placeholder]=\"'Entity'\"\n [mobile]=\"false\"\n [equals]=\"equals\"\n [logPrefix]=\"'[combo-desktop-readonly]'\"\n [readonly]=\"true\"\n [clearable]=\"!readonlyField.readonly\">\n <mat-icon matPrefix *ngIf=\"showIcons.checked\">keyboard_arrow_right</mat-icon>\n <mat-icon matSuffix *ngIf=\"showIcons.checked\">keyboard_arrow_left</mat-icon>\n </mat-autocomplete-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n </ion-grid>\n\n </form>\n\n</ion-content>\n"
|
|
190
189
|
},] }
|
|
191
190
|
];
|
|
192
191
|
AutocompleteTestPage.ctorParameters = () => [
|
|
@@ -195,4 +194,4 @@ AutocompleteTestPage.ctorParameters = () => [
|
|
|
195
194
|
AutocompleteTestPage.propDecorators = {
|
|
196
195
|
farEntityField: [{ type: ViewChild, args: ['farEntityField',] }]
|
|
197
196
|
};
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9hdXRvY29tcGxldGUvdGVzdGluZy9hdXRvY29tcGxldGUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFnQixTQUFTLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBWSxXQUFXLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRixPQUFPLEVBQUMsMkJBQTJCLEVBQXVCLE1BQU0sMEJBQTBCLENBQUM7QUFDM0YsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQU1yQyxNQUFNLGVBQWU7Q0FJcEI7QUFFRCxNQUFNLGFBQWEsR0FBRztJQUNwQixFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsd0NBQXdDLEVBQUM7SUFDakksRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLHdDQUF3QyxFQUFDO0lBQ2pJLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSx3Q0FBd0MsRUFBQztDQUNsSSxDQUFDO0FB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QUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxZQUFZLENBQUMsaUJBQXVDLEVBQUUsU0FBaUI7UUFDckUsTUFBTSxNQUFNLEdBQWlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNqRyxNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLGVBQWUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDM0YsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELDZCQUE2QjtJQUU3QixTQUFTLENBQUMsS0FBVTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7O1lBM01GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyx5ci9CQUF1QzthQUN4Qzs7O1lBekNrQixXQUFXOzs7NkJBeUQzQixTQUFTLFNBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1NoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMsIFNoYXJlZFZhbGlkYXRvcnN9IGZyb20gJy4uLy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLCBNYXRBdXRvY29tcGxldGVGaWVsZH0gZnJvbSAnLi4vbWF0ZXJpYWwuYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7aXNOaWwsIGlzTm90TmlsLCBzbGVlcCwgc3VnZ2VzdEZyb21BcnJheX0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IFRpbWVyID0gTm9kZUpTLlRpbWVyO1xuaW1wb3J0IHtGb3JtQXJyYXlIZWxwZXJ9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7c2xpZGVJbk91dEFuaW1hdGlvbn0gZnJvbSAnLi4vLi4vbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5cbmNsYXNzIEVudGl0eVRlc3RDbGFzcyB7XG4gIGlkOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgRkFLRV9FTlRJVElFUyA9IFtcbiAge2lkOiAxLCBsYWJlbDogJ0FBQScsIG5hbWU6ICdJdGVtIEEnLCBkZXNjcmlwdGlvbjogJ1ZlcnkgbG9uZyBkZXNjcmlwdGlvbiBBJywgY29tbWVudHM6ICdWZXJ5IHZlcnkgbG9uZyBjb21tZW50cy4uLiBhZ2FpbiBmb3IgQSd9LFxuICB7aWQ6IDIsIGxhYmVsOiAnQkJCJywgbmFtZTogJ0l0ZW0gQicsIGRlc2NyaXB0aW9uOiAnVmVyeSBsb25nIGRlc2NyaXB0aW9uIEInLCBjb21tZW50czogJ1ZlcnkgdmVyeSBsb25nIGNvbW1lbnRzLi4uIGFnYWluIGZvciBCJ30sXG4gIHtpZDogMywgbGFiZWw6ICdDQ0MnLCBuYW1lOiAnSXRlbSBDJywgZGVzY3JpcHRpb246ICdWZXJ5IGxvbmcgZGVzY3JpcHRpb24gQycsIGNvbW1lbnRzOiAnVmVyeSB2ZXJ5IGxvbmcgY29tbWVudHMuLi4gYWdhaW4gZm9yIEMnfVxuXTtcblxuZnVuY3Rpb24gZGVlcENvcHkodmFsdWVzPzogRW50aXR5VGVzdENsYXNzW10sIHNpemU/OiBudW1iZXIpOiBFbnRpdHlUZXN0Q2xhc3NbXSB7XG4gIGlmIChpc05pbChzaXplKSkge1xuICAgIHJldHVybiAodmFsdWVzIHx8IEZBS0VfRU5USVRJRVMpLm1hcChlbnRpdHkgPT4gT2JqZWN0LmFzc2lnbih7fSwgZW50aXR5KSk7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gW107XG4gIGxldCBpID0gMTtcbiAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCBzaXplKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCgodmFsdWVzIHx8IEZBS0VfRU5USVRJRVMpLm1hcChlbnRpdHkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IGVudGl0eS5uYW1lICsgJyAjJyArIGk7XG4gICAgICByZXR1cm4gey4uLmVudGl0eSwgaWQ6IGkrKywgbmFtZX07XG4gICAgfSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQuc2xpY2UoMCwgc2l6ZSk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hdXRvY29tcGxldGUtdGVzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUudGVzdC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVUZXN0UGFnZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHJpdmF0ZSBfaXRlbXMgPSBkZWVwQ29weShGQUtFX0VOVElUSUVTLCAxMDApO1xuICBwcml2YXRlIF8kaXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVudGl0eVRlc3RDbGFzc1tdPih1bmRlZmluZWQpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgYXV0b2NvbXBsZXRlRmllbGRzID0gbmV3IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcigpO1xuICBtZW1vcnlIaWRlID0gZmFsc2U7XG4gIG1lbW9yeU1vYmlsZSA9IHRydWU7XG4gIG1lbW9yeUF1dG9jb21wbGV0ZUZpZWxkTmFtZSA9ICdlbnRpdHktJGl0ZW1zJztcbiAgbWVtb3J5VGltZXI6IFRpbWVyO1xuXG4gIG1vZGU6ICdtb2JpbGUnfCdkZXNrdG9wJ3wnbWVtb3J5J3wndGVtcCcgPSAnbW9iaWxlJztcbiAgZW50aXRpZXNBcnJheTogRm9ybUFycmF5O1xuXG4gIEBWaWV3Q2hpbGQoJ2ZhckVudGl0eUZpZWxkJykgZmFyRW50aXR5RmllbGQ6IE1hdEF1dG9jb21wbGV0ZUZpZWxkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZW50aXR5OiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5lbnRpdHldLFxuICAgICAgbWlzc2luZ0VudGl0eTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMuZW50aXR5XSxcbiAgICAgIGRpc2FibGVFbnRpdHk6IFtudWxsLCBTaGFyZWRWYWxpZGF0b3JzLmVudGl0eV0sXG4gICAgICBlbnRpdGllczogW251bGwsIFNoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMucmVxdWlyZWRBcnJheU1pbkxlbmd0aCgxKV0sXG4gICAgICBmYXJFbnRpdHk6IFtudWxsLCBTaGFyZWRWYWxpZGF0b3JzLmVudGl0eV1cbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybS5nZXQoJ2Rpc2FibGVFbnRpdHknKS5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIC8vIEZyb20gc3VnZ2VzdFxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LXN1Z2dlc3RGbicsIHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIpID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgZmlsdGVyKSxcbiAgICAgIGF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddLFxuICAgICAgZGlzcGxheVdpdGg6IHRoaXMuZW50aXR5VG9TdHJpbmcsXG4gICAgICBzaG93QWxsT25Gb2N1czogZmFsc2VcbiAgICB9KTtcblxuICAgIC8vIEZyb20gaXRlbXMgYXJyYXlcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5hZGQoJ2VudGl0eS1pdGVtcycsIHtcbiAgICAgIGl0ZW1zOiB0aGlzLl9pdGVtcy5zbGljZSgpLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZ1xuICAgIH0pO1xuXG4gICAgLy8gRnJvbSAkaXRlbXMgb2JzZXJ2YWJsZVxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LSRpdGVtcycsIHtcbiAgICAgIGl0ZW1zOiB0aGlzLl8kaXRlbXMsXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nXG4gICAgfSk7XG5cbiAgICAvLyBGcm9tICRpdGVtcyB3aXRoIGZpbHRlclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LWl0ZW1zLWZpbHRlcicsIHtcbiAgICAgIHNlcnZpY2U6IHtcbiAgICAgICAgc3VnZ2VzdDogKHZhbHVlLCBmaWx0ZXIpID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgZmlsdGVyKVxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddLFxuICAgICAgZGlzcGxheVdpdGg6IHRoaXMuZW50aXR5VG9TdHJpbmdcbiAgICB9KTtcblxuICAgIC8vIEZyb20gaXRlbXNcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5hZGQoJ2VudGl0eS1pdGVtcy1sYXJnZScsIHtcbiAgICAgIGl0ZW1zOiBGQUtFX0VOVElUSUVTLnNsaWNlKCksXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnY29tbWVudHMnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nXG4gICAgfSk7XG5cbiAgICAvLyBGYXIgZW50aXR5LCBpbiB0aGUgbGlzdFxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LWZhcicsIHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIpID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgZmlsdGVyKSxcbiAgICAgIGF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddLFxuICAgICAgZGlzcGxheVdpdGg6IHRoaXMuZW50aXR5VG9TdHJpbmdcbiAgICB9KTtcblxuICAgIC8vIEZvciBtdWx0aXBsZSB2YWx1ZVxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXRpZXMtaXRlbXMtZmlsdGVyJywge1xuICAgICAgc2VydmljZToge1xuICAgICAgICBzdWdnZXN0OiAodmFsdWUsIGZpbHRlcikgPT4gdGhpcy5zdWdnZXN0KHZhbHVlLCBmaWx0ZXIpXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIC8vZGlzcGxheVdpdGg6IHRoaXMuZW50aXRpZXNUb1N0cmluZ1xuICAgIH0pO1xuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZmFyRW50aXR5RmllbGQuc3VnZ2VzdExlbmd0aFRocmVzaG9sZD0yO1xuICAgICAgdGhpcy5mYXJFbnRpdHlGaWVsZC5yZWxvYWRJdGVtcygpO1xuICAgIH0sIDIwMDApO1xuXG4gICAgc2V0VGltZW91dCgoKT0+IHRoaXMubG9hZERhdGEoKSwgMTAwMCk7XG4gIH1cblxuICAvLyBMb2FkIHRoZSBmb3JtIHdpdGggZGF0YVxuICBhc3luYyBsb2FkRGF0YSgpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgZW50aXR5OiBkZWVwQ29weShGQUtFX0VOVElUSUVTKVswXSwgLy8gRmlyc3RcblxuICAgICAgZmFyRW50aXR5OiBkZWVwQ29weShGQUtFX0VOVElUSUVTKVsyXSxcblxuICAgICAgLy8gVGhpcyBpdGVtIGlzIE5PVCBpbiB0aGUgaXRlbXMgbGlzdCA9PiBpIHNob3VsZCBiZSBkaXNwbGF5ZWQgYW55d2F5XG4gICAgICBtaXNzaW5nRW50aXR5OiB7XG4gICAgICAgIGlkOiAtMSwgbGFiZWw6ICc/PycsIG5hbWU6ICdNaXNzaW5nIGl0ZW0nXG4gICAgICB9LFxuXG4gICAgICBkaXNhYmxlRW50aXR5OiBkZWVwQ29weShGQUtFX0VOVElUSUVTKVsyXSxcblxuICAgICAgZW50aXRpZXM6IGRlZXBDb3B5KEZBS0VfRU5USVRJRVMpXG4gICAgfTtcblxuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZShkYXRhKTtcblxuICAgIC8vIExvYWQgb2JzZXJ2YWJsZXNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZEl0ZW1zKCksIDEwMDApO1xuICB9XG5cbiAgYXN5bmMgbG9hZEl0ZW1zKCkge1xuICAgIHRoaXMuXyRpdGVtcy5uZXh0KHRoaXMuX2l0ZW1zLnNsaWNlKCkpO1xuICB9XG5cbiAgZW50aXR5VG9TdHJpbmcoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIFtpdGVtICYmIGl0ZW0ubGFiZWwgfHwgdW5kZWZpbmVkLCBpdGVtICYmIGl0ZW0ubmFtZSB8fCB1bmRlZmluZWRdLmZpbHRlcihpc05vdE5pbCkuam9pbignIC0gJyk7XG4gIH1cblxuICBlbnRpdGllc1RvU3RyaW5nKGl0ZW1zOiBhbnlbXSkge1xuICAgIHJldHVybiAoaXRlbXN8fFtdKS5tYXAodGhpcy5lbnRpdHlUb1N0cmluZykuam9pbignLCAnKTtcbiAgfVxuXG4gIGFzeW5jIHN1Z2dlc3QodmFsdWU6IGFueSwgZmlsdGVyPzogYW55KTogUHJvbWlzZTxMb2FkUmVzdWx0PEVudGl0eVRlc3RDbGFzcz4+IHtcbiAgICBmaWx0ZXIgPSB7b2Zmc2V0OiAwLCBzaXplOiAzMCwgLi4uZmlsdGVyfTtcbiAgICBjb25zdCByZXMgPSBzdWdnZXN0RnJvbUFycmF5KHRoaXMuX2l0ZW1zLCB2YWx1ZSwge1xuICAgICAgLi4uZmlsdGVyLFxuICAgICAgc2VhcmNoQXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ11cbiAgICB9KTtcblxuICAgIC8vIFNpbXVsYXRlIGEgc2l6ZSA9IDMwXG4gICAgY29uc3QgdG90YWwgPSByZXMudG90YWwgfHwgcmVzLmRhdGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbmV4dE9mZnNldCA9IGZpbHRlci5vZmZzZXQgKyByZXMuZGF0YS5sZW5ndGg7XG4gICAgaWYgKG5leHRPZmZzZXQgPCB0b3RhbCkge1xuICAgICAgZmlsdGVyID0gey4uLmZpbHRlciwgb2Zmc2V0OiBuZXh0T2Zmc2V0fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvdGFsLFxuICAgICAgICBkYXRhOiByZXMuZGF0YSxcbiAgICAgICAgZmV0Y2hNb3JlOiBhc3luYyAodmFyaWFibGVzKSA9PiB7XG4gICAgICAgICAgYXdhaXQgc2xlZXAoMTAwMCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3VnZ2VzdCh2YWx1ZSwgey4uLmZpbHRlciwgLi4udmFyaWFibGVzfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGRvU3VibWl0KGV2ZW50KSB7XG5cbiAgICBjb25zb2xlLmRlYnVnKCdWYWxpZGF0ZSBmb3JtOiAnLCB0aGlzLmZvcm0udmFsdWUpO1xuICB9XG5cbiAgZXF1YWxzKG8xOiBFbnRpdHlUZXN0Q2xhc3MsIG8yOiBFbnRpdHlUZXN0Q2xhc3MpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbzEgJiYgbzIgJiYgbzEuaWQgPT09IG8yLmlkO1xuICB9XG5cbiAgdG9nZ2xlTW9kZSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLm1vZGUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLm1vZGUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc3RvcE1lbW9yeVRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRNZW1vcnlUaW1lcigpIHtcbiAgICB0aGlzLm1lbW9yeVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5tZW1vcnlIaWRlID0gIXRoaXMubWVtb3J5SGlkZTtcbiAgICB9LCA1MCk7XG4gIH1cblxuICBzdG9wTWVtb3J5VGltZXIoKSB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLm1lbW9yeVRpbWVyKTtcbiAgICB0aGlzLm1lbW9yeVRpbWVyID0gbnVsbDtcbiAgICB0aGlzLm1lbW9yeUhpZGUgPSBmYWxzZTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcihhdXRvY29tcGxldGVGaWVsZDogTWF0QXV0b2NvbXBsZXRlRmllbGQsIGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyOiB7IHNlYXJjaEF0dHJpYnV0ZT86IHN0cmluZyB9ID0gdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuZ2V0KGZpZWxkTmFtZSkuZmlsdGVyIHx8IHt9O1xuICAgIGZpbHRlci5zZWFyY2hBdHRyaWJ1dGUgPSAoIWZpbHRlciB8fCBmaWx0ZXIuc2VhcmNoQXR0cmlidXRlICE9PSAnbmFtZScpID8gJ25hbWUnIDogJ2xhYmVsJztcbiAgICBhdXRvY29tcGxldGVGaWVsZC5yZWxvYWRJdGVtcygpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBzdHJpbmdpZnkodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cbn1cblxuIl19
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9hdXRvY29tcGxldGUvdGVzdGluZy9hdXRvY29tcGxldGUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFnQixTQUFTLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBWSxXQUFXLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMxRixPQUFPLEVBQUMsMkJBQTJCLEVBQXVCLE1BQU0sMEJBQTBCLENBQUM7QUFDM0YsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQU1yQyxNQUFNLGVBQWU7Q0FJcEI7QUFFRCxNQUFNLGFBQWEsR0FBRztJQUNwQixFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsd0NBQXdDLEVBQUM7SUFDakksRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLHdDQUF3QyxFQUFDO0lBQ2pJLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsRUFBRSx3Q0FBd0MsRUFBQztDQUNsSSxDQUFDO0FB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SUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxZQUFZLENBQUMsaUJBQXVDLEVBQUUsU0FBaUI7UUFDckUsTUFBTSxNQUFNLEdBQWlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNqRyxNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLGVBQWUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDM0YsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELDZCQUE2QjtJQUU3QixTQUFTLENBQUMsS0FBVTtRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7O1lBek1GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQywyeC9CQUF1QzthQUN4Qzs7O1lBekNrQixXQUFXOzs7NkJBeUQzQixTQUFTLFNBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1NoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMsIFNoYXJlZFZhbGlkYXRvcnN9IGZyb20gJy4uLy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyLCBNYXRBdXRvY29tcGxldGVGaWVsZH0gZnJvbSAnLi4vbWF0ZXJpYWwuYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7aXNOaWwsIGlzTm90TmlsLCBzbGVlcCwgc3VnZ2VzdEZyb21BcnJheX0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7TG9hZFJlc3VsdH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IFRpbWVyID0gTm9kZUpTLlRpbWVyO1xuaW1wb3J0IHtGb3JtQXJyYXlIZWxwZXJ9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZm9ybS9mb3JtLnV0aWxzJztcbmltcG9ydCB7c2xpZGVJbk91dEFuaW1hdGlvbn0gZnJvbSAnLi4vLi4vbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5cbmNsYXNzIEVudGl0eVRlc3RDbGFzcyB7XG4gIGlkOiBudW1iZXI7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgRkFLRV9FTlRJVElFUyA9IFtcbiAge2lkOiAxLCBsYWJlbDogJ0FBQScsIG5hbWU6ICdJdGVtIEEnLCBkZXNjcmlwdGlvbjogJ1ZlcnkgbG9uZyBkZXNjcmlwdGlvbiBBJywgY29tbWVudHM6ICdWZXJ5IHZlcnkgbG9uZyBjb21tZW50cy4uLiBhZ2FpbiBmb3IgQSd9LFxuICB7aWQ6IDIsIGxhYmVsOiAnQkJCJywgbmFtZTogJ0l0ZW0gQicsIGRlc2NyaXB0aW9uOiAnVmVyeSBsb25nIGRlc2NyaXB0aW9uIEInLCBjb21tZW50czogJ1ZlcnkgdmVyeSBsb25nIGNvbW1lbnRzLi4uIGFnYWluIGZvciBCJ30sXG4gIHtpZDogMywgbGFiZWw6ICdDQ0MnLCBuYW1lOiAnSXRlbSBDJywgZGVzY3JpcHRpb246ICdWZXJ5IGxvbmcgZGVzY3JpcHRpb24gQycsIGNvbW1lbnRzOiAnVmVyeSB2ZXJ5IGxvbmcgY29tbWVudHMuLi4gYWdhaW4gZm9yIEMnfVxuXTtcblxuZnVuY3Rpb24gZGVlcENvcHkodmFsdWVzPzogRW50aXR5VGVzdENsYXNzW10sIHNpemU/OiBudW1iZXIpOiBFbnRpdHlUZXN0Q2xhc3NbXSB7XG4gIGlmIChpc05pbChzaXplKSkge1xuICAgIHJldHVybiAodmFsdWVzIHx8IEZBS0VfRU5USVRJRVMpLm1hcChlbnRpdHkgPT4gT2JqZWN0LmFzc2lnbih7fSwgZW50aXR5KSk7XG4gIH1cblxuICBsZXQgcmVzdWx0ID0gW107XG4gIGxldCBpID0gMTtcbiAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCBzaXplKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCgodmFsdWVzIHx8IEZBS0VfRU5USVRJRVMpLm1hcChlbnRpdHkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IGVudGl0eS5uYW1lICsgJyAjJyArIGk7XG4gICAgICByZXR1cm4gey4uLmVudGl0eSwgaWQ6IGkrKywgbmFtZX07XG4gICAgfSkpO1xuICB9XG4gIHJldHVybiByZXN1bHQuc2xpY2UoMCwgc2l6ZSk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hdXRvY29tcGxldGUtdGVzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUudGVzdC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVUZXN0UGFnZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHJpdmF0ZSBfaXRlbXMgPSBkZWVwQ29weShGQUtFX0VOVElUSUVTLCAxMDApO1xuICBwcml2YXRlIF8kaXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVudGl0eVRlc3RDbGFzc1tdPih1bmRlZmluZWQpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgYXV0b2NvbXBsZXRlRmllbGRzID0gbmV3IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlcigpO1xuICBtZW1vcnlIaWRlID0gZmFsc2U7XG4gIG1lbW9yeU1vYmlsZSA9IHRydWU7XG4gIG1lbW9yeUF1dG9jb21wbGV0ZUZpZWxkTmFtZSA9ICdlbnRpdHktJGl0ZW1zJztcbiAgbWVtb3J5VGltZXI6IFRpbWVyO1xuXG4gIG1vZGU6ICdtb2JpbGUnfCdkZXNrdG9wJ3wnbWVtb3J5J3wndGVtcCcgPSAnbW9iaWxlJztcbiAgZW50aXRpZXNBcnJheTogRm9ybUFycmF5O1xuXG4gIEBWaWV3Q2hpbGQoJ2ZhckVudGl0eUZpZWxkJykgZmFyRW50aXR5RmllbGQ6IE1hdEF1dG9jb21wbGV0ZUZpZWxkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcbiAgKSB7XG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZW50aXR5OiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5lbnRpdHldLFxuICAgICAgbWlzc2luZ0VudGl0eTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMuZW50aXR5XSxcbiAgICAgIGRpc2FibGVFbnRpdHk6IFtudWxsLCBTaGFyZWRWYWxpZGF0b3JzLmVudGl0eV0sXG4gICAgICBlbnRpdGllczogW251bGwsIFNoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMucmVxdWlyZWRBcnJheU1pbkxlbmd0aCgxKV0sXG4gICAgICBmYXJFbnRpdHk6IFtudWxsLCBTaGFyZWRWYWxpZGF0b3JzLmVudGl0eV1cbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybS5nZXQoJ2Rpc2FibGVFbnRpdHknKS5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIC8vIEZyb20gc3VnZ2VzdFxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LXN1Z2dlc3RGbicsIHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIpID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgZmlsdGVyKSxcbiAgICAgIGF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddLFxuICAgICAgZGlzcGxheVdpdGg6IHRoaXMuZW50aXR5VG9TdHJpbmdcbiAgICB9KTtcblxuICAgIC8vIEZyb20gaXRlbXMgYXJyYXlcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5hZGQoJ2VudGl0eS1pdGVtcycsIHtcbiAgICAgIGl0ZW1zOiB0aGlzLl9pdGVtcy5zbGljZSgpLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZ1xuICAgIH0pO1xuXG4gICAgLy8gRnJvbSAkaXRlbXMgb2JzZXJ2YWJsZVxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LSRpdGVtcycsIHtcbiAgICAgIGl0ZW1zOiB0aGlzLl8kaXRlbXMsXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nXG4gICAgfSk7XG5cbiAgICAvLyBGcm9tICRpdGVtcyB3aXRoIGZpbHRlclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LWl0ZW1zLWZpbHRlcicsIHtcbiAgICAgIHNlcnZpY2U6IHtcbiAgICAgICAgc3VnZ2VzdDogKHZhbHVlLCBmaWx0ZXIpID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgZmlsdGVyKVxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddLFxuICAgICAgZGlzcGxheVdpdGg6IHRoaXMuZW50aXR5VG9TdHJpbmdcbiAgICB9KTtcblxuICAgIC8vIEZyb20gaXRlbXNcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5hZGQoJ2VudGl0eS1pdGVtcy1sYXJnZScsIHtcbiAgICAgIGl0ZW1zOiBGQUtFX0VOVElUSUVTLnNsaWNlKCksXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnY29tbWVudHMnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nXG4gICAgfSk7XG5cbiAgICAvLyBGYXIgZW50aXR5LCBpbiB0aGUgbGlzdFxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LWZhcicsIHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIpID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgZmlsdGVyKSxcbiAgICAgIGF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddLFxuICAgICAgZGlzcGxheVdpdGg6IHRoaXMuZW50aXR5VG9TdHJpbmdcbiAgICB9KTtcblxuICAgIC8vIEZvciBtdWx0aXBsZSB2YWx1ZVxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXRpZXMtaXRlbXMtZmlsdGVyJywge1xuICAgICAgc2VydmljZToge1xuICAgICAgICBzdWdnZXN0OiAodmFsdWUsIGZpbHRlcikgPT4gdGhpcy5zdWdnZXN0KHZhbHVlLCBmaWx0ZXIpXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBtdWx0aXBsZTogdHJ1ZVxuICAgIH0pO1xuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZmFyRW50aXR5RmllbGQuc3VnZ2VzdExlbmd0aFRocmVzaG9sZD0yO1xuICAgICAgdGhpcy5mYXJFbnRpdHlGaWVsZC5yZWxvYWRJdGVtcygpO1xuICAgIH0sIDIwMDApO1xuXG4gICAgc2V0VGltZW91dCgoKT0+IHRoaXMubG9hZERhdGEoKSwgMTAwMCk7XG4gIH1cblxuICAvLyBMb2FkIHRoZSBmb3JtIHdpdGggZGF0YVxuICBhc3luYyBsb2FkRGF0YSgpIHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgZW50aXR5OiBkZWVwQ29weShGQUtFX0VOVElUSUVTKVswXSwgLy8gRmlyc3RcblxuICAgICAgZmFyRW50aXR5OiBkZWVwQ29weShGQUtFX0VOVElUSUVTKVsyXSxcblxuICAgICAgLy8gVGhpcyBpdGVtIGlzIE5PVCBpbiB0aGUgaXRlbXMgbGlzdCA9PiBpIHNob3VsZCBiZSBkaXNwbGF5ZWQgYW55d2F5XG4gICAgICBtaXNzaW5nRW50aXR5OiB7XG4gICAgICAgIGlkOiAtMSwgbGFiZWw6ICc/PycsIG5hbWU6ICdNaXNzaW5nIGl0ZW0nXG4gICAgICB9LFxuXG4gICAgICBkaXNhYmxlRW50aXR5OiBkZWVwQ29weShGQUtFX0VOVElUSUVTKVsyXSxcblxuICAgICAgZW50aXRpZXM6IGRlZXBDb3B5KEZBS0VfRU5USVRJRVMpXG4gICAgfTtcblxuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZShkYXRhKTtcblxuICAgIC8vIExvYWQgb2JzZXJ2YWJsZXNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZEl0ZW1zKCksIDEwMDApO1xuICB9XG5cbiAgYXN5bmMgbG9hZEl0ZW1zKCkge1xuICAgIHRoaXMuXyRpdGVtcy5uZXh0KHRoaXMuX2l0ZW1zLnNsaWNlKCkpO1xuICB9XG5cbiAgZW50aXR5VG9TdHJpbmcoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIFtpdGVtICYmIGl0ZW0ubGFiZWwgfHwgdW5kZWZpbmVkLCBpdGVtICYmIGl0ZW0ubmFtZSB8fCB1bmRlZmluZWRdLmZpbHRlcihpc05vdE5pbCkuam9pbignIC0gJyk7XG4gIH1cblxuICBlbnRpdGllc1RvU3RyaW5nKGl0ZW1zOiBhbnlbXSkge1xuICAgIHJldHVybiAoaXRlbXN8fFtdKS5tYXAodGhpcy5lbnRpdHlUb1N0cmluZykuam9pbignLCAnKTtcbiAgfVxuXG4gIGFzeW5jIHN1Z2dlc3QodmFsdWU6IGFueSwgZmlsdGVyPzogYW55KTogUHJvbWlzZTxMb2FkUmVzdWx0PEVudGl0eVRlc3RDbGFzcz4+IHtcbiAgICBmaWx0ZXIgPSB7b2Zmc2V0OiAwLCBzaXplOiAzMCwgLi4uZmlsdGVyfTtcbiAgICBjb25zdCByZXMgPSBzdWdnZXN0RnJvbUFycmF5KHRoaXMuX2l0ZW1zLCB2YWx1ZSwge1xuICAgICAgLi4uZmlsdGVyLFxuICAgICAgc2VhcmNoQXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ11cbiAgICB9KTtcblxuICAgIC8vIFNpbXVsYXRlIGEgc2l6ZSA9IDMwXG4gICAgY29uc3QgdG90YWwgPSByZXMudG90YWwgfHwgcmVzLmRhdGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbmV4dE9mZnNldCA9IGZpbHRlci5vZmZzZXQgKyByZXMuZGF0YS5sZW5ndGg7XG4gICAgaWYgKG5leHRPZmZzZXQgPCB0b3RhbCkge1xuICAgICAgZmlsdGVyID0gey4uLmZpbHRlciwgb2Zmc2V0OiBuZXh0T2Zmc2V0fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvdGFsLFxuICAgICAgICBkYXRhOiByZXMuZGF0YSxcbiAgICAgICAgZmV0Y2hNb3JlOiBhc3luYyAodmFyaWFibGVzKSA9PiB7XG4gICAgICAgICAgYXdhaXQgc2xlZXAoMTAwMCk7IC8vIFNpbXVsYXRlIGFjY2VzcyB0byBzZXJ2ZXJcbiAgICAgICAgICByZXR1cm4gdGhpcy5zdWdnZXN0KHZhbHVlLCB7Li4uZmlsdGVyLCAuLi52YXJpYWJsZXN9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgZG9TdWJtaXQoZXZlbnQpIHtcblxuICAgIGNvbnNvbGUuZGVidWcoJ1ZhbGlkYXRlIGZvcm06ICcsIHRoaXMuZm9ybS52YWx1ZSk7XG4gIH1cblxuICBlcXVhbHMobzE6IEVudGl0eVRlc3RDbGFzcywgbzI6IEVudGl0eVRlc3RDbGFzcyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvMSAmJiBvMiAmJiBvMS5pZCA9PT0gbzIuaWQ7XG4gIH1cblxuICB0b2dnbGVNb2RlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubW9kZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMubW9kZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zdG9wTWVtb3J5VGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBzdGFydE1lbW9yeVRpbWVyKCkge1xuICAgIHRoaXMubWVtb3J5VGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLm1lbW9yeUhpZGUgPSAhdGhpcy5tZW1vcnlIaWRlO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIHN0b3BNZW1vcnlUaW1lcigpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMubWVtb3J5VGltZXIpO1xuICAgIHRoaXMubWVtb3J5VGltZXIgPSBudWxsO1xuICAgIHRoaXMubWVtb3J5SGlkZSA9IGZhbHNlO1xuICB9XG5cbiAgdXBkYXRlRmlsdGVyKGF1dG9jb21wbGV0ZUZpZWxkOiBNYXRBdXRvY29tcGxldGVGaWVsZCwgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBmaWx0ZXI6IHsgc2VhcmNoQXR0cmlidXRlPzogc3RyaW5nIH0gPSB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5nZXQoZmllbGROYW1lKS5maWx0ZXIgfHwge307XG4gICAgZmlsdGVyLnNlYXJjaEF0dHJpYnV0ZSA9ICghZmlsdGVyIHx8IGZpbHRlci5zZWFyY2hBdHRyaWJ1dGUgIT09ICduYW1lJykgPyAnbmFtZScgOiAnbGFiZWwnO1xuICAgIGF1dG9jb21wbGV0ZUZpZWxkLnJlbG9hZEl0ZW1zKCk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHN0cmluZ2lmeSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgfVxufVxuXG4iXX0=
|