@marcura/marcura-combobox 6.1.0 → 6.1.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.
- package/README.md +24 -24
- package/esm2020/lib/combobox.injectables.mjs +5 -5
- package/esm2020/lib/combobox.module.mjs +103 -103
- package/esm2020/lib/components/abstract-combobox/abstract-combobox.component.mjs +240 -240
- package/esm2020/lib/components/abstract-dropdown/abstract-dropdown.component.mjs +230 -230
- package/esm2020/lib/components/combobox/combobox.component.mjs +365 -361
- package/esm2020/lib/components/combobox-popup-footer/combobox-popup-footer.component.mjs +38 -38
- package/esm2020/lib/components/dropdown/dropdown.component.mjs +234 -234
- package/esm2020/lib/components/multiselect/multiselect.component.mjs +247 -247
- package/esm2020/lib/directives/combobox-item-template.directive.mjs +13 -13
- package/esm2020/lib/directives/dropdown-item-template.directive.mjs +13 -13
- package/esm2020/lib/directives/dropdown-value-template.directive.mjs +13 -13
- package/esm2020/lib/directives/multiselect-item-template.directive.mjs +13 -13
- package/esm2020/lib/directives/multiselect-tag-template.directive.mjs +13 -13
- package/esm2020/lib/directives/multiselect-tag-wrapper.directive.mjs +60 -60
- package/esm2020/lib/model/combobox-changed.event.mjs +4 -4
- package/esm2020/lib/model/combobox-item.type.mjs +12 -12
- package/esm2020/lib/model/combobox-kendo-component.interface.mjs +2 -2
- package/esm2020/lib/model/combobox-localization.interface.mjs +2 -2
- package/esm2020/lib/model/combobox-search-fn.type.mjs +1 -1
- package/esm2020/lib/model/combobox-search-settings-operator.enum.mjs +6 -6
- package/esm2020/lib/model/combobox-search-settings.interface.mjs +2 -2
- package/esm2020/lib/model/dropdown-changed.event.mjs +4 -4
- package/esm2020/lib/model/dropdown-kendo-component.interface.mjs +2 -2
- package/esm2020/lib/model/dropdown-localization.interface.mjs +2 -2
- package/esm2020/lib/model/dropdown-localizer.interface.mjs +2 -2
- package/esm2020/lib/model/multiselect-changed.event.mjs +4 -4
- package/esm2020/lib/model/multiselect-localization.interface.mjs +2 -2
- package/esm2020/marcura-marcura-combobox.mjs +4 -4
- package/esm2020/public-api.mjs +25 -25
- package/fesm2015/marcura-marcura-combobox.mjs +1482 -1478
- package/fesm2015/marcura-marcura-combobox.mjs.map +1 -1
- package/fesm2020/marcura-marcura-combobox.mjs +1477 -1473
- package/fesm2020/marcura-marcura-combobox.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/combobox.injectables.d.ts +8 -8
- package/lib/combobox.module.d.ts +25 -25
- package/lib/components/abstract-combobox/abstract-combobox.component.d.ts +59 -59
- package/lib/components/abstract-dropdown/abstract-dropdown.component.d.ts +76 -76
- package/lib/components/combobox/combobox.component.d.ts +65 -64
- package/lib/components/combobox-popup-footer/combobox-popup-footer.component.d.ts +13 -13
- package/lib/components/dropdown/dropdown.component.d.ts +45 -45
- package/lib/components/multiselect/multiselect.component.d.ts +51 -51
- package/lib/directives/combobox-item-template.directive.d.ts +5 -5
- package/lib/directives/dropdown-item-template.directive.d.ts +5 -5
- package/lib/directives/dropdown-value-template.directive.d.ts +5 -5
- package/lib/directives/multiselect-item-template.directive.d.ts +5 -5
- package/lib/directives/multiselect-tag-template.directive.d.ts +5 -5
- package/lib/directives/multiselect-tag-wrapper.directive.d.ts +21 -21
- package/lib/model/combobox-changed.event.d.ts +3 -3
- package/lib/model/combobox-item.type.d.ts +4 -4
- package/lib/model/combobox-kendo-component.interface.d.ts +7 -7
- package/lib/model/combobox-localization.interface.d.ts +5 -5
- package/lib/model/combobox-search-fn.type.d.ts +3 -3
- package/lib/model/combobox-search-settings-operator.enum.d.ts +4 -4
- package/lib/model/combobox-search-settings.interface.d.ts +5 -5
- package/lib/model/dropdown-changed.event.d.ts +3 -3
- package/lib/model/dropdown-kendo-component.interface.d.ts +6 -6
- package/lib/model/dropdown-localization.interface.d.ts +3 -3
- package/lib/model/dropdown-localizer.interface.d.ts +5 -5
- package/lib/model/multiselect-changed.event.d.ts +3 -3
- package/lib/model/multiselect-localization.interface.d.ts +5 -5
- package/package.json +1 -1
- package/public-api.d.ts +24 -24
|
@@ -1,231 +1,231 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { FormControl } from '@angular/forms';
|
|
3
|
-
import { AbstractControlComponent, ControlBlurredEvent, ControlState, ControlType, } from '@marcura/marcura-common';
|
|
4
|
-
import { BehaviorSubject } from 'rxjs';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class AbstractDropdownComponent extends AbstractControlComponent {
|
|
7
|
-
get valueField() {
|
|
8
|
-
return this._valueField;
|
|
9
|
-
}
|
|
10
|
-
set valueField(valueField) {
|
|
11
|
-
if (valueField && this._valueField !== valueField) {
|
|
12
|
-
this._valueField = valueField;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
get valueKey() {
|
|
16
|
-
return this._valueField.toString();
|
|
17
|
-
}
|
|
18
|
-
get textField() {
|
|
19
|
-
return this._textField;
|
|
20
|
-
}
|
|
21
|
-
set textField(textField) {
|
|
22
|
-
if (textField && this._textField !== textField) {
|
|
23
|
-
this._textField = textField;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
get textKey() {
|
|
27
|
-
return this._textField.toString();
|
|
28
|
-
}
|
|
29
|
-
get isLoading() {
|
|
30
|
-
return this._isLoading.value;
|
|
31
|
-
}
|
|
32
|
-
set isLoading(isLoading) {
|
|
33
|
-
this._isLoading.next(isLoading);
|
|
34
|
-
// Mark hasIsLoadingCssClass @HostBinding for check.
|
|
35
|
-
this._changeDetectorRef.markForCheck();
|
|
36
|
-
}
|
|
37
|
-
get state() {
|
|
38
|
-
return this._state;
|
|
39
|
-
}
|
|
40
|
-
set state(state) {
|
|
41
|
-
if (this._state !== state) {
|
|
42
|
-
this._state = state;
|
|
43
|
-
this._isHighlightedState = state === ControlState.Highlighted;
|
|
44
|
-
this._changeDetectorRef.markForCheck();
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
get type() {
|
|
48
|
-
return this._type;
|
|
49
|
-
}
|
|
50
|
-
set type(type) {
|
|
51
|
-
if (this._type !== type) {
|
|
52
|
-
this._type = type;
|
|
53
|
-
this._isSuccessType = type === ControlType.Success;
|
|
54
|
-
this._isErrorType = type === ControlType.Error;
|
|
55
|
-
this._isWarningType = type === ControlType.Warning;
|
|
56
|
-
this._changeDetectorRef.markForCheck();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
get items() {
|
|
60
|
-
return this._items;
|
|
61
|
-
}
|
|
62
|
-
set items(items) {
|
|
63
|
-
this._items = items || [];
|
|
64
|
-
}
|
|
65
|
-
get isOpen() {
|
|
66
|
-
return this._isOpen.value.isOpen;
|
|
67
|
-
}
|
|
68
|
-
constructor(_changeDetectorRef) {
|
|
69
|
-
super();
|
|
70
|
-
this._changeDetectorRef = _changeDetectorRef;
|
|
71
|
-
// TODO: technical debt - figure out way of putting default value
|
|
72
|
-
this._valueField = 'id';
|
|
73
|
-
this._textField = 'name';
|
|
74
|
-
this._resetedValue = null;
|
|
75
|
-
this._items = [];
|
|
76
|
-
this._isOpen = new BehaviorSubject({
|
|
77
|
-
isOpen: false,
|
|
78
|
-
shouldEmit: false,
|
|
79
|
-
});
|
|
80
|
-
this._isLoading = new BehaviorSubject(false);
|
|
81
|
-
this._type = null;
|
|
82
|
-
this._state = null;
|
|
83
|
-
this._isSuccessType = this._type === ControlType.Success;
|
|
84
|
-
this._isErrorType = this._type === ControlType.Error;
|
|
85
|
-
this._isWarningType = this._type === ControlType.Warning;
|
|
86
|
-
this._isHighlightedState = this._state === ControlState.Highlighted;
|
|
87
|
-
this.valueFormControl = new FormControl();
|
|
88
|
-
this.placeholder = '';
|
|
89
|
-
this.hasReset = true;
|
|
90
|
-
this.listHeight = 200;
|
|
91
|
-
/**
|
|
92
|
-
* @deprecated please try to avoid it, as it forced me to create ComboboxItem<TItem>
|
|
93
|
-
* with union of weird types. Item should be an object in most cases...
|
|
94
|
-
*/
|
|
95
|
-
this.isPrimitiveValue = false;
|
|
96
|
-
this.isOutline = false;
|
|
97
|
-
this.opened = new EventEmitter();
|
|
98
|
-
this.closed = new EventEmitter();
|
|
99
|
-
}
|
|
100
|
-
_setComponent(component) {
|
|
101
|
-
this._component = component;
|
|
102
|
-
}
|
|
103
|
-
_emitChanged(value) { }
|
|
104
|
-
_reset() {
|
|
105
|
-
const hasValueChanged = this.hasValueChanged(this.defaultValue);
|
|
106
|
-
if (hasValueChanged) {
|
|
107
|
-
this.writeValue(this.defaultValue);
|
|
108
|
-
this.formControl.reset(this.defaultValue);
|
|
109
|
-
this.valueFormControl.reset(this.defaultValue);
|
|
110
|
-
this._component.reset();
|
|
111
|
-
this._emitChanged(this.defaultValue);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
this.formControl.markAsPristine();
|
|
115
|
-
this.formControl.markAsUntouched();
|
|
116
|
-
this.valueFormControl.reset(this.defaultValue);
|
|
117
|
-
this._component.reset();
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
init() {
|
|
121
|
-
this._observer.listen(this._isDisabled, (isDisabled) => {
|
|
122
|
-
if (isDisabled) {
|
|
123
|
-
this.valueFormControl.disable();
|
|
124
|
-
}
|
|
125
|
-
else {
|
|
126
|
-
this.valueFormControl.enable();
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
open(shouldEmitEvent = true) {
|
|
131
|
-
this._component.toggle(true);
|
|
132
|
-
this._isOpen.next({ isOpen: true, shouldEmit: shouldEmitEvent });
|
|
133
|
-
}
|
|
134
|
-
close(shouldEmitEvent = true) {
|
|
135
|
-
this._component.toggle(false);
|
|
136
|
-
this._isOpen.next({ isOpen: false, shouldEmit: shouldEmitEvent });
|
|
137
|
-
}
|
|
138
|
-
toggle(shouldEmitEvent = true) {
|
|
139
|
-
if (this._isOpen) {
|
|
140
|
-
this.close(shouldEmitEvent);
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
this.open(shouldEmitEvent);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
focus() {
|
|
147
|
-
this._component.focus();
|
|
148
|
-
}
|
|
149
|
-
blur() {
|
|
150
|
-
this._component.blur();
|
|
151
|
-
}
|
|
152
|
-
onOpened() {
|
|
153
|
-
this._isOpen.next({ isOpen: true, shouldEmit: true });
|
|
154
|
-
}
|
|
155
|
-
onClosed() {
|
|
156
|
-
this._isOpen.next({ isOpen: false, shouldEmit: true });
|
|
157
|
-
}
|
|
158
|
-
onFocused() {
|
|
159
|
-
this.focused.emit();
|
|
160
|
-
}
|
|
161
|
-
onBlurred() {
|
|
162
|
-
this.blurred.emit(new ControlBlurredEvent(this.value, this._resetedValue || this._focusedValue, this.hasValueChanged(this._resetedValue || this._focusedValue)));
|
|
163
|
-
this._resetedValue = null;
|
|
164
|
-
}
|
|
165
|
-
onChanged(value) {
|
|
166
|
-
value = value === undefined ? this.defaultValue : value;
|
|
167
|
-
this.value = value;
|
|
168
|
-
this.propagateChanged(value);
|
|
169
|
-
this.propagateTouched();
|
|
170
|
-
this._emitChanged(value);
|
|
171
|
-
}
|
|
172
|
-
onResetClicked() {
|
|
173
|
-
if (!this.hasReset) {
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
this._resetedValue = this.value;
|
|
177
|
-
this.focus();
|
|
178
|
-
this._reset();
|
|
179
|
-
this.open();
|
|
180
|
-
}
|
|
181
|
-
writeValue(value) {
|
|
182
|
-
// CSS class @HostBindings aren't updated with OnPush change detection strategy,
|
|
183
|
-
// and are to be marked for check.
|
|
184
|
-
this._changeDetectorRef.markForCheck();
|
|
185
|
-
this.valueFormControl.setValue(value);
|
|
186
|
-
super.writeValue(value);
|
|
187
|
-
}
|
|
188
|
-
setDisabledState(isDisabled) {
|
|
189
|
-
super.setDisabledState(isDisabled);
|
|
190
|
-
// Mark hasIsDisabledCssClass @HostBinding for check.
|
|
191
|
-
this._changeDetectorRef.markForCheck();
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
AbstractDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AbstractDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
195
|
-
AbstractDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: AbstractDropdownComponent, selector: "ng-component", inputs: { valueField: "valueField", textField: "textField", placeholder: "placeholder", isLoading: "isLoading", hasReset: "hasReset", popupClass: "popupClass", state: "state", type: "type", items: "items", listHeight: "listHeight", isPrimitiveValue: "isPrimitiveValue", isOutline: "isOutline" }, outputs: { opened: "opened", closed: "closed" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
196
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AbstractDropdownComponent, decorators: [{
|
|
197
|
-
type: Component,
|
|
198
|
-
args: [{
|
|
199
|
-
template: '',
|
|
200
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
201
|
-
}]
|
|
202
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { valueField: [{
|
|
203
|
-
type: Input
|
|
204
|
-
}], textField: [{
|
|
205
|
-
type: Input
|
|
206
|
-
}], placeholder: [{
|
|
207
|
-
type: Input
|
|
208
|
-
}], isLoading: [{
|
|
209
|
-
type: Input
|
|
210
|
-
}], hasReset: [{
|
|
211
|
-
type: Input
|
|
212
|
-
}], popupClass: [{
|
|
213
|
-
type: Input
|
|
214
|
-
}], state: [{
|
|
215
|
-
type: Input
|
|
216
|
-
}], type: [{
|
|
217
|
-
type: Input
|
|
218
|
-
}], items: [{
|
|
219
|
-
type: Input
|
|
220
|
-
}], listHeight: [{
|
|
221
|
-
type: Input
|
|
222
|
-
}], isPrimitiveValue: [{
|
|
223
|
-
type: Input
|
|
224
|
-
}], isOutline: [{
|
|
225
|
-
type: Input
|
|
226
|
-
}], opened: [{
|
|
227
|
-
type: Output
|
|
228
|
-
}], closed: [{
|
|
229
|
-
type: Output
|
|
230
|
-
}] } });
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { FormControl } from '@angular/forms';
|
|
3
|
+
import { AbstractControlComponent, ControlBlurredEvent, ControlState, ControlType, } from '@marcura/marcura-common';
|
|
4
|
+
import { BehaviorSubject } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class AbstractDropdownComponent extends AbstractControlComponent {
|
|
7
|
+
get valueField() {
|
|
8
|
+
return this._valueField;
|
|
9
|
+
}
|
|
10
|
+
set valueField(valueField) {
|
|
11
|
+
if (valueField && this._valueField !== valueField) {
|
|
12
|
+
this._valueField = valueField;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
get valueKey() {
|
|
16
|
+
return this._valueField.toString();
|
|
17
|
+
}
|
|
18
|
+
get textField() {
|
|
19
|
+
return this._textField;
|
|
20
|
+
}
|
|
21
|
+
set textField(textField) {
|
|
22
|
+
if (textField && this._textField !== textField) {
|
|
23
|
+
this._textField = textField;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
get textKey() {
|
|
27
|
+
return this._textField.toString();
|
|
28
|
+
}
|
|
29
|
+
get isLoading() {
|
|
30
|
+
return this._isLoading.value;
|
|
31
|
+
}
|
|
32
|
+
set isLoading(isLoading) {
|
|
33
|
+
this._isLoading.next(isLoading);
|
|
34
|
+
// Mark hasIsLoadingCssClass @HostBinding for check.
|
|
35
|
+
this._changeDetectorRef.markForCheck();
|
|
36
|
+
}
|
|
37
|
+
get state() {
|
|
38
|
+
return this._state;
|
|
39
|
+
}
|
|
40
|
+
set state(state) {
|
|
41
|
+
if (this._state !== state) {
|
|
42
|
+
this._state = state;
|
|
43
|
+
this._isHighlightedState = state === ControlState.Highlighted;
|
|
44
|
+
this._changeDetectorRef.markForCheck();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
get type() {
|
|
48
|
+
return this._type;
|
|
49
|
+
}
|
|
50
|
+
set type(type) {
|
|
51
|
+
if (this._type !== type) {
|
|
52
|
+
this._type = type;
|
|
53
|
+
this._isSuccessType = type === ControlType.Success;
|
|
54
|
+
this._isErrorType = type === ControlType.Error;
|
|
55
|
+
this._isWarningType = type === ControlType.Warning;
|
|
56
|
+
this._changeDetectorRef.markForCheck();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
get items() {
|
|
60
|
+
return this._items;
|
|
61
|
+
}
|
|
62
|
+
set items(items) {
|
|
63
|
+
this._items = items || [];
|
|
64
|
+
}
|
|
65
|
+
get isOpen() {
|
|
66
|
+
return this._isOpen.value.isOpen;
|
|
67
|
+
}
|
|
68
|
+
constructor(_changeDetectorRef) {
|
|
69
|
+
super();
|
|
70
|
+
this._changeDetectorRef = _changeDetectorRef;
|
|
71
|
+
// TODO: technical debt - figure out way of putting default value
|
|
72
|
+
this._valueField = 'id';
|
|
73
|
+
this._textField = 'name';
|
|
74
|
+
this._resetedValue = null;
|
|
75
|
+
this._items = [];
|
|
76
|
+
this._isOpen = new BehaviorSubject({
|
|
77
|
+
isOpen: false,
|
|
78
|
+
shouldEmit: false,
|
|
79
|
+
});
|
|
80
|
+
this._isLoading = new BehaviorSubject(false);
|
|
81
|
+
this._type = null;
|
|
82
|
+
this._state = null;
|
|
83
|
+
this._isSuccessType = this._type === ControlType.Success;
|
|
84
|
+
this._isErrorType = this._type === ControlType.Error;
|
|
85
|
+
this._isWarningType = this._type === ControlType.Warning;
|
|
86
|
+
this._isHighlightedState = this._state === ControlState.Highlighted;
|
|
87
|
+
this.valueFormControl = new FormControl();
|
|
88
|
+
this.placeholder = '';
|
|
89
|
+
this.hasReset = true;
|
|
90
|
+
this.listHeight = 200;
|
|
91
|
+
/**
|
|
92
|
+
* @deprecated please try to avoid it, as it forced me to create ComboboxItem<TItem>
|
|
93
|
+
* with union of weird types. Item should be an object in most cases...
|
|
94
|
+
*/
|
|
95
|
+
this.isPrimitiveValue = false;
|
|
96
|
+
this.isOutline = false;
|
|
97
|
+
this.opened = new EventEmitter();
|
|
98
|
+
this.closed = new EventEmitter();
|
|
99
|
+
}
|
|
100
|
+
_setComponent(component) {
|
|
101
|
+
this._component = component;
|
|
102
|
+
}
|
|
103
|
+
_emitChanged(value) { }
|
|
104
|
+
_reset() {
|
|
105
|
+
const hasValueChanged = this.hasValueChanged(this.defaultValue);
|
|
106
|
+
if (hasValueChanged) {
|
|
107
|
+
this.writeValue(this.defaultValue);
|
|
108
|
+
this.formControl.reset(this.defaultValue);
|
|
109
|
+
this.valueFormControl.reset(this.defaultValue);
|
|
110
|
+
this._component.reset();
|
|
111
|
+
this._emitChanged(this.defaultValue);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
this.formControl.markAsPristine();
|
|
115
|
+
this.formControl.markAsUntouched();
|
|
116
|
+
this.valueFormControl.reset(this.defaultValue);
|
|
117
|
+
this._component.reset();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
init() {
|
|
121
|
+
this._observer.listen(this._isDisabled, (isDisabled) => {
|
|
122
|
+
if (isDisabled) {
|
|
123
|
+
this.valueFormControl.disable();
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
this.valueFormControl.enable();
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
open(shouldEmitEvent = true) {
|
|
131
|
+
this._component.toggle(true);
|
|
132
|
+
this._isOpen.next({ isOpen: true, shouldEmit: shouldEmitEvent });
|
|
133
|
+
}
|
|
134
|
+
close(shouldEmitEvent = true) {
|
|
135
|
+
this._component.toggle(false);
|
|
136
|
+
this._isOpen.next({ isOpen: false, shouldEmit: shouldEmitEvent });
|
|
137
|
+
}
|
|
138
|
+
toggle(shouldEmitEvent = true) {
|
|
139
|
+
if (this._isOpen) {
|
|
140
|
+
this.close(shouldEmitEvent);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
this.open(shouldEmitEvent);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
focus() {
|
|
147
|
+
this._component.focus();
|
|
148
|
+
}
|
|
149
|
+
blur() {
|
|
150
|
+
this._component.blur();
|
|
151
|
+
}
|
|
152
|
+
onOpened() {
|
|
153
|
+
this._isOpen.next({ isOpen: true, shouldEmit: true });
|
|
154
|
+
}
|
|
155
|
+
onClosed() {
|
|
156
|
+
this._isOpen.next({ isOpen: false, shouldEmit: true });
|
|
157
|
+
}
|
|
158
|
+
onFocused() {
|
|
159
|
+
this.focused.emit();
|
|
160
|
+
}
|
|
161
|
+
onBlurred() {
|
|
162
|
+
this.blurred.emit(new ControlBlurredEvent(this.value, this._resetedValue || this._focusedValue, this.hasValueChanged(this._resetedValue || this._focusedValue)));
|
|
163
|
+
this._resetedValue = null;
|
|
164
|
+
}
|
|
165
|
+
onChanged(value) {
|
|
166
|
+
value = value === undefined ? this.defaultValue : value;
|
|
167
|
+
this.value = value;
|
|
168
|
+
this.propagateChanged(value);
|
|
169
|
+
this.propagateTouched();
|
|
170
|
+
this._emitChanged(value);
|
|
171
|
+
}
|
|
172
|
+
onResetClicked() {
|
|
173
|
+
if (!this.hasReset) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
this._resetedValue = this.value;
|
|
177
|
+
this.focus();
|
|
178
|
+
this._reset();
|
|
179
|
+
this.open();
|
|
180
|
+
}
|
|
181
|
+
writeValue(value) {
|
|
182
|
+
// CSS class @HostBindings aren't updated with OnPush change detection strategy,
|
|
183
|
+
// and are to be marked for check.
|
|
184
|
+
this._changeDetectorRef.markForCheck();
|
|
185
|
+
this.valueFormControl.setValue(value);
|
|
186
|
+
super.writeValue(value);
|
|
187
|
+
}
|
|
188
|
+
setDisabledState(isDisabled) {
|
|
189
|
+
super.setDisabledState(isDisabled);
|
|
190
|
+
// Mark hasIsDisabledCssClass @HostBinding for check.
|
|
191
|
+
this._changeDetectorRef.markForCheck();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
AbstractDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AbstractDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
195
|
+
AbstractDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.0", type: AbstractDropdownComponent, selector: "ng-component", inputs: { valueField: "valueField", textField: "textField", placeholder: "placeholder", isLoading: "isLoading", hasReset: "hasReset", popupClass: "popupClass", state: "state", type: "type", items: "items", listHeight: "listHeight", isPrimitiveValue: "isPrimitiveValue", isOutline: "isOutline" }, outputs: { opened: "opened", closed: "closed" }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AbstractDropdownComponent, decorators: [{
|
|
197
|
+
type: Component,
|
|
198
|
+
args: [{
|
|
199
|
+
template: '',
|
|
200
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
201
|
+
}]
|
|
202
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { valueField: [{
|
|
203
|
+
type: Input
|
|
204
|
+
}], textField: [{
|
|
205
|
+
type: Input
|
|
206
|
+
}], placeholder: [{
|
|
207
|
+
type: Input
|
|
208
|
+
}], isLoading: [{
|
|
209
|
+
type: Input
|
|
210
|
+
}], hasReset: [{
|
|
211
|
+
type: Input
|
|
212
|
+
}], popupClass: [{
|
|
213
|
+
type: Input
|
|
214
|
+
}], state: [{
|
|
215
|
+
type: Input
|
|
216
|
+
}], type: [{
|
|
217
|
+
type: Input
|
|
218
|
+
}], items: [{
|
|
219
|
+
type: Input
|
|
220
|
+
}], listHeight: [{
|
|
221
|
+
type: Input
|
|
222
|
+
}], isPrimitiveValue: [{
|
|
223
|
+
type: Input
|
|
224
|
+
}], isOutline: [{
|
|
225
|
+
type: Input
|
|
226
|
+
}], opened: [{
|
|
227
|
+
type: Output
|
|
228
|
+
}], closed: [{
|
|
229
|
+
type: Output
|
|
230
|
+
}] } });
|
|
231
231
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Fic3RyYWN0LWRyb3Bkb3duL2Fic3RyYWN0LWRyb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUVuQixZQUFZLEVBQ1osV0FBVyxHQUtaLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQzs7QUFhckMsTUFBTSxPQUFnQix5QkFLcEIsU0FBUSx3QkFBNEU7SUFvQnBGLElBQ1csVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUNELElBQVcsVUFBVSxDQUFDLFVBQXVCO1FBQzNDLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVELElBQ1csU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELElBQVcsU0FBUyxDQUFDLFNBQXNCO1FBQ3pDLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO1lBQzlDLElBQUksQ0FBQyxVQUFVLEdB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TUFBTTtnQkFHUyxNQUFNO3NCQURyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbENvbXBvbmVudCxcbiAgQ29udHJvbEJsdXJyZWRFdmVudCxcbiAgQ29udHJvbENoYW5nZWRFdmVudCxcbiAgQ29udHJvbFN0YXRlLFxuICBDb250cm9sVHlwZSxcbiAgSU9wZW5hYmxlQ29udHJvbENvbXBvbmVudCxcbiAgSVN0YXRlYWJsZUNvbnRyb2xDb21wb25lbnQsXG4gIElUeXBlYWJsZUNvbnRyb2xDb21wb25lbnQsXG4gIE5pbCxcbn0gZnJvbSAnQG1hcmN1cmEvbWFyY3VyYS1jb21tb24nO1xuaW1wb3J0IHtHcm91cFJlc3VsdH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWRhdGEtcXVlcnknO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJRHJvcGRvd25LZW5kb0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vbW9kZWwvZHJvcGRvd24ta2VuZG8tY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQge0NvbWJvYm94SXRlbX0gZnJvbSAnLi4vLi4vbW9kZWwvY29tYm9ib3gtaXRlbS50eXBlJztcblxuaW50ZXJmYWNlIElEcm9wZG93bk9wZW5lZEV2ZW50IHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBzaG91bGRFbWl0OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGU6ICcnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REcm9wZG93bkNvbXBvbmVudDxcbiAgVEl0ZW0sXG4gIFRWYWx1ZSxcbiAgVEtlbmRvQ29tcG9uZW50IGV4dGVuZHMgSURyb3Bkb3duS2VuZG9Db21wb25lbnQgPSBJRHJvcGRvd25LZW5kb0NvbXBvbmVudCxcbiAgVENoYW5nZWRFdmVudCBleHRlbmRzIENvbnRyb2xDaGFuZ2VkRXZlbnQ8VFZhbHVlPiA9IENvbnRyb2xDaGFuZ2VkRXZlbnQ8VFZhbHVlPlxuPiBleHRlbmRzIEFic3RyYWN0Q29udHJvbENvbXBvbmVudDxUVmFsdWUsIENvbnRyb2xCbHVycmVkRXZlbnQ8VFZhbHVlPiwgVENoYW5nZWRFdmVudD5cbiAgaW1wbGVtZW50cyBJT3BlbmFibGVDb250cm9sQ29tcG9uZW50LCBJU3RhdGVhYmxlQ29udHJvbENvbXBvbmVudCwgSVR5cGVhYmxlQ29udHJvbENvbXBvbmVudCB7XG4gIC8vIFRPRE86IHRlY2huaWNhbCBkZWJ0IC0gZmlndXJlIG91dCB3YXkgb2YgcHV0dGluZyBkZWZhdWx0IHZhbHVlXG4gIHByaXZhdGUgX3ZhbHVlRmllbGQ6IGtleW9mIFRJdGVtID0gJ2lkJyBhcyBhbnk7XG4gIHByaXZhdGUgX3RleHRGaWVsZDogIGtleW9mIFRJdGVtID0gJ25hbWUnIGFzIGFueTtcbiAgcHJvdGVjdGVkIF9yZXNldGVkVmFsdWU6IFRWYWx1ZSB8IG51bGwgPSBudWxsO1xuICBwcm90ZWN0ZWQgX2NvbXBvbmVudCE6IFRLZW5kb0NvbXBvbmVudDtcbiAgcHJvdGVjdGVkIF9pdGVtczogQ29tYm9ib3hJdGVtPFRJdGVtPltdID0gW107XG4gIHByb3RlY3RlZCByZWFkb25seSBfaXNPcGVuOiBCZWhhdmlvclN1YmplY3Q8SURyb3Bkb3duT3BlbmVkRXZlbnQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRHJvcGRvd25PcGVuZWRFdmVudD4oe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgc2hvdWxkRW1pdDogZmFsc2UsXG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2lzTG9hZGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBfdHlwZTogQ29udHJvbFR5cGUgfCBOaWwgPSBudWxsO1xuICBwcm90ZWN0ZWQgX3N0YXRlOiBDb250cm9sU3RhdGUgfCBOaWwgPSBudWxsO1xuICBwcm90ZWN0ZWQgX2lzU3VjY2Vzc1R5cGU6IGJvb2xlYW4gPSB0aGlzLl90eXBlID09PSBDb250cm9sVHlwZS5TdWNjZXNzO1xuICBwcm90ZWN0ZWQgX2lzRXJyb3JUeXBlOiBib29sZWFuID0gdGhpcy5fdHlwZSA9PT0gQ29udHJvbFR5cGUuRXJyb3I7XG4gIHByb3RlY3RlZCBfaXNXYXJuaW5nVHlwZTogYm9vbGVhbiA9IHRoaXMuX3R5cGUgPT09IENvbnRyb2xUeXBlLldhcm5pbmc7XG4gIHByb3RlY3RlZCBfaXNIaWdobGlnaHRlZFN0YXRlOiBib29sZWFuID0gdGhpcy5fc3RhdGUgPT09IENvbnRyb2xTdGF0ZS5IaWdobGlnaHRlZDtcbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sPFRWYWx1ZSB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgdmFsdWVGaWVsZCgpOiBrZXlvZiBUSXRlbSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlRmllbGQ7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZUZpZWxkKHZhbHVlRmllbGQ6IGtleW9mIFRJdGVtKSB7XG4gICAgaWYgKHZhbHVlRmllbGQgJiYgdGhpcy5fdmFsdWVGaWVsZCAhPT0gdmFsdWVGaWVsZCkge1xuICAgICAgdGhpcy5fdmFsdWVGaWVsZCA9IHZhbHVlRmllbGQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB2YWx1ZUtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZUZpZWxkLnRvU3RyaW5nKCk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHRleHRGaWVsZCgpOiBrZXlvZiBUSXRlbSB7XG4gICAgcmV0dXJuIHRoaXMuX3RleHRGaWVsZDtcbiAgfVxuICBwdWJsaWMgc2V0IHRleHRGaWVsZCh0ZXh0RmllbGQ6IGtleW9mIFRJdGVtKSB7XG4gICAgaWYgKHRleHRGaWVsZCAmJiB0aGlzLl90ZXh0RmllbGQgIT09IHRleHRGaWVsZCkge1xuICAgICAgdGhpcy5fdGV4dEZpZWxkID0gdGV4dEZpZWxkO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGV4dEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZXh0RmllbGQudG9TdHJpbmcoKTtcbiAgfVxuICBASW5wdXQoKVxuICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNMb2FkaW5nLnZhbHVlO1xuICB9XG4gIHB1YmxpYyBzZXQgaXNMb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzTG9hZGluZy5uZXh0KGlzTG9hZGluZyk7XG4gICAgLy8gTWFyayBoYXNJc0xvYWRpbmdDc3NDbGFzcyBASG9zdEJpbmRpbmcgZm9yIGNoZWNrLlxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoYXNSZXNldDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwb3B1cENsYXNzPzogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHN0YXRlKCk6IENvbnRyb2xTdGF0ZSB8IE5pbCB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RhdGUoc3RhdGU6IENvbnRyb2xTdGF0ZSB8IE5pbCkge1xuICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gc3RhdGUpIHtcbiAgICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7XG4gICAgICB0aGlzLl9pc0hpZ2hsaWdodGVkU3RhdGUgPSBzdGF0ZSA9PT0gQ29udHJvbFN0YXRlLkhpZ2hsaWdodGVkO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgdHlwZSgpOiBDb250cm9sVHlwZSB8IE5pbCB7XG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gIH1cbiAgcHVibGljIHNldCB0eXBlKHR5cGU6IENvbnRyb2xUeXBlIHwgTmlsKSB7XG4gICAgaWYgKHRoaXMuX3R5cGUgIT09IHR5cGUpIHtcbiAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuICAgICAgdGhpcy5faXNTdWNjZXNzVHlwZSA9IHR5cGUgPT09IENvbnRyb2xUeXBlLlN1Y2Nlc3M7XG4gICAgICB0aGlzLl9pc0Vycm9yVHlwZSA9IHR5cGUgPT09IENvbnRyb2xUeXBlLkVycm9yO1xuICAgICAgdGhpcy5faXNXYXJuaW5nVHlwZSA9IHR5cGUgPT09IENvbnRyb2xUeXBlLldhcm5pbmc7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBpdGVtcygpOiBDb21ib2JveEl0ZW08VEl0ZW0+W10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBwdWJsaWMgc2V0IGl0ZW1zKGl0ZW1zOiBDb21ib2JveEl0ZW08VEl0ZW0+W10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IGl0ZW1zIHx8IFtdO1xuICB9XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsaXN0SGVpZ2h0OiBudW1iZXIgPSAyMDA7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHBsZWFzZSB0cnkgdG8gYXZvaWQgaXQsIGFzIGl0IGZvcmNlZCBtZSB0byBjcmVhdGUgQ29tYm9ib3hJdGVtPFRJdGVtPlxuICAgKiAgICAgICAgICAgICB3aXRoIHVuaW9uIG9mIHdlaXJkIHR5cGVzLiBJdGVtIHNob3VsZCBiZSBhbiBvYmplY3QgaW4gbW9zdCBjYXNlcy4uLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlzUHJpbWl0aXZlVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIGlzT3V0bGluZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IG9wZW5lZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGNsb3NlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuLnZhbHVlLmlzT3BlbjtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NldENvbXBvbmVudChjb21wb25lbnQ6IFRLZW5kb0NvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMuX2NvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBfZW1pdENoYW5nZWQodmFsdWU6IFRWYWx1ZSk6IHZvaWQge31cblxuICBwcm90ZWN0ZWQgX3Jlc2V0KCk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1ZhbHVlQ2hhbmdlZDogYm9vbGVhbiA9IHRoaXMuaGFzVmFsdWVDaGFuZ2VkKHRoaXMuZGVmYXVsdFZhbHVlKTtcblxuICAgIGlmIChoYXNWYWx1ZUNoYW5nZWQpIHtcbiAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnJlc2V0KHRoaXMuZGVmYXVsdFZhbHVlKTtcbiAgICAgIHRoaXMudmFsdWVGb3JtQ29udHJvbC5yZXNldCh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB0aGlzLl9jb21wb25lbnQucmVzZXQoKTtcbiAgICAgIHRoaXMuX2VtaXRDaGFuZ2VkKHRoaXMuZGVmYXVsdFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIHRoaXMudmFsdWVGb3JtQ29udHJvbC5yZXNldCh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB0aGlzLl9jb21wb25lbnQucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9vYnNlcnZlci5saXN0ZW4odGhpcy5faXNEaXNhYmxlZCwgKGlzRGlzYWJsZWQpID0+IHtcbiAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMudmFsdWVGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3BlbihzaG91bGRFbWl0RXZlbnQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5fY29tcG9uZW50LnRvZ2dsZSh0cnVlKTtcbiAgICB0aGlzLl9pc09wZW4ubmV4dCh7aXNPcGVuOiB0cnVlLCBzaG91bGRFbWl0OiBzaG91bGRFbWl0RXZlbnR9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZShzaG91bGRFbWl0RXZlbnQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5fY29tcG9uZW50LnRvZ2dsZShmYWxzZSk7XG4gICAgdGhpcy5faXNPcGVuLm5leHQoe2lzT3BlbjogZmFsc2UsIHNob3VsZEVtaXQ6IHNob3VsZEVtaXRFdmVudH0pO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZShzaG91bGRFbWl0RXZlbnQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzT3Blbikge1xuICAgICAgdGhpcy5jbG9zZShzaG91bGRFbWl0RXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW4oc2hvdWxkRW1pdEV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fY29tcG9uZW50LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLl9jb21wb25lbnQuYmx1cigpO1xuICB9XG5cbiAgcHVibGljIG9uT3BlbmVkKCk6IHZvaWQge1xuICAgIHRoaXMuX2lzT3Blbi5uZXh0KHtpc09wZW46IHRydWUsIHNob3VsZEVtaXQ6IHRydWV9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsb3NlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pc09wZW4ubmV4dCh7aXNPcGVuOiBmYWxzZSwgc2hvdWxkRW1pdDogdHJ1ZX0pO1xuICB9XG5cbiAgcHVibGljIG9uRm9jdXNlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uQmx1cnJlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmJsdXJyZWQuZW1pdChcbiAgICAgIG5ldyBDb250cm9sQmx1cnJlZEV2ZW50PFRWYWx1ZT4oXG4gICAgICAgIHRoaXMudmFsdWUsXG4gICAgICAgIHRoaXMuX3Jlc2V0ZWRWYWx1ZSB8fCB0aGlzLl9mb2N1c2VkVmFsdWUsXG4gICAgICAgIHRoaXMuaGFzVmFsdWVDaGFuZ2VkKHRoaXMuX3Jlc2V0ZWRWYWx1ZSB8fCB0aGlzLl9mb2N1c2VkVmFsdWUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLl9yZXNldGVkVmFsdWUgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlZCh2YWx1ZTogVFZhbHVlKTogdm9pZCB7XG4gICAgdmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdGhpcy5kZWZhdWx0VmFsdWUgOiB2YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2VkKHZhbHVlKTtcbiAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQoKTtcbiAgICB0aGlzLl9lbWl0Q2hhbmdlZCh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25SZXNldENsaWNrZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc1Jlc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzZXRlZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgICB0aGlzLm9wZW4oKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBUVmFsdWUpOiB2b2lkIHtcbiAgICAvLyBDU1MgY2xhc3MgQEhvc3RCaW5kaW5ncyBhcmVuJ3QgdXBkYXRlZCB3aXRoIE9uUHVzaCBjaGFuZ2UgZGV0ZWN0aW9uIHN0cmF0ZWd5LFxuICAgIC8vIGFuZCBhcmUgdG8gYmUgbWFya2VkIGZvciBjaGVjay5cbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLnZhbHVlRm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHN1cGVyLnNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCk7XG4gICAgLy8gTWFyayBoYXNJc0Rpc2FibGVkQ3NzQ2xhc3MgQEhvc3RCaW5kaW5nIGZvciBjaGVjay5cbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIl19
|