ng2-iq-select2-exe 16.2.0

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/README.md ADDED
@@ -0,0 +1,194 @@
1
+ # ng2-iq-select2
2
+
3
+ [![InnQUbe](http://www.innqube.com/assets/images/badge.svg)](http://www.innqube.com/)
4
+ [![Build Status](https://travis-ci.org/Innqube/ng2-iq-select2.svg?branch=master)](https://travis-ci.org/Innqube/ng2-iq-select2)
5
+ [![codecov](https://codecov.io/gh/Innqube/ng2-iq-select2/branch/master/graph/badge.svg)](https://codecov.io/gh/Innqube/ng2-iq-select2)
6
+ [![Code Climate](https://codeclimate.com/github/Innqube/ng2-iq-select2/badges/gpa.svg)](https://codeclimate.com/github/Innqube/ng2-iq-select2)
7
+
8
+ Angular 2 native select 2 implementation based on bootstrap 4
9
+
10
+ * Easily filter on a remote webservice (can be used with a local list too)
11
+ * Works with ids or complete entities
12
+ * Single or multiple modes
13
+ * Forms integration
14
+ * MIT License
15
+ * Last bootstrap 3 compatible version is 7.0.0
16
+
17
+
18
+ [Take a look at the demo page](https://innqube.github.io/ng2-iq-select2-demo)
19
+
20
+ ---
21
+
22
+ Usage example:
23
+
24
+ *app.module.ts*
25
+ ```javascript
26
+
27
+ import { IqSelect2Module } from 'ng2-iq-select2';
28
+
29
+ @NgModule({
30
+ declarations: [..],
31
+ imports: [.., IqSelect2Module, ...],
32
+ providers: [..]
33
+ ```
34
+
35
+ *html file*
36
+ ```html
37
+ <form [formGroup]="form">
38
+ <iq-select2 css="form-control input-sm"
39
+ formControlName="country"
40
+ [dataSourceProvider]="listCountries"
41
+ [selectedProvider]="loadFromIds"
42
+ [iqSelect2ItemAdapter]="adapter"></iq-select2>
43
+ </form>
44
+ ```
45
+
46
+ *html file (custom template)*
47
+ ```html
48
+ <form [formGroup]="form">
49
+ <iq-select2 css="form-control input-sm"
50
+ formControlName="country"
51
+ [dataSourceProvider]="listCountries"
52
+ [selectedProvider]="loadFromIds"
53
+ [iqSelect2ItemAdapter]="adapter">
54
+ <div *iq-select2-template="let item = $entity; let i = $index">
55
+ <span [style.color]="item.color">[{{item.code}}]</span> {{item.name}}
56
+ </div>
57
+ </iq-select2>
58
+ </form>
59
+ ```
60
+ > Exposed internal variable to bind `$item`, `$entity`, `$id`, `$index`
61
+
62
+ *example typescript file*
63
+ ```javascript
64
+ export class Example {
65
+ form: FormGroup;
66
+ listCountries: (term: string) => Observable<Country[]>;
67
+ loadFromIds: (ids: string[]) => Observable<Country[]>;
68
+ adapter: (entity: Country) => IqSelect2Item;
69
+ //
70
+ constructor(private countriesService: CountryService,
71
+ private formBuilder: FormBuilder){
72
+
73
+ }
74
+ //
75
+ ngOnInit() {
76
+ this.listCountries = (term: string) => this.countriesService.listCountries(term);
77
+ this.loadFromIds = (ids: string[]) => this.countriesService.loadCountriesFromIds(ids);
78
+ this.adapter = (country: Country) => {
79
+ return {
80
+ id: country.id,
81
+ text: country.name,
82
+ entity: country
83
+ };
84
+ }
85
+ this.form = this.formBuilder.group({
86
+ country: null
87
+ });
88
+ }
89
+ };
90
+ ```
91
+
92
+ *IqSelect2Item*
93
+ ```javascript
94
+ interface IqSelect2Item {
95
+ id: string;
96
+ text: string;
97
+ entity?: any; // only needed when referenceMode === 'entity'
98
+ }
99
+ ```
100
+
101
+ *Messages*
102
+ ```javascript
103
+ export class Messages {
104
+
105
+ static readonly PARTIAL_COUNT_VAR; // Variable to be replaced by the amount of results being shown
106
+ static readonly TOTAL_COUNT_VAR; // Variable to be replaced by the total count of results
107
+
108
+ moreResultsAvailableMsg?: string;
109
+ noResultsAvailableMsg?: string;
110
+ }
111
+ ```
112
+
113
+ ---
114
+
115
+ Configuration options (Inputs and Outputs)
116
+ ==========================================
117
+
118
+ *@Input()* **dataSourceProvider: (term: string, selected?: any[]) => Observable<IqSelect2Item<T>[]>**: the function to get the data based on user input. Selected ids or entities are provided in case you want to avoid getting those results again (this could be useful when setting the "resultsCount" property).
119
+
120
+ *@Input()* **selectedProvider: (ids: string[]) => Observable<IqSelect2Item<T>[]>**: the function to get previously selected data when referenceMode === 'id'
121
+
122
+ *@Input()* **iqSelect2ItemAdapter: (entity: T) => IqSelect2Item**: the function to adapt any entity to a IqSelect2Item
123
+
124
+ *@Input()* **referenceMode**: 'id' | 'entity'. Allows to specify if you need the whole entity or just the id.
125
+
126
+ *@Input()* **multiple**: 'true' | 'false'. Allows to select multiple options from the list. The form value is returned as an array.
127
+
128
+ *@Input()* **clientMode**: 'true' | 'false'. If set to true only one request will be sent to the data provider and subsequent searching will happen on the client.
129
+
130
+ *@Input()* **searchDelay**: ms until request is effectively triggered
131
+
132
+ *@Input()* **placeholder**: text to show until a search is performed
133
+
134
+ *@Input()* **disabled**: boolean to control the disabled state of the component
135
+
136
+ *@Input()* **minimumInputLength**: the minimum input length at which the component will request data to the provider
137
+
138
+ *@Input()* **resultsCount**: total count of results produced after entering the search term. A message suggesting further filtering will appear if the results count is greather than the result list shown
139
+
140
+ *@Input()* **messages: Messages**: class to provide custom messages to the component
141
+
142
+ *@Input()* **css**: css classes to be applied
143
+
144
+ *@Input()* **searchIcon**: css icon on the right of the input
145
+
146
+ *@Input()* **deleteIcon**: css icon to be used to remove selected option (In single mode)
147
+
148
+ *@Input()* **badgeColor**: badge bootstrap color: 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark'
149
+
150
+ *@Output()* **onSelect(item: IqSelect2Item)**: event triggered when an item is selected
151
+
152
+ *@Output()* **onRemove(item: IqSelect2Item)**: event triggered when an item is removed
153
+
154
+ ---
155
+
156
+ *Reference mode examples*
157
+ ```javascript
158
+ // form.value example with referenceMode === 'id':
159
+ {
160
+ 'item': 1
161
+ }
162
+
163
+ // form.value example with referenceMode === 'entity':
164
+ {
165
+ 'item': {
166
+ 'id': 1,
167
+ 'property1': 'value',
168
+ ...
169
+ }
170
+ }
171
+
172
+ // form.value example with referenceMode === 'id' and multiple === 'true':
173
+ {
174
+ 'item': [1,2,3]
175
+ }
176
+
177
+ // form.value example with referenceMode === 'entity' and multiple === 'true':
178
+ {
179
+ 'item': [{
180
+ 'id': 1,
181
+ 'property1': 'value',
182
+ ...
183
+ },{
184
+ 'id': 2,
185
+ 'property1': 'value2',
186
+ ...
187
+ },{
188
+ 'id': 3,
189
+ 'property1': 'value3',
190
+ ...
191
+ }]
192
+ }
193
+
194
+ ```
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEtc2VsZWN0Mi1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcyLWlxLXNlbGVjdDIvc3JjL2xpYi9pcS1zZWxlY3QyL2lxLXNlbGVjdDItaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJcVNlbGVjdDJJdGVtIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbiAgICBlbnRpdHk/OiBhbnk7XHJcbn1cclxuIl19
@@ -0,0 +1,356 @@
1
+ import { Component, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
2
+ import { IqSelect2ResultsComponent } from '../iq-select2-results/iq-select2-results.component';
3
+ import { UntypedFormControl, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { Messages } from './messages';
5
+ import { of } from 'rxjs';
6
+ import { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap, tap } from 'rxjs/operators';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "@angular/forms";
10
+ import * as i3 from "../iq-select2-results/iq-select2-results.component";
11
+ const KEY_CODE_DOWN_ARROW = 40;
12
+ const KEY_CODE_UP_ARROW = 38;
13
+ const KEY_CODE_ENTER = 13;
14
+ const KEY_CODE_TAB = 9;
15
+ const KEY_CODE_DELETE = 8;
16
+ const VALUE_ACCESSOR = {
17
+ provide: NG_VALUE_ACCESSOR,
18
+ useExisting: forwardRef(() => IqSelect2Component),
19
+ multi: true
20
+ };
21
+ const noop = () => {
22
+ };
23
+ export class IqSelect2Component {
24
+ constructor() {
25
+ this.MORE_RESULTS_MSG = 'Showing ' + Messages.PARTIAL_COUNT_VAR + ' of ' + Messages.TOTAL_COUNT_VAR + ' results. Refine your search to show more results.';
26
+ this.NO_RESULTS_MSG = 'No results available';
27
+ this.referenceMode = 'id';
28
+ this.multiple = false;
29
+ this.searchDelay = 250;
30
+ this.placeholder = '';
31
+ this.minimumInputLength = 2;
32
+ this.disabled = false;
33
+ this.messages = {
34
+ moreResultsAvailableMsg: this.MORE_RESULTS_MSG,
35
+ noResultsAvailableMsg: this.NO_RESULTS_MSG
36
+ };
37
+ this.clientMode = false;
38
+ this.badgeColor = 'info';
39
+ this.onSelect = new EventEmitter();
40
+ this.onRemove = new EventEmitter();
41
+ this.term = new UntypedFormControl();
42
+ this.resultsVisible = false;
43
+ this.selectedItems = [];
44
+ this.searchFocused = false;
45
+ this.placeholderSelected = '';
46
+ this.onTouchedCallback = noop;
47
+ this.onChangeCallback = noop;
48
+ }
49
+ ngAfterViewInit() {
50
+ this.subscribeToChangesAndLoadDataFromObservable();
51
+ }
52
+ writeValue(selectedValues) {
53
+ if (selectedValues) {
54
+ if (this.referenceMode === 'id') {
55
+ this.populateItemsFromIds(selectedValues);
56
+ }
57
+ else {
58
+ this.populateItemsFromEntities(selectedValues);
59
+ }
60
+ }
61
+ else {
62
+ this.placeholderSelected = '';
63
+ this.selectedItems = [];
64
+ }
65
+ }
66
+ registerOnChange(fn) {
67
+ this.onChangeCallback = fn;
68
+ }
69
+ registerOnTouched(fn) {
70
+ this.onTouchedCallback = fn;
71
+ }
72
+ setDisabledState(isDisabled) {
73
+ this.disabled = isDisabled;
74
+ }
75
+ subscribeToChangesAndLoadDataFromObservable() {
76
+ const observable = this.term.valueChanges.pipe(debounceTime(this.searchDelay), distinctUntilChanged());
77
+ this.subscribeToResults(observable);
78
+ }
79
+ subscribeToResults(observable) {
80
+ observable.pipe(tap(() => this.resultsVisible = false), filter((term) => term.length >= this.minimumInputLength), switchMap(term => this.loadDataFromObservable(term)), map(items => items.filter(item => !(this.multiple && this.alreadySelected(item)))), tap(() => this.resultsVisible = this.searchFocused)).subscribe((items) => this.listData = items);
81
+ }
82
+ loadDataFromObservable(term) {
83
+ return this.clientMode ? this.fetchAndfilterLocalData(term) : this.fetchData(term);
84
+ }
85
+ fetchAndfilterLocalData(term) {
86
+ if (!this.fullDataList) {
87
+ return this.fetchData('').pipe(mergeMap((items) => {
88
+ this.fullDataList = items;
89
+ return this.filterLocalData(term);
90
+ }));
91
+ }
92
+ else {
93
+ return this.filterLocalData(term);
94
+ }
95
+ }
96
+ filterLocalData(term) {
97
+ return of(this.fullDataList.filter((item) => this.containsText(item, term)));
98
+ }
99
+ containsText(item, term) {
100
+ return item.text.toUpperCase().indexOf(term.toUpperCase()) !== -1;
101
+ }
102
+ fetchData(term) {
103
+ return this
104
+ .dataSourceProvider(term, this.buildValue())
105
+ .pipe(map((items) => this.adaptItems(items)));
106
+ }
107
+ adaptItems(items) {
108
+ const convertedItems = [];
109
+ items.map((item) => this.iqSelect2ItemAdapter(item))
110
+ .forEach((iqSelect2Item) => convertedItems.push(iqSelect2Item));
111
+ return convertedItems;
112
+ }
113
+ populateItemsFromEntities(selectedValues) {
114
+ if (this.multiple) {
115
+ this.handleMultipleWithEntities(selectedValues);
116
+ }
117
+ else {
118
+ const iqSelect2Item = this.iqSelect2ItemAdapter(selectedValues);
119
+ this.selectedItems = [iqSelect2Item];
120
+ this.placeholderSelected = iqSelect2Item.text;
121
+ }
122
+ }
123
+ handleMultipleWithEntities(selectedValues) {
124
+ this.selectedItems = [];
125
+ selectedValues.forEach((entity) => {
126
+ const item = this.iqSelect2ItemAdapter(entity);
127
+ const ids = this.getSelectedIds();
128
+ if (ids.indexOf(item.id) === -1) {
129
+ this.selectedItems.push(item);
130
+ }
131
+ });
132
+ }
133
+ populateItemsFromIds(selectedValues) {
134
+ if (this.multiple) {
135
+ this.handleMultipleWithIds(selectedValues);
136
+ }
137
+ else {
138
+ this.handleSingleWithId(selectedValues);
139
+ }
140
+ }
141
+ handleMultipleWithIds(selectedValues) {
142
+ if (selectedValues !== undefined && this.selectedProvider !== undefined) {
143
+ const uniqueIds = [];
144
+ selectedValues.forEach((id) => {
145
+ if (uniqueIds.indexOf(id) === -1) {
146
+ uniqueIds.push(id);
147
+ }
148
+ });
149
+ this.selectedProvider(uniqueIds).subscribe((items) => {
150
+ this.selectedItems = items.map(this.iqSelect2ItemAdapter);
151
+ });
152
+ }
153
+ }
154
+ handleSingleWithId(id) {
155
+ if (id !== undefined && this.selectedProvider !== undefined) {
156
+ this.selectedProvider([id]).subscribe((items) => {
157
+ items.forEach((item) => {
158
+ const iqSelect2Item = this.iqSelect2ItemAdapter(item);
159
+ this.selectedItems = [iqSelect2Item];
160
+ this.placeholderSelected = iqSelect2Item.text;
161
+ });
162
+ });
163
+ }
164
+ }
165
+ alreadySelected(item) {
166
+ let result = false;
167
+ this.selectedItems.forEach(selectedItem => {
168
+ if (selectedItem.id === item.id) {
169
+ result = true;
170
+ }
171
+ });
172
+ return result;
173
+ }
174
+ onItemSelected(item) {
175
+ if (this.multiple) {
176
+ this.selectedItems.push(item);
177
+ const index = this.listData.indexOf(item, 0);
178
+ if (index > -1) {
179
+ this.listData.splice(index, 1);
180
+ }
181
+ }
182
+ else {
183
+ this.selectedItems.length = 0;
184
+ this.selectedItems.push(item);
185
+ }
186
+ this.onChangeCallback(this.buildValue());
187
+ this.term.patchValue('', { emitEvent: false });
188
+ setTimeout(() => this.focus(), 1);
189
+ this.resultsVisible = false;
190
+ this.onSelect.emit(item);
191
+ if (!this.multiple) {
192
+ this.placeholderSelected = item.text;
193
+ }
194
+ }
195
+ getSelectedIds() {
196
+ if (this.multiple) {
197
+ const ids = [];
198
+ this.selectedItems.forEach(item => ids.push(item.id));
199
+ return ids;
200
+ }
201
+ else {
202
+ return this.selectedItems.length === 0 ? null : this.selectedItems[0].id;
203
+ }
204
+ }
205
+ getEntities() {
206
+ if (this.multiple) {
207
+ const entities = [];
208
+ this.selectedItems.forEach(item => {
209
+ entities.push(item.entity);
210
+ });
211
+ return entities;
212
+ }
213
+ else {
214
+ return this.selectedItems.length === 0 ? null : this.selectedItems[0].entity;
215
+ }
216
+ }
217
+ removeItem(item) {
218
+ const index = this.selectedItems.indexOf(item, 0);
219
+ if (index > -1) {
220
+ this.selectedItems.splice(index, 1);
221
+ }
222
+ this.onChangeCallback(this.buildValue());
223
+ this.onRemove.emit(item);
224
+ if (!this.multiple) {
225
+ this.placeholderSelected = '';
226
+ }
227
+ }
228
+ buildValue() {
229
+ return 'id' === this.referenceMode ? this.getSelectedIds() : this.getEntities();
230
+ }
231
+ onFocus() {
232
+ this.searchFocused = true;
233
+ }
234
+ onBlur() {
235
+ this.term.patchValue('', { emitEvent: false });
236
+ this.searchFocused = false;
237
+ this.resultsVisible = false;
238
+ this.onTouchedCallback();
239
+ }
240
+ focus() {
241
+ if (!this.disabled) {
242
+ this.termInput.nativeElement.focus();
243
+ this.resultsVisible = false;
244
+ }
245
+ this.searchFocused = !this.disabled;
246
+ }
247
+ focusAndShowResults() {
248
+ if (!this.disabled) {
249
+ this.termInput.nativeElement.focus();
250
+ this.subscribeToResults(of(''));
251
+ }
252
+ this.searchFocused = !this.disabled;
253
+ }
254
+ onKeyUp(ev) {
255
+ if (this.results) {
256
+ if (ev.keyCode === KEY_CODE_DOWN_ARROW) {
257
+ this.results.activeNext();
258
+ }
259
+ else if (ev.keyCode === KEY_CODE_UP_ARROW) {
260
+ this.results.activePrevious();
261
+ }
262
+ else if (ev.keyCode === KEY_CODE_ENTER) {
263
+ this.results.selectCurrentItem();
264
+ }
265
+ }
266
+ else {
267
+ if (this.minimumInputLength === 0) {
268
+ if (ev.keyCode === KEY_CODE_ENTER || ev.keyCode === KEY_CODE_DOWN_ARROW) {
269
+ this.focusAndShowResults();
270
+ }
271
+ }
272
+ }
273
+ }
274
+ onKeyDown(ev) {
275
+ if (this.results) {
276
+ if (ev.keyCode === KEY_CODE_TAB) {
277
+ this.results.selectCurrentItem();
278
+ }
279
+ }
280
+ if (ev.keyCode === KEY_CODE_DELETE) {
281
+ const textEntered = !this.term.value || this.term.value.length === 0;
282
+ if (textEntered && this.selectedItems.length > 0) {
283
+ this.removeItem(this.selectedItems[this.selectedItems.length - 1]);
284
+ }
285
+ }
286
+ }
287
+ onKeyPress(ev) {
288
+ if (ev.keyCode === KEY_CODE_ENTER) {
289
+ ev.preventDefault();
290
+ }
291
+ }
292
+ getCss() {
293
+ return 'select2-selection-container ' + (this.css === undefined ? '' : this.css);
294
+ }
295
+ getPlaceholder() {
296
+ return this.selectedItems.length > 0 ? this.placeholderSelected : this.placeholder;
297
+ }
298
+ getCountMessage() {
299
+ let msg = this.messages && this.messages.moreResultsAvailableMsg ? this.messages.moreResultsAvailableMsg : this.MORE_RESULTS_MSG;
300
+ msg = msg.replace(Messages.PARTIAL_COUNT_VAR, String(this.listData.length));
301
+ msg = msg.replace(Messages.TOTAL_COUNT_VAR, String(this.resultsCount - this.selectedItems.length));
302
+ return msg;
303
+ }
304
+ getBadgeColor() {
305
+ return this.multiple ? 'bg-' + this.badgeColor : '';
306
+ }
307
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: IqSelect2Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
308
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: IqSelect2Component, selector: "iq-select2", inputs: { dataSourceProvider: "dataSourceProvider", selectedProvider: "selectedProvider", iqSelect2ItemAdapter: "iqSelect2ItemAdapter", referenceMode: "referenceMode", multiple: "multiple", searchDelay: "searchDelay", css: "css", placeholder: "placeholder", minimumInputLength: "minimumInputLength", disabled: "disabled", searchIcon: "searchIcon", deleteIcon: "deleteIcon", messages: "messages", resultsCount: "resultsCount", clientMode: "clientMode", badgeColor: "badgeColor" }, outputs: { onSelect: "onSelect", onRemove: "onRemove" }, providers: [VALUE_ACCESSOR], viewQueries: [{ propertyName: "termInput", first: true, predicate: ["termInput"], descendants: true }, { propertyName: "results", first: true, predicate: ["results"], descendants: true }], ngImport: i0, template: "<div class=\"select2-container\">\r\n <ul (click)=\"focusAndShowResults()\"\r\n [class]=\"getCss()\"\r\n [class.simple-selection]=\"!multiple\"\r\n [class.multiple-selection]=\"multiple\"\r\n [class.search-focused]=\"searchFocused\"\r\n [class.readonly]=\"disabled\">\r\n\r\n <ng-container *ngIf=\"!searchFocused || multiple\">\r\n <li *ngFor=\"let item of selectedItems\"\r\n [class]=\"'select2-selected ' + getBadgeColor()\"\r\n [class.badge]=\"multiple\">\r\n\r\n <span class=\"selectedItemText\">{{item.text}}</span>\r\n <div *ngIf=\"!disabled\" class=\"select2-selection-remove\" (click)=\"removeItem(item)\">\r\n <i *ngIf=\"deleteIcon\" [class]=\"deleteIcon\"></i>\r\n <button *ngIf=\"!deleteIcon\" (click)=\"removeItem(item)\" type=\"button\" class=\"btn-close\" [class.btn-close-white]=\"multiple\" aria-label=\"Close\"></button>\r\n </div>\r\n\r\n </li>\r\n </ng-container>\r\n <li class=\"select2-input\">\r\n <input #termInput type=\"text\"\r\n [placeholder]=\"getPlaceholder()\"\r\n [formControl]=\"term\"\r\n [class.transparent]=\"!multiple && selectedItems.length > 0 && !searchFocused\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keyup)=\"onKeyUp($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (keypress)=\"onKeyPress($event)\"\r\n *ngIf=\"!disabled\"/>\r\n </li>\r\n\r\n <div *ngIf=\"!disabled && (multiple || (!multiple && selectedItems.length === 0))\" class=\"caret\">\r\n <span *ngIf=\"!searchIcon\" class=\"caret-symbol\">&#9660;</span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength===0\"\r\n (click)=\"focusAndShowResults()\"></span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength!==0\"></span>\r\n </div>\r\n\r\n </ul>\r\n\r\n <div class=\"results-container\" *ngIf=\"resultsVisible\">\r\n <span class=\"results-msg\" *ngIf=\"listData && (listData.length + selectedItems.length) < resultsCount\">\r\n {{getCountMessage()}}\r\n </span>\r\n <span class=\"results-msg no-results-msg\" *ngIf=\"searchFocused && listData && listData.length === 0\">\r\n {{messages && messages.noResultsAvailableMsg ? messages.noResultsAvailableMsg : NO_RESULTS_MSG}}\r\n </span>\r\n <iq-select2-results #results [selectedItems]=\"selectedItems\" [items]=\"listData\"\r\n (itemSelectedEvent)=\"onItemSelected($event);\"\r\n [templateRef]=\"templateRef\"\r\n [searchFocused]=\"searchFocused\"></iq-select2-results>\r\n </div>\r\n</div>\r\n", styles: ["ul{list-style-type:none;position:relative}ul li{display:inline-block}ul.simple-selection li{display:block}input{border:none;padding:0}input:focus{outline:none}.simple-selection input.transparent{opacity:0;position:absolute;inset:0 30px 0 0}.form-control-sm ul,.form-control-lg ul{padding:2px 8px}.caret{position:absolute;right:8px;font-size:8px;top:0;bottom:0;line-height:38px}.form-control-sm .caret{line-height:31px}.form-control-lg .caret{line-height:48px;right:12px}.select2-container{position:relative}.results-container{position:absolute;margin-top:-6px;width:100%;z-index:3}div.select2-selection-remove{position:absolute;right:10px;top:0;display:inline-block}.multiple-selection .select2-selected{margin:0 1px 2px;--bs-badge-font-size: 1em;display:inline-flex;align-items:center;gap:.2em}.multiple-selection div.select2-selection-remove{position:relative;right:initial}div.select2-selection-remove:hover{cursor:pointer}.multiple-selection div.select2-selection-remove{display:flex;align-items:center}div.select2-selection-remove .btn-close{width:.3em;height:.3em;padding:.2em}.select2-container .search-focused{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem #007bff40}.results-msg{display:block;position:relative;margin-top:-10px;margin-bottom:10px;font-size:.8em;padding:3px 5px;border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-bottom:1px solid #ced4da;background:#fafafa}.readonly{background-color:#eaecf0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.IqSelect2ResultsComponent, selector: "iq-select2-results", inputs: ["items", "searchFocused", "selectedItems", "templateRef"], outputs: ["itemSelectedEvent"] }] }); }
309
+ }
310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: IqSelect2Component, decorators: [{
311
+ type: Component,
312
+ args: [{ selector: 'iq-select2', providers: [VALUE_ACCESSOR], template: "<div class=\"select2-container\">\r\n <ul (click)=\"focusAndShowResults()\"\r\n [class]=\"getCss()\"\r\n [class.simple-selection]=\"!multiple\"\r\n [class.multiple-selection]=\"multiple\"\r\n [class.search-focused]=\"searchFocused\"\r\n [class.readonly]=\"disabled\">\r\n\r\n <ng-container *ngIf=\"!searchFocused || multiple\">\r\n <li *ngFor=\"let item of selectedItems\"\r\n [class]=\"'select2-selected ' + getBadgeColor()\"\r\n [class.badge]=\"multiple\">\r\n\r\n <span class=\"selectedItemText\">{{item.text}}</span>\r\n <div *ngIf=\"!disabled\" class=\"select2-selection-remove\" (click)=\"removeItem(item)\">\r\n <i *ngIf=\"deleteIcon\" [class]=\"deleteIcon\"></i>\r\n <button *ngIf=\"!deleteIcon\" (click)=\"removeItem(item)\" type=\"button\" class=\"btn-close\" [class.btn-close-white]=\"multiple\" aria-label=\"Close\"></button>\r\n </div>\r\n\r\n </li>\r\n </ng-container>\r\n <li class=\"select2-input\">\r\n <input #termInput type=\"text\"\r\n [placeholder]=\"getPlaceholder()\"\r\n [formControl]=\"term\"\r\n [class.transparent]=\"!multiple && selectedItems.length > 0 && !searchFocused\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n (keyup)=\"onKeyUp($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n (keypress)=\"onKeyPress($event)\"\r\n *ngIf=\"!disabled\"/>\r\n </li>\r\n\r\n <div *ngIf=\"!disabled && (multiple || (!multiple && selectedItems.length === 0))\" class=\"caret\">\r\n <span *ngIf=\"!searchIcon\" class=\"caret-symbol\">&#9660;</span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength===0\"\r\n (click)=\"focusAndShowResults()\"></span>\r\n <span [class]=\"searchIcon\" *ngIf=\"searchIcon && minimumInputLength!==0\"></span>\r\n </div>\r\n\r\n </ul>\r\n\r\n <div class=\"results-container\" *ngIf=\"resultsVisible\">\r\n <span class=\"results-msg\" *ngIf=\"listData && (listData.length + selectedItems.length) < resultsCount\">\r\n {{getCountMessage()}}\r\n </span>\r\n <span class=\"results-msg no-results-msg\" *ngIf=\"searchFocused && listData && listData.length === 0\">\r\n {{messages && messages.noResultsAvailableMsg ? messages.noResultsAvailableMsg : NO_RESULTS_MSG}}\r\n </span>\r\n <iq-select2-results #results [selectedItems]=\"selectedItems\" [items]=\"listData\"\r\n (itemSelectedEvent)=\"onItemSelected($event);\"\r\n [templateRef]=\"templateRef\"\r\n [searchFocused]=\"searchFocused\"></iq-select2-results>\r\n </div>\r\n</div>\r\n", styles: ["ul{list-style-type:none;position:relative}ul li{display:inline-block}ul.simple-selection li{display:block}input{border:none;padding:0}input:focus{outline:none}.simple-selection input.transparent{opacity:0;position:absolute;inset:0 30px 0 0}.form-control-sm ul,.form-control-lg ul{padding:2px 8px}.caret{position:absolute;right:8px;font-size:8px;top:0;bottom:0;line-height:38px}.form-control-sm .caret{line-height:31px}.form-control-lg .caret{line-height:48px;right:12px}.select2-container{position:relative}.results-container{position:absolute;margin-top:-6px;width:100%;z-index:3}div.select2-selection-remove{position:absolute;right:10px;top:0;display:inline-block}.multiple-selection .select2-selected{margin:0 1px 2px;--bs-badge-font-size: 1em;display:inline-flex;align-items:center;gap:.2em}.multiple-selection div.select2-selection-remove{position:relative;right:initial}div.select2-selection-remove:hover{cursor:pointer}.multiple-selection div.select2-selection-remove{display:flex;align-items:center}div.select2-selection-remove .btn-close{width:.3em;height:.3em;padding:.2em}.select2-container .search-focused{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem #007bff40}.results-msg{display:block;position:relative;margin-top:-10px;margin-bottom:10px;font-size:.8em;padding:3px 5px;border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-bottom:1px solid #ced4da;background:#fafafa}.readonly{background-color:#eaecf0}\n"] }]
313
+ }], ctorParameters: function () { return []; }, propDecorators: { dataSourceProvider: [{
314
+ type: Input
315
+ }], selectedProvider: [{
316
+ type: Input
317
+ }], iqSelect2ItemAdapter: [{
318
+ type: Input
319
+ }], referenceMode: [{
320
+ type: Input
321
+ }], multiple: [{
322
+ type: Input
323
+ }], searchDelay: [{
324
+ type: Input
325
+ }], css: [{
326
+ type: Input
327
+ }], placeholder: [{
328
+ type: Input
329
+ }], minimumInputLength: [{
330
+ type: Input
331
+ }], disabled: [{
332
+ type: Input
333
+ }], searchIcon: [{
334
+ type: Input
335
+ }], deleteIcon: [{
336
+ type: Input
337
+ }], messages: [{
338
+ type: Input
339
+ }], resultsCount: [{
340
+ type: Input
341
+ }], clientMode: [{
342
+ type: Input
343
+ }], badgeColor: [{
344
+ type: Input
345
+ }], onSelect: [{
346
+ type: Output
347
+ }], onRemove: [{
348
+ type: Output
349
+ }], termInput: [{
350
+ type: ViewChild,
351
+ args: ['termInput']
352
+ }], results: [{
353
+ type: ViewChild,
354
+ args: ['results']
355
+ }] } });
356
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXEtc2VsZWN0Mi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvaXEtc2VsZWN0Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhILE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQzdGLE9BQU8sRUFBdUIsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRXpHLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sY0FBYyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFB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Q0FBQyxFQUFFLENBQUM7SUFDeEQsQ0FBQzs4R0F2VlEsa0JBQWtCO2tHQUFsQixrQkFBa0IsOGpCQUZoQixDQUFDLGNBQWMsQ0FBQyx1TkN6Qi9CLG03RkF3REE7OzJGRDdCYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0ksWUFBWSxhQUdYLENBQUMsY0FBYyxDQUFDOzBFQU9sQixrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ3lCLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVztnQkFDQSxPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtJcVNlbGVjdDJJdGVtfSBmcm9tICcuL2lxLXNlbGVjdDItaXRlbSc7XHJcbmltcG9ydCB7SXFTZWxlY3QyUmVzdWx0c0NvbXBvbmVudH0gZnJvbSAnLi4vaXEtc2VsZWN0Mi1yZXN1bHRzL2lxLXNlbGVjdDItcmVzdWx0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TWVzc2FnZXN9IGZyb20gJy4vbWVzc2FnZXMnO1xyXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5jb25zdCBLRVlfQ09ERV9ET1dOX0FSUk9XID0gNDA7XHJcbmNvbnN0IEtFWV9DT0RFX1VQX0FSUk9XID0gMzg7XHJcbmNvbnN0IEtFWV9DT0RFX0VOVEVSID0gMTM7XHJcbmNvbnN0IEtFWV9DT0RFX1RBQiA9IDk7XHJcbmNvbnN0IEtFWV9DT0RFX0RFTEVURSA9IDg7XHJcbmNvbnN0IFZBTFVFX0FDQ0VTU09SID0ge1xyXG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJcVNlbGVjdDJDb21wb25lbnQpLFxyXG4gICAgbXVsdGk6IHRydWVcclxufTtcclxuY29uc3Qgbm9vcCA9ICgpID0+IHtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdpcS1zZWxlY3QyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9pcS1zZWxlY3QyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2lxLXNlbGVjdDIuY29tcG9uZW50LmNzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbVkFMVUVfQUNDRVNTT1JdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJcVNlbGVjdDJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgTU9SRV9SRVNVTFRTX01TRyA9ICdTaG93aW5nICcgKyBNZXNzYWdlcy5QQVJUSUFMX0NPVU5UX1ZBUiArICcgb2YgJyArIE1lc3NhZ2VzLlRPVEFMX0NPVU5UX1ZBUiArICcgcmVzdWx0cy4gUmVmaW5lIHlvdXIgc2VhcmNoIHRvIHNob3cgbW9yZSByZXN1bHRzLic7XHJcbiAgICBOT19SRVNVTFRTX01TRyA9ICdObyByZXN1bHRzIGF2YWlsYWJsZSc7XHJcblxyXG4gICAgQElucHV0KCkgZGF0YVNvdXJjZVByb3ZpZGVyOiAodGVybTogc3RyaW5nLCBzZWxlY3RlZD86IGFueVtdKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkUHJvdmlkZXI6IChpZHM6IHN0cmluZ1tdKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICAgIEBJbnB1dCgpIGlxU2VsZWN0Mkl0ZW1BZGFwdGVyOiAoZW50aXR5OiBhbnkpID0+IElxU2VsZWN0Mkl0ZW07XHJcbiAgICBASW5wdXQoKSByZWZlcmVuY2VNb2RlOiAnaWQnIHwgJ2VudGl0eScgPSAnaWQnO1xyXG4gICAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNlYXJjaERlbGF5ID0gMjUwO1xyXG4gICAgQElucHV0KCkgY3NzOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xyXG4gICAgQElucHV0KCkgbWluaW11bUlucHV0TGVuZ3RoID0gMjtcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZWFyY2hJY29uO1xyXG4gICAgQElucHV0KCkgZGVsZXRlSWNvbjtcclxuICAgIEBJbnB1dCgpIG1lc3NhZ2VzOiBNZXNzYWdlcyA9IHtcclxuICAgICAgICBtb3JlUmVzdWx0c0F2YWlsYWJsZU1zZzogdGhpcy5NT1JFX1JFU1VMVFNfTVNHLFxyXG4gICAgICAgIG5vUmVzdWx0c0F2YWlsYWJsZU1zZzogdGhpcy5OT19SRVNVTFRTX01TR1xyXG4gICAgfTtcclxuICAgIEBJbnB1dCgpIHJlc3VsdHNDb3VudDtcclxuICAgIEBJbnB1dCgpIGNsaWVudE1vZGUgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGJhZGdlQ29sb3IgPSAnaW5mbyc7XHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8SXFTZWxlY3QySXRlbT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlbW92ZTogRXZlbnRFbWl0dGVyPElxU2VsZWN0Mkl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxJcVNlbGVjdDJJdGVtPigpO1xyXG4gICAgQFZpZXdDaGlsZCgndGVybUlucHV0JykgcHJpdmF0ZSB0ZXJtSW5wdXQ7XHJcbiAgICBAVmlld0NoaWxkKCdyZXN1bHRzJykgcmVzdWx0czogSXFTZWxlY3QyUmVzdWx0c0NvbXBvbmVudDtcclxuICAgIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgdGVybSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgIHJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICBsaXN0RGF0YTogSXFTZWxlY3QySXRlbVtdO1xyXG4gICAgZnVsbERhdGFMaXN0OiBJcVNlbGVjdDJJdGVtW107XHJcbiAgICBzZWxlY3RlZEl0ZW1zOiBJcVNlbGVjdDJJdGVtW10gPSBbXTtcclxuICAgIHNlYXJjaEZvY3VzZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgcGxhY2Vob2xkZXJTZWxlY3RlZCA9ICcnO1xyXG4gICAgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xyXG4gICAgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9DaGFuZ2VzQW5kTG9hZERhdGFGcm9tT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUoc2VsZWN0ZWRWYWx1ZXM6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZFZhbHVlcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZWZlcmVuY2VNb2RlID09PSAnaWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9wdWxhdGVJdGVtc0Zyb21FbnRpdGllcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0NoYW5nZXNBbmRMb2FkRGF0YUZyb21PYnNlcnZhYmxlKCkge1xyXG4gICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLnRlcm0udmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLnNlYXJjaERlbGF5KSxcclxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1Jlc3VsdHMob2JzZXJ2YWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1Jlc3VsdHMob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxzdHJpbmc+KTogdm9pZCB7XHJcbiAgICAgICAgb2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlKSxcclxuICAgICAgICAgICAgZmlsdGVyKCh0ZXJtKSA9PiB0ZXJtLmxlbmd0aCA+PSB0aGlzLm1pbmltdW1JbnB1dExlbmd0aCksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHRoaXMubG9hZERhdGFGcm9tT2JzZXJ2YWJsZSh0ZXJtKSksXHJcbiAgICAgICAgICAgIG1hcChpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiAhKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5hbHJlYWR5U2VsZWN0ZWQoaXRlbSkpKSksXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnJlc3VsdHNWaXNpYmxlID0gdGhpcy5zZWFyY2hGb2N1c2VkKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChpdGVtcykgPT4gdGhpcy5saXN0RGF0YSA9IGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGxvYWREYXRhRnJvbU9ic2VydmFibGUodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnRNb2RlID8gdGhpcy5mZXRjaEFuZGZpbHRlckxvY2FsRGF0YSh0ZXJtKSA6IHRoaXMuZmV0Y2hEYXRhKHRlcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmV0Y2hBbmRmaWx0ZXJMb2NhbERhdGEodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxJcVNlbGVjdDJJdGVtW10+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZnVsbERhdGFMaXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoRGF0YSgnJykucGlwZShcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChpdGVtcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnVsbERhdGFMaXN0ID0gaXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyTG9jYWxEYXRhKHRlcm0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJMb2NhbERhdGEodGVybSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsdGVyTG9jYWxEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8SXFTZWxlY3QySXRlbVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuZnVsbERhdGFMaXN0LmZpbHRlcigoaXRlbSkgPT4gdGhpcy5jb250YWluc1RleHQoaXRlbSwgdGVybSkpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbnRhaW5zVGV4dChpdGVtLCB0ZXJtOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS50ZXh0LnRvVXBwZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvVXBwZXJDYXNlKCkpICE9PSAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZldGNoRGF0YSh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPElxU2VsZWN0Mkl0ZW1bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgICAgIC5kYXRhU291cmNlUHJvdmlkZXIodGVybSwgdGhpcy5idWlsZFZhbHVlKCkpXHJcbiAgICAgICAgICAgIC5waXBlKG1hcCgoaXRlbXM6IGFueVtdKSA9PiB0aGlzLmFkYXB0SXRlbXMoaXRlbXMpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGFwdEl0ZW1zKGl0ZW1zOiBhbnlbXSk6IElxU2VsZWN0Mkl0ZW1bXSB7XHJcbiAgICAgICAgY29uc3QgY29udmVydGVkSXRlbXMgPSBbXTtcclxuICAgICAgICBpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIoaXRlbSkpXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChpcVNlbGVjdDJJdGVtKSA9PiBjb252ZXJ0ZWRJdGVtcy5wdXNoKGlxU2VsZWN0Mkl0ZW0pKTtcclxuICAgICAgICByZXR1cm4gY29udmVydGVkSXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwb3B1bGF0ZUl0ZW1zRnJvbUVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpcVNlbGVjdDJJdGVtID0gdGhpcy5pcVNlbGVjdDJJdGVtQWRhcHRlcihzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtpcVNlbGVjdDJJdGVtXTtcclxuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gaXFTZWxlY3QySXRlbS50ZXh0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgICAgICBzZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIoZW50aXR5KTtcclxuICAgICAgICAgICAgY29uc3QgaWRzID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGlkcy5pbmRleE9mKGl0ZW0uaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVTaW5nbGVXaXRoSWQoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkVmFsdWVzICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RlZFByb3ZpZGVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgdW5pcXVlSWRzID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVmFsdWVzLmZvckVhY2goKGlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pcXVlSWRzLmluZGV4T2YoaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZUlkcy5wdXNoKGlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmlkZXIodW5pcXVlSWRzKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gaXRlbXMubWFwKHRoaXMuaXFTZWxlY3QySXRlbUFkYXB0ZXIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVTaW5nbGVXaXRoSWQoaWQ6IGFueSkge1xyXG4gICAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRQcm92aWRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aWRlcihbaWRdKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlxU2VsZWN0Mkl0ZW0gPSB0aGlzLmlxU2VsZWN0Mkl0ZW1BZGFwdGVyKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtpcVNlbGVjdDJJdGVtXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSBpcVNlbGVjdDJJdGVtLnRleHQ7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWxyZWFkeVNlbGVjdGVkKGl0ZW06IElxU2VsZWN0Mkl0ZW0pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goc2VsZWN0ZWRJdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbS5pZCA9PT0gaXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgb25JdGVtU2VsZWN0ZWQoaXRlbTogSXFTZWxlY3QySXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdERhdGEuaW5kZXhPZihpdGVtLCAwKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmJ1aWxkVmFsdWUoKSk7XHJcbiAgICAgICAgdGhpcy50ZXJtLnBhdGNoVmFsdWUoJycsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzKCksIDEpO1xyXG4gICAgICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoaXRlbSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IGl0ZW0udGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RlZElkcygpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaWRzLnB1c2goaXRlbS5pZCkpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGlkcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uaWQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RW50aXRpZXMoKTogYW55W10ge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVudGl0aWVzID0gW107XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGVudGl0aWVzLnB1c2goaXRlbS5lbnRpdHkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBlbnRpdGllcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uZW50aXR5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVJdGVtKGl0ZW06IElxU2VsZWN0Mkl0ZW0pIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0sIDApO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmJ1aWxkVmFsdWUoKSk7XHJcbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KGl0ZW0pO1xyXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBidWlsZFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiAnaWQnID09PSB0aGlzLnJlZmVyZW5jZU1vZGUgPyB0aGlzLmdldFNlbGVjdGVkSWRzKCkgOiB0aGlzLmdldEVudGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Gb2N1cygpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1cigpIHtcclxuICAgICAgICB0aGlzLnRlcm0ucGF0Y2hWYWx1ZSgnJywge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRlcm1JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gIXRoaXMuZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXNBbmRTaG93UmVzdWx0cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy50ZXJtSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvUmVzdWx0cyhvZignJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSAhdGhpcy5kaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBvbktleVVwKGV2KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0cykge1xyXG4gICAgICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRE9XTl9BUlJPVykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZU5leHQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9VUF9BUlJPVykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZVByZXZpb3VzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cy5zZWxlY3RDdXJyZW50SXRlbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubWluaW11bUlucHV0TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIgfHwgZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRE9XTl9BUlJPVykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTaG93UmVzdWx0cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5RG93bihldikge1xyXG4gICAgICAgIGlmICh0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFX1RBQikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLnNlbGVjdEN1cnJlbnRJdGVtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERV9ERUxFVEUpIHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dEVudGVyZWQgPSAhdGhpcy50ZXJtLnZhbHVlIHx8IHRoaXMudGVybS52YWx1ZS5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0RW50ZXJlZCAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uS2V5UHJlc3MoZXYpIHtcclxuICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREVfRU5URVIpIHtcclxuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3NzKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdzZWxlY3QyLXNlbGVjdGlvbi1jb250YWluZXIgJyArICh0aGlzLmNzcyA9PT0gdW5kZWZpbmVkID8gJycgOiB0aGlzLmNzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgPyB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgOiB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvdW50TWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBtc2cgPSB0aGlzLm1lc3NhZ2VzICYmIHRoaXMubWVzc2FnZXMubW9yZVJlc3VsdHNBdmFpbGFibGVNc2cgPyB0aGlzLm1lc3NhZ2VzLm1vcmVSZXN1bHRzQXZhaWxhYmxlTXNnIDogdGhpcy5NT1JFX1JFU1VMVFNfTVNHO1xyXG4gICAgICAgIG1zZyA9IG1zZy5yZXBsYWNlKE1lc3NhZ2VzLlBBUlRJQUxfQ09VTlRfVkFSLCBTdHJpbmcodGhpcy5saXN0RGF0YS5sZW5ndGgpKTtcclxuICAgICAgICBtc2cgPSBtc2cucmVwbGFjZShNZXNzYWdlcy5UT1RBTF9DT1VOVF9WQVIsIFN0cmluZyh0aGlzLnJlc3VsdHNDb3VudCAtIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGgpKTtcclxuICAgICAgICByZXR1cm4gbXNnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhZGdlQ29sb3IoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICdiZy0nICsgdGhpcy5iYWRnZUNvbG9yIDogJyc7XHJcbiAgICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzZWxlY3QyLWNvbnRhaW5lclwiPlxyXG4gICAgPHVsIChjbGljayk9XCJmb2N1c0FuZFNob3dSZXN1bHRzKClcIlxyXG4gICAgICAgIFtjbGFzc109XCJnZXRDc3MoKVwiXHJcbiAgICAgICAgW2NsYXNzLnNpbXBsZS1zZWxlY3Rpb25dPVwiIW11bHRpcGxlXCJcclxuICAgICAgICBbY2xhc3MubXVsdGlwbGUtc2VsZWN0aW9uXT1cIm11bHRpcGxlXCJcclxuICAgICAgICBbY2xhc3Muc2VhcmNoLWZvY3VzZWRdPVwic2VhcmNoRm9jdXNlZFwiXHJcbiAgICAgICAgW2NsYXNzLnJlYWRvbmx5XT1cImRpc2FibGVkXCI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VhcmNoRm9jdXNlZCB8fCBtdWx0aXBsZVwiPlxyXG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ3NlbGVjdDItc2VsZWN0ZWQgJyArIGdldEJhZGdlQ29sb3IoKVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYmFkZ2VdPVwibXVsdGlwbGVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdGVkSXRlbVRleHRcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFkaXNhYmxlZFwiIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb24tcmVtb3ZlXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImRlbGV0ZUljb25cIiBbY2xhc3NdPVwiZGVsZXRlSWNvblwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWRlbGV0ZUljb25cIiAoY2xpY2spPVwicmVtb3ZlSXRlbShpdGVtKVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIFtjbGFzcy5idG4tY2xvc2Utd2hpdGVdPVwibXVsdGlwbGVcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJzZWxlY3QyLWlucHV0XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCAjdGVybUlucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRQbGFjZWhvbGRlcigpXCJcclxuICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0ZXJtXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy50cmFuc3BhcmVudF09XCIhbXVsdGlwbGUgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmICFzZWFyY2hGb2N1c2VkXCJcclxuICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib25LZXlQcmVzcygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpc2FibGVkXCIvPlxyXG4gICAgICAgIDwvbGk+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhZGlzYWJsZWQgJiYgKG11bHRpcGxlIHx8ICghbXVsdGlwbGUgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApKVwiIGNsYXNzPVwiY2FyZXRcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhc2VhcmNoSWNvblwiIGNsYXNzPVwiY2FyZXQtc3ltYm9sXCI+JiM5NjYwOzwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cInNlYXJjaEljb25cIiAqbmdJZj1cInNlYXJjaEljb24gJiYgbWluaW11bUlucHV0TGVuZ3RoPT09MFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb2N1c0FuZFNob3dSZXN1bHRzKClcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJzZWFyY2hJY29uXCIgKm5nSWY9XCJzZWFyY2hJY29uICYmIG1pbmltdW1JbnB1dExlbmd0aCE9PTBcIj48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicmVzdWx0cy1jb250YWluZXJcIiAqbmdJZj1cInJlc3VsdHNWaXNpYmxlXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXN1bHRzLW1zZ1wiICpuZ0lmPVwibGlzdERhdGEgJiYgKGxpc3REYXRhLmxlbmd0aCArIHNlbGVjdGVkSXRlbXMubGVuZ3RoKSA8IHJlc3VsdHNDb3VudFwiPlxyXG4gICAgICAgICAgICB7e2dldENvdW50TWVzc2FnZSgpfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXN1bHRzLW1zZyBuby1yZXN1bHRzLW1zZ1wiICpuZ0lmPVwic2VhcmNoRm9jdXNlZCAmJiBsaXN0RGF0YSAmJiBsaXN0RGF0YS5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAge3ttZXNzYWdlcyAmJiBtZXNzYWdlcy5ub1Jlc3VsdHNBdmFpbGFibGVNc2cgPyBtZXNzYWdlcy5ub1Jlc3VsdHNBdmFpbGFibGVNc2cgOiBOT19SRVNVTFRTX01TR319XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxpcS1zZWxlY3QyLXJlc3VsdHMgI3Jlc3VsdHMgW3NlbGVjdGVkSXRlbXNdPVwic2VsZWN0ZWRJdGVtc1wiIFtpdGVtc109XCJsaXN0RGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbVNlbGVjdGVkRXZlbnQpPVwib25JdGVtU2VsZWN0ZWQoJGV2ZW50KTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGb2N1c2VkXT1cInNlYXJjaEZvY3VzZWRcIj48L2lxLXNlbGVjdDItcmVzdWx0cz5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Created by diego on 3/13/17.
3
+ */
4
+ export class Messages {
5
+ static { this.PARTIAL_COUNT_VAR = '%PARTIAL_COUNT%'; }
6
+ static { this.TOTAL_COUNT_VAR = '%TOTAL_COUNT%'; }
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItaXEtc2VsZWN0Mi9zcmMvbGliL2lxLXNlbGVjdDIvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sUUFBUTthQUVELHNCQUFpQixHQUFHLGlCQUFpQixDQUFDO2FBQ3RDLG9CQUFlLEdBQUcsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENyZWF0ZWQgYnkgZGllZ28gb24gMy8xMy8xNy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlcyB7XHJcblxyXG4gICAgc3RhdGljIHJlYWRvbmx5IFBBUlRJQUxfQ09VTlRfVkFSID0gJyVQQVJUSUFMX0NPVU5UJSc7XHJcbiAgICBzdGF0aWMgcmVhZG9ubHkgVE9UQUxfQ09VTlRfVkFSID0gJyVUT1RBTF9DT1VOVCUnO1xyXG5cclxuICAgIG1vcmVSZXN1bHRzQXZhaWxhYmxlTXNnPzogc3RyaW5nO1xyXG4gICAgbm9SZXN1bHRzQXZhaWxhYmxlTXNnPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==