@colijnit/corecomponents_v12 12.2.0 → 12.2.1

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.
@@ -2,12 +2,14 @@ import { Component, ElementRef, EventEmitter, HostBinding, Input, Output, ViewCh
2
2
  import { InputSearchComponent } from '../input-search/input-search.component';
3
3
  import { KeyboardKey } from '../../core/enum/keyboard-key.enum';
4
4
  export class ListOfValuesPopupComponent {
5
- constructor() {
5
+ constructor(_elementRef) {
6
+ this._elementRef = _elementRef;
6
7
  this.multiselect = false;
7
8
  this.displayField = 'description';
8
9
  this.searchDisabled = false;
9
10
  this.modelChange = new EventEmitter();
10
11
  this.closePopup = new EventEmitter();
12
+ this.keyDown = new EventEmitter();
11
13
  this.viewModels = [];
12
14
  this.viewModelsMain = [];
13
15
  this._collection = [];
@@ -72,8 +74,14 @@ export class ListOfValuesPopupComponent {
72
74
  case KeyboardKey.SpaceBar:
73
75
  if (this.highLightModel) {
74
76
  this.selectViewModel(this.highLightModel, false);
75
- return false;
76
77
  }
78
+ else {
79
+ this.keyDown.next(event);
80
+ }
81
+ return false;
82
+ default:
83
+ this.keyDown.next(event);
84
+ return true;
77
85
  }
78
86
  }
79
87
  }
@@ -141,6 +149,9 @@ export class ListOfValuesPopupComponent {
141
149
  if (!this.multiselect) {
142
150
  this.selectViewModel(nextModel, false);
143
151
  }
152
+ else {
153
+ this._scrollIntoView();
154
+ }
144
155
  }
145
156
  _prepareViewModelsMain() {
146
157
  this.viewModelsMain.length = 0;
@@ -165,8 +176,9 @@ export class ListOfValuesPopupComponent {
165
176
  if (!activeItem || !scrollParent) {
166
177
  return;
167
178
  }
168
- const { offsetHeight, offsetTop } = activeItem;
169
- const { offsetHeight: parentOffsetHeight, scrollTop } = scrollParent;
179
+ let { offsetHeight, offsetTop } = activeItem;
180
+ let { offsetHeight: parentOffsetHeight, scrollTop, offsetTop: parentOffsetTop } = scrollParent;
181
+ offsetTop = offsetTop - parentOffsetTop;
170
182
  const isAbove = offsetTop < scrollTop;
171
183
  const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;
172
184
  if (isAbove) {
@@ -182,16 +194,17 @@ ListOfValuesPopupComponent.decorators = [
182
194
  selector: 'co-list-of-values-popup',
183
195
  template: `
184
196
  <div class="lov-options" [overlay]="parentForOverlay" [inheritWidth]="true" [ngClass]="customCssClass" id="lov-popup"
185
- [tabIndex]="-1" role="listbox"
197
+ role="listbox" [tabindex]="-1"
186
198
  (clickOutside)="closePopup.emit($event)">
187
- <co-input-search *ngIf="multiselect"
199
+ <co-input-search *ngIf="multiselect"
200
+ tabindex="-1"
188
201
  [(model)]="searchTerm"
189
202
  [placeholder]="searchPlaceholder"
190
203
  (keydown)="handleInputKeyDown($event)"
191
204
  (modelChange)="filterViewModels()"></co-input-search>
192
205
  <ul class="dropdown-list" #dropDownList>
193
206
  <li #lovItem *ngFor="let viewModel of viewModels; let index = index" [class.selected]="viewModel === highLightModel"
194
- (click)="selectViewModel(viewModel, false)" role="option">
207
+ (click)="selectViewModel(viewModel, !multiselect)" role="option">
195
208
  <ng-container *ngIf="!multiselect">
196
209
  <span class="lov-options-text" [textContent]="viewModel.model[displayField]"></span>
197
210
  </ng-container>
@@ -206,6 +219,9 @@ ListOfValuesPopupComponent.decorators = [
206
219
  encapsulation: ViewEncapsulation.None
207
220
  },] }
208
221
  ];
222
+ ListOfValuesPopupComponent.ctorParameters = () => [
223
+ { type: ElementRef }
224
+ ];
209
225
  ListOfValuesPopupComponent.propDecorators = {
210
226
  lovItems: [{ type: ViewChildren, args: ['lovItem', { read: ElementRef },] }],
211
227
  dropDownList: [{ type: ViewChild, args: ['dropDownList', { read: ElementRef },] }],
@@ -220,6 +236,7 @@ ListOfValuesPopupComponent.propDecorators = {
220
236
  collection: [{ type: Input }],
221
237
  modelChange: [{ type: Output }],
222
238
  closePopup: [{ type: Output }],
239
+ keyDown: [{ type: Output }],
223
240
  showClass: [{ type: HostBinding, args: ['class.co-list-of-values-popup',] }]
224
241
  };
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1vZi12YWx1ZXMtcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3Qtb2YtdmFsdWVzL2xpc3Qtb2YtdmFsdWVzLXBvcHVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBa0M5RCxNQUFNLE9BQU8sMEJBQTBCO0lBM0J2QztRQStDVyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUc3QixpQkFBWSxHQUFXLGFBQWEsQ0FBQztRQVNyQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQWtCaEMsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUd6RCxlQUFVLEdBQXdCLElBQUksWUFBWSxFQUFTLENBQUM7UUFrQjVELGVBQVUsR0FBbUIsRUFBRSxDQUFDO1FBQ2hDLG1CQUFjLEdBQW1CLEVBQUUsQ0FBQztRQUduQyxnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixjQUFTLEdBQWlCLEVBQUUsQ0FBQztJQTZJekMsQ0FBQztJQXpORyxJQUFtRCxRQUFRLENBQUMsUUFBUTtRQUNoRSxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUtELElBQXFDLFdB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QVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxPQUFPLEVBQUU7WUFDaEIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxDQUFDO1NBQzNFO0lBQ0wsQ0FBQzs7O1lBcFBKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUseUJBQXlCO2dCQUNuQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FzQlQ7Z0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDeEM7Ozt1QkFFSSxZQUFZLFNBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTsyQkFLNUMsU0FBUyxTQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7MEJBRzlDLFNBQVMsU0FBQyxvQkFBb0I7b0JBTzlCLEtBQUs7MEJBR0wsS0FBSzsyQkFHTCxLQUFLO2dDQUdMLEtBQUs7NkJBR0wsS0FBSzs2QkFHTCxLQUFLOytCQUdMLEtBQUs7eUJBR0wsS0FBSzswQkFZTCxNQUFNO3lCQUdOLE1BQU07d0JBR04sV0FBVyxTQUFDLCtCQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSG9zdEJpbmRpbmcsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxuICAgIFZpZXdDaGlsZHJlbixcclxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SW5wdXRTZWFyY2hDb21wb25lbnR9IGZyb20gJy4uL2lucHV0LXNlYXJjaC9pbnB1dC1zZWFyY2guY29tcG9uZW50JztcclxuaW1wb3J0IHtLZXlib2FyZEtleX0gZnJvbSAnLi4vLi4vY29yZS9lbnVtL2tleWJvYXJkLWtleS5lbnVtJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgbG92Vmlld01vZGVsIHtcclxuICAgIGNoZWNrZWQ6IGJvb2xlYW5cclxuICAgIG1vZGVsOiBhbnlcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NvLWxpc3Qtb2YtdmFsdWVzLXBvcHVwJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvdi1vcHRpb25zXCIgW292ZXJsYXldPVwicGFyZW50Rm9yT3ZlcmxheVwiIFtpbmhlcml0V2lkdGhdPVwidHJ1ZVwiIFtuZ0NsYXNzXT1cImN1c3RvbUNzc0NsYXNzXCIgaWQ9XCJsb3YtcG9wdXBcIlxyXG4gICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCIgcm9sZT1cImxpc3Rib3hcIlxyXG4gICAgICAgICAgICAgKGNsaWNrT3V0c2lkZSk9XCJjbG9zZVBvcHVwLmVtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8Y28taW5wdXQtc2VhcmNoICpuZ0lmPVwibXVsdGlzZWxlY3RcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG1vZGVsKV09XCJzZWFyY2hUZXJtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUlucHV0S2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW9kZWxDaGFuZ2UpPVwiZmlsdGVyVmlld01vZGVscygpXCI+PC9jby1pbnB1dC1zZWFyY2g+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLWxpc3RcIiAjZHJvcERvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgPGxpICNsb3ZJdGVtICpuZ0Zvcj1cImxldCB2aWV3TW9kZWwgb2Ygdmlld01vZGVsczsgbGV0IGluZGV4ID0gaW5kZXhcIiBbY2xhc3Muc2VsZWN0ZWRdPVwidmlld01vZGVsID09PSBoaWdoTGlnaHRNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFZpZXdNb2RlbCh2aWV3TW9kZWwsIGZhbHNlKVwiIHJvbGU9XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW11bHRpc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG92LW9wdGlvbnMtdGV4dFwiIFt0ZXh0Q29udGVudF09XCJ2aWV3TW9kZWwubW9kZWxbZGlzcGxheUZpZWxkXVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibXVsdGlzZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvLWlucHV0LWNoZWNrYm94IFttb2RlbF09XCJ2aWV3TW9kZWwuY2hlY2tlZFwiIChtb2RlbENoYW5nZSk9XCJzZWxlY3RWaWV3TW9kZWwodmlld01vZGVsLCBmYWxzZSlcIj48L2NvLWlucHV0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvdi1vcHRpb25zLXRleHRcIiBbdGV4dENvbnRlbnRdPVwidmlld01vZGVsLm1vZGVsW2Rpc3BsYXlGaWVsZF1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgYCxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0T2ZWYWx1ZXNQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkcmVuKCdsb3ZJdGVtJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHNldCBsb3ZJdGVtcyhjaGlsZHJlbikge1xyXG4gICAgICAgIHRoaXMuX2xvdkl0ZW1zID0gY2hpbGRyZW4udG9BcnJheSgpO1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbEludG9WaWV3KCk7XHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZHJvcERvd25MaXN0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXHJcbiAgICBwdWJsaWMgZHJvcERvd25MaXN0OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoSW5wdXRTZWFyY2hDb21wb25lbnQpIHNldCBpbnB1dFNlYXJjaChjb21wb25lbnQ6IElucHV0U2VhcmNoQ29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoSW5wdXQgPSBjb21wb25lbnQ7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlYXJjaElucHV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NlYXJjaElucHV0LnJlcXVlc3RGb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1vZGVsOiBhbnk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtdWx0aXNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGlzcGxheUZpZWxkOiBzdHJpbmcgPSAnZGVzY3JpcHRpb24nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGN1c3RvbUNzc0NsYXNzOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZWFyY2hEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcGFyZW50Rm9yT3ZlcmxheTogRWxlbWVudFJlZjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBjb2xsZWN0aW9uKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb24gPSB2YWx1ZSB8fCBbXTtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlVmlld01vZGVsc01haW4oKTtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlVmlld01vZGVscygpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyVmlld01vZGVscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgY29sbGVjdGlvbigpOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgbW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgY2xvc2VQb3B1cDogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1saXN0LW9mLXZhbHVlcy1wb3B1cCcpXHJcbiAgICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgc2VhcmNoVGVybSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoVGVybSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5oaWdoTGlnaHRNb2RlbCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmZpbHRlclZpZXdNb2RlbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNlYXJjaFRlcm0oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoVGVybTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlld01vZGVsczogbG92Vmlld01vZGVsW10gPSBbXTtcclxuICAgIHB1YmxpYyB2aWV3TW9kZWxzTWFpbjogbG92Vmlld01vZGVsW10gPSBbXTtcclxuICAgIHB1YmxpYyBoaWdoTGlnaHRNb2RlbDogbG92Vmlld01vZGVsO1xyXG5cclxuICAgIHByaXZhdGUgX2NvbGxlY3Rpb246IGFueVtdID0gW107XHJcbiAgICBwcml2YXRlIF9zZWFyY2hUZXJtOiBzdHJpbmcgPSAnJztcclxuICAgIHByaXZhdGUgX2xvdkl0ZW1zOiBFbGVtZW50UmVmW10gPSBbXTtcclxuICAgIHByaXZhdGUgX3NlYXJjaElucHV0OiBJbnB1dFNlYXJjaENvbXBvbmVudDtcclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubW9kZWwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3TW9kZWw6IGxvdlZpZXdNb2RlbCA9IHRoaXMudmlld01vZGVsc01haW4uZmluZCh2ID0+IEpTT04uc3RyaW5naWZ5KHYubW9kZWwpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLm1vZGVsW2ldKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZWwuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVJbnB1dEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkS2V5LkRvd246XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3ROZXh0T3B0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEtleS5VcDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE5leHRPcHRpb24odHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEtleS5TcGFjZUJhcjpcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oaWdoTGlnaHRNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFZpZXdNb2RlbCh0aGlzLmhpZ2hMaWdodE1vZGVsLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZpbHRlclZpZXdNb2RlbHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wcmVwYXJlVmlld01vZGVscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RWaWV3TW9kZWwodmlld01vZGVsOiBsb3ZWaWV3TW9kZWwsIGNsb3NlUG9wdXA6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWxCeVZpZXdNb2RlbCh2aWV3TW9kZWwsIGNsb3NlUG9wdXApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkeDogbnVtYmVyID0gdGhpcy52aWV3TW9kZWxzLmZpbmRJbmRleCh2bSA9PiB2bSA9PT0gdmlld01vZGVsKTtcclxuICAgICAgICAgICAgdGhpcy52aWV3TW9kZWxzW2lkeF0uY2hlY2tlZCA9ICF0aGlzLnZpZXdNb2RlbHNbaWR4XS5jaGVja2VkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdE1vZGVsQnlWaWV3TW9kZWwodmlld01vZGVsOiBsb3ZWaWV3TW9kZWwsIGNsb3NlUG9wdXA6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMudmlld01vZGVsc01haW4uZmluZCh2bSA9PiB2bSA9PT0gdmlld01vZGVsKS5tb2RlbDtcclxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICBpZiAoY2xvc2VQb3B1cCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wdXAuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3Igc2luZ2xlIHNlbGVjdFxyXG4gICAgcHVibGljIHNlbGVjdE9wdGlvbkFuZENsb3NlUG9wdXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsICYmIHRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgICBjb25zdCB3aXNoTW9kZWw6IGxvdlZpZXdNb2RlbCA9IHRoaXMudmlld01vZGVsc01haW4uZmluZCh2bW0gPT4gdm1tLm1vZGVsW3RoaXMuZGlzcGxheUZpZWxkXSA9PT0gdGhpcy5zZWFyY2hUZXJtKTtcclxuICAgICAgICAgICAgaWYgKHdpc2hNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RWaWV3TW9kZWwod2lzaE1vZGVsKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3B1cC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBtdWx0aSBzZWxlY3RcclxuICAgIHB1YmxpYyBzZWxlY3RPcHRpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNNYWluLmZpbHRlcih2ID0+IHYuY2hlY2tlZCkubWFwKG0gPT4gbS5tb2RlbCk7XHJcbiAgICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3ROZXh0T3B0aW9uKGJhY2s6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBuZXh0TW9kZWw6IGFueTtcclxuICAgICAgICBpZiAoIXRoaXMuaGlnaExpZ2h0TW9kZWwpIHtcclxuICAgICAgICAgICAgbmV4dE1vZGVsID0gdGhpcy52aWV3TW9kZWxzW2JhY2sgPyB0aGlzLnZpZXdNb2RlbHMubGVuZ3RoIC0gMSA6IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3TW9kZWxJZHg6IG51bWJlciA9IHRoaXMudmlld01vZGVscy5maW5kSW5kZXgodm0gPT4gdm0gPT09IHRoaXMuaGlnaExpZ2h0TW9kZWwpO1xyXG4gICAgICAgICAgICBpZiAoYmFjaykge1xyXG4gICAgICAgICAgICAgICAgbmV4dE1vZGVsID0gdGhpcy52aWV3TW9kZWxzW2N1cnJlbnRWaWV3TW9kZWxJZHggPD0gMCA/IHRoaXMudmlld01vZGVscy5sZW5ndGggLSAxIDogY3VycmVudFZpZXdNb2RlbElkeCAtIDFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV4dE1vZGVsID0gdGhpcy52aWV3TW9kZWxzW2N1cnJlbnRWaWV3TW9kZWxJZHggPj0gdGhpcy52aWV3TW9kZWxzLmxlbmd0aCAtIDEgPyAwIDogY3VycmVudFZpZXdNb2RlbElkeCArIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGlnaExpZ2h0TW9kZWwgPSBuZXh0TW9kZWw7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Vmlld01vZGVsKG5leHRNb2RlbCwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wcmVwYXJlVmlld01vZGVsc01haW4oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZWxzTWFpbi5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdNb2RlbHNNYWluLnB1c2goe2NoZWNrZWQ6IGZhbHNlLCBtb2RlbDogbX0pO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVZpZXdNb2RlbHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZWxzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZWxzID0gdGhpcy52aWV3TW9kZWxzTWFpbi5maWx0ZXIoXHJcbiAgICAgICAgICAgIHZtID0+IHZtLm1vZGVsW3RoaXMuZGlzcGxheUZpZWxkXSAmJiB2bS5tb2RlbFt0aGlzLmRpc3BsYXlGaWVsZF0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFRlcm0gPyB0aGlzLnNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKSA6IFwiXCIpKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3Njcm9sbEludG9WaWV3KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZUluZGV4OiBudW1iZXIgPSB0aGlzLnZpZXdNb2RlbHMuZmluZEluZGV4KHZtbSA9PiB2bW0gPT09IHRoaXMuaGlnaExpZ2h0TW9kZWwpO1xyXG4gICAgICAgIGlmICghdGhpcy5fbG92SXRlbXMgfHwgdGhpcy5fbG92SXRlbXMubGVuZ3RoIDw9IDAgfHwgYWN0aXZlSW5kZXggPCAwIHx8ICF0aGlzLmRyb3BEb3duTGlzdCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9sb3ZJdGVtc1thY3RpdmVJbmRleF0ubmF0aXZlRWxlbWVudCA/IHRoaXMuX2xvdkl0ZW1zW2FjdGl2ZUluZGV4XS5uYXRpdmVFbGVtZW50IDogdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFBhcmVudCA9IHRoaXMuZHJvcERvd25MaXN0Lm5hdGl2ZUVsZW1lbnQgPyB0aGlzLmRyb3BEb3duTGlzdC5uYXRpdmVFbGVtZW50IDogdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbEFjdGl2ZUl0ZW1JbnRvVmlldyhhY3RpdmVJdGVtLCBzY3JvbGxQYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3Njcm9sbEFjdGl2ZUl0ZW1JbnRvVmlldyhhY3RpdmVJdGVtOiBhbnksIHNjcm9sbFBhcmVudDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVJdGVtIHx8ICFzY3JvbGxQYXJlbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB7IG9mZnNldEhlaWdodCwgb2Zmc2V0VG9wIH0gPSBhY3RpdmVJdGVtO1xyXG4gICAgICAgIGNvbnN0IHsgb2Zmc2V0SGVpZ2h0OiBwYXJlbnRPZmZzZXRIZWlnaHQsIHNjcm9sbFRvcCB9ID0gc2Nyb2xsUGFyZW50O1xyXG5cclxuICAgICAgICBjb25zdCBpc0Fib3ZlID0gb2Zmc2V0VG9wIDwgc2Nyb2xsVG9wO1xyXG4gICAgICAgIGNvbnN0IGlzQmVsb3cgPSBvZmZzZXRUb3AgKyBvZmZzZXRIZWlnaHQgPiBzY3JvbGxUb3AgKyBwYXJlbnRPZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChpc0Fib3ZlKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbFBhcmVudC5zY3JvbGxUbygwLCBvZmZzZXRUb3ApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNCZWxvdykge1xyXG4gICAgICAgICAgICBzY3JvbGxQYXJlbnQuc2Nyb2xsVG8oMCwgb2Zmc2V0VG9wIC0gcGFyZW50T2Zmc2V0SGVpZ2h0ICsgb2Zmc2V0SGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
242
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1vZi12YWx1ZXMtcG9wdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3Qtb2YtdmFsdWVzL2xpc3Qtb2YtdmFsdWVzLXBvcHVwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBbUM5RCxNQUFNLE9BQU8sMEJBQTBCO0lBbUZuQyxZQUFvQixXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQS9EcEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFHN0IsaUJBQVksR0FBVyxhQUFhLENBQUM7UUFTckMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFrQmhDLGdCQUFXLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFHekQsZUFBVSxHQUF3QixJQUFJLFlBQVksRUFBUyxDQUFDO1FBRzVELFlBQU8sR0FBZ0MsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFrQnpFLGVBQVUsR0FBbUIsRUFBRSxDQUFDO1FBQ2hDLG1CQUFjLEdBQW1CLEVBQUUsQ0FBQztRQUduQyxnQkFBVyxHQUFVLEVBQUUsQ0FBQztRQUN4QixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixjQUFTLEdBQWlCLEVBQUUsQ0FBQztJQUlyQyxDQUFDO0lBbkZELElBQW1ELFFBQVEsQ0FBQyxRQUFRO1FBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFB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bnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0QmluZGluZyxcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0NoaWxkcmVuLFxyXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtJbnB1dFNlYXJjaENvbXBvbmVudH0gZnJvbSAnLi4vaW5wdXQtc2VhcmNoL2lucHV0LXNlYXJjaC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0tleWJvYXJkS2V5fSBmcm9tICcuLi8uLi9jb3JlL2VudW0va2V5Ym9hcmQta2V5LmVudW0nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBsb3ZWaWV3TW9kZWwge1xyXG4gICAgY2hlY2tlZDogYm9vbGVhblxyXG4gICAgbW9kZWw6IGFueVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY28tbGlzdC1vZi12YWx1ZXMtcG9wdXAnLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG92LW9wdGlvbnNcIiBbb3ZlcmxheV09XCJwYXJlbnRGb3JPdmVybGF5XCIgW2luaGVyaXRXaWR0aF09XCJ0cnVlXCIgW25nQ2xhc3NdPVwiY3VzdG9tQ3NzQ2xhc3NcIiBpZD1cImxvdi1wb3B1cFwiXHJcbiAgICAgICAgICAgICByb2xlPVwibGlzdGJveFwiIFt0YWJpbmRleF09XCItMVwiXHJcbiAgICAgICAgICAgICAoY2xpY2tPdXRzaWRlKT1cImNsb3NlUG9wdXAuZW1pdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDxjby1pbnB1dC1zZWFyY2ggKm5nSWY9XCJtdWx0aXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhtb2RlbCldPVwic2VhcmNoVGVybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVJbnB1dEtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImZpbHRlclZpZXdNb2RlbHMoKVwiPjwvY28taW5wdXQtc2VhcmNoPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1saXN0XCIgI2Ryb3BEb3duTGlzdD5cclxuICAgICAgICAgICAgICAgIDxsaSAjbG92SXRlbSAqbmdGb3I9XCJsZXQgdmlld01vZGVsIG9mIHZpZXdNb2RlbHM7IGxldCBpbmRleCA9IGluZGV4XCIgW2NsYXNzLnNlbGVjdGVkXT1cInZpZXdNb2RlbCA9PT0gaGlnaExpZ2h0TW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RWaWV3TW9kZWwodmlld01vZGVsLCAhbXVsdGlzZWxlY3QpXCIgcm9sZT1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbXVsdGlzZWxlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb3Ytb3B0aW9ucy10ZXh0XCIgW3RleHRDb250ZW50XT1cInZpZXdNb2RlbC5tb2RlbFtkaXNwbGF5RmllbGRdXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y28taW5wdXQtY2hlY2tib3ggW21vZGVsXT1cInZpZXdNb2RlbC5jaGVja2VkXCIgKG1vZGVsQ2hhbmdlKT1cInNlbGVjdFZpZXdNb2RlbCh2aWV3TW9kZWwsIGZhbHNlKVwiPjwvY28taW5wdXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG92LW9wdGlvbnMtdGV4dFwiIFt0ZXh0Q29udGVudF09XCJ2aWV3TW9kZWwubW9kZWxbZGlzcGxheUZpZWxkXVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICBgLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RPZlZhbHVlc1BvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBWaWV3Q2hpbGRyZW4oJ2xvdkl0ZW0nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgc2V0IGxvdkl0ZW1zKGNoaWxkcmVuKSB7XHJcbiAgICAgICAgdGhpcy5fbG92SXRlbXMgPSBjaGlsZHJlbi50b0FycmF5KCk7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdkcm9wRG93bkxpc3QnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuICAgIHB1YmxpYyBkcm9wRG93bkxpc3Q6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgQFZpZXdDaGlsZChJbnB1dFNlYXJjaENvbXBvbmVudCkgc2V0IGlucHV0U2VhcmNoKGNvbXBvbmVudDogSW5wdXRTZWFyY2hDb21wb25lbnQpIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hJbnB1dCA9IGNvbXBvbmVudDtcclxuICAgICAgICBpZiAodGhpcy5fc2VhcmNoSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2VhcmNoSW5wdXQucmVxdWVzdEZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbW9kZWw6IGFueTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG11bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkaXNwbGF5RmllbGQ6IHN0cmluZyA9ICdkZXNjcmlwdGlvbic7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY3VzdG9tQ3NzQ2xhc3M6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNlYXJjaERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBwYXJlbnRGb3JPdmVybGF5OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IGNvbGxlY3Rpb24odmFsdWU6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy5fY29sbGVjdGlvbiA9IHZhbHVlIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVWaWV3TW9kZWxzTWFpbigpO1xyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVWaWV3TW9kZWxzKCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJWaWV3TW9kZWxzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjb2xsZWN0aW9uKCk6IGFueVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBtb2RlbENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjbG9zZVBvcHVwOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBrZXlEb3duOiBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEtleWJvYXJkRXZlbnQ+KCk7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1saXN0LW9mLXZhbHVlcy1wb3B1cCcpXHJcbiAgICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgc2VhcmNoVGVybSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoVGVybSA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5oaWdoTGlnaHRNb2RlbCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmZpbHRlclZpZXdNb2RlbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNlYXJjaFRlcm0oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoVGVybTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmlld01vZGVsczogbG92Vmlld01vZGVsW10gPSBbXTtcclxuICAgIHB1YmxpYyB2aWV3TW9kZWxzTWFpbjogbG92Vmlld01vZGVsW10gPSBbXTtcclxuICAgIHB1YmxpYyBoaWdoTGlnaHRNb2RlbDogbG92Vmlld01vZGVsO1xyXG5cclxuICAgIHByaXZhdGUgX2NvbGxlY3Rpb246IGFueVtdID0gW107XHJcbiAgICBwcml2YXRlIF9zZWFyY2hUZXJtOiBzdHJpbmcgPSAnJztcclxuICAgIHByaXZhdGUgX2xvdkl0ZW1zOiBFbGVtZW50UmVmW10gPSBbXTtcclxuICAgIHByaXZhdGUgX3NlYXJjaElucHV0OiBJbnB1dFNlYXJjaENvbXBvbmVudDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1vZGVsLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld01vZGVsOiBsb3ZWaWV3TW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNNYWluLmZpbmQodiA9PiBKU09OLnN0cmluZ2lmeSh2Lm1vZGVsKSA9PT0gSlNPTi5zdHJpbmdpZnkodGhpcy5tb2RlbFtpXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2aWV3TW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld01vZGVsLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEtleS5Eb3duOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TmV4dE9wdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRLZXkuVXA6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3ROZXh0T3B0aW9uKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgS2V5Ym9hcmRLZXkuU3BhY2VCYXI6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlnaExpZ2h0TW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RWaWV3TW9kZWwodGhpcy5oaWdoTGlnaHRNb2RlbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2V5RG93bi5uZXh0KGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmtleURvd24ubmV4dChldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZpbHRlclZpZXdNb2RlbHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wcmVwYXJlVmlld01vZGVscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RWaWV3TW9kZWwodmlld01vZGVsOiBsb3ZWaWV3TW9kZWwsIGNsb3NlUG9wdXA6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWxCeVZpZXdNb2RlbCh2aWV3TW9kZWwsIGNsb3NlUG9wdXApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkeDogbnVtYmVyID0gdGhpcy52aWV3TW9kZWxzLmZpbmRJbmRleCh2bSA9PiB2bSA9PT0gdmlld01vZGVsKTtcclxuICAgICAgICAgICAgdGhpcy52aWV3TW9kZWxzW2lkeF0uY2hlY2tlZCA9ICF0aGlzLnZpZXdNb2RlbHNbaWR4XS5jaGVja2VkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdE1vZGVsQnlWaWV3TW9kZWwodmlld01vZGVsOiBsb3ZWaWV3TW9kZWwsIGNsb3NlUG9wdXA6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMudmlld01vZGVsc01haW4uZmluZCh2bSA9PiB2bSA9PT0gdmlld01vZGVsKS5tb2RlbDtcclxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICBpZiAoY2xvc2VQb3B1cCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wdXAuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3Igc2luZ2xlIHNlbGVjdFxyXG4gICAgcHVibGljIHNlbGVjdE9wdGlvbkFuZENsb3NlUG9wdXAoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsICYmIHRoaXMuc2VhcmNoVGVybSkge1xyXG4gICAgICAgICAgICBjb25zdCB3aXNoTW9kZWw6IGxvdlZpZXdNb2RlbCA9IHRoaXMudmlld01vZGVsc01haW4uZmluZCh2bW0gPT4gdm1tLm1vZGVsW3RoaXMuZGlzcGxheUZpZWxkXSA9PT0gdGhpcy5zZWFyY2hUZXJtKTtcclxuICAgICAgICAgICAgaWYgKHdpc2hNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RWaWV3TW9kZWwod2lzaE1vZGVsKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3B1cC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGZvciBtdWx0aSBzZWxlY3RcclxuICAgIHB1YmxpYyBzZWxlY3RPcHRpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLnZpZXdNb2RlbHNNYWluLmZpbHRlcih2ID0+IHYuY2hlY2tlZCkubWFwKG0gPT4gbS5tb2RlbCk7XHJcbiAgICAgICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHRoaXMubW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3ROZXh0T3B0aW9uKGJhY2s6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBuZXh0TW9kZWw6IGFueTtcclxuICAgICAgICBpZiAoIXRoaXMuaGlnaExpZ2h0TW9kZWwpIHtcclxuICAgICAgICAgICAgbmV4dE1vZGVsID0gdGhpcy52aWV3TW9kZWxzW2JhY2sgPyB0aGlzLnZpZXdNb2RlbHMubGVuZ3RoIC0gMSA6IDBdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3TW9kZWxJZHg6IG51bWJlciA9IHRoaXMudmlld01vZGVscy5maW5kSW5kZXgodm0gPT4gdm0gPT09IHRoaXMuaGlnaExpZ2h0TW9kZWwpO1xyXG4gICAgICAgICAgICBpZiAoYmFjaykge1xyXG4gICAgICAgICAgICAgICAgbmV4dE1vZGVsID0gdGhpcy52aWV3TW9kZWxzW2N1cnJlbnRWaWV3TW9kZWxJZHggPD0gMCA/IHRoaXMudmlld01vZGVscy5sZW5ndGggLSAxIDogY3VycmVudFZpZXdNb2RlbElkeCAtIDFdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV4dE1vZGVsID0gdGhpcy52aWV3TW9kZWxzW2N1cnJlbnRWaWV3TW9kZWxJZHggPj0gdGhpcy52aWV3TW9kZWxzLmxlbmd0aCAtIDEgPyAwIDogY3VycmVudFZpZXdNb2RlbElkeCArIDFdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGlnaExpZ2h0TW9kZWwgPSBuZXh0TW9kZWw7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Vmlld01vZGVsKG5leHRNb2RlbCwgZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZXBhcmVWaWV3TW9kZWxzTWFpbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdNb2RlbHNNYWluLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uLmZvckVhY2gobSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld01vZGVsc01haW4ucHVzaCh7Y2hlY2tlZDogZmFsc2UsIG1vZGVsOiBtfSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wcmVwYXJlVmlld01vZGVscygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXdNb2RlbHMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLnZpZXdNb2RlbHMgPSB0aGlzLnZpZXdNb2RlbHNNYWluLmZpbHRlcihcclxuICAgICAgICAgICAgdm0gPT4gdm0ubW9kZWxbdGhpcy5kaXNwbGF5RmllbGRdICYmIHZtLm1vZGVsW3RoaXMuZGlzcGxheUZpZWxkXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGVybSA/IHRoaXMuc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpIDogXCJcIikpXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2Nyb2xsSW50b1ZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlSW5kZXg6IG51bWJlciA9IHRoaXMudmlld01vZGVscy5maW5kSW5kZXgodm1tID0+IHZtbSA9PT0gdGhpcy5oaWdoTGlnaHRNb2RlbCk7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9sb3ZJdGVtcyB8fCB0aGlzLl9sb3ZJdGVtcy5sZW5ndGggPD0gMCB8fCBhY3RpdmVJbmRleCA8IDAgfHwgIXRoaXMuZHJvcERvd25MaXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWN0aXZlSXRlbSA9IHRoaXMuX2xvdkl0ZW1zW2FjdGl2ZUluZGV4XS5uYXRpdmVFbGVtZW50ID8gdGhpcy5fbG92SXRlbXNbYWN0aXZlSW5kZXhdLm5hdGl2ZUVsZW1lbnQgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsUGFyZW50ID0gdGhpcy5kcm9wRG93bkxpc3QubmF0aXZlRWxlbWVudCA/IHRoaXMuZHJvcERvd25MaXN0Lm5hdGl2ZUVsZW1lbnQgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsQWN0aXZlSXRlbUludG9WaWV3KGFjdGl2ZUl0ZW0sIHNjcm9sbFBhcmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2Nyb2xsQWN0aXZlSXRlbUludG9WaWV3KGFjdGl2ZUl0ZW06IGFueSwgc2Nyb2xsUGFyZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWFjdGl2ZUl0ZW0gfHwgIXNjcm9sbFBhcmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB7IG9mZnNldEhlaWdodCwgb2Zmc2V0VG9wIH0gPSBhY3RpdmVJdGVtO1xyXG4gICAgICAgIGxldCB7IG9mZnNldEhlaWdodDogcGFyZW50T2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AsIG9mZnNldFRvcDogcGFyZW50T2Zmc2V0VG9wIH0gPSBzY3JvbGxQYXJlbnQ7XHJcbiAgICAgICAgb2Zmc2V0VG9wID0gb2Zmc2V0VG9wIC0gcGFyZW50T2Zmc2V0VG9wO1xyXG5cclxuICAgICAgICBjb25zdCBpc0Fib3ZlID0gb2Zmc2V0VG9wIDwgc2Nyb2xsVG9wO1xyXG4gICAgICAgIGNvbnN0IGlzQmVsb3cgPSBvZmZzZXRUb3AgKyBvZmZzZXRIZWlnaHQgPiBzY3JvbGxUb3AgKyBwYXJlbnRPZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChpc0Fib3ZlKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbFBhcmVudC5zY3JvbGxUbygwLCBvZmZzZXRUb3ApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNCZWxvdykge1xyXG4gICAgICAgICAgICBzY3JvbGxQYXJlbnQuc2Nyb2xsVG8oMCwgb2Zmc2V0VG9wIC0gcGFyZW50T2Zmc2V0SGVpZ2h0ICsgb2Zmc2V0SGVpZ2h0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -11,7 +11,6 @@ export class ListOfValuesComponent extends BaseInputComponent {
11
11
  this.multiselect = false;
12
12
  this.displayField = 'description';
13
13
  this.searchDisabled = false;
14
- this.closeAfterOptionChosen = true;
15
14
  this.isSelectOpen = false;
16
15
  this.state = 'default';
17
16
  this.selectedModels = [];
@@ -41,6 +40,9 @@ export class ListOfValuesComponent extends BaseInputComponent {
41
40
  if (this._lovPopupComponentRef) {
42
41
  this._lovPopupComponentRef.instance.searchTerm = model;
43
42
  }
43
+ if (!this.selectedModel && model) {
44
+ this.openPopup();
45
+ }
44
46
  this.selectedModel = model;
45
47
  }
46
48
  handleInputKeyDown(event) {
@@ -98,8 +100,10 @@ export class ListOfValuesComponent extends BaseInputComponent {
98
100
  collection: this.collection
99
101
  }, {
100
102
  modelChange: (value) => this.optionChosen(value),
101
- closePopup: () => this.closePopup()
103
+ closePopup: () => this.closePopup(),
104
+ keyDown: (event) => this.handleInputKeyDown(event)
102
105
  });
106
+ this.keepFocussed = true;
103
107
  }
104
108
  removeOptionFromModel(chip) {
105
109
  if (this.multiselect) {
@@ -115,15 +119,13 @@ export class ListOfValuesComponent extends BaseInputComponent {
115
119
  }
116
120
  else {
117
121
  this.selectedModel = option[this.displayField];
118
- if (this.closeAfterOptionChosen) {
119
- this.toggleSelect();
120
- }
121
122
  }
122
123
  }
123
124
  this.model = option;
124
125
  this.modelChange.emit(this.model);
125
126
  }
126
127
  closePopup() {
128
+ this.keepFocussed = false;
127
129
  this.isSelectOpen = false;
128
130
  this.overlayService.removeComponent(this._lovPopupComponentRef);
129
131
  this._lovPopupComponentRef = undefined;
@@ -181,6 +183,8 @@ ListOfValuesComponent.decorators = [
181
183
  [rightIcon]="isSelectOpen ? icons.ChevronUpRegular : icons.ChevronDownRegular"
182
184
  [showClearButton]="true"
183
185
  [useContent]="multiselect"
186
+ [customHeight]="multiselect"
187
+ [keepFocussed]="keepFocussed"
184
188
  (modelChange)="handleInputModelChange($event)"
185
189
  (click)="openPopup()"
186
190
  (rightIconClick)="toggleSelect()"
@@ -188,15 +192,15 @@ ListOfValuesComponent.decorators = [
188
192
  (clearIconClick)="clearModel($event)"
189
193
  (blur)="checkModel()"
190
194
  >
191
- </co-input-text>
192
- <ng-container *ngIf="multiselect">
193
- <div class="multiselect-chips-wrapper">
194
- <div class="chips" *ngFor="let chip of model">
195
- <span class="chips-description" [textContent]="chip[displayField]"></span>
196
- <co-icon class="remove-chip-icon" [icon]="icons.CrossSkinny" (click)="removeOptionFromModel(chip)"></co-icon>
195
+ <ng-container *ngIf="multiselect">
196
+ <div class="multiselect-chips-wrapper">
197
+ <div class="chips" *ngFor="let chip of model">
198
+ <span class="chips-description" [textContent]="chip[displayField]"></span>
199
+ <co-icon class="remove-chip-icon" [icon]="icons.CrossSkinny" (click)="removeOptionFromModel(chip)"></co-icon>
200
+ </div>
197
201
  </div>
198
- </div>
199
- </ng-container>
202
+ </ng-container>
203
+ </co-input-text>
200
204
  `,
201
205
  providers: [
202
206
  OverlayService
@@ -215,7 +219,6 @@ ListOfValuesComponent.propDecorators = {
215
219
  label: [{ type: Input }],
216
220
  customCssClass: [{ type: Input }],
217
221
  searchDisabled: [{ type: Input }],
218
- closeAfterOptionChosen: [{ type: Input }],
219
222
  showClass: [{ type: HostBinding, args: ['class.co-list-of-values',] }]
220
223
  };
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1vZi12YWx1ZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3Qtb2YtdmFsdWVzL2xpc3Qtb2YtdmFsdWVzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFnQixVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQTBDOUQsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGtCQUF1QjtJQXZDbEU7O1FBd0NvQixVQUFLLEdBQThCLGtCQUFrQixDQUFDO1FBa0IvRCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUc3QixpQkFBWSxHQUFXLGFBQWEsQ0FBQztRQXdCckMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFHaEMsMkJBQXNCLEdBQVksSUFBSSxDQUFDO1FBT3ZDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLFVBQUssR0FBVyxTQUFTLENBQUM7UUFFMUIsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFFN0IsZ0JBQVcsR0FBVSxFQUFFLENBQUM7SUEwSXBDLENBQUM7SUFwTUcsSUFDVyxLQUFLLENBQUMsS0FBVTtRQUN2QixLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENB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Q0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQUM7YUFDTjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDbEM7U0FDSjthQUFNO1lBQ0gsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNaLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDdEQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7YUFDM0I7U0FDSjtJQUNMLENBQUM7OztZQTVPSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBK0JUO2dCQUNELFNBQVMsRUFBRTtvQkFDUCxjQUFjO2lCQUNqQjtnQkFDRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN4Qzs7O29CQUlJLEtBQUs7K0JBVUwsU0FBUyxTQUFDLGtCQUFrQixFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQzswQkFHaEQsV0FBVyxTQUFDLHFCQUFxQixjQUNqQyxXQUFXLFNBQUMsb0JBQW9CLGNBQ2hDLEtBQUs7MkJBR0wsS0FBSzt5QkFHTCxLQUFLOzJCQVNMLEtBQUs7Z0NBR0wsS0FBSztvQkFHTCxLQUFLOzZCQUdMLEtBQUs7NkJBR0wsS0FBSztxQ0FHTCxLQUFLO3dCQUdMLFdBQVcsU0FBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QmFzZUlucHV0Q29tcG9uZW50fSBmcm9tICcuLi9iYXNlL2Jhc2UtaW5wdXQuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb3JlQ29tcG9uZW50c0ljb259IGZyb20gJy4uLy4uL2NvcmUvZW51bS9jb3JlLWNvbXBvbmVudHMtaWNvbi5lbnVtJztcclxuaW1wb3J0IHtPdmVybGF5U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9vdmVybGF5LnNlcnZpY2UnO1xyXG5pbXBvcnQge0xpc3RPZlZhbHVlc1BvcHVwQ29tcG9uZW50fSBmcm9tICcuL2xpc3Qtb2YtdmFsdWVzLXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7S2V5Ym9hcmRLZXl9IGZyb20gJy4uLy4uL2NvcmUvZW51bS9rZXlib2FyZC1rZXkuZW51bSc7XHJcbmltcG9ydCB7U2FmZUh0bWx9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NvLWxpc3Qtb2YtdmFsdWVzJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGNvLWlucHV0LXRleHQgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzU2VsZWN0T3BlblwiIGFyaWEtY29udHJvbHM9XCJsb3YtcG9wdXBcIiByb2xlPVwiY29tYm9ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm8tZm9jdXMtbGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheVBhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICNwYXJlbnRGb3JPdmVybGF5PVwib3ZlcmxheVBhcmVudFwiIHR5cGU9XCJ0ZXh0XCIgW2lkXT1cImxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbbW9kZWxdPVwibXVsdGlzZWxlY3QgPyBzZWxlY3RlZE1vZGVscyA6IHNlbGVjdGVkTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJsYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW25vQ2xpY2tGb2N1c109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2xlZnRJY29uRGF0YV09XCJsZWZ0SWNvbkRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtyaWdodEljb25dPVwiaXNTZWxlY3RPcGVuID8gaWNvbnMuQ2hldnJvblVwUmVndWxhciA6IGljb25zLkNoZXZyb25Eb3duUmVndWxhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhckJ1dHRvbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbdXNlQ29udGVudF09XCJtdWx0aXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZUlucHV0TW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Qb3B1cCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAocmlnaHRJY29uQ2xpY2spPVwidG9nZ2xlU2VsZWN0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUlucHV0S2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xlYXJJY29uQ2xpY2spPVwiY2xlYXJNb2RlbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJjaGVja01vZGVsKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2NvLWlucHV0LXRleHQ+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpc2VsZWN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdWx0aXNlbGVjdC1jaGlwcy13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcHNcIiAqbmdGb3I9XCJsZXQgY2hpcCBvZiBtb2RlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcHMtZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiY2hpcFtkaXNwbGF5RmllbGRdXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjby1pY29uIGNsYXNzPVwicmVtb3ZlLWNoaXAtaWNvblwiIFtpY29uXT1cImljb25zLkNyb3NzU2tpbm55XCIgKGNsaWNrKT1cInJlbW92ZU9wdGlvbkZyb21Nb2RlbChjaGlwKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIGAsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBPdmVybGF5U2VydmljZVxyXG4gICAgXSxcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaXN0T2ZWYWx1ZXNDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXRDb21wb25lbnQ8YW55PiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaWNvbnM6IHR5cGVvZiBDb3JlQ29tcG9uZW50c0ljb24gPSBDb3JlQ29tcG9uZW50c0ljb247XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgbW9kZWwodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHN1cGVyLm1vZGVsID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRNb2RlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gc3VwZXIubW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgncGFyZW50Rm9yT3ZlcmxheScsIHtyZWFkOiBFbGVtZW50UmVmfSlcclxuICAgIHB1YmxpYyBwYXJlbnRGb3JPdmVybGF5OiBFbGVtZW50UmVmO1xyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuY3VzdG9tLWhlaWdodCcpXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm11bHRpLXNlbGVjdCcpXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG11bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkaXNwbGF5RmllbGQ6IHN0cmluZyA9ICdkZXNjcmlwdGlvbic7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgY29sbGVjdGlvbih2YWx1ZTogYW55W10pIHtcclxuICAgICAgICB0aGlzLl9jb2xsZWN0aW9uID0gdmFsdWUgfHwgW107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBjb2xsZWN0aW9uKCk6IGFueVtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxlZnRJY29uRGF0YTogU2FmZUh0bWwgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbGFiZWw6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGN1c3RvbUNzc0NsYXNzOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZWFyY2hEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY2xvc2VBZnRlck9wdGlvbkNob3NlbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1saXN0LW9mLXZhbHVlcycpXHJcbiAgICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzdGF0ZTogc3RyaW5nID0gJ2RlZmF1bHQnO1xyXG4gICAgcHVibGljIHNlbGVjdGVkTW9kZWw6IHN0cmluZztcclxuICAgIHB1YmxpYyBzZWxlY3RlZE1vZGVsczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF9jb2xsZWN0aW9uOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgX2xvdlBvcHVwQ29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PjtcclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuX3NldFNlbGVjdGVkTW9kZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRNb2RlbENoYW5nZShtb2RlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmLmluc3RhbmNlLnNlYXJjaFRlcm0gPSBtb2RlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsID0gbW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUlucHV0S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmNvZGUgPT09IEtleWJvYXJkS2V5LkRvd24gJiYgIXRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9sb3ZQb3B1cENvbXBvbmVudFJlZikge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEtleS5Eb3duOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb3ZQb3B1cENvbXBvbmVudFJlZi5pbnN0YW5jZS5zZWxlY3ROZXh0T3B0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkS2V5LlVwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb3ZQb3B1cENvbXBvbmVudFJlZi5pbnN0YW5jZS5zZWxlY3ROZXh0T3B0aW9uKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEtleS5FbnRlcjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG92UG9wdXBDb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VsZWN0T3B0aW9uQW5kQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEtleS5UYWI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmLmluc3RhbmNlLnNlbGVjdE9wdGlvbkFuZENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJNb2RlbChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0TW9kZWwodW5kZWZpbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlU2VsZWN0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdE9wZW4gPSAhdGhpcy5pc1NlbGVjdE9wZW47XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblBvcHVwKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSAodGhpcy5zdGF0ZSA9PT0gJ2RlZmF1bHQnID8gJ3JvdGF0ZWQnIDogJ2RlZmF1bHQnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlblBvcHVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdE9wZW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmID0gdGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGVDb21wb25lbnQoTGlzdE9mVmFsdWVzUG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudEZvck92ZXJsYXk6IHRoaXMuZWxlbWVudFJlZixcclxuICAgICAgICAgICAgICAgIGN1c3RvbUNzc0NsYXNzOiB0aGlzLmN1c3RvbUNzc0NsYXNzLFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoRGlzYWJsZWQ6IHRoaXMuc2VhcmNoRGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcjogdGhpcy5zZWFyY2hQbGFjZWhvbGRlcixcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdDogdGhpcy5tdWx0aXNlbGVjdCxcclxuICAgICAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxyXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbjogdGhpcy5jb2xsZWN0aW9uXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIG1vZGVsQ2hhbmdlOiAodmFsdWUpID0+IHRoaXMub3B0aW9uQ2hvc2VuKHZhbHVlKSxcclxuICAgICAgICAgICAgICAgIGNsb3NlUG9wdXA6ICgpID0+IHRoaXMuY2xvc2VQb3B1cCgpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVPcHRpb25Gcm9tTW9kZWwoY2hpcDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLm1vZGVsLmZpbmRJbmRleChtID0+IG0gPT09IGNoaXApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcHRpb25DaG9zZW4ob3B0aW9uOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAob3B0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWxzID0gb3B0aW9uLm1hcChvID0+IG9bdGhpcy5kaXNwbGF5RmllbGRdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IG9wdGlvblt0aGlzLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbG9zZUFmdGVyT3B0aW9uQ2hvc2VuKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG9wdGlvbjtcclxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlUG9wdXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdE9wZW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLnJlbW92ZUNvbXBvbmVudCh0aGlzLl9sb3ZQb3B1cENvbXBvbmVudFJlZik7XHJcbiAgICAgICAgdGhpcy5fbG92UG9wdXBDb21wb25lbnRSZWYgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrTW9kZWwoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0ICYmIHRoaXMuc2VsZWN0ZWRNb2RlbCAmJiB0aGlzLmNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWw6IGFueSA9IHRoaXMuY29sbGVjdGlvbi5maW5kKGMgPT4gY1t0aGlzLmRpc3BsYXlGaWVsZF0gPT09IHRoaXMuc2VsZWN0ZWRNb2RlbCk7XHJcbiAgICAgICAgICAgIGlmIChtb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NldFNlbGVjdGVkTW9kZWwoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbHMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZm9yRWFjaChtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWxzLnB1c2gobVt0aGlzLmRpc3BsYXlGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWxzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsID0gdGhpcy5tb2RlbFt0aGlzLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1vZi12YWx1ZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2xpc3Qtb2YtdmFsdWVzL2xpc3Qtb2YtdmFsdWVzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFnQixVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQTRDOUQsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGtCQUF1QjtJQXpDbEU7O1FBMENvQixVQUFLLEdBQThCLGtCQUFrQixDQUFDO1FBa0IvRCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUc3QixpQkFBWSxHQUFXLGFBQWEsQ0FBQztRQXdCckMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFPaEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsVUFBSyxHQUFXLFNBQVMsQ0FBQztRQUUxQixtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUU3QixnQkFBVyxHQUFVLEVBQUUsQ0FBQztJQTZJcEMsQ0FBQztJQXBNRyxJQUNXLEtBQUssQ0FBQyxLQUFVO1FBQ3ZCLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENB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S0FBSzs2QkFHTCxLQUFLOzZCQUdMLEtBQUs7d0JBR0wsV0FBVyxTQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBDb21wb25lbnRSZWYsIEVsZW1lbnRSZWYsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtCYXNlSW5wdXRDb21wb25lbnR9IGZyb20gJy4uL2Jhc2UvYmFzZS1pbnB1dC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvcmVDb21wb25lbnRzSWNvbn0gZnJvbSAnLi4vLi4vY29yZS9lbnVtL2NvcmUtY29tcG9uZW50cy1pY29uLmVudW0nO1xyXG5pbXBvcnQge092ZXJsYXlTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL292ZXJsYXkuc2VydmljZSc7XHJcbmltcG9ydCB7TGlzdE9mVmFsdWVzUG9wdXBDb21wb25lbnR9IGZyb20gJy4vbGlzdC1vZi12YWx1ZXMtcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHtLZXlib2FyZEtleX0gZnJvbSAnLi4vLi4vY29yZS9lbnVtL2tleWJvYXJkLWtleS5lbnVtJztcclxuaW1wb3J0IHtTYWZlSHRtbH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY28tbGlzdC1vZi12YWx1ZXMnLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8Y28taW5wdXQtdGV4dCBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNTZWxlY3RPcGVuXCIgYXJpYS1jb250cm9scz1cImxvdi1wb3B1cFwiIHJvbGU9XCJjb21ib2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuby1mb2N1cy1saW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBvdmVybGF5UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgI3BhcmVudEZvck92ZXJsYXk9XCJvdmVybGF5UGFyZW50XCIgdHlwZT1cInRleHRcIiBbaWRdPVwibGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJtdWx0aXNlbGVjdCA/IHNlbGVjdGVkTW9kZWxzIDogc2VsZWN0ZWRNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbbm9DbGlja0ZvY3VzXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbbGVmdEljb25EYXRhXT1cImxlZnRJY29uRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3JpZ2h0SWNvbl09XCJpc1NlbGVjdE9wZW4gPyBpY29ucy5DaGV2cm9uVXBSZWd1bGFyIDogaWNvbnMuQ2hldnJvbkRvd25SZWd1bGFyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NsZWFyQnV0dG9uXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFt1c2VDb250ZW50XT1cIm11bHRpc2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tSGVpZ2h0XT1cIm11bHRpc2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBba2VlcEZvY3Vzc2VkXT1cImtlZXBGb2N1c3NlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKG1vZGVsQ2hhbmdlKT1cImhhbmRsZUlucHV0TW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Qb3B1cCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAocmlnaHRJY29uQ2xpY2spPVwidG9nZ2xlU2VsZWN0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUlucHV0S2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xlYXJJY29uQ2xpY2spPVwiY2xlYXJNb2RlbCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJjaGVja01vZGVsKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm11bHRpc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlzZWxlY3QtY2hpcHMtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwc1wiICpuZ0Zvcj1cImxldCBjaGlwIG9mIG1vZGVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcHMtZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiY2hpcFtkaXNwbGF5RmllbGRdXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cInJlbW92ZS1jaGlwLWljb25cIiBbaWNvbl09XCJpY29ucy5Dcm9zc1NraW5ueVwiIChjbGljayk9XCJyZW1vdmVPcHRpb25Gcm9tTW9kZWwoY2hpcClcIj48L2NvLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9jby1pbnB1dC10ZXh0PlxyXG4gICAgYCxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIE92ZXJsYXlTZXJ2aWNlXHJcbiAgICBdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIExpc3RPZlZhbHVlc0NvbXBvbmVudCBleHRlbmRzIEJhc2VJbnB1dENvbXBvbmVudDxhbnk+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHB1YmxpYyByZWFkb25seSBpY29uczogdHlwZW9mIENvcmVDb21wb25lbnRzSWNvbiA9IENvcmVDb21wb25lbnRzSWNvbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBtb2RlbCh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgc3VwZXIubW9kZWwgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9zZXRTZWxlY3RlZE1vZGVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBtb2RlbCgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5tb2RlbDtcclxuICAgIH1cclxuXHJcbiAgICBAVmlld0NoaWxkKCdwYXJlbnRGb3JPdmVybGF5Jywge3JlYWQ6IEVsZW1lbnRSZWZ9KVxyXG4gICAgcHVibGljIHBhcmVudEZvck92ZXJsYXk6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jdXN0b20taGVpZ2h0JylcclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubXVsdGktc2VsZWN0JylcclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc3BsYXlGaWVsZDogc3RyaW5nID0gJ2Rlc2NyaXB0aW9uJztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBjb2xsZWN0aW9uKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgICAgIHRoaXMuX2NvbGxlY3Rpb24gPSB2YWx1ZSB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGNvbGxlY3Rpb24oKTogYW55W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbGVmdEljb25EYXRhOiBTYWZlSHRtbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY3VzdG9tQ3NzQ2xhc3M6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNlYXJjaERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jby1saXN0LW9mLXZhbHVlcycpXHJcbiAgICBwdWJsaWMgc2hvd0NsYXNzKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc1NlbGVjdE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBzdGF0ZTogc3RyaW5nID0gJ2RlZmF1bHQnO1xyXG4gICAgcHVibGljIHNlbGVjdGVkTW9kZWw6IHN0cmluZztcclxuICAgIHB1YmxpYyBzZWxlY3RlZE1vZGVsczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF9jb2xsZWN0aW9uOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgX2xvdlBvcHVwQ29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PjtcclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMuX3NldFNlbGVjdGVkTW9kZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRNb2RlbENoYW5nZShtb2RlbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmLmluc3RhbmNlLnNlYXJjaFRlcm0gPSBtb2RlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kZWwgJiYgbW9kZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuUG9wdXAoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVsID0gbW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUlucHV0S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmNvZGUgPT09IEtleWJvYXJkS2V5LkRvd24gJiYgIXRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9sb3ZQb3B1cENvbXBvbmVudFJlZikge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEtleS5Eb3duOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb3ZQb3B1cENvbXBvbmVudFJlZi5pbnN0YW5jZS5zZWxlY3ROZXh0T3B0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIEtleWJvYXJkS2V5LlVwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb3ZQb3B1cENvbXBvbmVudFJlZi5pbnN0YW5jZS5zZWxlY3ROZXh0T3B0aW9uKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEtleS5FbnRlcjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG92UG9wdXBDb21wb25lbnRSZWYuaW5zdGFuY2Uuc2VsZWN0T3B0aW9uQW5kQ2xvc2VQb3B1cCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBLZXlib2FyZEtleS5UYWI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmLmluc3RhbmNlLnNlbGVjdE9wdGlvbkFuZENsb3NlUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xlYXJNb2RlbChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0TW9kZWwodW5kZWZpbmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9nZ2xlU2VsZWN0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdE9wZW4gPSAhdGhpcy5pc1NlbGVjdE9wZW47XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RPcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblBvcHVwKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZVBvcHVwKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSAodGhpcy5zdGF0ZSA9PT0gJ2RlZmF1bHQnID8gJ3JvdGF0ZWQnIDogJ2RlZmF1bHQnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlblBvcHVwKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdE9wZW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmID0gdGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGVDb21wb25lbnQoTGlzdE9mVmFsdWVzUG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudEZvck92ZXJsYXk6IHRoaXMuZWxlbWVudFJlZixcclxuICAgICAgICAgICAgICAgIGN1c3RvbUNzc0NsYXNzOiB0aGlzLmN1c3RvbUNzc0NsYXNzLFxyXG4gICAgICAgICAgICAgICAgc2VhcmNoRGlzYWJsZWQ6IHRoaXMuc2VhcmNoRGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICBzZWFyY2hQbGFjZWhvbGRlcjogdGhpcy5zZWFyY2hQbGFjZWhvbGRlcixcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdDogdGhpcy5tdWx0aXNlbGVjdCxcclxuICAgICAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxyXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbjogdGhpcy5jb2xsZWN0aW9uXHJcbiAgICAgICAgICAgIH0sIHtcclxuICAgICAgICAgICAgICAgIG1vZGVsQ2hhbmdlOiAodmFsdWUpID0+IHRoaXMub3B0aW9uQ2hvc2VuKHZhbHVlKSxcclxuICAgICAgICAgICAgICAgIGNsb3NlUG9wdXA6ICgpID0+IHRoaXMuY2xvc2VQb3B1cCgpLFxyXG4gICAgICAgICAgICAgICAga2V5RG93bjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLmhhbmRsZUlucHV0S2V5RG93bihldmVudClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5rZWVwRm9jdXNzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZW1vdmVPcHRpb25Gcm9tTW9kZWwoY2hpcDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcclxuICAgICAgICAgICAgY29uc3QgaWR4OiBudW1iZXIgPSB0aGlzLm1vZGVsLmZpbmRJbmRleChtID0+IG0gPT09IGNoaXApO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNwbGljZShpZHgsIDEpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvcHRpb25DaG9zZW4ob3B0aW9uOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAob3B0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWxzID0gb3B0aW9uLm1hcChvID0+IG9bdGhpcy5kaXNwbGF5RmllbGRdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IG9wdGlvblt0aGlzLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IG9wdGlvbjtcclxuICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodGhpcy5tb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlUG9wdXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5rZWVwRm9jdXNzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzU2VsZWN0T3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UucmVtb3ZlQ29tcG9uZW50KHRoaXMuX2xvdlBvcHVwQ29tcG9uZW50UmVmKTtcclxuICAgICAgICB0aGlzLl9sb3ZQb3B1cENvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tNb2RlbCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3QgJiYgdGhpcy5zZWxlY3RlZE1vZGVsICYmIHRoaXMuY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBtb2RlbDogYW55ID0gdGhpcy5jb2xsZWN0aW9uLmZpbmQoYyA9PiBjW3RoaXMuZGlzcGxheUZpZWxkXSA9PT0gdGhpcy5zZWxlY3RlZE1vZGVsKTtcclxuICAgICAgICAgICAgaWYgKG1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0U2VsZWN0ZWRNb2RlbCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGVscy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5mb3JFYWNoKG0gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbHMucHVzaChtW3RoaXMuZGlzcGxheUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbHMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZWwgPSB0aGlzLm1vZGVsW3RoaXMuZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlbCA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -1874,6 +1874,7 @@ class BaseInputComponent {
1874
1874
  this.customWidth = false;
1875
1875
  this.customHeight = false;
1876
1876
  this.noTriangleGraphic = false;
1877
+ this.keepFocussed = false;
1877
1878
  this.halfWidth = false;
1878
1879
  this.fullWidth = false;
1879
1880
  this.excludeUserModelChange = false;
@@ -2241,7 +2242,7 @@ class BaseInputComponent {
2241
2242
  }
2242
2243
  doBlur(event) {
2243
2244
  setTimeout(() => {
2244
- if (this.keepFocus) {
2245
+ if (this.keepFocus || this.keepFocussed) {
2245
2246
  if (event) {
2246
2247
  event.preventDefault;
2247
2248
  }
@@ -2591,6 +2592,7 @@ BaseInputComponent.propDecorators = {
2591
2592
  customWidth: [{ type: Input }, { type: HostBinding, args: ["class.custom-width",] }],
2592
2593
  customHeight: [{ type: Input }, { type: HostBinding, args: ['class.custom-height',] }],
2593
2594
  noTriangleGraphic: [{ type: Input }],
2595
+ keepFocussed: [{ type: Input }],
2594
2596
  halfWidth: [{ type: Input }, { type: HostBinding, args: ["class.half-width",] }],
2595
2597
  fullWidth: [{ type: Input }, { type: HostBinding, args: ["class.full-width-important",] }],
2596
2598
  excludeUserModelChange: [{ type: Input }],
@@ -2630,6 +2632,9 @@ __decorate([
2630
2632
  __decorate([
2631
2633
  InputBoolean()
2632
2634
  ], BaseInputComponent.prototype, "noTriangleGraphic", void 0);
2635
+ __decorate([
2636
+ InputBoolean()
2637
+ ], BaseInputComponent.prototype, "keepFocussed", void 0);
2633
2638
  __decorate([
2634
2639
  InputBoolean()
2635
2640
  ], BaseInputComponent.prototype, "halfWidth", void 0);
@@ -5721,8 +5726,8 @@ InputTextComponent.decorators = [
5721
5726
  <label *ngIf="showPlaceholderOnFocus || (!showPlaceholderOnFocus && !hasValue && !focused)"
5722
5727
  [textContent]="placeholder"></label>
5723
5728
  <input #input
5729
+ [class.input-input-hidden]="useContent"
5724
5730
  [ngClass]="align"
5725
- [hidden]="useContent"
5726
5731
  [type]="digitsOnly ? 'number' : type"
5727
5732
  [pattern]="type === 'date' ? pattern : undefined"
5728
5733
  [ngModel]="model"
@@ -5733,6 +5738,11 @@ InputTextComponent.decorators = [
5733
5738
  (ngModelChange)="modelChange.emit($event)"
5734
5739
  (keydown)="digitsOnly ? excludeNonDigitChars($event) : true"
5735
5740
  >
5741
+ <ng-container *ngIf="useContent">
5742
+ <div class="input-content-wrapper">
5743
+ <ng-content></ng-content>
5744
+ </div>
5745
+ </ng-container>
5736
5746
  <co-icon [class.show]="showClearButton && hasValue && focused && !readonly" class="input-text-clear-button" [icon]="icons.CrossSkinny" (click)="clearInput($event)"></co-icon>
5737
5747
  <div class="required-indicator"></div>
5738
5748
  </div>
@@ -10306,12 +10316,14 @@ ViewModeButtonsModule.decorators = [
10306
10316
  ];
10307
10317
 
10308
10318
  class ListOfValuesPopupComponent {
10309
- constructor() {
10319
+ constructor(_elementRef) {
10320
+ this._elementRef = _elementRef;
10310
10321
  this.multiselect = false;
10311
10322
  this.displayField = 'description';
10312
10323
  this.searchDisabled = false;
10313
10324
  this.modelChange = new EventEmitter();
10314
10325
  this.closePopup = new EventEmitter();
10326
+ this.keyDown = new EventEmitter();
10315
10327
  this.viewModels = [];
10316
10328
  this.viewModelsMain = [];
10317
10329
  this._collection = [];
@@ -10376,8 +10388,14 @@ class ListOfValuesPopupComponent {
10376
10388
  case KeyboardKey.SpaceBar:
10377
10389
  if (this.highLightModel) {
10378
10390
  this.selectViewModel(this.highLightModel, false);
10379
- return false;
10380
10391
  }
10392
+ else {
10393
+ this.keyDown.next(event);
10394
+ }
10395
+ return false;
10396
+ default:
10397
+ this.keyDown.next(event);
10398
+ return true;
10381
10399
  }
10382
10400
  }
10383
10401
  }
@@ -10445,6 +10463,9 @@ class ListOfValuesPopupComponent {
10445
10463
  if (!this.multiselect) {
10446
10464
  this.selectViewModel(nextModel, false);
10447
10465
  }
10466
+ else {
10467
+ this._scrollIntoView();
10468
+ }
10448
10469
  }
10449
10470
  _prepareViewModelsMain() {
10450
10471
  this.viewModelsMain.length = 0;
@@ -10469,8 +10490,9 @@ class ListOfValuesPopupComponent {
10469
10490
  if (!activeItem || !scrollParent) {
10470
10491
  return;
10471
10492
  }
10472
- const { offsetHeight, offsetTop } = activeItem;
10473
- const { offsetHeight: parentOffsetHeight, scrollTop } = scrollParent;
10493
+ let { offsetHeight, offsetTop } = activeItem;
10494
+ let { offsetHeight: parentOffsetHeight, scrollTop, offsetTop: parentOffsetTop } = scrollParent;
10495
+ offsetTop = offsetTop - parentOffsetTop;
10474
10496
  const isAbove = offsetTop < scrollTop;
10475
10497
  const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;
10476
10498
  if (isAbove) {
@@ -10486,16 +10508,17 @@ ListOfValuesPopupComponent.decorators = [
10486
10508
  selector: 'co-list-of-values-popup',
10487
10509
  template: `
10488
10510
  <div class="lov-options" [overlay]="parentForOverlay" [inheritWidth]="true" [ngClass]="customCssClass" id="lov-popup"
10489
- [tabIndex]="-1" role="listbox"
10511
+ role="listbox" [tabindex]="-1"
10490
10512
  (clickOutside)="closePopup.emit($event)">
10491
- <co-input-search *ngIf="multiselect"
10513
+ <co-input-search *ngIf="multiselect"
10514
+ tabindex="-1"
10492
10515
  [(model)]="searchTerm"
10493
10516
  [placeholder]="searchPlaceholder"
10494
10517
  (keydown)="handleInputKeyDown($event)"
10495
10518
  (modelChange)="filterViewModels()"></co-input-search>
10496
10519
  <ul class="dropdown-list" #dropDownList>
10497
10520
  <li #lovItem *ngFor="let viewModel of viewModels; let index = index" [class.selected]="viewModel === highLightModel"
10498
- (click)="selectViewModel(viewModel, false)" role="option">
10521
+ (click)="selectViewModel(viewModel, !multiselect)" role="option">
10499
10522
  <ng-container *ngIf="!multiselect">
10500
10523
  <span class="lov-options-text" [textContent]="viewModel.model[displayField]"></span>
10501
10524
  </ng-container>
@@ -10510,6 +10533,9 @@ ListOfValuesPopupComponent.decorators = [
10510
10533
  encapsulation: ViewEncapsulation.None
10511
10534
  },] }
10512
10535
  ];
10536
+ ListOfValuesPopupComponent.ctorParameters = () => [
10537
+ { type: ElementRef }
10538
+ ];
10513
10539
  ListOfValuesPopupComponent.propDecorators = {
10514
10540
  lovItems: [{ type: ViewChildren, args: ['lovItem', { read: ElementRef },] }],
10515
10541
  dropDownList: [{ type: ViewChild, args: ['dropDownList', { read: ElementRef },] }],
@@ -10524,6 +10550,7 @@ ListOfValuesPopupComponent.propDecorators = {
10524
10550
  collection: [{ type: Input }],
10525
10551
  modelChange: [{ type: Output }],
10526
10552
  closePopup: [{ type: Output }],
10553
+ keyDown: [{ type: Output }],
10527
10554
  showClass: [{ type: HostBinding, args: ['class.co-list-of-values-popup',] }]
10528
10555
  };
10529
10556
 
@@ -10534,7 +10561,6 @@ class ListOfValuesComponent extends BaseInputComponent {
10534
10561
  this.multiselect = false;
10535
10562
  this.displayField = 'description';
10536
10563
  this.searchDisabled = false;
10537
- this.closeAfterOptionChosen = true;
10538
10564
  this.isSelectOpen = false;
10539
10565
  this.state = 'default';
10540
10566
  this.selectedModels = [];
@@ -10564,6 +10590,9 @@ class ListOfValuesComponent extends BaseInputComponent {
10564
10590
  if (this._lovPopupComponentRef) {
10565
10591
  this._lovPopupComponentRef.instance.searchTerm = model;
10566
10592
  }
10593
+ if (!this.selectedModel && model) {
10594
+ this.openPopup();
10595
+ }
10567
10596
  this.selectedModel = model;
10568
10597
  }
10569
10598
  handleInputKeyDown(event) {
@@ -10621,8 +10650,10 @@ class ListOfValuesComponent extends BaseInputComponent {
10621
10650
  collection: this.collection
10622
10651
  }, {
10623
10652
  modelChange: (value) => this.optionChosen(value),
10624
- closePopup: () => this.closePopup()
10653
+ closePopup: () => this.closePopup(),
10654
+ keyDown: (event) => this.handleInputKeyDown(event)
10625
10655
  });
10656
+ this.keepFocussed = true;
10626
10657
  }
10627
10658
  removeOptionFromModel(chip) {
10628
10659
  if (this.multiselect) {
@@ -10638,15 +10669,13 @@ class ListOfValuesComponent extends BaseInputComponent {
10638
10669
  }
10639
10670
  else {
10640
10671
  this.selectedModel = option[this.displayField];
10641
- if (this.closeAfterOptionChosen) {
10642
- this.toggleSelect();
10643
- }
10644
10672
  }
10645
10673
  }
10646
10674
  this.model = option;
10647
10675
  this.modelChange.emit(this.model);
10648
10676
  }
10649
10677
  closePopup() {
10678
+ this.keepFocussed = false;
10650
10679
  this.isSelectOpen = false;
10651
10680
  this.overlayService.removeComponent(this._lovPopupComponentRef);
10652
10681
  this._lovPopupComponentRef = undefined;
@@ -10704,6 +10733,8 @@ ListOfValuesComponent.decorators = [
10704
10733
  [rightIcon]="isSelectOpen ? icons.ChevronUpRegular : icons.ChevronDownRegular"
10705
10734
  [showClearButton]="true"
10706
10735
  [useContent]="multiselect"
10736
+ [customHeight]="multiselect"
10737
+ [keepFocussed]="keepFocussed"
10707
10738
  (modelChange)="handleInputModelChange($event)"
10708
10739
  (click)="openPopup()"
10709
10740
  (rightIconClick)="toggleSelect()"
@@ -10711,15 +10742,15 @@ ListOfValuesComponent.decorators = [
10711
10742
  (clearIconClick)="clearModel($event)"
10712
10743
  (blur)="checkModel()"
10713
10744
  >
10714
- </co-input-text>
10715
- <ng-container *ngIf="multiselect">
10716
- <div class="multiselect-chips-wrapper">
10717
- <div class="chips" *ngFor="let chip of model">
10718
- <span class="chips-description" [textContent]="chip[displayField]"></span>
10719
- <co-icon class="remove-chip-icon" [icon]="icons.CrossSkinny" (click)="removeOptionFromModel(chip)"></co-icon>
10745
+ <ng-container *ngIf="multiselect">
10746
+ <div class="multiselect-chips-wrapper">
10747
+ <div class="chips" *ngFor="let chip of model">
10748
+ <span class="chips-description" [textContent]="chip[displayField]"></span>
10749
+ <co-icon class="remove-chip-icon" [icon]="icons.CrossSkinny" (click)="removeOptionFromModel(chip)"></co-icon>
10750
+ </div>
10720
10751
  </div>
10721
- </div>
10722
- </ng-container>
10752
+ </ng-container>
10753
+ </co-input-text>
10723
10754
  `,
10724
10755
  providers: [
10725
10756
  OverlayService
@@ -10738,7 +10769,6 @@ ListOfValuesComponent.propDecorators = {
10738
10769
  label: [{ type: Input }],
10739
10770
  customCssClass: [{ type: Input }],
10740
10771
  searchDisabled: [{ type: Input }],
10741
- closeAfterOptionChosen: [{ type: Input }],
10742
10772
  showClass: [{ type: HostBinding, args: ['class.co-list-of-values',] }]
10743
10773
  };
10744
10774