ng-tailwind 2.24.331 → 2.24.332
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/animations/ngt-angular-animations.d.ts +5 -5
- package/base/ngt-base-ng-model.d.ts +32 -32
- package/bundles/ng-tailwind.umd.js +7385 -7383
- package/bundles/ng-tailwind.umd.js.map +1 -1
- package/components/ngt-action/ngt-action.component.d.ts +13 -13
- package/components/ngt-action/ngt-action.module.d.ts +2 -2
- package/components/ngt-button/ngt-button.component.d.ts +22 -22
- package/components/ngt-button/ngt-button.module.d.ts +2 -2
- package/components/ngt-checkbox/ngt-checkbox.component.d.ts +41 -41
- package/components/ngt-checkbox/ngt-checkbox.module.d.ts +2 -2
- package/components/ngt-content/ngt-content.component.d.ts +9 -9
- package/components/ngt-content/ngt-content.module.d.ts +2 -2
- package/components/ngt-datatable/ngt-datatable.component.d.ts +112 -112
- package/components/ngt-datatable/ngt-datatable.module.d.ts +2 -2
- package/components/ngt-datatable/ngt-tbody/ngt-tbody.component.d.ts +11 -11
- package/components/ngt-datatable/ngt-td/ngt-td.component.d.ts +11 -11
- package/components/ngt-datatable/ngt-td-check/ngt-td-check.component.d.ts +24 -24
- package/components/ngt-datatable/ngt-th/ngt-th.component.d.ts +47 -47
- package/components/ngt-datatable/ngt-th-check/ngt-th-check.component.d.ts +19 -19
- package/components/ngt-datatable/ngt-thead/ngt-thead.component.d.ts +10 -10
- package/components/ngt-datatable/ngt-tr/ngt-tr.component.d.ts +17 -17
- package/components/ngt-date/ngt-date.component.d.ts +72 -72
- package/components/ngt-date/ngt-date.module.d.ts +2 -2
- package/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.d.ts +5 -5
- package/components/ngt-dropdown/ngt-dropdown.component.d.ts +44 -44
- package/components/ngt-dropdown/ngt-dropdown.module.d.ts +2 -2
- package/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.d.ts +11 -11
- package/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.d.ts +15 -15
- package/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.d.ts +21 -21
- package/components/ngt-dropzone/ngt-dropzone.component.d.ts +103 -103
- package/components/ngt-dropzone/ngt-dropzone.module.d.ts +2 -2
- package/components/ngt-floating-button/ngt-floating-button.component.d.ts +32 -32
- package/components/ngt-floating-button/ngt-floating-button.module.d.ts +2 -2
- package/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.d.ts +7 -7
- package/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.module.d.ts +2 -2
- package/components/ngt-form/ngt-form.component.d.ts +52 -52
- package/components/ngt-form/ngt-form.module.d.ts +2 -2
- package/components/ngt-header-nav/ngt-header-nav.component.d.ts +11 -11
- package/components/ngt-header-nav/ngt-header-nav.module.d.ts +2 -2
- package/components/ngt-helper/ngt-helper.component.d.ts +19 -18
- package/components/ngt-helper/ngt-helper.module.d.ts +2 -2
- package/components/ngt-input/ngt-input.component.d.ts +105 -105
- package/components/ngt-input/ngt-input.module.d.ts +2 -2
- package/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.d.ts +2 -2
- package/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.d.ts +2 -2
- package/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.d.ts +12 -12
- package/components/ngt-modal/ngt-modal.component.d.ts +19 -19
- package/components/ngt-modal/ngt-modal.module.d.ts +2 -2
- package/components/ngt-multi-select/ngt-multi-select.component.d.ts +97 -97
- package/components/ngt-multi-select/ngt-multi-select.module.d.ts +2 -2
- package/components/ngt-pagination/ngt-pagination.component.d.ts +40 -40
- package/components/ngt-pagination/ngt-pagination.module.d.ts +2 -2
- package/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.d.ts +9 -9
- package/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.d.ts +9 -9
- package/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.d.ts +14 -14
- package/components/ngt-portlet/ngt-portlet.component.d.ts +17 -17
- package/components/ngt-portlet/ngt-portlet.module.d.ts +2 -2
- package/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.d.ts +6 -6
- package/components/ngt-radio-button/ngt-radio-button.component.d.ts +29 -29
- package/components/ngt-radio-button/ngt-radio-button.module.d.ts +2 -2
- package/components/ngt-section/ngt-section.component.d.ts +26 -26
- package/components/ngt-section/ngt-section.module.d.ts +2 -2
- package/components/ngt-select/ngt-select.component.d.ts +123 -123
- package/components/ngt-select/ngt-select.directive.d.ts +13 -13
- package/components/ngt-select/ngt-select.module.d.ts +2 -2
- package/components/ngt-shining/ngt-shining.component.d.ts +16 -16
- package/components/ngt-shining/ngt-shining.module.d.ts +2 -2
- package/components/ngt-sidenav/ngt-sidenav.component.d.ts +29 -29
- package/components/ngt-sidenav/ngt-sidenav.module.d.ts +2 -2
- package/components/ngt-slider/ngt-slider.component.d.ts +31 -31
- package/components/ngt-slider/ngt-slider.module.d.ts +2 -2
- package/components/ngt-svg/ngt-svg.component.d.ts +10 -10
- package/components/ngt-svg/ngt-svg.module.d.ts +2 -2
- package/components/ngt-tag/ngt-tag.component.d.ts +10 -10
- package/components/ngt-tag/ngt-tag.module.d.ts +2 -2
- package/components/ngt-textarea/ngt-textarea.component.d.ts +46 -46
- package/components/ngt-textarea/ngt-textarea.module.d.ts +2 -2
- package/components/ngt-validation/ngt-validation.component.d.ts +10 -10
- package/components/ngt-validation/ngt-validation.module.d.ts +2 -2
- package/directives/ngt-stylizable/ngt-stylizable.directive.d.ts +65 -65
- package/directives/ngt-stylizable/ngt-stylizable.module.d.ts +2 -2
- package/enums/size.enum.d.ts +8 -8
- package/esm2015/animations/ngt-angular-animations.js +34 -34
- package/esm2015/base/ngt-base-ng-model.js +90 -90
- package/esm2015/components/ngt-action/ngt-action.component.js +49 -49
- package/esm2015/components/ngt-action/ngt-action.module.js +19 -19
- package/esm2015/components/ngt-button/ngt-button.component.js +106 -106
- package/esm2015/components/ngt-button/ngt-button.module.js +19 -19
- package/esm2015/components/ngt-checkbox/ngt-checkbox.component.js +139 -139
- package/esm2015/components/ngt-checkbox/ngt-checkbox.module.js +19 -19
- package/esm2015/components/ngt-content/ngt-content.component.js +33 -33
- package/esm2015/components/ngt-content/ngt-content.module.js +15 -15
- package/esm2015/components/ngt-datatable/ngt-datatable.component.js +400 -400
- package/esm2015/components/ngt-datatable/ngt-datatable.module.js +58 -58
- package/esm2015/components/ngt-datatable/ngt-tbody/ngt-tbody.component.js +58 -58
- package/esm2015/components/ngt-datatable/ngt-td/ngt-td.component.js +63 -63
- package/esm2015/components/ngt-datatable/ngt-td-check/ngt-td-check.component.js +102 -102
- package/esm2015/components/ngt-datatable/ngt-th/ngt-th.component.js +192 -192
- package/esm2015/components/ngt-datatable/ngt-th-check/ngt-th-check.component.js +87 -87
- package/esm2015/components/ngt-datatable/ngt-thead/ngt-thead.component.js +56 -56
- package/esm2015/components/ngt-datatable/ngt-tr/ngt-tr.component.js +76 -76
- package/esm2015/components/ngt-date/ngt-date.component.js +359 -359
- package/esm2015/components/ngt-date/ngt-date.module.js +25 -25
- package/esm2015/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.js +20 -20
- package/esm2015/components/ngt-dropdown/ngt-dropdown.component.js +171 -171
- package/esm2015/components/ngt-dropdown/ngt-dropdown.module.js +16 -16
- package/esm2015/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.js +47 -47
- package/esm2015/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.js +60 -60
- package/esm2015/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.js +67 -67
- package/esm2015/components/ngt-dropzone/ngt-dropzone.component.js +411 -411
- package/esm2015/components/ngt-dropzone/ngt-dropzone.module.js +37 -37
- package/esm2015/components/ngt-floating-button/ngt-floating-button.component.js +94 -94
- package/esm2015/components/ngt-floating-button/ngt-floating-button.module.js +19 -19
- package/esm2015/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.js +23 -23
- package/esm2015/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.module.js +15 -15
- package/esm2015/components/ngt-form/ngt-form.component.js +181 -181
- package/esm2015/components/ngt-form/ngt-form.module.js +17 -17
- package/esm2015/components/ngt-header-nav/ngt-header-nav.component.js +38 -38
- package/esm2015/components/ngt-header-nav/ngt-header-nav.module.js +15 -15
- package/esm2015/components/ngt-helper/ngt-helper.component.js +49 -47
- package/esm2015/components/ngt-helper/ngt-helper.module.js +19 -19
- package/esm2015/components/ngt-input/ngt-input.component.js +635 -635
- package/esm2015/components/ngt-input/ngt-input.module.js +28 -28
- package/esm2015/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.js +11 -11
- package/esm2015/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.js +11 -11
- package/esm2015/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.js +40 -40
- package/esm2015/components/ngt-modal/ngt-modal.component.js +79 -79
- package/esm2015/components/ngt-modal/ngt-modal.module.js +28 -28
- package/esm2015/components/ngt-multi-select/ngt-multi-select.component.js +394 -394
- package/esm2015/components/ngt-multi-select/ngt-multi-select.module.js +33 -33
- package/esm2015/components/ngt-pagination/ngt-pagination.component.js +172 -172
- package/esm2015/components/ngt-pagination/ngt-pagination.module.js +23 -23
- package/esm2015/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.js +32 -32
- package/esm2015/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.js +33 -33
- package/esm2015/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.js +47 -47
- package/esm2015/components/ngt-portlet/ngt-portlet.component.js +58 -58
- package/esm2015/components/ngt-portlet/ngt-portlet.module.js +32 -32
- package/esm2015/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.js +19 -19
- package/esm2015/components/ngt-radio-button/ngt-radio-button.component.js +99 -99
- package/esm2015/components/ngt-radio-button/ngt-radio-button.module.js +18 -18
- package/esm2015/components/ngt-section/ngt-section.component.js +101 -101
- package/esm2015/components/ngt-section/ngt-section.module.js +21 -21
- package/esm2015/components/ngt-select/ngt-select.component.js +469 -469
- package/esm2015/components/ngt-select/ngt-select.directive.js +35 -35
- package/esm2015/components/ngt-select/ngt-select.module.js +40 -40
- package/esm2015/components/ngt-shining/ngt-shining.component.js +41 -41
- package/esm2015/components/ngt-shining/ngt-shining.module.js +15 -15
- package/esm2015/components/ngt-sidenav/ngt-sidenav.component.js +123 -123
- package/esm2015/components/ngt-sidenav/ngt-sidenav.module.js +15 -15
- package/esm2015/components/ngt-slider/ngt-slider.component.js +82 -82
- package/esm2015/components/ngt-slider/ngt-slider.module.js +17 -17
- package/esm2015/components/ngt-svg/ngt-svg.component.js +52 -52
- package/esm2015/components/ngt-svg/ngt-svg.module.js +19 -19
- package/esm2015/components/ngt-tag/ngt-tag.component.js +36 -36
- package/esm2015/components/ngt-tag/ngt-tag.module.js +17 -17
- package/esm2015/components/ngt-textarea/ngt-textarea.component.js +211 -211
- package/esm2015/components/ngt-textarea/ngt-textarea.module.js +24 -24
- package/esm2015/components/ngt-validation/ngt-validation.component.js +24 -24
- package/esm2015/components/ngt-validation/ngt-validation.module.js +15 -15
- package/esm2015/directives/ngt-stylizable/ngt-stylizable.directive.js +227 -227
- package/esm2015/directives/ngt-stylizable/ngt-stylizable.module.js +15 -15
- package/esm2015/enums/size.enum.js +11 -11
- package/esm2015/helpers/enum/enum.js +7 -7
- package/esm2015/helpers/form/form.js +14 -14
- package/esm2015/helpers/routing/route.js +11 -11
- package/esm2015/helpers/uuid.js +10 -10
- package/esm2015/ng-tailwind.js +10 -10
- package/esm2015/public-api.js +117 -117
- package/esm2015/services/http/ngt-attachment-http.service.js +3 -3
- package/esm2015/services/http/ngt-http-form.service.js +3 -3
- package/esm2015/services/http/ngt-http-resource.service.js +3 -3
- package/esm2015/services/http/ngt-http-validation.service.js +4 -4
- package/esm2015/services/http/ngt-http.service.js +3 -3
- package/esm2015/services/http/ngt-translate.service.js +3 -3
- package/esm2015/services/ngt-stylizable/ngt-stylizable.service.js +273 -273
- package/fesm2015/ng-tailwind.js +6469 -6467
- package/fesm2015/ng-tailwind.js.map +1 -1
- package/helpers/enum/enum.d.ts +1 -1
- package/helpers/form/form.d.ts +4 -4
- package/helpers/routing/route.d.ts +2 -2
- package/helpers/uuid.d.ts +1 -1
- package/ng-tailwind.d.ts +10 -10
- package/ng-tailwind.metadata.json +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +80 -80
- package/services/http/ngt-attachment-http.service.d.ts +10 -10
- package/services/http/ngt-http-form.service.d.ts +5 -5
- package/services/http/ngt-http-resource.service.d.ts +12 -12
- package/services/http/ngt-http-validation.service.d.ts +10 -10
- package/services/http/ngt-http.service.d.ts +27 -27
- package/services/http/ngt-translate.service.d.ts +27 -27
- package/services/ngt-stylizable/ngt-stylizable.service.d.ts +96 -96
|
@@ -1,469 +1,469 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, ContentChild, EventEmitter, Host, Injector, Input, Optional, Output, Self, SkipSelf, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import { ControlContainer, NgForm } from '@angular/forms';
|
|
3
|
-
import { NgSelectComponent } from '@ng-select/ng-select';
|
|
4
|
-
import { Observable, Subject } from 'rxjs';
|
|
5
|
-
import { NgtBaseNgModel, NgtMakeProvider } from '../../base/ngt-base-ng-model';
|
|
6
|
-
import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-stylizable.directive';
|
|
7
|
-
import { getEnumFromString } from '../../helpers/enum/enum';
|
|
8
|
-
import { uuid } from '../../helpers/uuid';
|
|
9
|
-
import { NgtHttpService } from '../../services/http/ngt-http.service';
|
|
10
|
-
import { NgtTranslateService } from '../../services/http/ngt-translate.service';
|
|
11
|
-
import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
|
|
12
|
-
import { NgtFormComponent } from '../ngt-form/ngt-form.component';
|
|
13
|
-
import { NgtSelectHeaderTmp, NgtSelectOptionSelectedTmp, NgtSelectOptionTmp } from './ngt-select.directive';
|
|
14
|
-
export class NgtSelectComponent extends NgtBaseNgModel {
|
|
15
|
-
constructor(ngtStylizableDirective, injector, formContainer, ngtFormComponent, ngtHttp, changeDetector, ngtTranslateService) {
|
|
16
|
-
super();
|
|
17
|
-
this.ngtStylizableDirective = ngtStylizableDirective;
|
|
18
|
-
this.injector = injector;
|
|
19
|
-
this.formContainer = formContainer;
|
|
20
|
-
this.ngtFormComponent = ngtFormComponent;
|
|
21
|
-
this.ngtHttp = ngtHttp;
|
|
22
|
-
this.changeDetector = changeDetector;
|
|
23
|
-
this.ngtTranslateService = ngtTranslateService;
|
|
24
|
-
/** Visual */
|
|
25
|
-
this.label = '';
|
|
26
|
-
this.helpTextColor = 'text-green-500';
|
|
27
|
-
this.shining = false;
|
|
28
|
-
this.loading = false;
|
|
29
|
-
this.loadingText = '';
|
|
30
|
-
this.notFoundText = '';
|
|
31
|
-
this.dropdownPosition = 'auto';
|
|
32
|
-
this.typeToSearchText = '';
|
|
33
|
-
this.clearAllTooltip = '';
|
|
34
|
-
this.placeholder = '';
|
|
35
|
-
this.createText = '';
|
|
36
|
-
this.labelForId = '';
|
|
37
|
-
this.dropdownPanelMinHeight = NgtSelectDropdownPanelHeight.AUTO;
|
|
38
|
-
this.allowCreate = false;
|
|
39
|
-
this.allowOriginalItemsUnselect = true;
|
|
40
|
-
this.isDisabled = false;
|
|
41
|
-
this.isReadonly = false;
|
|
42
|
-
this.bindLabel = 'name';
|
|
43
|
-
this.items = [];
|
|
44
|
-
this.closeOnSelect = true;
|
|
45
|
-
this.clearable = true;
|
|
46
|
-
this.groupBy = null;
|
|
47
|
-
this.multiple = false;
|
|
48
|
-
this.searchable = true;
|
|
49
|
-
this.clearSearchOnAdd = true;
|
|
50
|
-
this.virtualScroll = true;
|
|
51
|
-
/** Validation */
|
|
52
|
-
this.isRequired = false;
|
|
53
|
-
this.onLoadRemoteResource = new EventEmitter();
|
|
54
|
-
this.nativeName = uuid();
|
|
55
|
-
this.ngSelectItems = [];
|
|
56
|
-
this.componentReady = false;
|
|
57
|
-
this.originalPerPage = 15;
|
|
58
|
-
this.subscriptions = [];
|
|
59
|
-
this.currentState = {
|
|
60
|
-
filters: {},
|
|
61
|
-
sort: {
|
|
62
|
-
field: '',
|
|
63
|
-
direction: ''
|
|
64
|
-
},
|
|
65
|
-
pagination: {
|
|
66
|
-
count: null,
|
|
67
|
-
page: 1,
|
|
68
|
-
pages: null,
|
|
69
|
-
total: null,
|
|
70
|
-
from: null,
|
|
71
|
-
to: null,
|
|
72
|
-
per_page: null
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
this.compareWith = (a, b) => a === b;
|
|
76
|
-
if (this.ngtFormComponent) {
|
|
77
|
-
this.shining = this.ngtFormComponent.isShining();
|
|
78
|
-
this.subscriptions.push(this.ngtFormComponent.onShiningChange.subscribe((shining) => {
|
|
79
|
-
this.shining = shining;
|
|
80
|
-
}));
|
|
81
|
-
}
|
|
82
|
-
if (this.ngtStylizableDirective) {
|
|
83
|
-
this.ngtStyle = this.ngtStylizableDirective.getNgtStylizableService();
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
this.ngtStyle = new NgtStylizableService();
|
|
87
|
-
}
|
|
88
|
-
this.ngtStyle.load(this.injector, 'NgtSelect', {
|
|
89
|
-
h: 'h-12',
|
|
90
|
-
text: 'text-sm',
|
|
91
|
-
fontCase: '',
|
|
92
|
-
color: {
|
|
93
|
-
bg: 'bg-white'
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
ngOnInit() {
|
|
98
|
-
if (!this.formContainer) {
|
|
99
|
-
console.error("The element must be inside a <form #form='ngForm'> tag!");
|
|
100
|
-
}
|
|
101
|
-
if (!this.name) {
|
|
102
|
-
console.error("The element must contain a name attribute!");
|
|
103
|
-
}
|
|
104
|
-
if (!this.multiple && this.isRequired) {
|
|
105
|
-
this.clearable = false;
|
|
106
|
-
}
|
|
107
|
-
if (this.multiple) {
|
|
108
|
-
this.closeOnSelect = false;
|
|
109
|
-
}
|
|
110
|
-
setTimeout(() => {
|
|
111
|
-
this.componentReady = true;
|
|
112
|
-
this.initComponentValidation();
|
|
113
|
-
}, 500);
|
|
114
|
-
this.ngSelectItems = new Observable((observer) => {
|
|
115
|
-
this.ngSearchObserver = observer;
|
|
116
|
-
observer.next([]);
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
ngAfterViewInit() {
|
|
120
|
-
this.bindInnerInputUniqueId();
|
|
121
|
-
}
|
|
122
|
-
ngDoCheck() {
|
|
123
|
-
if (!this.becameVisible && !this.isHidden()) {
|
|
124
|
-
this.becameVisible = true;
|
|
125
|
-
this.initNgSelectItems();
|
|
126
|
-
setTimeout(() => {
|
|
127
|
-
var _a;
|
|
128
|
-
this.replaceShowAddTag();
|
|
129
|
-
this.ngSelectComponent.itemsList.mapSelectedItems();
|
|
130
|
-
if (!this.getElementTitle() || this.getElementTitle() === 'null') {
|
|
131
|
-
this.ngSelectComponent.element.parentElement.parentElement.parentElement.title = '';
|
|
132
|
-
}
|
|
133
|
-
this.originalItems = (_a = this.ngSelectComponent.selectedItems) === null || _a === void 0 ? void 0 : _a.map((element) => element.value);
|
|
134
|
-
this.changeDetector.detectChanges();
|
|
135
|
-
}, 500);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
ngOnDestroy() {
|
|
139
|
-
this.destroySubscriptions();
|
|
140
|
-
}
|
|
141
|
-
removeItem(event, item) {
|
|
142
|
-
event.preventDefault();
|
|
143
|
-
event.stopPropagation();
|
|
144
|
-
return this.ngSelectComponent.clearItem(item);
|
|
145
|
-
}
|
|
146
|
-
refresh() {
|
|
147
|
-
this.initNgSelectItems();
|
|
148
|
-
this.initComponentValidation();
|
|
149
|
-
}
|
|
150
|
-
reset() {
|
|
151
|
-
this.value = undefined;
|
|
152
|
-
this.nativeValue = undefined;
|
|
153
|
-
this.refresh();
|
|
154
|
-
}
|
|
155
|
-
ngOnChanges(changes) {
|
|
156
|
-
if (changes.isRequired) {
|
|
157
|
-
this.updateValidations();
|
|
158
|
-
}
|
|
159
|
-
if ((changes.remoteResource && this.becameVisible) || changes.items) {
|
|
160
|
-
this.initNgSelectItems();
|
|
161
|
-
}
|
|
162
|
-
if (changes.dropdownPanelMinHeight) {
|
|
163
|
-
this.dropdownPanelMinHeight = getEnumFromString(changes.dropdownPanelMinHeight.currentValue, NgtSelectDropdownPanelHeight);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
setFocus() {
|
|
167
|
-
setTimeout(() => {
|
|
168
|
-
this.ngSelectComponent.focus();
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
onClearSelect() {
|
|
172
|
-
if (!this.nativeValue) {
|
|
173
|
-
this.markAsPristine();
|
|
174
|
-
}
|
|
175
|
-
this.currentState.filters = {};
|
|
176
|
-
}
|
|
177
|
-
onRemoveSelectedItem(item) {
|
|
178
|
-
if (!this.allowOriginalItemsUnselect && this.hadPreviousSelection(item.value)) {
|
|
179
|
-
setTimeout(() => this.ngSelectComponent.select(item));
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
getFilterInputValue() {
|
|
183
|
-
let inputField = this.ngSelectComponent.searchInput ?
|
|
184
|
-
this.ngSelectComponent.searchInput :
|
|
185
|
-
this.ngSelectComponent['searchInput'];
|
|
186
|
-
if (inputField &&
|
|
187
|
-
inputField.nativeElement) {
|
|
188
|
-
return inputField.nativeElement.value;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
search(filters) {
|
|
192
|
-
this.currentState.filters = Object.assign(Object.assign({}, this.currentState.filters), filters);
|
|
193
|
-
if (!this.remoteResource) {
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
if (this.searchTimeout) {
|
|
197
|
-
clearTimeout(this.searchTimeout);
|
|
198
|
-
}
|
|
199
|
-
this.loading = true;
|
|
200
|
-
this.changeDetector.detectChanges();
|
|
201
|
-
this.searchTimeout = setTimeout(() => {
|
|
202
|
-
this.subscriptions.push(this.ngtHttp
|
|
203
|
-
.get(this.remoteResource, this.currentState.filters, this.currentState.pagination)
|
|
204
|
-
.subscribe((response) => {
|
|
205
|
-
this.loading = false;
|
|
206
|
-
this.ngSearchObserver.next(response.data);
|
|
207
|
-
this.onLoadRemoteResource.emit(response.data);
|
|
208
|
-
this.currentState.pagination = response.meta.pagination;
|
|
209
|
-
this.changeDetector.detectChanges();
|
|
210
|
-
}, (error) => {
|
|
211
|
-
this.loading = false;
|
|
212
|
-
this.changeDetector.detectChanges();
|
|
213
|
-
console.error(error);
|
|
214
|
-
this.ngSearchObserver.next([]);
|
|
215
|
-
}));
|
|
216
|
-
}, 500);
|
|
217
|
-
}
|
|
218
|
-
onNativeChange(value) {
|
|
219
|
-
if (this.hasChangesBetweenModels(this.value, value)) {
|
|
220
|
-
this.value = value;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
change(value) {
|
|
224
|
-
if (this.hasChangesBetweenModels(value, this.nativeValue)) {
|
|
225
|
-
if (Array.isArray(value)) {
|
|
226
|
-
value = value.map((val) => val);
|
|
227
|
-
}
|
|
228
|
-
this.nativeValue = value;
|
|
229
|
-
if (!value) {
|
|
230
|
-
this.markAsPristine();
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
onScroll({ end }) {
|
|
235
|
-
let currentPerPage = this.currentState.pagination.per_page;
|
|
236
|
-
let maxItensInBackend = this.currentState.pagination.total;
|
|
237
|
-
if (end >= currentPerPage && end <= maxItensInBackend) {
|
|
238
|
-
this.currentState.pagination.per_page = parseInt(this.currentState.pagination.per_page) + this.originalPerPage;
|
|
239
|
-
this.search({});
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
hasSelectedValue() {
|
|
243
|
-
return this.value && JSON.stringify(this.value);
|
|
244
|
-
}
|
|
245
|
-
getSelectClass() {
|
|
246
|
-
let selectClass = this.dropdownPanelMinHeight ? 'ng-select-dropdown-panel-' + this.dropdownPanelMinHeight : 'ng-select-dropdown-panel-auto';
|
|
247
|
-
if (this.isDisabled) {
|
|
248
|
-
selectClass += ' select-border-disabled';
|
|
249
|
-
}
|
|
250
|
-
else if (this.formControl && this.formControl.errors && (this.formControl.dirty || (this.formContainer && this.formContainer['submitted']))) {
|
|
251
|
-
selectClass += ' select-border-error';
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
selectClass += ' select-border-normal';
|
|
255
|
-
}
|
|
256
|
-
if (this.multiple) {
|
|
257
|
-
selectClass += ` h-auto ${this.ngtStyle.compile(['color.bg', 'color.text'])}`;
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
selectClass += ` ${this.ngtStyle.compile(['h', 'color.bg', 'color.text'])}`;
|
|
261
|
-
}
|
|
262
|
-
return selectClass;
|
|
263
|
-
}
|
|
264
|
-
initNgSelectItems() {
|
|
265
|
-
if (this.remoteResource && this.becameVisible) {
|
|
266
|
-
this.ngSelectItems = new Observable(observer => {
|
|
267
|
-
this.ngSearchObserver = observer;
|
|
268
|
-
this.search({});
|
|
269
|
-
});
|
|
270
|
-
this.typeahead = new Subject();
|
|
271
|
-
this.subscriptions.push(this.typeahead.subscribe((term) => {
|
|
272
|
-
this.search({ term: term });
|
|
273
|
-
}));
|
|
274
|
-
}
|
|
275
|
-
else if (this.items instanceof Observable) {
|
|
276
|
-
this.ngSelectItems = this.items;
|
|
277
|
-
}
|
|
278
|
-
else {
|
|
279
|
-
if (!this.items) {
|
|
280
|
-
this.items = [];
|
|
281
|
-
}
|
|
282
|
-
this.ngSelectItems = new Observable((observer) => {
|
|
283
|
-
this.ngSearchObserver = observer;
|
|
284
|
-
observer.next(this.items);
|
|
285
|
-
});
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
initComponentValidation() {
|
|
289
|
-
if (this.formContainer && this.formContainer.control && (this.formControl = this.formContainer.control.get(this.name))) {
|
|
290
|
-
this.formControl = this.formContainer.control.get(this.name);
|
|
291
|
-
this.markAsPristine();
|
|
292
|
-
this.updateValidations();
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
getElementTitle() {
|
|
296
|
-
return this.ngSelectComponent.element.parentElement.parentElement.parentElement.title;
|
|
297
|
-
}
|
|
298
|
-
hasChangesBetweenModels(value, nativeValue) {
|
|
299
|
-
return JSON.stringify(value) !== JSON.stringify(nativeValue);
|
|
300
|
-
}
|
|
301
|
-
updateValidations() {
|
|
302
|
-
if (!this.formControl) {
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
|
-
let syncValidators = [];
|
|
306
|
-
if (this.isRequired) {
|
|
307
|
-
syncValidators.push(this.isRequiredValidator());
|
|
308
|
-
}
|
|
309
|
-
setTimeout(() => {
|
|
310
|
-
this.formControl.setValidators(syncValidators);
|
|
311
|
-
this.formControl.updateValueAndValidity();
|
|
312
|
-
});
|
|
313
|
-
}
|
|
314
|
-
isRequiredValidator() {
|
|
315
|
-
return (control) => {
|
|
316
|
-
if (this.multiple) {
|
|
317
|
-
if (Array.isArray(this.value) && this.value.length > 0) {
|
|
318
|
-
return null;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
else if (control.value && JSON.stringify(control.value)) {
|
|
322
|
-
return null;
|
|
323
|
-
}
|
|
324
|
-
return { 'required': true };
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
replaceShowAddTag() {
|
|
328
|
-
Object.defineProperty(this.ngSelectComponent, 'showAddTag', {
|
|
329
|
-
get: () => {
|
|
330
|
-
if (!this.ngSelectComponent['searchTerm']) {
|
|
331
|
-
return false;
|
|
332
|
-
}
|
|
333
|
-
const term = this.ngSelectComponent['searchTerm'].toLocaleLowerCase();
|
|
334
|
-
return this.ngSelectComponent.addTag && !this.ngSelectComponent.loading
|
|
335
|
-
&& (!this.hasTermInFilteredItems(term) && (!this.hasTermInSelectedItems(term)
|
|
336
|
-
|| !this.ngSelectComponent.hideSelected && this.ngSelectComponent.isOpen));
|
|
337
|
-
}
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
bindInnerInputUniqueId() {
|
|
341
|
-
const childInputs = this.ngSelectComponent.element.getElementsByTagName('input');
|
|
342
|
-
if (childInputs === null || childInputs === void 0 ? void 0 : childInputs.length) {
|
|
343
|
-
const innerInput = childInputs[0];
|
|
344
|
-
innerInput.id = uuid();
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
hasTermInFilteredItems(term) {
|
|
348
|
-
const filteredItems = this.ngSelectComponent.itemsList.filteredItems;
|
|
349
|
-
if (this.isColoquentResource()) {
|
|
350
|
-
return filteredItems.some((element) => {
|
|
351
|
-
const elementValue = element.value.getAttribute(this.bindLabel);
|
|
352
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
return filteredItems.some((element) => {
|
|
356
|
-
const elementValue = element.value[this.bindLabel];
|
|
357
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
hasTermInSelectedItems(term) {
|
|
361
|
-
const selectedItems = this.ngSelectComponent.selectedItems;
|
|
362
|
-
if (this.isColoquentResource()) {
|
|
363
|
-
return selectedItems.some((element) => {
|
|
364
|
-
const elementValue = element.value.getAttribute(this.bindLabel);
|
|
365
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
366
|
-
});
|
|
367
|
-
}
|
|
368
|
-
return selectedItems.some((element) => {
|
|
369
|
-
const elementValue = element.value[this.bindLabel];
|
|
370
|
-
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
hadPreviousSelection(item) {
|
|
374
|
-
var _a;
|
|
375
|
-
return !!((_a = this.originalItems) === null || _a === void 0 ? void 0 : _a.find(element => this.compareWith(element, item)));
|
|
376
|
-
}
|
|
377
|
-
isColoquentResource() {
|
|
378
|
-
const filteredItems = this.ngSelectComponent.itemsList.filteredItems;
|
|
379
|
-
return filteredItems && filteredItems.length && typeof filteredItems[0].value['getAttribute'] === 'function';
|
|
380
|
-
}
|
|
381
|
-
isHidden() {
|
|
382
|
-
return this.ngSelectComponent.element.offsetParent === null;
|
|
383
|
-
}
|
|
384
|
-
destroySubscriptions() {
|
|
385
|
-
this.subscriptions.forEach(subscription => subscription.unsubscribe());
|
|
386
|
-
this.subscriptions = [];
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
NgtSelectComponent.decorators = [
|
|
390
|
-
{ type: Component, args: [{
|
|
391
|
-
selector: 'ngt-select',
|
|
392
|
-
template: "<label *ngIf=\"label\" [hidden]='shining'\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\" >\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\n {{ label }}:\n\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<div [hidden]='shining' class=\"{{ getSelectClass() }} normal-case\" style=\"min-height: 3rem;\">\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' (change)=\"onNativeChange($event)\"\n [addTag]='allowCreate' [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\"\n [bindLabel]=\"bindLabel\" [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\n [disabled]='isDisabled || isReadonly' [clearable]=\"clearable && hasSelectedValue()\" [closeOnSelect]=\"closeOnSelect\"\n [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\" [clearSearchOnAdd]=\"clearSearchOnAdd\"\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\n [virtualScroll]=\"virtualScroll\" [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\"\n (scroll)=\"onScroll($event)\" [bindValue]=\"bindValue\" [groupValue]=\"groupValue\" [loading]=\"loading\"\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\n [compareWith]='compareWith' (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'>\n\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\n </ng-template>\n </ng-template>\n\n <ng-template ng-label-tmp let-item=\"item\">\n <div class=\"flex w-full items-center pr-1\">\n <ng-container *ngIf=\"multiple\">\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\n (click)='removeItem($event, item)'>\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\">\n <path\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\n </svg>\n </div>\n </ng-container>\n\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item }\">\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\n </ng-template>\n </ng-template>\n </ng-select>\n</div>\n\n<ng-container *ngIf='shining'>\n <div class=\"flex\">\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\n </div>\n</ng-container>\n\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\n",
|
|
393
|
-
providers: [
|
|
394
|
-
NgtMakeProvider(NgtSelectComponent)
|
|
395
|
-
],
|
|
396
|
-
viewProviders: [
|
|
397
|
-
{ provide: ControlContainer, useExisting: NgForm }
|
|
398
|
-
],
|
|
399
|
-
encapsulation: ViewEncapsulation.None,
|
|
400
|
-
styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 3px rgba(0,126,255,.1)}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px 0 rgba(0,0,0,.06)}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.06);left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:rgba(0,0,0,.54);cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:rgba(0,0,0,.87);padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:3rem!important}.select-border-disabled .ng-select-container{border:1px solid #cbd5e0!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:1px solid #c53030!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:1px solid #cbd5e0!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}"]
|
|
401
|
-
},] }
|
|
402
|
-
];
|
|
403
|
-
NgtSelectComponent.ctorParameters = () => [
|
|
404
|
-
{ type: NgtStylizableDirective, decorators: [{ type: Optional }, { type: Self }] },
|
|
405
|
-
{ type: Injector },
|
|
406
|
-
{ type: ControlContainer, decorators: [{ type: Optional }, { type: Host }] },
|
|
407
|
-
{ type: NgtFormComponent, decorators: [{ type: Optional }, { type: SkipSelf }] },
|
|
408
|
-
{ type: NgtHttpService },
|
|
409
|
-
{ type: ChangeDetectorRef },
|
|
410
|
-
{ type: NgtTranslateService, decorators: [{ type: Optional }] }
|
|
411
|
-
];
|
|
412
|
-
NgtSelectComponent.propDecorators = {
|
|
413
|
-
ngSelectComponent: [{ type: ViewChild, args: [NgSelectComponent, { static: true },] }],
|
|
414
|
-
ngtOptionTemplate: [{ type: ContentChild, args: [NgtSelectOptionTmp, { read: TemplateRef },] }],
|
|
415
|
-
ngtOptionSelectedTemplate: [{ type: ContentChild, args: [NgtSelectOptionSelectedTmp, { read: TemplateRef },] }],
|
|
416
|
-
ngtSelectHeaderTemplate: [{ type: ContentChild, args: [NgtSelectHeaderTmp, { read: TemplateRef },] }],
|
|
417
|
-
label: [{ type: Input }],
|
|
418
|
-
labelIcon: [{ type: Input }],
|
|
419
|
-
labelIconColor: [{ type: Input }],
|
|
420
|
-
helpTitle: [{ type: Input }],
|
|
421
|
-
helpText: [{ type: Input }],
|
|
422
|
-
helpTextColor: [{ type: Input }],
|
|
423
|
-
shining: [{ type: Input }],
|
|
424
|
-
loading: [{ type: Input }],
|
|
425
|
-
loadingText: [{ type: Input }],
|
|
426
|
-
notFoundText: [{ type: Input }],
|
|
427
|
-
dropdownPosition: [{ type: Input }],
|
|
428
|
-
typeToSearchText: [{ type: Input }],
|
|
429
|
-
clearAllTooltip: [{ type: Input }],
|
|
430
|
-
placeholder: [{ type: Input }],
|
|
431
|
-
createText: [{ type: Input }],
|
|
432
|
-
labelForId: [{ type: Input }],
|
|
433
|
-
dropdownPanelMinHeight: [{ type: Input }],
|
|
434
|
-
name: [{ type: Input }],
|
|
435
|
-
allowCreate: [{ type: Input }],
|
|
436
|
-
allowOriginalItemsUnselect: [{ type: Input }],
|
|
437
|
-
isDisabled: [{ type: Input }],
|
|
438
|
-
isReadonly: [{ type: Input }],
|
|
439
|
-
remoteResource: [{ type: Input }],
|
|
440
|
-
hideSelected: [{ type: Input }],
|
|
441
|
-
bindLabel: [{ type: Input }],
|
|
442
|
-
bindValue: [{ type: Input }],
|
|
443
|
-
items: [{ type: Input }],
|
|
444
|
-
closeOnSelect: [{ type: Input }],
|
|
445
|
-
clearable: [{ type: Input }],
|
|
446
|
-
groupBy: [{ type: Input }],
|
|
447
|
-
maxSelectedItems: [{ type: Input }],
|
|
448
|
-
multiple: [{ type: Input }],
|
|
449
|
-
searchable: [{ type: Input }],
|
|
450
|
-
clearSearchOnAdd: [{ type: Input }],
|
|
451
|
-
virtualScroll: [{ type: Input }],
|
|
452
|
-
tabIndex: [{ type: Input }],
|
|
453
|
-
typeahead: [{ type: Input }],
|
|
454
|
-
groupValue: [{ type: Input }],
|
|
455
|
-
trackBy: [{ type: Input }],
|
|
456
|
-
isRequired: [{ type: Input }],
|
|
457
|
-
onLoadRemoteResource: [{ type: Output }],
|
|
458
|
-
compareWith: [{ type: Input }]
|
|
459
|
-
};
|
|
460
|
-
export var NgtSelectDropdownPanelHeight;
|
|
461
|
-
(function (NgtSelectDropdownPanelHeight) {
|
|
462
|
-
NgtSelectDropdownPanelHeight["AUTO"] = "auto";
|
|
463
|
-
NgtSelectDropdownPanelHeight["XS"] = "xs";
|
|
464
|
-
NgtSelectDropdownPanelHeight["MD"] = "md";
|
|
465
|
-
NgtSelectDropdownPanelHeight["SM"] = "sm";
|
|
466
|
-
NgtSelectDropdownPanelHeight["LG"] = "lg";
|
|
467
|
-
NgtSelectDropdownPanelHeight["XL"] = "xl";
|
|
468
|
-
})(NgtSelectDropdownPanelHeight || (NgtSelectDropdownPanelHeight = {}));
|
|
469
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3Qtc2VsZWN0L25ndC1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osSUFBSSxFQUNKLFFBQVEsRUFDUixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBRUosUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0UsT0FBTyxFQUFZLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBWSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBbUIsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDaEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFr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WDtBQVBELFdBQVksNEJBQTRCO0lBQ3BDLDZDQUFhLENBQUE7SUFDYix5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtJQUNULHlDQUFTLENBQUE7SUFDVCx5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtBQUNiLENBQUMsRUFQVyw0QkFBNEIsS0FBNUIsNEJBQTRCLFFBT3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIERvQ2hlY2ssXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFNlbGYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ09wdGlvbiwgTmdTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAbmctc2VsZWN0L25nLXNlbGVjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5ndEJhc2VOZ01vZGVsLCBOZ3RNYWtlUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9iYXNlL25ndC1iYXNlLW5nLW1vZGVsJztcbmltcG9ydCB7IE5ndFN0eWxpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBnZXRFbnVtRnJvbVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bS9lbnVtJztcbmltcG9ydCB7IHV1aWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3V1aWQnO1xuaW1wb3J0IHsgTmd0SHR0cFJlc3BvbnNlLCBOZ3RIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LWh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9uZ3QtZm9ybS9uZ3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0U2VsZWN0SGVhZGVyVG1wLCBOZ3RTZWxlY3RPcHRpb25TZWxlY3RlZFRtcCwgTmd0U2VsZWN0T3B0aW9uVG1wIH0gZnJvbSAnLi9uZ3Qtc2VsZWN0LmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25ndC1zZWxlY3QuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0U2VsZWN0Q29tcG9uZW50KVxuICAgIF0sXG4gICAgdmlld1Byb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBOZ3RCYXNlTmdNb2RlbCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIERvQ2hlY2sge1xuICAgIEBWaWV3Q2hpbGQoTmdTZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBuZ1NlbGVjdENvbXBvbmVudDogTmdTZWxlY3RDb21wb25lbnQ7XG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RPcHRpb25UbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoTmd0U2VsZWN0T3B0aW9uU2VsZWN0ZWRUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndE9wdGlvblNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RIZWFkZXJUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndFNlbGVjdEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIFZpc3VhbCAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsSWNvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbEljb25Db2xvcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGl0bGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRleHRDb2xvcjogc3RyaW5nID0gJ3RleHQtZ3JlZW4tNTAwJztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgbm90Rm91bmRUZXh0OiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgZHJvcGRvd25Qb3NpdGlvbiA9ICdhdXRvJztcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZVRvU2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyQWxsVG9vbHRpcDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBwdWJsaWMgY3JlYXRlVGV4dDogc3RyaW5nID0gJyc7XG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsRm9ySWQ6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wZG93blBhbmVsTWluSGVpZ2h0OiBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0ID0gTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodC5BVVRPO1xuXG4gICAgLyoqIEJlaGF2aW9yICovXG4gICAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dDcmVhdGU6IGJvb2xlYW4gfCBQcm9taXNlPGFueT4gfCBGdW5jdGlvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd09yaWdpbmFsSXRlbXNVbnNlbGVjdDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByZW1vdGVSZXNvdXJjZTogYW55O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBoaWRlU2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGJpbmRMYWJlbDogc3RyaW5nID0gJ25hbWUnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBiaW5kVmFsdWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbXM6IEFycmF5PGFueT4gfCBPYnNlcnZhYmxlPGFueT4gPSBbXTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY2xvc2VPblNlbGVjdDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGdyb3VwQnk6IHN0cmluZyB8IEZ1bmN0aW9uID0gbnVsbDtcbiAgICBASW5wdXQoKSBwdWJsaWMgbWF4U2VsZWN0ZWRJdGVtczogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY2xlYXJTZWFyY2hPbkFkZDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIHZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0YWJJbmRleDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHB1YmxpYyB0eXBlYWhlYWQ6IFN1YmplY3Q8YW55PjtcbiAgICBASW5wdXQoKSBwdWJsaWMgZ3JvdXBWYWx1ZTogKGdyb3VwS2V5OiBzdHJpbmcsIGNpbGRyZW46IGFueVtdKSA9PiBPYmplY3Q7XG4gICAgQElucHV0KCkgcHVibGljIHRyYWNrQnk6IChpdGVtOiBhbnkpID0+IGFueTtcblxuICAgIC8qKiBWYWxpZGF0aW9uICovXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25Mb2FkUmVtb3RlUmVzb3VyY2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwdWJsaWMgbmF0aXZlTmFtZSA9IHV1aWQoKTtcbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBuZ1NlbGVjdEl0ZW1zOiBhbnkgPSBbXTtcbiAgICBwdWJsaWMgbmF0aXZlVmFsdWU6IGFueTtcbiAgICBwdWJsaWMgY29tcG9uZW50UmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByaXZhdGUgbmdTZWFyY2hPYnNlcnZlcjogT2JzZXJ2ZXI8YW55PjtcbiAgICBwcml2YXRlIG9yaWdpbmFsUGVyUGFnZSA9IDE1O1xuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuICAgIHByaXZhdGUgb3JpZ2luYWxJdGVtczogQXJyYXk8YW55PjtcblxuICAgIHByaXZhdGUgY3VycmVudFN0YXRlID0ge1xuICAgICAgICBmaWx0ZXJzOiB7fSxcbiAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgZmllbGQ6ICcnLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAnJ1xuICAgICAgICB9LFxuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBjb3VudDogbnVsbCxcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICBwYWdlczogbnVsbCxcbiAgICAgICAgICAgIHRvdGFsOiBudWxsLFxuICAgICAgICAgICAgZnJvbTogbnVsbCxcbiAgICAgICAgICAgIHRvOiBudWxsLFxuICAgICAgICAgICAgcGVyX3BhZ2U6IG51bGxcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHNlYXJjaFRpbWVvdXQ6IGFueTtcbiAgICBwcml2YXRlIGJlY2FtZVZpc2libGU6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKClcbiAgICAgICAgcHVibGljIG5ndFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmUsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXG4gICAgICAgIHB1YmxpYyBmb3JtQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwdWJsaWMgbmd0Rm9ybUNvbXBvbmVudDogTmd0Rm9ybUNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSBuZ3RIdHRwOiBOZ3RIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmd0Rm9ybUNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gdGhpcy5uZ3RGb3JtQ29tcG9uZW50LmlzU2hpbmluZygpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEZvcm1Db21wb25lbnQub25TaGluaW5nQ2hhbmdlLnN1YnNjcmliZSgoc2hpbmluZzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IHRoaXMubmd0U3R5bGl6YWJsZURpcmVjdGl2ZS5nZXROZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uZ3RTdHlsZSA9IG5ldyBOZ3RTdHlsaXphYmxlU2VydmljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5uZ3RTdHlsZS5sb2FkKHRoaXMuaW5qZWN0b3IsICdOZ3RTZWxlY3QnLCB7XG4gICAgICAgICAgICBoOiAnaC0xMicsXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC1zbScsXG4gICAgICAgICAgICBmb250Q2FzZTogJycsXG4gICAgICAgICAgICBjb2xvcjoge1xuICAgICAgICAgICAgICAgIGJnOiAnYmctd2hpdGUnXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHB1YmxpYyBjb21wYXJlV2l0aCA9IChhOiBhbnksIGI6IGFueSkgPT4gYSA9PT0gYjtcblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGJlIGluc2lkZSBhIDxmb3JtICNmb3JtPSduZ0Zvcm0nPiB0YWchXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGNvbnRhaW4gYSBuYW1lIGF0dHJpYnV0ZSFcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyYWJsZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VPblNlbGVjdCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbXBvbmVudFZhbGlkYXRpb24oKTtcbiAgICAgICAgfSwgNTAwKTtcblxuICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChbXSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuYmluZElubmVySW5wdXRVbmlxdWVJZCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5iZWNhbWVWaXNpYmxlICYmICF0aGlzLmlzSGlkZGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYmVjYW1lVmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdE5nU2VsZWN0SXRlbXMoKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlU2hvd0FkZFRhZygpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pdGVtc0xpc3QubWFwU2VsZWN0ZWRJdGVtcygpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdldEVsZW1lbnRUaXRsZSgpIHx8IHRoaXMuZ2V0RWxlbWVudFRpdGxlKCkgPT09ICdudWxsJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQudGl0bGUgPSAnJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdGVkSXRlbXM/Lm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShldmVudDogRXZlbnQsIGl0ZW06IGFueSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5jbGVhckl0ZW0oaXRlbSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZnJlc2goKSB7XG4gICAgICAgIHRoaXMuaW5pdE5nU2VsZWN0SXRlbXMoKTtcbiAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50VmFsaWRhdGlvbigpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldCgpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5uYXRpdmVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaXNSZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChjaGFuZ2VzLnJlbW90ZVJlc291cmNlICYmIHRoaXMuYmVjYW1lVmlzaWJsZSkgfHwgY2hhbmdlcy5pdGVtcykge1xuICAgICAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0ID0gZ2V0RW51bUZyb21TdHJpbmcoY2hhbmdlcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0LmN1cnJlbnRWYWx1ZSwgTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9jdXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DbGVhclNlbGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5hdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzID0ge307XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlU2VsZWN0ZWRJdGVtKGl0ZW06IE5nT3B0aW9uKSB7XG4gICAgICAgIGlmICghdGhpcy5hbGxvd09yaWdpbmFsSXRlbXNVbnNlbGVjdCAmJiB0aGlzLmhhZFByZXZpb3VzU2VsZWN0aW9uKGl0ZW0udmFsdWUpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0KGl0ZW0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWx0ZXJJbnB1dFZhbHVlKCkge1xuICAgICAgICBsZXQgaW5wdXRGaWVsZCA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VhcmNoSW5wdXQgP1xuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5zZWFyY2hJbnB1dCA6XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hJbnB1dCddO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGlucHV0RmllbGQgJiZcbiAgICAgICAgICAgIGlucHV0RmllbGQubmF0aXZlRWxlbWVudFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKGZpbHRlcnM6IGFueSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzID0geyAuLi50aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzLCAuLi5maWx0ZXJzIH07XG5cbiAgICAgICAgaWYgKCF0aGlzLnJlbW90ZVJlc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5uZ3RIdHRwXG4gICAgICAgICAgICAgICAgICAgIC5nZXQodGhpcy5yZW1vdGVSZXNvdXJjZSwgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycywgdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZTogTmd0SHR0cFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1NlYXJjaE9ic2VydmVyLm5leHQocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkxvYWRSZW1vdGVSZXNvdXJjZS5lbWl0KHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24gPSByZXNwb25zZS5tZXRhLnBhZ2luYXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1NlYXJjaE9ic2VydmVyLm5leHQoW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5hdGl2ZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscyh0aGlzLnZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModmFsdWUsIHRoaXMubmF0aXZlVmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcCgodmFsKSA9PiB2YWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25TY3JvbGwoeyBlbmQgfSkge1xuICAgICAgICBsZXQgY3VycmVudFBlclBhZ2UgPSB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnBlcl9wYWdlO1xuICAgICAgICBsZXQgbWF4SXRlbnNJbkJhY2tlbmQgPSB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnRvdGFsO1xuXG4gICAgICAgIGlmIChlbmQgPj0gY3VycmVudFBlclBhZ2UgJiYgZW5kIDw9IG1heEl0ZW5zSW5CYWNrZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnBlcl9wYWdlID0gcGFyc2VJbnQodGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZSkgKyB0aGlzLm9yaWdpbmFsUGVyUGFnZTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoKHt9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYXNTZWxlY3RlZFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAmJiBKU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VsZWN0Q2xhc3MoKSB7XG4gICAgICAgIGxldCBzZWxlY3RDbGFzcyA9IHRoaXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodCA/ICduZy1zZWxlY3QtZHJvcGRvd24tcGFuZWwtJyArIHRoaXMuZHJvcGRvd25QYW5lbE1pbkhlaWdodCA6ICduZy1zZWxlY3QtZHJvcGRvd24tcGFuZWwtYXV0byc7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gJyBzZWxlY3QtYm9yZGVyLWRpc2FibGVkJztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm1Db250cm9sICYmIHRoaXMuZm9ybUNvbnRyb2wuZXJyb3JzICYmICh0aGlzLmZvcm1Db250cm9sLmRpcnR5IHx8ICh0aGlzLmZvcm1Db250YWluZXIgJiYgdGhpcy5mb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSkpKSB7XG4gICAgICAgICAgICBzZWxlY3RDbGFzcyArPSAnIHNlbGVjdC1ib3JkZXItZXJyb3InO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gJyBzZWxlY3QtYm9yZGVyLW5vcm1hbCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gYCBoLWF1dG8gJHt0aGlzLm5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci5iZycsICdjb2xvci50ZXh0J10pfWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3RDbGFzcyArPSBgICR7dGhpcy5uZ3RTdHlsZS5jb21waWxlKFsnaCcsICdjb2xvci5iZycsICdjb2xvci50ZXh0J10pfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0Q2xhc3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0TmdTZWxlY3RJdGVtcygpIHtcbiAgICAgICAgaWYgKHRoaXMucmVtb3RlUmVzb3VyY2UgJiYgdGhpcy5iZWNhbWVWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0SXRlbXMgPSBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1NlYXJjaE9ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goe30pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkID0gbmV3IFN1YmplY3QoKTtcblxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuc3Vic2NyaWJlKCh0ZXJtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoKHsgdGVybTogdGVybSB9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLml0ZW1zIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdEl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdEl0ZW1zID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1NlYXJjaE9ic2VydmVyID0gb2JzZXJ2ZXI7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0Q29tcG9uZW50VmFsaWRhdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybUNvbnRhaW5lciAmJiB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbCAmJiAodGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpKSkge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sLmdldCh0aGlzLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbGVtZW50VGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKHZhbHVlLCBuYXRpdmVWYWx1ZSkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShuYXRpdmVWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3luY1ZhbGlkYXRvcnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuaXNSZXF1aXJlZFZhbGlkYXRvcigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHN5bmNWYWxpZGF0b3JzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUmVxdWlyZWRWYWxpZGF0b3IoKSB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wudmFsdWUgJiYgSlNPTi5zdHJpbmdpZnkoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHsgJ3JlcXVpcmVkJzogdHJ1ZSB9O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVwbGFjZVNob3dBZGRUYWcoKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLm5nU2VsZWN0Q29tcG9uZW50LCAnc2hvd0FkZFRhZycsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoVGVybSddKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0ZXJtID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoVGVybSddLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5hZGRUYWcgJiYgIXRoaXMubmdTZWxlY3RDb21wb25lbnQubG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAmJiAoIXRoaXMuaGFzVGVybUluRmlsdGVyZWRJdGVtcyh0ZXJtKSAmJiAoIXRoaXMuaGFzVGVybUluU2VsZWN0ZWRJdGVtcyh0ZXJtKVxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgIXRoaXMubmdTZWxlY3RDb21wb25lbnQuaGlkZVNlbGVjdGVkICYmIHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXNPcGVuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZElubmVySW5wdXRVbmlxdWVJZCgpIHtcbiAgICAgICAgY29uc3QgY2hpbGRJbnB1dHMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7XG5cbiAgICAgICAgaWYgKGNoaWxkSW5wdXRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGlubmVySW5wdXQgPSBjaGlsZElucHV0c1swXTtcblxuICAgICAgICAgICAgaW5uZXJJbnB1dC5pZCA9IHV1aWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFzVGVybUluRmlsdGVyZWRJdGVtcyh0ZXJtOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuaXRlbXNMaXN0LmZpbHRlcmVkSXRlbXM7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb2xvcXVlbnRSZXNvdXJjZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSAoPGFueT5lbGVtZW50LnZhbHVlKS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kTGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMuc29tZSgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSAoPGFueT5lbGVtZW50LnZhbHVlKVt0aGlzLmJpbmRMYWJlbF07XG5cbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50VmFsdWUgJiYgZWxlbWVudFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHRlcm07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzVGVybUluU2VsZWN0ZWRJdGVtcyh0ZXJtOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VsZWN0ZWRJdGVtcztcblxuICAgICAgICBpZiAodGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zLnNvbWUoKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFZhbHVlICYmIGVsZW1lbnRWYWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSB0ZXJtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcblxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYWRQcmV2aW91c1NlbGVjdGlvbihpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5vcmlnaW5hbEl0ZW1zPy5maW5kKGVsZW1lbnQgPT4gdGhpcy5jb21wYXJlV2l0aChlbGVtZW50LCBpdGVtKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0NvbG9xdWVudFJlc291cmNlKCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pdGVtc0xpc3QuZmlsdGVyZWRJdGVtcztcblxuICAgICAgICByZXR1cm4gZmlsdGVyZWRJdGVtcyAmJiBmaWx0ZXJlZEl0ZW1zLmxlbmd0aCAmJiB0eXBlb2YgZmlsdGVyZWRJdGVtc1swXS52YWx1ZVsnZ2V0QXR0cmlidXRlJ10gPT09ICdmdW5jdGlvbic7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0hpZGRlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5vZmZzZXRQYXJlbnQgPT09IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0IHtcbiAgICBBVVRPID0gJ2F1dG8nLFxuICAgIFhTID0gJ3hzJyxcbiAgICBNRCA9ICdtZCcsXG4gICAgU00gPSAnc20nLFxuICAgIExHID0gJ2xnJyxcbiAgICBYTCA9ICd4bCdcbn1cbiJdfQ==
|
|
1
|
+
import { ChangeDetectorRef, Component, ContentChild, EventEmitter, Host, Injector, Input, Optional, Output, Self, SkipSelf, TemplateRef, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { ControlContainer, NgForm } from '@angular/forms';
|
|
3
|
+
import { NgSelectComponent } from '@ng-select/ng-select';
|
|
4
|
+
import { Observable, Subject } from 'rxjs';
|
|
5
|
+
import { NgtBaseNgModel, NgtMakeProvider } from '../../base/ngt-base-ng-model';
|
|
6
|
+
import { NgtStylizableDirective } from '../../directives/ngt-stylizable/ngt-stylizable.directive';
|
|
7
|
+
import { getEnumFromString } from '../../helpers/enum/enum';
|
|
8
|
+
import { uuid } from '../../helpers/uuid';
|
|
9
|
+
import { NgtHttpService } from '../../services/http/ngt-http.service';
|
|
10
|
+
import { NgtTranslateService } from '../../services/http/ngt-translate.service';
|
|
11
|
+
import { NgtStylizableService } from '../../services/ngt-stylizable/ngt-stylizable.service';
|
|
12
|
+
import { NgtFormComponent } from '../ngt-form/ngt-form.component';
|
|
13
|
+
import { NgtSelectHeaderTmp, NgtSelectOptionSelectedTmp, NgtSelectOptionTmp } from './ngt-select.directive';
|
|
14
|
+
export class NgtSelectComponent extends NgtBaseNgModel {
|
|
15
|
+
constructor(ngtStylizableDirective, injector, formContainer, ngtFormComponent, ngtHttp, changeDetector, ngtTranslateService) {
|
|
16
|
+
super();
|
|
17
|
+
this.ngtStylizableDirective = ngtStylizableDirective;
|
|
18
|
+
this.injector = injector;
|
|
19
|
+
this.formContainer = formContainer;
|
|
20
|
+
this.ngtFormComponent = ngtFormComponent;
|
|
21
|
+
this.ngtHttp = ngtHttp;
|
|
22
|
+
this.changeDetector = changeDetector;
|
|
23
|
+
this.ngtTranslateService = ngtTranslateService;
|
|
24
|
+
/** Visual */
|
|
25
|
+
this.label = '';
|
|
26
|
+
this.helpTextColor = 'text-green-500';
|
|
27
|
+
this.shining = false;
|
|
28
|
+
this.loading = false;
|
|
29
|
+
this.loadingText = '';
|
|
30
|
+
this.notFoundText = '';
|
|
31
|
+
this.dropdownPosition = 'auto';
|
|
32
|
+
this.typeToSearchText = '';
|
|
33
|
+
this.clearAllTooltip = '';
|
|
34
|
+
this.placeholder = '';
|
|
35
|
+
this.createText = '';
|
|
36
|
+
this.labelForId = '';
|
|
37
|
+
this.dropdownPanelMinHeight = NgtSelectDropdownPanelHeight.AUTO;
|
|
38
|
+
this.allowCreate = false;
|
|
39
|
+
this.allowOriginalItemsUnselect = true;
|
|
40
|
+
this.isDisabled = false;
|
|
41
|
+
this.isReadonly = false;
|
|
42
|
+
this.bindLabel = 'name';
|
|
43
|
+
this.items = [];
|
|
44
|
+
this.closeOnSelect = true;
|
|
45
|
+
this.clearable = true;
|
|
46
|
+
this.groupBy = null;
|
|
47
|
+
this.multiple = false;
|
|
48
|
+
this.searchable = true;
|
|
49
|
+
this.clearSearchOnAdd = true;
|
|
50
|
+
this.virtualScroll = true;
|
|
51
|
+
/** Validation */
|
|
52
|
+
this.isRequired = false;
|
|
53
|
+
this.onLoadRemoteResource = new EventEmitter();
|
|
54
|
+
this.nativeName = uuid();
|
|
55
|
+
this.ngSelectItems = [];
|
|
56
|
+
this.componentReady = false;
|
|
57
|
+
this.originalPerPage = 15;
|
|
58
|
+
this.subscriptions = [];
|
|
59
|
+
this.currentState = {
|
|
60
|
+
filters: {},
|
|
61
|
+
sort: {
|
|
62
|
+
field: '',
|
|
63
|
+
direction: ''
|
|
64
|
+
},
|
|
65
|
+
pagination: {
|
|
66
|
+
count: null,
|
|
67
|
+
page: 1,
|
|
68
|
+
pages: null,
|
|
69
|
+
total: null,
|
|
70
|
+
from: null,
|
|
71
|
+
to: null,
|
|
72
|
+
per_page: null
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
this.compareWith = (a, b) => a === b;
|
|
76
|
+
if (this.ngtFormComponent) {
|
|
77
|
+
this.shining = this.ngtFormComponent.isShining();
|
|
78
|
+
this.subscriptions.push(this.ngtFormComponent.onShiningChange.subscribe((shining) => {
|
|
79
|
+
this.shining = shining;
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
if (this.ngtStylizableDirective) {
|
|
83
|
+
this.ngtStyle = this.ngtStylizableDirective.getNgtStylizableService();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.ngtStyle = new NgtStylizableService();
|
|
87
|
+
}
|
|
88
|
+
this.ngtStyle.load(this.injector, 'NgtSelect', {
|
|
89
|
+
h: 'h-12',
|
|
90
|
+
text: 'text-sm',
|
|
91
|
+
fontCase: '',
|
|
92
|
+
color: {
|
|
93
|
+
bg: 'bg-white'
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
ngOnInit() {
|
|
98
|
+
if (!this.formContainer) {
|
|
99
|
+
console.error("The element must be inside a <form #form='ngForm'> tag!");
|
|
100
|
+
}
|
|
101
|
+
if (!this.name) {
|
|
102
|
+
console.error("The element must contain a name attribute!");
|
|
103
|
+
}
|
|
104
|
+
if (!this.multiple && this.isRequired) {
|
|
105
|
+
this.clearable = false;
|
|
106
|
+
}
|
|
107
|
+
if (this.multiple) {
|
|
108
|
+
this.closeOnSelect = false;
|
|
109
|
+
}
|
|
110
|
+
setTimeout(() => {
|
|
111
|
+
this.componentReady = true;
|
|
112
|
+
this.initComponentValidation();
|
|
113
|
+
}, 500);
|
|
114
|
+
this.ngSelectItems = new Observable((observer) => {
|
|
115
|
+
this.ngSearchObserver = observer;
|
|
116
|
+
observer.next([]);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
ngAfterViewInit() {
|
|
120
|
+
this.bindInnerInputUniqueId();
|
|
121
|
+
}
|
|
122
|
+
ngDoCheck() {
|
|
123
|
+
if (!this.becameVisible && !this.isHidden()) {
|
|
124
|
+
this.becameVisible = true;
|
|
125
|
+
this.initNgSelectItems();
|
|
126
|
+
setTimeout(() => {
|
|
127
|
+
var _a;
|
|
128
|
+
this.replaceShowAddTag();
|
|
129
|
+
this.ngSelectComponent.itemsList.mapSelectedItems();
|
|
130
|
+
if (!this.getElementTitle() || this.getElementTitle() === 'null') {
|
|
131
|
+
this.ngSelectComponent.element.parentElement.parentElement.parentElement.title = '';
|
|
132
|
+
}
|
|
133
|
+
this.originalItems = (_a = this.ngSelectComponent.selectedItems) === null || _a === void 0 ? void 0 : _a.map((element) => element.value);
|
|
134
|
+
this.changeDetector.detectChanges();
|
|
135
|
+
}, 500);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
ngOnDestroy() {
|
|
139
|
+
this.destroySubscriptions();
|
|
140
|
+
}
|
|
141
|
+
removeItem(event, item) {
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
event.stopPropagation();
|
|
144
|
+
return this.ngSelectComponent.clearItem(item);
|
|
145
|
+
}
|
|
146
|
+
refresh() {
|
|
147
|
+
this.initNgSelectItems();
|
|
148
|
+
this.initComponentValidation();
|
|
149
|
+
}
|
|
150
|
+
reset() {
|
|
151
|
+
this.value = undefined;
|
|
152
|
+
this.nativeValue = undefined;
|
|
153
|
+
this.refresh();
|
|
154
|
+
}
|
|
155
|
+
ngOnChanges(changes) {
|
|
156
|
+
if (changes.isRequired) {
|
|
157
|
+
this.updateValidations();
|
|
158
|
+
}
|
|
159
|
+
if ((changes.remoteResource && this.becameVisible) || changes.items) {
|
|
160
|
+
this.initNgSelectItems();
|
|
161
|
+
}
|
|
162
|
+
if (changes.dropdownPanelMinHeight) {
|
|
163
|
+
this.dropdownPanelMinHeight = getEnumFromString(changes.dropdownPanelMinHeight.currentValue, NgtSelectDropdownPanelHeight);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
setFocus() {
|
|
167
|
+
setTimeout(() => {
|
|
168
|
+
this.ngSelectComponent.focus();
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
onClearSelect() {
|
|
172
|
+
if (!this.nativeValue) {
|
|
173
|
+
this.markAsPristine();
|
|
174
|
+
}
|
|
175
|
+
this.currentState.filters = {};
|
|
176
|
+
}
|
|
177
|
+
onRemoveSelectedItem(item) {
|
|
178
|
+
if (!this.allowOriginalItemsUnselect && this.hadPreviousSelection(item.value)) {
|
|
179
|
+
setTimeout(() => this.ngSelectComponent.select(item));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
getFilterInputValue() {
|
|
183
|
+
let inputField = this.ngSelectComponent.searchInput ?
|
|
184
|
+
this.ngSelectComponent.searchInput :
|
|
185
|
+
this.ngSelectComponent['searchInput'];
|
|
186
|
+
if (inputField &&
|
|
187
|
+
inputField.nativeElement) {
|
|
188
|
+
return inputField.nativeElement.value;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
search(filters) {
|
|
192
|
+
this.currentState.filters = Object.assign(Object.assign({}, this.currentState.filters), filters);
|
|
193
|
+
if (!this.remoteResource) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
if (this.searchTimeout) {
|
|
197
|
+
clearTimeout(this.searchTimeout);
|
|
198
|
+
}
|
|
199
|
+
this.loading = true;
|
|
200
|
+
this.changeDetector.detectChanges();
|
|
201
|
+
this.searchTimeout = setTimeout(() => {
|
|
202
|
+
this.subscriptions.push(this.ngtHttp
|
|
203
|
+
.get(this.remoteResource, this.currentState.filters, this.currentState.pagination)
|
|
204
|
+
.subscribe((response) => {
|
|
205
|
+
this.loading = false;
|
|
206
|
+
this.ngSearchObserver.next(response.data);
|
|
207
|
+
this.onLoadRemoteResource.emit(response.data);
|
|
208
|
+
this.currentState.pagination = response.meta.pagination;
|
|
209
|
+
this.changeDetector.detectChanges();
|
|
210
|
+
}, (error) => {
|
|
211
|
+
this.loading = false;
|
|
212
|
+
this.changeDetector.detectChanges();
|
|
213
|
+
console.error(error);
|
|
214
|
+
this.ngSearchObserver.next([]);
|
|
215
|
+
}));
|
|
216
|
+
}, 500);
|
|
217
|
+
}
|
|
218
|
+
onNativeChange(value) {
|
|
219
|
+
if (this.hasChangesBetweenModels(this.value, value)) {
|
|
220
|
+
this.value = value;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
change(value) {
|
|
224
|
+
if (this.hasChangesBetweenModels(value, this.nativeValue)) {
|
|
225
|
+
if (Array.isArray(value)) {
|
|
226
|
+
value = value.map((val) => val);
|
|
227
|
+
}
|
|
228
|
+
this.nativeValue = value;
|
|
229
|
+
if (!value) {
|
|
230
|
+
this.markAsPristine();
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
onScroll({ end }) {
|
|
235
|
+
let currentPerPage = this.currentState.pagination.per_page;
|
|
236
|
+
let maxItensInBackend = this.currentState.pagination.total;
|
|
237
|
+
if (end >= currentPerPage && end <= maxItensInBackend) {
|
|
238
|
+
this.currentState.pagination.per_page = parseInt(this.currentState.pagination.per_page) + this.originalPerPage;
|
|
239
|
+
this.search({});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
hasSelectedValue() {
|
|
243
|
+
return this.value && JSON.stringify(this.value);
|
|
244
|
+
}
|
|
245
|
+
getSelectClass() {
|
|
246
|
+
let selectClass = this.dropdownPanelMinHeight ? 'ng-select-dropdown-panel-' + this.dropdownPanelMinHeight : 'ng-select-dropdown-panel-auto';
|
|
247
|
+
if (this.isDisabled) {
|
|
248
|
+
selectClass += ' select-border-disabled';
|
|
249
|
+
}
|
|
250
|
+
else if (this.formControl && this.formControl.errors && (this.formControl.dirty || (this.formContainer && this.formContainer['submitted']))) {
|
|
251
|
+
selectClass += ' select-border-error';
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
selectClass += ' select-border-normal';
|
|
255
|
+
}
|
|
256
|
+
if (this.multiple) {
|
|
257
|
+
selectClass += ` h-auto ${this.ngtStyle.compile(['color.bg', 'color.text'])}`;
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
selectClass += ` ${this.ngtStyle.compile(['h', 'color.bg', 'color.text'])}`;
|
|
261
|
+
}
|
|
262
|
+
return selectClass;
|
|
263
|
+
}
|
|
264
|
+
initNgSelectItems() {
|
|
265
|
+
if (this.remoteResource && this.becameVisible) {
|
|
266
|
+
this.ngSelectItems = new Observable(observer => {
|
|
267
|
+
this.ngSearchObserver = observer;
|
|
268
|
+
this.search({});
|
|
269
|
+
});
|
|
270
|
+
this.typeahead = new Subject();
|
|
271
|
+
this.subscriptions.push(this.typeahead.subscribe((term) => {
|
|
272
|
+
this.search({ term: term });
|
|
273
|
+
}));
|
|
274
|
+
}
|
|
275
|
+
else if (this.items instanceof Observable) {
|
|
276
|
+
this.ngSelectItems = this.items;
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
if (!this.items) {
|
|
280
|
+
this.items = [];
|
|
281
|
+
}
|
|
282
|
+
this.ngSelectItems = new Observable((observer) => {
|
|
283
|
+
this.ngSearchObserver = observer;
|
|
284
|
+
observer.next(this.items);
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
initComponentValidation() {
|
|
289
|
+
if (this.formContainer && this.formContainer.control && (this.formControl = this.formContainer.control.get(this.name))) {
|
|
290
|
+
this.formControl = this.formContainer.control.get(this.name);
|
|
291
|
+
this.markAsPristine();
|
|
292
|
+
this.updateValidations();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
getElementTitle() {
|
|
296
|
+
return this.ngSelectComponent.element.parentElement.parentElement.parentElement.title;
|
|
297
|
+
}
|
|
298
|
+
hasChangesBetweenModels(value, nativeValue) {
|
|
299
|
+
return JSON.stringify(value) !== JSON.stringify(nativeValue);
|
|
300
|
+
}
|
|
301
|
+
updateValidations() {
|
|
302
|
+
if (!this.formControl) {
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
let syncValidators = [];
|
|
306
|
+
if (this.isRequired) {
|
|
307
|
+
syncValidators.push(this.isRequiredValidator());
|
|
308
|
+
}
|
|
309
|
+
setTimeout(() => {
|
|
310
|
+
this.formControl.setValidators(syncValidators);
|
|
311
|
+
this.formControl.updateValueAndValidity();
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
isRequiredValidator() {
|
|
315
|
+
return (control) => {
|
|
316
|
+
if (this.multiple) {
|
|
317
|
+
if (Array.isArray(this.value) && this.value.length > 0) {
|
|
318
|
+
return null;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
else if (control.value && JSON.stringify(control.value)) {
|
|
322
|
+
return null;
|
|
323
|
+
}
|
|
324
|
+
return { 'required': true };
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
replaceShowAddTag() {
|
|
328
|
+
Object.defineProperty(this.ngSelectComponent, 'showAddTag', {
|
|
329
|
+
get: () => {
|
|
330
|
+
if (!this.ngSelectComponent['searchTerm']) {
|
|
331
|
+
return false;
|
|
332
|
+
}
|
|
333
|
+
const term = this.ngSelectComponent['searchTerm'].toLocaleLowerCase();
|
|
334
|
+
return this.ngSelectComponent.addTag && !this.ngSelectComponent.loading
|
|
335
|
+
&& (!this.hasTermInFilteredItems(term) && (!this.hasTermInSelectedItems(term)
|
|
336
|
+
|| !this.ngSelectComponent.hideSelected && this.ngSelectComponent.isOpen));
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
bindInnerInputUniqueId() {
|
|
341
|
+
const childInputs = this.ngSelectComponent.element.getElementsByTagName('input');
|
|
342
|
+
if (childInputs === null || childInputs === void 0 ? void 0 : childInputs.length) {
|
|
343
|
+
const innerInput = childInputs[0];
|
|
344
|
+
innerInput.id = uuid();
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
hasTermInFilteredItems(term) {
|
|
348
|
+
const filteredItems = this.ngSelectComponent.itemsList.filteredItems;
|
|
349
|
+
if (this.isColoquentResource()) {
|
|
350
|
+
return filteredItems.some((element) => {
|
|
351
|
+
const elementValue = element.value.getAttribute(this.bindLabel);
|
|
352
|
+
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
return filteredItems.some((element) => {
|
|
356
|
+
const elementValue = element.value[this.bindLabel];
|
|
357
|
+
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
hasTermInSelectedItems(term) {
|
|
361
|
+
const selectedItems = this.ngSelectComponent.selectedItems;
|
|
362
|
+
if (this.isColoquentResource()) {
|
|
363
|
+
return selectedItems.some((element) => {
|
|
364
|
+
const elementValue = element.value.getAttribute(this.bindLabel);
|
|
365
|
+
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
return selectedItems.some((element) => {
|
|
369
|
+
const elementValue = element.value[this.bindLabel];
|
|
370
|
+
return elementValue && elementValue.toLocaleLowerCase() === term;
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
hadPreviousSelection(item) {
|
|
374
|
+
var _a;
|
|
375
|
+
return !!((_a = this.originalItems) === null || _a === void 0 ? void 0 : _a.find(element => this.compareWith(element, item)));
|
|
376
|
+
}
|
|
377
|
+
isColoquentResource() {
|
|
378
|
+
const filteredItems = this.ngSelectComponent.itemsList.filteredItems;
|
|
379
|
+
return filteredItems && filteredItems.length && typeof filteredItems[0].value['getAttribute'] === 'function';
|
|
380
|
+
}
|
|
381
|
+
isHidden() {
|
|
382
|
+
return this.ngSelectComponent.element.offsetParent === null;
|
|
383
|
+
}
|
|
384
|
+
destroySubscriptions() {
|
|
385
|
+
this.subscriptions.forEach(subscription => subscription.unsubscribe());
|
|
386
|
+
this.subscriptions = [];
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
NgtSelectComponent.decorators = [
|
|
390
|
+
{ type: Component, args: [{
|
|
391
|
+
selector: 'ngt-select',
|
|
392
|
+
template: "<label *ngIf=\"label\" [hidden]='shining'\r\n class=\"{{ shining ? '' : 'block' }} {{ ngtStyle.compile(['color.text', 'text', 'font', 'fontCase']) }} mb-2 flex\" >\r\n <ngt-svg *ngIf=\"labelIcon\" class=\"mr-1 {{labelIconColor}}\" src=\"{{labelIcon}}\"></ngt-svg>\r\n {{ label }}:\r\n\r\n <span class=\"text-red-500 font-bold text-md ml-1\" *ngIf=\"isRequired\">*</span>\r\n\r\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\" class=\"ml-1\">\r\n {{ helpText }}\r\n </ngt-helper>\r\n</label>\r\n\r\n<div [hidden]='shining' class=\"{{ getSelectClass() }} normal-case\" style=\"min-height: 3rem;\">\r\n <ng-select class=\"custom\" [(ngModel)]='nativeValue' [name]='nativeName' (change)=\"onNativeChange($event)\"\r\n [addTag]='allowCreate' [addTagText]=\"createText || ngtTranslateService.ngtSelectCreateText\"\r\n [bindLabel]=\"bindLabel\" [multiple]=\"multiple\" [hideSelected]=\"hideSelected\" [typeahead]=\"typeahead\"\r\n [notFoundText]=\"notFoundText || ngtTranslateService.ngtSelectNotFoundText\" [searchable]=\"searchable\"\r\n [disabled]='isDisabled || isReadonly' [clearable]=\"clearable && hasSelectedValue()\" [closeOnSelect]=\"closeOnSelect\"\r\n [trackByFn]=\"trackBy\" [labelForId]=\"labelForId\" [clearSearchOnAdd]=\"clearSearchOnAdd\"\r\n [typeToSearchText]=\"typeToSearchText || ngtTranslateService.ngtSelectTypeToSearchText\"\r\n [placeholder]=\"placeholder || ngtTranslateService.ngtSelectPlaceholder\" [dropdownPosition]=\"dropdownPosition\"\r\n [groupBy]=\"groupBy\" [clearAllText]=\"clearAllTooltip || ngtTranslateService.ngtSelectClearAllTooltip\"\r\n [virtualScroll]=\"virtualScroll\" [tabIndex]=\"tabIndex\" [items]=\"ngSelectItems | async\"\r\n (scroll)=\"onScroll($event)\" [bindValue]=\"bindValue\" [groupValue]=\"groupValue\" [loading]=\"loading\"\r\n [loadingText]=\"loadingText || ngtTranslateService.ngtSelectLoadingText\" [maxSelectedItems]=\"maxSelectedItems\"\r\n [compareWith]='compareWith' (clear)='onClearSelect()' (remove)='onRemoveSelectedItem($event)'>\r\n\r\n <ng-template *ngIf='ngtSelectHeaderTemplate' ng-header-tmp>\r\n <ng-template [ngTemplateOutlet]=\"ngtSelectHeaderTemplate\">\r\n </ng-template>\r\n </ng-template>\r\n\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div class=\"flex w-full items-center pr-1\">\r\n <ng-container *ngIf=\"multiple\">\r\n <div class=\"ng-value-icon px-1 h-full border-r mr-2 {{ ngtStyle.compile(['color.text', 'text']) }} cursor-pointer\"\r\n (click)='removeItem($event, item)'>\r\n <svg class=\"ng-value-icon fill-current self-center\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 24 24\">\r\n <path\r\n d=\"M19.1 17.2l-5.3-5.3 5.3-5.3-1.8-1.8-5.3 5.4-5.3-5.3-1.8 1.7 5.3 5.3-5.3 5.3L6.7 19l5.3-5.3 5.3 5.3 1.8-1.8z\" />\r\n </svg>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template *ngIf='ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionSelectedTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item }\">\r\n </ng-template>\r\n\r\n <ng-template *ngIf='!ngtOptionSelectedTemplate' [ngTemplateOutlet]=\"ngtOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item }\">\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-template [ngTemplateOutlet]=\"ngtOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: index, searchTerm: search }\">\r\n </ng-template>\r\n </ng-template>\r\n </ng-select>\r\n</div>\r\n\r\n<ng-container *ngIf='shining'>\r\n <div class=\"flex\">\r\n <ngt-shining class=\"{{ ngtStyle.compile(['h']) }} w-full\"></ngt-shining>\r\n </div>\r\n</ng-container>\r\n\r\n<ngt-validation [control]=\"formControl\" [container]=\"formContainer\"></ngt-validation>\r\n\r\n<input *ngIf='componentReady' type='hidden' [ngModel]=\"value\" [name]=\"name\" [value]=\"value\">\r\n",
|
|
393
|
+
providers: [
|
|
394
|
+
NgtMakeProvider(NgtSelectComponent)
|
|
395
|
+
],
|
|
396
|
+
viewProviders: [
|
|
397
|
+
{ provide: ControlContainer, useExisting: NgForm }
|
|
398
|
+
],
|
|
399
|
+
encapsulation: ViewEncapsulation.None,
|
|
400
|
+
styles: [".ng-select.ng-select-opened>.ng-select-container{background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.ng-select.ng-select-opened>.ng-select-container:hover{box-shadow:none}.ng-select.ng-select-opened>.ng-select-container .ng-arrow{top:-2px;border-color:transparent transparent #999;border-width:0 5px 5px}.ng-select.ng-select-opened>.ng-select-container .ng-arrow:hover{border-color:transparent transparent #333}.ng-select.ng-select-opened.ng-select-bottom>.ng-select-container{border-bottom-right-radius:0;border-bottom-left-radius:0}.ng-select.ng-select-opened.ng-select-top>.ng-select-container{border-top-right-radius:0;border-top-left-radius:0}.ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{border-color:#007eff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 3px rgba(0,126,255,.1)}.ng-select.ng-select-disabled>.ng-select-container{background-color:#f9f9f9}.ng-select .ng-has-value .ng-placeholder{display:none}.ng-select .ng-select-container{background-color:#fff;border-radius:4px;border:1px solid #ccc;min-height:36px;align-items:center}.ng-select .ng-select-container:hover{box-shadow:0 1px 0 rgba(0,0,0,.06)}.ng-select .ng-select-container .ng-value-container{align-items:center;padding-left:10px}[dir=rtl] .ng-select .ng-select-container .ng-value-container{padding-right:10px;padding-left:0}.ng-select .ng-select-container .ng-value-container .ng-placeholder{color:#999}.ng-select.ng-select-single .ng-select-container{height:36px}.ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{top:5px;left:0;padding-left:10px;padding-right:50px}[dir=rtl] .ng-select.ng-select-single .ng-select-container .ng-value-container .ng-input{padding-right:10px;padding-left:50px}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value{background-color:#f9f9f9;border:1px solid #e6e6e6}.ng-select.ng-select-multiple.ng-select-disabled>.ng-select-container .ng-value-container .ng-value .ng-value-label{padding:0 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-top:5px;padding-left:7px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container{padding-right:7px;padding-left:0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{font-size:.9em;margin-bottom:5px;background-color:#ebf5ff;border-radius:2px;margin-right:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin-right:0;margin-left:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#f9f9f9}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:5px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled .ng-value-label{padding-left:0;padding-right:5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon,.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{display:inline-block;padding:1px 5px}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{background-color:#d1e8ff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-right:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.left{border-left:1px solid #b8dbff;border-right:none}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:1px solid #b8dbff}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon.right{border-left:0;border-right:1px solid #b8dbff}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 0 3px 3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{padding:0 3px 3px 0}.ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-bottom:5px;padding-left:3px}[dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{padding-right:3px;padding-left:0}.ng-select .ng-clear-wrapper{color:#999}.ng-select .ng-clear-wrapper:hover .ng-clear{color:#d0021b}.ng-select .ng-spinner-zone{padding:5px 5px 0 0}[dir=rtl] .ng-select .ng-spinner-zone{padding:5px 0 0 5px}.ng-select .ng-arrow-wrapper{width:25px;padding-right:5px}[dir=rtl] .ng-select .ng-arrow-wrapper{padding-left:5px;padding-right:0}.ng-select .ng-arrow-wrapper:hover .ng-arrow{border-top-color:#666}.ng-select .ng-arrow-wrapper .ng-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px}.ng-dropdown-panel{background-color:#fff;border:1px solid #ccc;box-shadow:0 1px 0 rgba(0,0,0,.06);left:0}.ng-dropdown-panel.ng-select-bottom{top:100%;border-bottom-right-radius:4px;border-bottom-left-radius:4px;border-top-color:#e6e6e6;margin-top:-1px}.ng-dropdown-panel.ng-select-bottom .ng-dropdown-panel-items .ng-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.ng-dropdown-panel.ng-select-top{bottom:100%;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-color:#e6e6e6;margin-bottom:-1px}.ng-dropdown-panel.ng-select-top .ng-dropdown-panel-items .ng-option:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.ng-dropdown-panel .ng-dropdown-header{border-bottom:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid #ccc;padding:5px 7px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:8px 10px;font-weight:500;color:rgba(0,0,0,.54);cursor:pointer}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background-color:#f5faff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected.ng-option-marked{background-color:#ebf5ff;font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option{background-color:#fff;color:rgba(0,0,0,.87);padding:8px 10px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked{color:#333;background-color:#ebf5ff}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected .ng-option-label,.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected.ng-option-marked .ng-option-label{font-weight:600}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background-color:#f5faff;color:#333}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#ccc}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:22px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:22px;padding-left:0}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{font-size:80%;font-weight:400;padding-right:5px}[dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}[dir=rtl] .ng-dropdown-panel{direction:rtl;text-align:right}.ng-select,.ng-select.custom .ng-select-container{height:100%;margin-top:-1px;margin-bottom:-1px}.ng-select-container{color:inherit!important;min-height:3rem!important}.select-border-disabled .ng-select-container{border:1px solid #cbd5e0!important;background-color:#fafafa!important;border-radius:.25rem;padding:1px}.select-border-error .ng-select-container{border:1px solid #c53030!important;background-color:unset!important;border-radius:.25rem;padding:1px}.select-border-normal .ng-select-container{border:1px solid #cbd5e0!important;background-color:unset!important;border-radius:.25rem;padding:1px}.ng-value{max-width:100%}.ng-select-dropdown-panel-auto .ng-dropdown-panel .ng-dropdown-panel-items{min-height:unset}.ng-select-dropdown-panel-xs .ng-dropdown-panel .ng-dropdown-panel-items{min-height:80px!important}.ng-select-dropdown-panel-sm .ng-dropdown-panel .ng-dropdown-panel-items{min-height:100px!important}.ng-select-dropdown-panel-md .ng-dropdown-panel .ng-dropdown-panel-items{min-height:120px!important}.ng-select-dropdown-panel-lg .ng-dropdown-panel .ng-dropdown-panel-items{min-height:140px!important}.ng-select-dropdown-panel-xl .ng-dropdown-panel .ng-dropdown-panel-items{min-height:160px!important}.ng-dropdown-panel .ng-dropdown-header{padding:0!important}"]
|
|
401
|
+
},] }
|
|
402
|
+
];
|
|
403
|
+
NgtSelectComponent.ctorParameters = () => [
|
|
404
|
+
{ type: NgtStylizableDirective, decorators: [{ type: Optional }, { type: Self }] },
|
|
405
|
+
{ type: Injector },
|
|
406
|
+
{ type: ControlContainer, decorators: [{ type: Optional }, { type: Host }] },
|
|
407
|
+
{ type: NgtFormComponent, decorators: [{ type: Optional }, { type: SkipSelf }] },
|
|
408
|
+
{ type: NgtHttpService },
|
|
409
|
+
{ type: ChangeDetectorRef },
|
|
410
|
+
{ type: NgtTranslateService, decorators: [{ type: Optional }] }
|
|
411
|
+
];
|
|
412
|
+
NgtSelectComponent.propDecorators = {
|
|
413
|
+
ngSelectComponent: [{ type: ViewChild, args: [NgSelectComponent, { static: true },] }],
|
|
414
|
+
ngtOptionTemplate: [{ type: ContentChild, args: [NgtSelectOptionTmp, { read: TemplateRef },] }],
|
|
415
|
+
ngtOptionSelectedTemplate: [{ type: ContentChild, args: [NgtSelectOptionSelectedTmp, { read: TemplateRef },] }],
|
|
416
|
+
ngtSelectHeaderTemplate: [{ type: ContentChild, args: [NgtSelectHeaderTmp, { read: TemplateRef },] }],
|
|
417
|
+
label: [{ type: Input }],
|
|
418
|
+
labelIcon: [{ type: Input }],
|
|
419
|
+
labelIconColor: [{ type: Input }],
|
|
420
|
+
helpTitle: [{ type: Input }],
|
|
421
|
+
helpText: [{ type: Input }],
|
|
422
|
+
helpTextColor: [{ type: Input }],
|
|
423
|
+
shining: [{ type: Input }],
|
|
424
|
+
loading: [{ type: Input }],
|
|
425
|
+
loadingText: [{ type: Input }],
|
|
426
|
+
notFoundText: [{ type: Input }],
|
|
427
|
+
dropdownPosition: [{ type: Input }],
|
|
428
|
+
typeToSearchText: [{ type: Input }],
|
|
429
|
+
clearAllTooltip: [{ type: Input }],
|
|
430
|
+
placeholder: [{ type: Input }],
|
|
431
|
+
createText: [{ type: Input }],
|
|
432
|
+
labelForId: [{ type: Input }],
|
|
433
|
+
dropdownPanelMinHeight: [{ type: Input }],
|
|
434
|
+
name: [{ type: Input }],
|
|
435
|
+
allowCreate: [{ type: Input }],
|
|
436
|
+
allowOriginalItemsUnselect: [{ type: Input }],
|
|
437
|
+
isDisabled: [{ type: Input }],
|
|
438
|
+
isReadonly: [{ type: Input }],
|
|
439
|
+
remoteResource: [{ type: Input }],
|
|
440
|
+
hideSelected: [{ type: Input }],
|
|
441
|
+
bindLabel: [{ type: Input }],
|
|
442
|
+
bindValue: [{ type: Input }],
|
|
443
|
+
items: [{ type: Input }],
|
|
444
|
+
closeOnSelect: [{ type: Input }],
|
|
445
|
+
clearable: [{ type: Input }],
|
|
446
|
+
groupBy: [{ type: Input }],
|
|
447
|
+
maxSelectedItems: [{ type: Input }],
|
|
448
|
+
multiple: [{ type: Input }],
|
|
449
|
+
searchable: [{ type: Input }],
|
|
450
|
+
clearSearchOnAdd: [{ type: Input }],
|
|
451
|
+
virtualScroll: [{ type: Input }],
|
|
452
|
+
tabIndex: [{ type: Input }],
|
|
453
|
+
typeahead: [{ type: Input }],
|
|
454
|
+
groupValue: [{ type: Input }],
|
|
455
|
+
trackBy: [{ type: Input }],
|
|
456
|
+
isRequired: [{ type: Input }],
|
|
457
|
+
onLoadRemoteResource: [{ type: Output }],
|
|
458
|
+
compareWith: [{ type: Input }]
|
|
459
|
+
};
|
|
460
|
+
export var NgtSelectDropdownPanelHeight;
|
|
461
|
+
(function (NgtSelectDropdownPanelHeight) {
|
|
462
|
+
NgtSelectDropdownPanelHeight["AUTO"] = "auto";
|
|
463
|
+
NgtSelectDropdownPanelHeight["XS"] = "xs";
|
|
464
|
+
NgtSelectDropdownPanelHeight["MD"] = "md";
|
|
465
|
+
NgtSelectDropdownPanelHeight["SM"] = "sm";
|
|
466
|
+
NgtSelectDropdownPanelHeight["LG"] = "lg";
|
|
467
|
+
NgtSelectDropdownPanelHeight["XL"] = "xl";
|
|
468
|
+
})(NgtSelectDropdownPanelHeight || (NgtSelectDropdownPanelHeight = {}));
|
|
469
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3Qtc2VsZWN0L25ndC1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osSUFBSSxFQUNKLFFBQVEsRUFDUixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBRUosUUFBUSxFQUNSLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0UsT0FBTyxFQUFZLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBWSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRW5FLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBbUIsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDaEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFr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WDtBQVBELFdBQVksNEJBQTRCO0lBQ3BDLDZDQUFhLENBQUE7SUFDYix5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtJQUNULHlDQUFTLENBQUE7SUFDVCx5Q0FBUyxDQUFBO0lBQ1QseUNBQVMsQ0FBQTtBQUNiLENBQUMsRUFQVyw0QkFBNEIsS0FBNUIsNEJBQTRCLFFBT3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgQ29udGVudENoaWxkLFxyXG4gICAgRG9DaGVjayxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3QsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3B0aW9uYWwsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBTZWxmLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFNraXBTZWxmLFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nT3B0aW9uLCBOZ1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTmd0QmFzZU5nTW9kZWwsIE5ndE1ha2VQcm92aWRlciB9IGZyb20gJy4uLy4uL2Jhc2Uvbmd0LWJhc2UtbmctbW9kZWwnO1xyXG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBnZXRFbnVtRnJvbVN0cmluZyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZW51bS9lbnVtJztcclxuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXVpZCc7XHJcbmltcG9ydCB7IE5ndEh0dHBSZXNwb25zZSwgTmd0SHR0cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25ndC1zdHlsaXphYmxlL25ndC1zdHlsaXphYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmd0U2VsZWN0SGVhZGVyVG1wLCBOZ3RTZWxlY3RPcHRpb25TZWxlY3RlZFRtcCwgTmd0U2VsZWN0T3B0aW9uVG1wIH0gZnJvbSAnLi9uZ3Qtc2VsZWN0LmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbmd0LXNlbGVjdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9uZ3Qtc2VsZWN0LmNvbXBvbmVudC5jc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIE5ndE1ha2VQcm92aWRlcihOZ3RTZWxlY3RDb21wb25lbnQpXHJcbiAgICBdLFxyXG4gICAgdmlld1Byb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XHJcbiAgICBdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmd0U2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgTmd0QmFzZU5nTW9kZWwgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBEb0NoZWNrIHtcclxuICAgIEBWaWV3Q2hpbGQoTmdTZWxlY3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBuZ1NlbGVjdENvbXBvbmVudDogTmdTZWxlY3RDb21wb25lbnQ7XHJcbiAgICBAQ29udGVudENoaWxkKE5ndFNlbGVjdE9wdGlvblRtcCwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBwdWJsaWMgbmd0T3B0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKE5ndFNlbGVjdE9wdGlvblNlbGVjdGVkVG1wLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHB1YmxpYyBuZ3RPcHRpb25TZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZChOZ3RTZWxlY3RIZWFkZXJUbXAsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcHVibGljIG5ndFNlbGVjdEhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKiBWaXN1YWwgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWxJY29uOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWxJY29uQ29sb3I6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGl0bGU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwVGV4dDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2hpbmluZyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbm90Rm91bmRUZXh0OiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkcm9wZG93blBvc2l0aW9uID0gJ2F1dG8nO1xyXG4gICAgQElucHV0KCkgcHVibGljIHR5cGVUb1NlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyQWxsVG9vbHRpcDogc3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNyZWF0ZVRleHQ6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsRm9ySWQ6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGRyb3Bkb3duUGFuZWxNaW5IZWlnaHQ6IE5ndFNlbGVjdERyb3Bkb3duUGFuZWxIZWlnaHQgPSBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0LkFVVE87XHJcblxyXG4gICAgLyoqIEJlaGF2aW9yICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGFsbG93Q3JlYXRlOiBib29sZWFuIHwgUHJvbWlzZTxhbnk+IHwgRnVuY3Rpb24gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd09yaWdpbmFsSXRlbXNVbnNlbGVjdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZW1vdGVSZXNvdXJjZTogYW55O1xyXG4gICAgQElucHV0KCkgcHVibGljIGhpZGVTZWxlY3RlZDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBiaW5kTGFiZWw6IHN0cmluZyA9ICduYW1lJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBiaW5kVmFsdWU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtczogQXJyYXk8YW55PiB8IE9ic2VydmFibGU8YW55PiA9IFtdO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNsb3NlT25TZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ3JvdXBCeTogc3RyaW5nIHwgRnVuY3Rpb24gPSBudWxsO1xyXG4gICAgQElucHV0KCkgcHVibGljIG1heFNlbGVjdGVkSXRlbXM6IG51bWJlcjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcHVibGljIHNlYXJjaGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNsZWFyU2VhcmNoT25BZGQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIHZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIHRhYkluZGV4OiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgdHlwZWFoZWFkOiBTdWJqZWN0PGFueT47XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ3JvdXBWYWx1ZTogKGdyb3VwS2V5OiBzdHJpbmcsIGNpbGRyZW46IGFueVtdKSA9PiBPYmplY3Q7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgdHJhY2tCeTogKGl0ZW06IGFueSkgPT4gYW55O1xyXG5cclxuICAgIC8qKiBWYWxpZGF0aW9uICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25Mb2FkUmVtb3RlUmVzb3VyY2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgcHVibGljIG5hdGl2ZU5hbWUgPSB1dWlkKCk7XHJcbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xyXG4gICAgcHVibGljIG5nU2VsZWN0SXRlbXM6IGFueSA9IFtdO1xyXG4gICAgcHVibGljIG5hdGl2ZVZhbHVlOiBhbnk7XHJcbiAgICBwdWJsaWMgY29tcG9uZW50UmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIG5nU2VhcmNoT2JzZXJ2ZXI6IE9ic2VydmVyPGFueT47XHJcbiAgICBwcml2YXRlIG9yaWdpbmFsUGVyUGFnZSA9IDE1O1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcbiAgICBwcml2YXRlIG9yaWdpbmFsSXRlbXM6IEFycmF5PGFueT47XHJcblxyXG4gICAgcHJpdmF0ZSBjdXJyZW50U3RhdGUgPSB7XHJcbiAgICAgICAgZmlsdGVyczoge30sXHJcbiAgICAgICAgc29ydDoge1xyXG4gICAgICAgICAgICBmaWVsZDogJycsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJydcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhZ2luYXRpb246IHtcclxuICAgICAgICAgICAgY291bnQ6IG51bGwsXHJcbiAgICAgICAgICAgIHBhZ2U6IDEsXHJcbiAgICAgICAgICAgIHBhZ2VzOiBudWxsLFxyXG4gICAgICAgICAgICB0b3RhbDogbnVsbCxcclxuICAgICAgICAgICAgZnJvbTogbnVsbCxcclxuICAgICAgICAgICAgdG86IG51bGwsXHJcbiAgICAgICAgICAgIHBlcl9wYWdlOiBudWxsXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIHNlYXJjaFRpbWVvdXQ6IGFueTtcclxuICAgIHByaXZhdGUgYmVjYW1lVmlzaWJsZTogYm9vbGVhbjtcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKVxyXG4gICAgICAgIHB1YmxpYyBuZ3RTdHlsaXphYmxlRGlyZWN0aXZlOiBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlLFxyXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBIb3N0KClcclxuICAgICAgICBwdWJsaWMgZm9ybUNvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcclxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxyXG4gICAgICAgIHB1YmxpYyBuZ3RGb3JtQ29tcG9uZW50OiBOZ3RGb3JtQ29tcG9uZW50LFxyXG4gICAgICAgIHByaXZhdGUgbmd0SHR0cDogTmd0SHR0cFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgQE9wdGlvbmFsKClcclxuICAgICAgICBwdWJsaWMgbmd0VHJhbnNsYXRlU2VydmljZTogTmd0VHJhbnNsYXRlU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmd0Rm9ybUNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnNoaW5pbmcgPSB0aGlzLm5ndEZvcm1Db21wb25lbnQuaXNTaGluaW5nKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMubmd0Rm9ybUNvbXBvbmVudC5vblNoaW5pbmdDaGFuZ2Uuc3Vic2NyaWJlKChzaGluaW5nOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gc2hpbmluZztcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5uZ3RTdHlsaXphYmxlRGlyZWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSB0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUuZ2V0Tmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5ndFN0eWxlID0gbmV3IE5ndFN0eWxpemFibGVTZXJ2aWNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm5ndFN0eWxlLmxvYWQodGhpcy5pbmplY3RvciwgJ05ndFNlbGVjdCcsIHtcclxuICAgICAgICAgICAgaDogJ2gtMTInLFxyXG4gICAgICAgICAgICB0ZXh0OiAndGV4dC1zbScsXHJcbiAgICAgICAgICAgIGZvbnRDYXNlOiAnJyxcclxuICAgICAgICAgICAgY29sb3I6IHtcclxuICAgICAgICAgICAgICAgIGJnOiAnYmctd2hpdGUnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY29tcGFyZVdpdGggPSAoYTogYW55LCBiOiBhbnkpID0+IGEgPT09IGI7XHJcblxyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaGUgZWxlbWVudCBtdXN0IGJlIGluc2lkZSBhIDxmb3JtICNmb3JtPSduZ0Zvcm0nPiB0YWchXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLm5hbWUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5hbWUgYXR0cmlidXRlIVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLmlzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhcmFibGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VPblNlbGVjdCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRDb21wb25lbnRWYWxpZGF0aW9uKCk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuXHJcbiAgICAgICAgdGhpcy5uZ1NlbGVjdEl0ZW1zID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KFtdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuYmluZElubmVySW5wdXRVbmlxdWVJZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJlY2FtZVZpc2libGUgJiYgIXRoaXMuaXNIaWRkZW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLmJlY2FtZVZpc2libGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VTaG93QWRkVGFnKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pdGVtc0xpc3QubWFwU2VsZWN0ZWRJdGVtcygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5nZXRFbGVtZW50VGl0bGUoKSB8fCB0aGlzLmdldEVsZW1lbnRUaXRsZSgpID09PSAnbnVsbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQudGl0bGUgPSAnJztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdGVkSXRlbXM/Lm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlbW92ZUl0ZW0oZXZlbnQ6IEV2ZW50LCBpdGVtOiBhbnkpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5jbGVhckl0ZW0oaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2goKSB7XHJcbiAgICAgICAgdGhpcy5pbml0TmdTZWxlY3RJdGVtcygpO1xyXG4gICAgICAgIHRoaXMuaW5pdENvbXBvbmVudFZhbGlkYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXQoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuaXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKGNoYW5nZXMucmVtb3RlUmVzb3VyY2UgJiYgdGhpcy5iZWNhbWVWaXNpYmxlKSB8fCBjaGFuZ2VzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdE5nU2VsZWN0SXRlbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzLmRyb3Bkb3duUGFuZWxNaW5IZWlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0ID0gZ2V0RW51bUZyb21TdHJpbmcoY2hhbmdlcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0LmN1cnJlbnRWYWx1ZSwgTmd0U2VsZWN0RHJvcGRvd25QYW5lbEhlaWdodCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRGb2N1cygpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5mb2N1cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNsZWFyU2VsZWN0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5uYXRpdmVWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5maWx0ZXJzID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUmVtb3ZlU2VsZWN0ZWRJdGVtKGl0ZW06IE5nT3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFsbG93T3JpZ2luYWxJdGVtc1Vuc2VsZWN0ICYmIHRoaXMuaGFkUHJldmlvdXNTZWxlY3Rpb24oaXRlbS52YWx1ZSkpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdChpdGVtKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRGaWx0ZXJJbnB1dFZhbHVlKCkge1xyXG4gICAgICAgIGxldCBpbnB1dEZpZWxkID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5zZWFyY2hJbnB1dCA/XHJcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RDb21wb25lbnQuc2VhcmNoSW5wdXQgOlxyXG4gICAgICAgICAgICB0aGlzLm5nU2VsZWN0Q29tcG9uZW50WydzZWFyY2hJbnB1dCddO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGlucHV0RmllbGQgJiZcclxuICAgICAgICAgICAgaW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWFyY2goZmlsdGVyczogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycyA9IHsgLi4udGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycywgLi4uZmlsdGVycyB9O1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMucmVtb3RlUmVzb3VyY2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGltZW91dCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hUaW1lb3V0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMubmd0SHR0cFxyXG4gICAgICAgICAgICAgICAgICAgIC5nZXQodGhpcy5yZW1vdGVSZXNvdXJjZSwgdGhpcy5jdXJyZW50U3RhdGUuZmlsdGVycywgdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2U6IE5ndEh0dHBSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIubmV4dChyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Mb2FkUmVtb3RlUmVzb3VyY2UuZW1pdChyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0YXRlLnBhZ2luYXRpb24gPSByZXNwb25zZS5tZXRhLnBhZ2luYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nU2VhcmNoT2JzZXJ2ZXIubmV4dChbXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25OYXRpdmVDaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2Vlbk1vZGVscyh0aGlzLnZhbHVlLCB2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5Nb2RlbHModmFsdWUsIHRoaXMubmF0aXZlVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKHZhbCkgPT4gdmFsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5uYXRpdmVWYWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNjcm9sbCh7IGVuZCB9KSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRQZXJQYWdlID0gdGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZTtcclxuICAgICAgICBsZXQgbWF4SXRlbnNJbkJhY2tlbmQgPSB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnRvdGFsO1xyXG5cclxuICAgICAgICBpZiAoZW5kID49IGN1cnJlbnRQZXJQYWdlICYmIGVuZCA8PSBtYXhJdGVuc0luQmFja2VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTdGF0ZS5wYWdpbmF0aW9uLnBlcl9wYWdlID0gcGFyc2VJbnQodGhpcy5jdXJyZW50U3RhdGUucGFnaW5hdGlvbi5wZXJfcGFnZSkgKyB0aGlzLm9yaWdpbmFsUGVyUGFnZTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2goe30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzU2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAmJiBKU09OLnN0cmluZ2lmeSh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2VsZWN0Q2xhc3MoKSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdENsYXNzID0gdGhpcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0ID8gJ25nLXNlbGVjdC1kcm9wZG93bi1wYW5lbC0nICsgdGhpcy5kcm9wZG93blBhbmVsTWluSGVpZ2h0IDogJ25nLXNlbGVjdC1kcm9wZG93bi1wYW5lbC1hdXRvJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBzZWxlY3RDbGFzcyArPSAnIHNlbGVjdC1ib3JkZXItZGlzYWJsZWQnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtQ29udHJvbCAmJiB0aGlzLmZvcm1Db250cm9sLmVycm9ycyAmJiAodGhpcy5mb3JtQ29udHJvbC5kaXJ0eSB8fCAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lclsnc3VibWl0dGVkJ10pKSkge1xyXG4gICAgICAgICAgICBzZWxlY3RDbGFzcyArPSAnIHNlbGVjdC1ib3JkZXItZXJyb3InO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlbGVjdENsYXNzICs9ICcgc2VsZWN0LWJvcmRlci1ub3JtYWwnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gYCBoLWF1dG8gJHt0aGlzLm5ndFN0eWxlLmNvbXBpbGUoWydjb2xvci5iZycsICdjb2xvci50ZXh0J10pfWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0Q2xhc3MgKz0gYCAke3RoaXMubmd0U3R5bGUuY29tcGlsZShbJ2gnLCAnY29sb3IuYmcnLCAnY29sb3IudGV4dCddKX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdENsYXNzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdE5nU2VsZWN0SXRlbXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVtb3RlUmVzb3VyY2UgJiYgdGhpcy5iZWNhbWVWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdTZWFyY2hPYnNlcnZlciA9IG9ic2VydmVyO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goe30pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuc3Vic2NyaWJlKCh0ZXJtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goeyB0ZXJtOiB0ZXJtIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IHRoaXMuaXRlbXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubmdTZWxlY3RJdGVtcyA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ1NlYXJjaE9ic2VydmVyID0gb2JzZXJ2ZXI7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0Q29tcG9uZW50VmFsaWRhdGlvbigpIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtQ29udGFpbmVyICYmIHRoaXMuZm9ybUNvbnRhaW5lci5jb250cm9sICYmICh0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250YWluZXIuY29udHJvbC5nZXQodGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RWxlbWVudFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhc0NoYW5nZXNCZXR3ZWVuTW9kZWxzKHZhbHVlLCBuYXRpdmVWYWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KG5hdGl2ZVZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkYXRpb25zKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3luY1ZhbGlkYXRvcnMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICBzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuaXNSZXF1aXJlZFZhbGlkYXRvcigpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzUmVxdWlyZWRWYWxpZGF0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wudmFsdWUgJiYgSlNPTi5zdHJpbmdpZnkoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4geyAncmVxdWlyZWQnOiB0cnVlIH07XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlcGxhY2VTaG93QWRkVGFnKCkge1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLm5nU2VsZWN0Q29tcG9uZW50LCAnc2hvd0FkZFRhZycsIHtcclxuICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubmdTZWxlY3RDb21wb25lbnRbJ3NlYXJjaFRlcm0nXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXJtID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudFsnc2VhcmNoVGVybSddLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdTZWxlY3RDb21wb25lbnQuYWRkVGFnICYmICF0aGlzLm5nU2VsZWN0Q29tcG9uZW50LmxvYWRpbmdcclxuICAgICAgICAgICAgICAgICAgICAmJiAoIXRoaXMuaGFzVGVybUluRmlsdGVyZWRJdGVtcyh0ZXJtKSAmJiAoIXRoaXMuaGFzVGVybUluU2VsZWN0ZWRJdGVtcyh0ZXJtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAhdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5oaWRlU2VsZWN0ZWQgJiYgdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pc09wZW4pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYmluZElubmVySW5wdXRVbmlxdWVJZCgpIHtcclxuICAgICAgICBjb25zdCBjaGlsZElucHV0cyA9IHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTtcclxuXHJcbiAgICAgICAgaWYgKGNoaWxkSW5wdXRzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5uZXJJbnB1dCA9IGNoaWxkSW5wdXRzWzBdO1xyXG5cclxuICAgICAgICAgICAgaW5uZXJJbnB1dC5pZCA9IHV1aWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNUZXJtSW5GaWx0ZXJlZEl0ZW1zKHRlcm06IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50Lml0ZW1zTGlzdC5maWx0ZXJlZEl0ZW1zO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0NvbG9xdWVudFJlc291cmNlKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMuc29tZSgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50VmFsdWUgPSAoPGFueT5lbGVtZW50LnZhbHVlKS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kTGFiZWwpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50VmFsdWUgJiYgZWxlbWVudFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHRlcm07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMuc29tZSgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpW3RoaXMuYmluZExhYmVsXTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50VmFsdWUgJiYgZWxlbWVudFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHRlcm07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNUZXJtSW5TZWxlY3RlZEl0ZW1zKHRlcm06IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLm5nU2VsZWN0Q29tcG9uZW50LnNlbGVjdGVkSXRlbXM7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzQ29sb3F1ZW50UmVzb3VyY2UoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRWYWx1ZSA9ICg8YW55PmVsZW1lbnQudmFsdWUpLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRMYWJlbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5zb21lKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudFZhbHVlID0gKDxhbnk+ZWxlbWVudC52YWx1ZSlbdGhpcy5iaW5kTGFiZWxdO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWx1ZSAmJiBlbGVtZW50VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gdGVybTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhZFByZXZpb3VzU2VsZWN0aW9uKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMub3JpZ2luYWxJdGVtcz8uZmluZChlbGVtZW50ID0+IHRoaXMuY29tcGFyZVdpdGgoZWxlbWVudCwgaXRlbSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNDb2xvcXVlbnRSZXNvdXJjZSgpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zID0gdGhpcy5uZ1NlbGVjdENvbXBvbmVudC5pdGVtc0xpc3QuZmlsdGVyZWRJdGVtcztcclxuXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMgJiYgZmlsdGVyZWRJdGVtcy5sZW5ndGggJiYgdHlwZW9mIGZpbHRlcmVkSXRlbXNbMF0udmFsdWVbJ2dldEF0dHJpYnV0ZSddID09PSAnZnVuY3Rpb24nO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNIaWRkZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdTZWxlY3RDb21wb25lbnQuZWxlbWVudC5vZmZzZXRQYXJlbnQgPT09IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBOZ3RTZWxlY3REcm9wZG93blBhbmVsSGVpZ2h0IHtcclxuICAgIEFVVE8gPSAnYXV0bycsXHJcbiAgICBYUyA9ICd4cycsXHJcbiAgICBNRCA9ICdtZCcsXHJcbiAgICBTTSA9ICdzbScsXHJcbiAgICBMRyA9ICdsZycsXHJcbiAgICBYTCA9ICd4bCdcclxufVxyXG4iXX0=
|