ng-zenduit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2020/lib/breadcrumbs/zendu-breadcrumbs.component.mjs +37 -0
- package/esm2020/lib/card-block/zendu-card-block.component.mjs +21 -0
- package/esm2020/lib/checkbox/zendu-checkbox.component.mjs +44 -0
- package/esm2020/lib/colorpicker/zendu-colorpicker.component.mjs +106 -0
- package/esm2020/lib/column-configuration/columnState.mjs +2 -0
- package/esm2020/lib/column-configuration/zendu-column-configuration.component.mjs +118 -0
- package/esm2020/lib/datepicker/date-picker-day.mjs +2 -0
- package/esm2020/lib/datepicker/date-picker-hint.mjs +2 -0
- package/esm2020/lib/datepicker/datepicker.mjs +9 -0
- package/esm2020/lib/datepicker/zendu-datepicker.component.mjs +434 -0
- package/esm2020/lib/doc-scanner/zendu-doc-scanner.component.mjs +628 -0
- package/esm2020/lib/file-upload/zendu-file-upload.component.mjs +107 -0
- package/esm2020/lib/filter/dateRange.mjs +2 -0
- package/esm2020/lib/filter/filtersConfig.mjs +2 -0
- package/esm2020/lib/filter/numberRange.mjs +2 -0
- package/esm2020/lib/filter/zendu-filter.component.mjs +461 -0
- package/esm2020/lib/icon/zendu-icon.component.mjs +24 -0
- package/esm2020/lib/local.lock.mjs +33 -0
- package/esm2020/lib/location-search/location.address.mjs +2 -0
- package/esm2020/lib/location-search/zendu-location-search.component.mjs +129 -0
- package/esm2020/lib/map/map.types.mjs +2 -0
- package/esm2020/lib/map/zendu-map.component.mjs +129 -0
- package/esm2020/lib/map-preview/zendu-map-preview.component.mjs +30 -0
- package/esm2020/lib/ng-zenduit.module.mjs +158 -0
- package/esm2020/lib/pagination-bar/pageItem.mjs +2 -0
- package/esm2020/lib/pagination-bar/zendu-pagination-bar.component.mjs +71 -0
- package/esm2020/lib/phone-input/zendu-phone-input.component.mjs +141 -0
- package/esm2020/lib/progress/zendu-progress.component.mjs +29 -0
- package/esm2020/lib/radio-button/radio-button.component.mjs +48 -0
- package/esm2020/lib/search-box/zendu-search-box.component.mjs +124 -0
- package/esm2020/lib/select/templates/zendu-select-option.directive.mjs +16 -0
- package/esm2020/lib/select/templates/zendu-select-value.directive.mjs +16 -0
- package/esm2020/lib/select/zendu-select.component.mjs +303 -0
- package/esm2020/lib/services/geoconding.service.mjs +61 -0
- package/esm2020/lib/services/map.service.mjs +181 -0
- package/esm2020/lib/services/opencv.service.mjs +109 -0
- package/esm2020/lib/services/zendu-notify.service.mjs +92 -0
- package/esm2020/lib/sort-header/zendu-sort-header.component.mjs +36 -0
- package/esm2020/lib/spinner/zendu-spinner.component.mjs +11 -0
- package/esm2020/lib/toggle/zendu-toggle.component.mjs +32 -0
- package/esm2020/lib/toggle-slide/zendu-toggle-slide.component.mjs +27 -0
- package/esm2020/lib/util.mjs +93 -0
- package/esm2020/ng-zenduit.mjs +5 -0
- package/esm2020/public-api.mjs +42 -0
- package/fesm2015/ng-zenduit.mjs +3768 -0
- package/fesm2015/ng-zenduit.mjs.map +1 -0
- package/fesm2020/ng-zenduit.mjs +3735 -0
- package/fesm2020/ng-zenduit.mjs.map +1 -0
- package/icons/arrow-down-small.svg +3 -0
- package/icons/arrow-up-small.svg +3 -0
- package/icons/calendar.svg +6 -0
- package/icons/cross.svg +3 -0
- package/icons/date.svg +3 -0
- package/icons/expand.svg +3 -0
- package/icons/filter.svg +3 -0
- package/icons/play.svg +10 -0
- package/icons/redo.svg +3 -0
- package/icons/rotate.svg +3 -0
- package/icons/time.svg +4 -0
- package/icons/undo.svg +3 -0
- package/index.d.ts +5 -0
- package/lib/breadcrumbs/zendu-breadcrumbs.component.d.ts +22 -0
- package/lib/card-block/zendu-card-block.component.d.ts +9 -0
- package/lib/checkbox/zendu-checkbox.component.d.ts +17 -0
- package/lib/colorpicker/zendu-colorpicker.component.d.ts +28 -0
- package/lib/column-configuration/columnState.d.ts +7 -0
- package/lib/column-configuration/zendu-column-configuration.component.d.ts +43 -0
- package/lib/datepicker/date-picker-day.d.ts +8 -0
- package/lib/datepicker/date-picker-hint.d.ts +5 -0
- package/lib/datepicker/datepicker.d.ts +7 -0
- package/lib/datepicker/zendu-datepicker.component.d.ts +94 -0
- package/lib/doc-scanner/zendu-doc-scanner.component.d.ts +82 -0
- package/lib/file-upload/zendu-file-upload.component.d.ts +28 -0
- package/lib/filter/dateRange.d.ts +4 -0
- package/lib/filter/filtersConfig.d.ts +88 -0
- package/lib/filter/numberRange.d.ts +4 -0
- package/lib/filter/zendu-filter.component.d.ts +59 -0
- package/lib/icon/zendu-icon.component.d.ts +10 -0
- package/lib/local.lock.d.ts +8 -0
- package/lib/location-search/location.address.d.ts +12 -0
- package/lib/location-search/zendu-location-search.component.d.ts +32 -0
- package/lib/map/map.types.d.ts +33 -0
- package/lib/map/zendu-map.component.d.ts +23 -0
- package/lib/map-preview/zendu-map-preview.component.d.ts +11 -0
- package/lib/ng-zenduit.module.d.ts +34 -0
- package/lib/pagination-bar/pageItem.d.ts +4 -0
- package/lib/pagination-bar/zendu-pagination-bar.component.d.ts +25 -0
- package/lib/phone-input/zendu-phone-input.component.d.ts +39 -0
- package/lib/progress/zendu-progress.component.d.ts +14 -0
- package/lib/radio-button/radio-button.component.d.ts +18 -0
- package/lib/search-box/zendu-search-box.component.d.ts +26 -0
- package/lib/select/templates/zendu-select-option.directive.d.ts +8 -0
- package/lib/select/templates/zendu-select-value.directive.d.ts +8 -0
- package/lib/select/zendu-select.component.d.ts +107 -0
- package/lib/services/geoconding.service.d.ts +23 -0
- package/lib/services/map.service.d.ts +22 -0
- package/lib/services/opencv.service.d.ts +46 -0
- package/lib/services/zendu-notify.service.d.ts +10 -0
- package/lib/sort-header/zendu-sort-header.component.d.ts +10 -0
- package/lib/spinner/zendu-spinner.component.d.ts +5 -0
- package/lib/toggle/zendu-toggle.component.d.ts +14 -0
- package/lib/toggle-slide/zendu-toggle-slide.component.d.ts +13 -0
- package/lib/util.d.ts +11 -0
- package/package.json +36 -0
- package/public-api.d.ts +38 -0
- package/styles/action-menu.scss +127 -0
- package/styles/all.scss +11 -0
- package/styles/button.scss +188 -0
- package/styles/colors.scss +125 -0
- package/styles/common-form.scss +159 -0
- package/styles/extenal.scss +2 -0
- package/styles/ghost.scss +38 -0
- package/styles/global-restyle.scss +25 -0
- package/styles/page-layout.scss +82 -0
- package/styles/snackbar.scss +91 -0
- package/styles/table.scss +107 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { Util } from '../util';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "@angular/forms";
|
|
6
|
+
export class ZenduSearchBoxComponent {
|
|
7
|
+
constructor(_element, _ngZone) {
|
|
8
|
+
this._element = _element;
|
|
9
|
+
this._ngZone = _ngZone;
|
|
10
|
+
this.textChange = new EventEmitter();
|
|
11
|
+
this.autoFocus = true;
|
|
12
|
+
this.placeholder = "Search";
|
|
13
|
+
this._focusAttempts = 0;
|
|
14
|
+
this.setDelay(500);
|
|
15
|
+
}
|
|
16
|
+
set delay(val) {
|
|
17
|
+
this.setDelay(val);
|
|
18
|
+
}
|
|
19
|
+
ngOnInit() {
|
|
20
|
+
// give 100ms for autoFocus initalization
|
|
21
|
+
setTimeout(() => {
|
|
22
|
+
if (this.autoFocus) {
|
|
23
|
+
this.doFocus();
|
|
24
|
+
}
|
|
25
|
+
}, 100);
|
|
26
|
+
}
|
|
27
|
+
onChange() {
|
|
28
|
+
this._debouncedInvoke();
|
|
29
|
+
}
|
|
30
|
+
clearFromParent() {
|
|
31
|
+
this.text = "";
|
|
32
|
+
}
|
|
33
|
+
clear() {
|
|
34
|
+
this.text = "";
|
|
35
|
+
this._debouncedInvoke();
|
|
36
|
+
}
|
|
37
|
+
invokeChange() {
|
|
38
|
+
this._ngZone.run(() => {
|
|
39
|
+
this.textChange.emit(this.text);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
setDelay(delay) {
|
|
43
|
+
this._debouncedInvoke = Util.debounce(() => {
|
|
44
|
+
this.invokeChange();
|
|
45
|
+
}, delay);
|
|
46
|
+
}
|
|
47
|
+
activateSearchBox() {
|
|
48
|
+
this.searchInput.nativeElement.focus();
|
|
49
|
+
}
|
|
50
|
+
doFocus() {
|
|
51
|
+
this._focusAttempts++;
|
|
52
|
+
if (this._focusAttempts > 100) {
|
|
53
|
+
// stop attempts to initalize
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const input = this.getInput(this._element.nativeElement);
|
|
57
|
+
if (!input) {
|
|
58
|
+
// wait 100ms to run the next check
|
|
59
|
+
setTimeout(() => {
|
|
60
|
+
this.doFocus();
|
|
61
|
+
}, 100);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// check if element visible or not
|
|
65
|
+
const height = input.clientHeight;
|
|
66
|
+
if (height == 0) {
|
|
67
|
+
// wait 100ms to run the next check
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
this.doFocus();
|
|
70
|
+
}, 100);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// set focus to element
|
|
74
|
+
setTimeout(() => {
|
|
75
|
+
input.focus();
|
|
76
|
+
}, 1);
|
|
77
|
+
}
|
|
78
|
+
getInput(element) {
|
|
79
|
+
if (!element) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
if (element.nodeName == "INPUT") {
|
|
83
|
+
return element;
|
|
84
|
+
}
|
|
85
|
+
for (let idx = 0; idx < element.children.length; idx++) {
|
|
86
|
+
const el = element.children.item(idx);
|
|
87
|
+
if (el && el.nodeName == "INPUT") {
|
|
88
|
+
return el;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// find input in the children tree
|
|
92
|
+
for (let idx = 0; idx < element.children.length; idx++) {
|
|
93
|
+
const el = element.children.item(idx);
|
|
94
|
+
if (!el) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const elInput = this.getInput(el);
|
|
98
|
+
if (elInput) {
|
|
99
|
+
return elInput;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
ZenduSearchBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSearchBoxComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
106
|
+
ZenduSearchBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduSearchBoxComponent, selector: "zen-search-box", inputs: { text: "text", delay: "delay", autoFocus: "autoFocus", placeholder: "placeholder" }, outputs: { textChange: "textChange" }, viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "<div class=\"search-box-component\">\n <i class=\"svg-icons\"\n (click)=\"activateSearchBox()\">\n <svg width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8.33333\"\n cy=\"8.33333\"\n r=\"5.83333\"\n stroke=\"#828282\"\n stroke-width=\"1.6\" />\n <path d=\"M17.5 17.5001L12.9166 12.9167\"\n stroke=\"#828282\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\" />\n </svg>\n </i>\n <input [(ngModel)]=\"text\"\n class=\"search-box\"\n (ngModelChange)=\"onChange()\"\n placeholder=\"{{placeholder}}\"\n #searchInput>\n <i class=\"material-icons close-icon\"\n *ngIf=\"text\"\n (click)=\"clear()\">close</i>\n</div>", styles: [".search-box-component{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:8px;width:100%;height:40px;background:#FFFFFF;border:1px solid #F2F2F2;box-sizing:border-box;border-radius:4px;padding:8px}.search-box-component:hover{border-color:#b8b9bc}.search-box-component:focus-within{box-shadow:0 0 2px 2px #2188d94d}.search-box-component input{border:0;font-style:normal;font-weight:400;font-size:14px;line-height:130%;width:100%;outline:none;color:#4f4f4f;font-family:Roboto}.search-box-component input::placeholder{color:#828282}.search-box-component .svg-icons{display:flex}.search-box-component .material-icons{color:#828282;-webkit-user-select:none;user-select:none}.search-box-component .material-icons.close-icon{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSearchBoxComponent, decorators: [{
|
|
108
|
+
type: Component,
|
|
109
|
+
args: [{ selector: 'zen-search-box', template: "<div class=\"search-box-component\">\n <i class=\"svg-icons\"\n (click)=\"activateSearchBox()\">\n <svg width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"8.33333\"\n cy=\"8.33333\"\n r=\"5.83333\"\n stroke=\"#828282\"\n stroke-width=\"1.6\" />\n <path d=\"M17.5 17.5001L12.9166 12.9167\"\n stroke=\"#828282\"\n stroke-width=\"1.6\"\n stroke-linecap=\"round\" />\n </svg>\n </i>\n <input [(ngModel)]=\"text\"\n class=\"search-box\"\n (ngModelChange)=\"onChange()\"\n placeholder=\"{{placeholder}}\"\n #searchInput>\n <i class=\"material-icons close-icon\"\n *ngIf=\"text\"\n (click)=\"clear()\">close</i>\n</div>", styles: [".search-box-component{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;gap:8px;width:100%;height:40px;background:#FFFFFF;border:1px solid #F2F2F2;box-sizing:border-box;border-radius:4px;padding:8px}.search-box-component:hover{border-color:#b8b9bc}.search-box-component:focus-within{box-shadow:0 0 2px 2px #2188d94d}.search-box-component input{border:0;font-style:normal;font-weight:400;font-size:14px;line-height:130%;width:100%;outline:none;color:#4f4f4f;font-family:Roboto}.search-box-component input::placeholder{color:#828282}.search-box-component .svg-icons{display:flex}.search-box-component .material-icons{color:#828282;-webkit-user-select:none;user-select:none}.search-box-component .material-icons.close-icon{cursor:pointer}\n"] }]
|
|
110
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.NgZone }]; }, propDecorators: { text: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], textChange: [{
|
|
113
|
+
type: Output
|
|
114
|
+
}], delay: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], autoFocus: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}], placeholder: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}], searchInput: [{
|
|
121
|
+
type: ViewChild,
|
|
122
|
+
args: ['searchInput', { static: false }]
|
|
123
|
+
}] } });
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc2VhcmNoLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvc2VhcmNoLWJveC96ZW5kdS1zZWFyY2gtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWFyY2gtYm94L3plbmR1LXNlYXJjaC1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFrQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7QUFPL0IsTUFBTSxPQUFPLHVCQUF1QjtJQW9CbEMsWUFDVSxRQUFvQixFQUNwQixPQUFlO1FBRGYsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUNwQixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBbEJmLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBTXpDLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFVixnQkFBVyxHQUFHLFFBQVEsQ0FBQztRQU0vQixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQU16QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFuQkQsSUFBYSxLQUFLLENBQUMsR0FBVztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFtQk0sUUFBUTtRQUNiLHlDQUF5QztRQUN6QyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDaEI7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFD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Q1Y7WUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQWlCLENBQUMsQ0FBQztZQUNqRCxJQUFJLE9BQU8sRUFBRTtnQkFDWCxPQUFPLE9BQU8sQ0FBQzthQUNoQjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztxSEE3SFUsdUJBQXVCO3lHQUF2Qix1QkFBdUIsdVNDUnBDLHM1QkEyQk07NEZEbkJPLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxnQkFBZ0I7c0hBTWpCLElBQUk7c0JBQVosS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUVNLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFFVSxXQUFXO3NCQUExQixLQUFLO2dCQUV1QyxXQUFXO3NCQUF2RCxTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uL3V0aWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd6ZW4tc2VhcmNoLWJveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi96ZW5kdS1zZWFyY2gtYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vemVuZHUtc2VhcmNoLWJveC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFplbmR1U2VhcmNoQm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSB0ZXh0OiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIHRleHRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBASW5wdXQoKSBzZXQgZGVsYXkodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldERlbGF5KHZhbCk7XG4gIH1cblxuICBASW5wdXQoKSBhdXRvRm9jdXMgPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlciA9IFwiU2VhcmNoXCI7XG5cbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSkgc2VhcmNoSW5wdXQhOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgX2RlYm91bmNlZEludm9rZSE6ICgpID0+IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfZm9jdXNBdHRlbXB0cyA9IDA7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUpIHtcblxuICAgIHRoaXMuc2V0RGVsYXkoNTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBnaXZlIDEwMG1zIGZvciBhdXRvRm9jdXMgaW5pdGFsaXphdGlvblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuYXV0b0ZvY3VzKSB7XG4gICAgICAgIHRoaXMuZG9Gb2N1cygpO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2UoKSB7XG4gICAgdGhpcy5fZGVib3VuY2VkSW52b2tlKCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJGcm9tUGFyZW50KCkge1xuICAgIHRoaXMudGV4dCA9IFwiXCI7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgdGhpcy50ZXh0ID0gXCJcIjtcbiAgICB0aGlzLl9kZWJvdW5jZWRJbnZva2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW52b2tlQ2hhbmdlKCkge1xuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy50ZXh0Q2hhbmdlLmVtaXQodGhpcy50ZXh0KTtcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWxheShkZWxheTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGVib3VuY2VkSW52b2tlID0gVXRpbC5kZWJvdW5jZSgoKSA9PiB7XG4gICAgICB0aGlzLmludm9rZUNoYW5nZSgpO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmF0ZVNlYXJjaEJveCgpIHtcbiAgICB0aGlzLnNlYXJjaElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBkb0ZvY3VzKCkge1xuXG4gICAgdGhpcy5fZm9jdXNBdHRlbXB0cysrO1xuICAgIGlmICh0aGlzLl9mb2N1c0F0dGVtcHRzID4gMTAwKSB7XG4gICAgICAvLyBzdG9wIGF0dGVtcHRzIHRvIGluaXRhbGl6ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRJbnB1dCh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIGlmICghaW5wdXQpIHtcbiAgICAgIC8vIHdhaXQgMTAwbXMgdG8gcnVuIHRoZSBuZXh0IGNoZWNrXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5kb0ZvY3VzKCk7XG4gICAgICB9LCAxMDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjaGVjayBpZiBlbGVtZW50IHZpc2libGUgb3Igbm90XG4gICAgY29uc3QgaGVpZ2h0ID0gaW5wdXQuY2xpZW50SGVpZ2h0O1xuICAgIGlmIChoZWlnaHQgPT0gMCkge1xuICAgICAgLy8gd2FpdCAxMDBtcyB0byBydW4gdGhlIG5leHQgY2hlY2tcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvRm9jdXMoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc2V0IGZvY3VzIHRvIGVsZW1lbnRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgfSwgMSk7XG4gIH1cblxuICBwcml2YXRlIGdldElucHV0KGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCk6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5ub2RlTmFtZSA9PSBcIklOUFVUXCIpIHtcbiAgICAgIHJldHVybiBlbGVtZW50IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICBjb25zdCBlbCA9IGVsZW1lbnQuY2hpbGRyZW4uaXRlbShpZHgpO1xuICAgICAgaWYgKGVsICYmIGVsLm5vZGVOYW1lID09IFwiSU5QVVRcIikge1xuICAgICAgICByZXR1cm4gZWwgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaW5kIGlucHV0IGluIHRoZSBjaGlsZHJlbiB0cmVlXG4gICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICBjb25zdCBlbCA9IGVsZW1lbnQuY2hpbGRyZW4uaXRlbShpZHgpO1xuICAgICAgaWYgKCFlbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsSW5wdXQgPSB0aGlzLmdldElucHV0KGVsIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgIGlmIChlbElucHV0KSB7XG4gICAgICAgIHJldHVybiBlbElucHV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2VhcmNoLWJveC1jb21wb25lbnRcIj5cbiAgIDxpIGNsYXNzPVwic3ZnLWljb25zXCJcbiAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlYXJjaEJveCgpXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIlxuICAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgIDxjaXJjbGUgY3g9XCI4LjMzMzMzXCJcbiAgICAgICAgICAgICAgICAgY3k9XCI4LjMzMzMzXCJcbiAgICAgICAgICAgICAgICAgcj1cIjUuODMzMzNcIlxuICAgICAgICAgICAgICAgICBzdHJva2U9XCIjODI4MjgyXCJcbiAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42XCIgLz5cbiAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxNy41MDAxTDEyLjkxNjYgMTIuOTE2N1wiXG4gICAgICAgICAgICAgICBzdHJva2U9XCIjODI4MjgyXCJcbiAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNlwiXG4gICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgPC9pPlxuICAgPGlucHV0IFsobmdNb2RlbCldPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJzZWFyY2gtYm94XCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZSgpXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7cGxhY2Vob2xkZXJ9fVwiXG4gICAgICAgICAgI3NlYXJjaElucHV0PlxuICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjbG9zZS1pY29uXCJcbiAgICAgICpuZ0lmPVwidGV4dFwiXG4gICAgICAoY2xpY2spPVwiY2xlYXIoKVwiPmNsb3NlPC9pPlxuPC9kaXY+Il19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class ZenduSelectOptionDirective {
|
|
4
|
+
constructor(template) {
|
|
5
|
+
this.template = template;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
ZenduSelectOptionDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSelectOptionDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
9
|
+
ZenduSelectOptionDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ZenduSelectOptionDirective, selector: "[zen-select-option]", ngImport: i0 });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSelectOptionDirective, decorators: [{
|
|
11
|
+
type: Directive,
|
|
12
|
+
args: [{
|
|
13
|
+
selector: '[zen-select-option]'
|
|
14
|
+
}]
|
|
15
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc2VsZWN0LW9wdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvc2VsZWN0L3RlbXBsYXRlcy96ZW5kdS1zZWxlY3Qtb3B0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDOztBQUt2RCxNQUFNLE9BQU8sMEJBQTBCO0lBRW5DLFlBQW1CLFFBQTBCO1FBQTFCLGFBQVEsR0FBUixRQUFRLENBQWtCO0lBQUksQ0FBQzs7d0hBRnpDLDBCQUEwQjs0R0FBMUIsMEJBQTBCOzRGQUExQiwwQkFBMEI7a0JBSHRDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtpQkFDbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3plbi1zZWxlY3Qtb3B0aW9uXSdcbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVTZWxlY3RPcHRpb25EaXJlY3RpdmUge1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7IH1cblxufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class ZenduSelectValueDirective {
|
|
4
|
+
constructor(template) {
|
|
5
|
+
this.template = template;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
ZenduSelectValueDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSelectValueDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
9
|
+
ZenduSelectValueDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ZenduSelectValueDirective, selector: "[zen-select-value]", ngImport: i0 });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSelectValueDirective, decorators: [{
|
|
11
|
+
type: Directive,
|
|
12
|
+
args: [{
|
|
13
|
+
selector: '[zen-select-value]'
|
|
14
|
+
}]
|
|
15
|
+
}], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc2VsZWN0LXZhbHVlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvdGVtcGxhdGVzL3plbmR1LXNlbGVjdC12YWx1ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQzs7QUFLdkQsTUFBTSxPQUFPLHlCQUF5QjtJQUVsQyxZQUFtQixRQUEwQjtRQUExQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtJQUFJLENBQUM7O3VIQUZ6Qyx5QkFBeUI7MkdBQXpCLHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQUhyQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxvQkFBb0I7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t6ZW4tc2VsZWN0LXZhbHVlXSdcbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHsgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostListener, Input, Output, ContentChild } from '@angular/core';
|
|
2
|
+
import { ZenduSelectOptionDirective } from './templates/zendu-select-option.directive';
|
|
3
|
+
import { ZenduSelectValueDirective } from './templates/zendu-select-value.directive';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
import * as i2 from "../checkbox/zendu-checkbox.component";
|
|
7
|
+
import * as i3 from "../search-box/zendu-search-box.component";
|
|
8
|
+
export class ZenduSelectComponent {
|
|
9
|
+
constructor(_element) {
|
|
10
|
+
this._element = _element;
|
|
11
|
+
/**
|
|
12
|
+
* callback to emit changes for parent component
|
|
13
|
+
*/
|
|
14
|
+
this.selectModelChange = new EventEmitter();
|
|
15
|
+
/**
|
|
16
|
+
* List of options for select
|
|
17
|
+
*/
|
|
18
|
+
this.options = [];
|
|
19
|
+
/**
|
|
20
|
+
* Property to set custom placeholder value
|
|
21
|
+
*/
|
|
22
|
+
this.placeholder = 'Select Items';
|
|
23
|
+
/**
|
|
24
|
+
* Component property to disable component
|
|
25
|
+
*/
|
|
26
|
+
this.disabled = false;
|
|
27
|
+
/**
|
|
28
|
+
* Show the custom icon for toggle
|
|
29
|
+
*/
|
|
30
|
+
this.customIcon = "";
|
|
31
|
+
/**
|
|
32
|
+
* Color for custom icon
|
|
33
|
+
*/
|
|
34
|
+
this.customIconColor = "";
|
|
35
|
+
/**
|
|
36
|
+
* Truncate text with "..." at the end
|
|
37
|
+
*/
|
|
38
|
+
this.isTruncate = false;
|
|
39
|
+
/**
|
|
40
|
+
* Is dropdown expanded
|
|
41
|
+
*/
|
|
42
|
+
this.isExpanded = false;
|
|
43
|
+
this.searchText = '';
|
|
44
|
+
this.labelText = '';
|
|
45
|
+
this.isTopMenuDirection = false;
|
|
46
|
+
}
|
|
47
|
+
outsideHandling(event) {
|
|
48
|
+
if (!document.body.contains(event.target)) {
|
|
49
|
+
// element not in the DOM
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (this._element.nativeElement.contains(event.target)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// hide the menu for outside click
|
|
56
|
+
this.hideDropDown();
|
|
57
|
+
}
|
|
58
|
+
scroll() {
|
|
59
|
+
this.updatePlacement();
|
|
60
|
+
}
|
|
61
|
+
ngOnChanges(changeObj) {
|
|
62
|
+
this.filterOptions();
|
|
63
|
+
this.updateLabel();
|
|
64
|
+
}
|
|
65
|
+
isModelEmpty() {
|
|
66
|
+
if (this.isMultiselect) {
|
|
67
|
+
return !this.selectModel || !this.selectModel.length;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
return typeof this.selectModel === 'undefined' || this.selectModel === null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
handleOptionClick(option) {
|
|
74
|
+
const optionValue = this.returnOption ? option : this.getId(option);
|
|
75
|
+
if (this.isMultiselect) {
|
|
76
|
+
this.toggleOption(optionValue);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
this.singleSelect(optionValue);
|
|
80
|
+
}
|
|
81
|
+
this.emitChange();
|
|
82
|
+
}
|
|
83
|
+
// Logic for single select
|
|
84
|
+
singleSelect(value) {
|
|
85
|
+
this.selectModel = value;
|
|
86
|
+
// Hide dropdown if single select
|
|
87
|
+
this.hideDropDown();
|
|
88
|
+
}
|
|
89
|
+
toggleExpand() {
|
|
90
|
+
this.isExpanded = !this.isExpanded;
|
|
91
|
+
this.searchText = "";
|
|
92
|
+
this.filterOptions();
|
|
93
|
+
this.updatePlacement();
|
|
94
|
+
}
|
|
95
|
+
// Logic for multiselect
|
|
96
|
+
toggleOption(value) {
|
|
97
|
+
if (!Array.isArray(this.selectModel)) {
|
|
98
|
+
this.selectModel = [];
|
|
99
|
+
}
|
|
100
|
+
const index = this.getElementIndex(value);
|
|
101
|
+
if (index < 0) {
|
|
102
|
+
this.selectModel.push(value);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.selectModel.splice(index, 1);
|
|
106
|
+
}
|
|
107
|
+
this.updateLabel();
|
|
108
|
+
}
|
|
109
|
+
getElementIndex(value) {
|
|
110
|
+
if (typeof value === 'object') {
|
|
111
|
+
const valueId = this.getId(value);
|
|
112
|
+
return this.selectModel.findIndex(el => this.getId(el) === valueId);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
return this.selectModel.indexOf(value);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
toggleAll() {
|
|
119
|
+
if (this.selectModel.length !== this.options.length) {
|
|
120
|
+
this.selectModel = this.options.map(el => this.returnOption ? el : this.getId(el));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
this.selectModel = [];
|
|
124
|
+
}
|
|
125
|
+
this.emitChange();
|
|
126
|
+
}
|
|
127
|
+
onSearchChange() {
|
|
128
|
+
this.filterOptions();
|
|
129
|
+
}
|
|
130
|
+
filterOptions() {
|
|
131
|
+
const options = this.options.slice(0);
|
|
132
|
+
if (!this.searchText) {
|
|
133
|
+
this.filteredOptions = options;
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const regex = new RegExp(this.searchText, 'i');
|
|
137
|
+
this.filteredOptions = options.filter(option => regex.test(this.getName(option)));
|
|
138
|
+
}
|
|
139
|
+
isSelected(option) {
|
|
140
|
+
if (this.isModelEmpty()) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
const optionId = this.getId(option);
|
|
144
|
+
if (this.isMultiselect) {
|
|
145
|
+
return this.selectModel.findIndex(el => this.getId(el) === optionId) >= 0;
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
return this.getId(this.selectModel) === optionId;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
updateLabel() {
|
|
152
|
+
if (this.isModelEmpty()) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (this.isMultiselect) {
|
|
156
|
+
const selectedCount = this.selectModel.length;
|
|
157
|
+
if (selectedCount === 1) {
|
|
158
|
+
this.labelText = this.getNameFromValue(this.selectModel[0]);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
this.labelText = `${selectedCount} Selected`;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
this.labelText = this.getNameFromValue(this.selectModel);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
getNameFromValue(val) {
|
|
169
|
+
if (this.returnOption) {
|
|
170
|
+
return this.getName(val);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
if (!this.options || !this.options.length) {
|
|
174
|
+
return '';
|
|
175
|
+
}
|
|
176
|
+
return this.getName(this.options.find(el => this.getId(el) === val));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
getName(option) {
|
|
180
|
+
if (typeof option === 'object') {
|
|
181
|
+
if (this.displayProp) {
|
|
182
|
+
return this.GetRecursiveProperty(option, this.displayProp);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
console.error('App-Select: when using objects as model, a displayProp value is mandatory.');
|
|
186
|
+
return "";
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
return option;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
getId(option) {
|
|
194
|
+
if (typeof option === 'object') {
|
|
195
|
+
if (this.idProp) {
|
|
196
|
+
return this.GetRecursiveProperty(option, this.idProp);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
console.error('App-Select: when using objects as model, a idProp value is mandatory.');
|
|
200
|
+
return "";
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
return option;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
GetRecursiveProperty(object, path) {
|
|
208
|
+
return path.split('.').reduce((obj, x) => {
|
|
209
|
+
if (obj) {
|
|
210
|
+
return obj[x];
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
}, object);
|
|
216
|
+
}
|
|
217
|
+
async hideDropDown() {
|
|
218
|
+
this.isExpanded = false;
|
|
219
|
+
}
|
|
220
|
+
emitChange() {
|
|
221
|
+
// notify with timeout
|
|
222
|
+
// allow output property "enabled" applied by parent first and then emit the onChange
|
|
223
|
+
setTimeout(() => {
|
|
224
|
+
this.selectModelChange.emit(this.selectModel);
|
|
225
|
+
}, 1);
|
|
226
|
+
}
|
|
227
|
+
updatePlacement() {
|
|
228
|
+
// update menu position base on scroll
|
|
229
|
+
this.isTopMenuDirection = this.getMenuDirection() === "top";
|
|
230
|
+
}
|
|
231
|
+
getMenuDirection() {
|
|
232
|
+
const element = this._element.nativeElement;
|
|
233
|
+
const top = element.getBoundingClientRect().top;
|
|
234
|
+
const height = window.innerHeight;
|
|
235
|
+
if (top > (height / 2)) {
|
|
236
|
+
return "top";
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
return "bottom";
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
getMaxMenuHeight() {
|
|
243
|
+
const containerElement = this.getContainerElement();
|
|
244
|
+
if (!containerElement || !containerElement.clientHeight) {
|
|
245
|
+
return "190px";
|
|
246
|
+
}
|
|
247
|
+
const parentHeight = containerElement.clientHeight;
|
|
248
|
+
let height = Math.round((parentHeight / 2) - 25);
|
|
249
|
+
height = Math.min(216, height);
|
|
250
|
+
height = Math.max(96, height);
|
|
251
|
+
return `${height}px`;
|
|
252
|
+
}
|
|
253
|
+
getContainerElement() {
|
|
254
|
+
const component = this._element.nativeElement;
|
|
255
|
+
const container = component.getElementsByClassName("app-select").item(0);
|
|
256
|
+
return container.offsetParent;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
ZenduSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSelectComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
260
|
+
ZenduSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduSelectComponent, selector: "zen-select", inputs: { selectModel: "selectModel", options: "options", placeholder: "placeholder", displayProp: "displayProp", idProp: "idProp", hasSearch: "hasSearch", returnOption: "returnOption", isMultiselect: "isMultiselect", disabled: "disabled", customIcon: "customIcon", customIconColor: "customIconColor", isTruncate: "isTruncate" }, outputs: { selectModelChange: "selectModelChange" }, host: { listeners: { "window:mousedown": "outsideHandling($event)", "window:scroll": "scroll()" } }, queries: [{ propertyName: "optionTemplate", first: true, predicate: ZenduSelectOptionDirective, descendants: true }, { propertyName: "valueTemplate", first: true, predicate: ZenduSelectValueDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length\">\n No matching options found\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All'\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".app-select{width:100%;position:relative}.app-select ::-webkit-scrollbar-thumb{background-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;transition:.3s;width:100%;background:#ffffff;-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:1px solid #d6d6d8;padding:0 0 8px;font-style:normal;font-weight:400;font-size:16px;line-height:24px;color:#333}.app-select .app-select-toggle .app-select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:24px}.app-select .app-select-toggle .app-select-label .placeholder{color:#bebebe}.app-select .app-select-toggle .app-select-label .selected-item{color:#333}.app-select .app-select-toggle .custom-icon{color:#bebebe}.app-select .app-select-toggle .app-select-icon{color:#bebebe;transition:.3s}.app-select .app-select-toggle:focus{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle:focus .app-select-icon,.app-select .app-select-toggle:focus .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle[readonly],.app-select .app-select-toggle[disabled]{cursor:not-allowed;color:#b8b9bc;border-color:#d0d0d2}.app-select .app-select-toggle.active{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle.active .app-select-icon{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.app-select .action-menu-container{position:sticky;width:inherit;z-index:10}.app-select .app-select-dropdown-wrapper{top:115%;width:inherit}.app-select .app-select-dropdown-wrapper.show-top{top:unset;bottom:115%}.app-select .app-select-dropdown-wrapper .action-menu-body{max-height:200px;overflow:auto}.app-select .app-select-dropdown-wrapper .no-options-found{background:#ffffff;color:#b8b9bc;padding:8px 16px;text-decoration:none;font-style:normal;font-weight:400;font-size:16px;line-height:24px}.app-select .app-select-dropdown-wrapper .select-all{font-weight:500}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ZenduCheckboxComponent, selector: "zen-checkbox", inputs: ["checked", "label", "disabled", "disableValueChange", "indeterminate", "imageUrl"], outputs: ["checkedChange"] }, { kind: "component", type: i3.ZenduSearchBoxComponent, selector: "zen-search-box", inputs: ["text", "delay", "autoFocus", "placeholder"], outputs: ["textChange"] }] });
|
|
261
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSelectComponent, decorators: [{
|
|
262
|
+
type: Component,
|
|
263
|
+
args: [{ selector: 'zen-select', template: "<div class=\"app-select\">\n <button class=\"app-select-toggle\"\n [disabled]=\"disabled\"\n (click)=\"toggleExpand()\"\n [ngClass]=\"{'active': isExpanded}\">\n <div class=\"app-select-label\">\n <div class=\"placeholder\"\n *ngIf=\"isModelEmpty()\">\n <span>{{placeholder}}</span>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"!isMultiselect && !isModelEmpty()\">\n <ng-template *ngIf=\"valueTemplate && selectModel[0]; else tplValueText\"\n [ngTemplateOutlet]=\"valueTemplate.template\"\n [ngTemplateOutletContext]=\"{ selectModel: selectModel, labelText: labelText }\"></ng-template>\n <ng-template #tplValueText>\n <span>{{ labelText }}</span>\n </ng-template>\n </div>\n <div class=\"selected-item\"\n *ngIf=\"isMultiselect && !isModelEmpty()\">\n <span>{{ labelText }}</span>\n </div>\n </div>\n <i *ngIf=\"!customIcon\"\n class=\"material-icons app-select-icon\">expand_more</i>\n <i *ngIf=\"customIcon\"\n class=\"material-icons-outlined custom-icon\"\n [style.color]=\"customIconColor\">{{customIcon}}</i>\n </button>\n\n <div class=\"action-menu-container\">\n <div class=\"action-menu app-select-dropdown-wrapper\"\n [ngClass]=\"{ 'show-top': isTopMenuDirection }\">\n <div class=\"app-select-dropdown\"\n *ngIf=\"isExpanded\">\n <div class=\"action-menu-header\"\n *ngIf=\"hasSearch\">\n <!--Search options-->\n <div class=\"search-wrapper\">\n <zen-search-box [(text)]=\"searchText\"\n (textChange)=\"onSearchChange()\"></zen-search-box>\n </div>\n </div>\n <div class=\"action-menu-body\">\n <!--No options found-->\n <div class=\"no-options-found\"\n *ngIf=\"!filteredOptions.length\">\n No matching options found\n </div>\n\n <!--Select All Option-->\n <div class=\"action-item-checkbox select-all\"\n *ngIf=\"isMultiselect && !searchText\"\n (click)=\"toggleAll()\">\n <zen-checkbox [checked]=\"selectModel.length === options.length\"\n [indeterminate]=\"selectModel.length !== options.length && selectModel.length\"\n [disableValueChange]=\"true\"\n [label]=\"'Select All'\"></zen-checkbox>\n </div>\n\n <!--Single select Options-->\n <ng-container *ngIf=\"!isMultiselect\">\n <a class=\"action-item\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\"\n [ngClass]=\"{ 'active': isSelected(option) }\">\n <span *ngIf=\"!isMultiselect\"\n [class.action-item-truncate]=\"isTruncate\">\n <ng-template *ngIf=\"optionTemplate; else tplOptionText\"\n [ngTemplateOutlet]=\"optionTemplate.template\"\n [ngTemplateOutletContext]=\"{ option: option }\">\n </ng-template>\n <ng-template #tplOptionText>\n {{ getName(option) }}\n </ng-template>\n </span>\n </a>\n </ng-container>\n\n <!--Multiselect Options-->\n <ng-container *ngIf=\"isMultiselect\">\n <div class=\"action-item-checkbox\"\n *ngFor=\"let option of filteredOptions\"\n (click)=\"handleOptionClick(option)\">\n <zen-checkbox *ngIf=\"isMultiselect\"\n [checked]=\"isSelected(option)\"\n [label]=\"getName(option)\"\n [disableValueChange]=\"true\"></zen-checkbox>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".app-select{width:100%;position:relative}.app-select ::-webkit-scrollbar-thumb{background-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle{display:flex;align-items:center;justify-content:space-between;position:relative;transition:.3s;width:100%;background:#ffffff;-webkit-appearance:none;appearance:none;outline:none;cursor:pointer;border:none;border-radius:0;border-bottom:1px solid #d6d6d8;padding:0 0 8px;font-style:normal;font-weight:400;font-size:16px;line-height:24px;color:#333}.app-select .app-select-toggle .app-select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-weight:400;font-size:14px;line-height:24px}.app-select .app-select-toggle .app-select-label .placeholder{color:#bebebe}.app-select .app-select-toggle .app-select-label .selected-item{color:#333}.app-select .app-select-toggle .custom-icon{color:#bebebe}.app-select .app-select-toggle .app-select-icon{color:#bebebe;transition:.3s}.app-select .app-select-toggle:focus{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle:focus .app-select-icon,.app-select .app-select-toggle:focus .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle[readonly],.app-select .app-select-toggle[disabled]{cursor:not-allowed;color:#b8b9bc;border-color:#d0d0d2}.app-select .app-select-toggle.active{border-color:var(--color-primary, #2188d9)}.app-select .app-select-toggle.active .custom-icon{color:var(--color-primary, #2188d9)!important}.app-select .app-select-toggle.active .app-select-icon{transform:rotate(180deg);color:var(--color-primary, #2188d9)}.app-select .action-menu-container{position:sticky;width:inherit;z-index:10}.app-select .app-select-dropdown-wrapper{top:115%;width:inherit}.app-select .app-select-dropdown-wrapper.show-top{top:unset;bottom:115%}.app-select .app-select-dropdown-wrapper .action-menu-body{max-height:200px;overflow:auto}.app-select .app-select-dropdown-wrapper .no-options-found{background:#ffffff;color:#b8b9bc;padding:8px 16px;text-decoration:none;font-style:normal;font-weight:400;font-size:16px;line-height:24px}.app-select .app-select-dropdown-wrapper .select-all{font-weight:500}\n"] }]
|
|
264
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { selectModel: [{
|
|
265
|
+
type: Input
|
|
266
|
+
}], selectModelChange: [{
|
|
267
|
+
type: Output
|
|
268
|
+
}], options: [{
|
|
269
|
+
type: Input
|
|
270
|
+
}], placeholder: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], displayProp: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], idProp: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], hasSearch: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], returnOption: [{
|
|
279
|
+
type: Input
|
|
280
|
+
}], isMultiselect: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}], disabled: [{
|
|
283
|
+
type: Input
|
|
284
|
+
}], customIcon: [{
|
|
285
|
+
type: Input
|
|
286
|
+
}], customIconColor: [{
|
|
287
|
+
type: Input
|
|
288
|
+
}], isTruncate: [{
|
|
289
|
+
type: Input
|
|
290
|
+
}], optionTemplate: [{
|
|
291
|
+
type: ContentChild,
|
|
292
|
+
args: [ZenduSelectOptionDirective]
|
|
293
|
+
}], valueTemplate: [{
|
|
294
|
+
type: ContentChild,
|
|
295
|
+
args: [ZenduSelectValueDirective]
|
|
296
|
+
}], outsideHandling: [{
|
|
297
|
+
type: HostListener,
|
|
298
|
+
args: ['window:mousedown', ['$event']]
|
|
299
|
+
}], scroll: [{
|
|
300
|
+
type: HostListener,
|
|
301
|
+
args: ['window:scroll', []]
|
|
302
|
+
}] } });
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7QUFPckYsTUFBTSxPQUFPLG9CQUFvQjtJQW9GL0IsWUFDVSxRQUFvQjtRQUFwQixhQUFRLEdBQVIsUUFBUSxDQUFZO1FBOUU5Qjs7V0FFRztRQUNPLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFdEQ7O1dBRUc7UUFDTSxZQUFPLEdBQVUsRUFBRSxDQUFDO1FBRTdCOztXQUVHO1FBQ00sZ0JBQVcsR0FBRyxjQUFjLENBQUM7UUE0QnRDOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQUUxQjs7V0FFRztRQUNNLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFekI7O1dBRUc7UUFDTSxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUU5Qjs7V0FFRztRQUNNLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFPckM7O1dBRUc7UUFDSSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVmLHVCQUFrQixHQUFHLEtBQUssQ0FBQztJ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O2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBeUJvQyxjQUFjO3NCQUF2RCxZQUFZO3VCQUFDLDBCQUEwQjtnQkFLQyxhQUFhO3NCQUFyRCxZQUFZO3VCQUFDLHlCQUF5QjtnQkFHdkMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWM1QyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIENvbnRlbnRDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBaZW5kdVNlbGVjdE9wdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vdGVtcGxhdGVzL3plbmR1LXNlbGVjdC1vcHRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IFplbmR1U2VsZWN0VmFsdWVEaXJlY3RpdmUgfSBmcm9tICcuL3RlbXBsYXRlcy96ZW5kdS1zZWxlY3QtdmFsdWUuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnemVuLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi96ZW5kdS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi96ZW5kdS1zZWxlY3QuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBaZW5kdVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiAyLVdheSBjb21wb25lbnQgcHJvcGVydHkgZm9yIHNlbGVjdGVkIGl0ZW1zLlxuICAgKiBEb24ndCBpbml0aWFsaXplIHByb3BlcnR5IG9uIGNvbnN0cnVjdG9yIHRvIHByZXZlbnQgY2hhbmdlIHNvdXJjZSBwYXJhbWV0ZXJcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdE1vZGVsOiBhbnkgfCBhbnlbXTtcblxuICAvKipcbiAgICogY2FsbGJhY2sgdG8gZW1pdCBjaGFuZ2VzIGZvciBwYXJlbnQgY29tcG9uZW50XG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0TW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogTGlzdCBvZiBvcHRpb25zIGZvciBzZWxlY3RcbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107XG5cbiAgLyoqXG4gICAqIFByb3BlcnR5IHRvIHNldCBjdXN0b20gcGxhY2Vob2xkZXIgdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBJdGVtcyc7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBrZXkgdmFsdWUgdG8gZ2V0IGRpc3BsYXkgbmFtZSBmcm9tIG9wdGlvbiBvYmplY3RcbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXlQcm9wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBrZXkgdmFsdWUgdG8gZ2V0IGlkIGZyb20gb3B0aW9uIG9iamVjdFxuICAgKi9cbiAgQElucHV0KCkgaWRQcm9wOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBwcm9wZXJ0eSB0byBlbmFibGUgc2VhcmNoXG4gICAqL1xuICBASW5wdXQoKSBoYXNTZWFyY2g6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBwcm9wZXJ0eSB0byByZXR1cm4gd2hvbGUgb3B0aW9uIG9iamVjdFxuICAgKiBCeSBkZWZhdWx0IG9ubHkgaWQgdmFsdWUgaXMgcmV0dXJuZWRcbiAgICovXG4gIEBJbnB1dCgpIHJldHVybk9wdGlvbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29tcG9uZW50IHByb3BlcnR5IHRvIGVuYWJsZSBtdWx0aXNlbGVjdFxuICAgKi9cbiAgQElucHV0KCkgaXNNdWx0aXNlbGVjdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29tcG9uZW50IHByb3BlcnR5IHRvIGRpc2FibGUgY29tcG9uZW50XG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBjdXN0b20gaWNvbiBmb3IgdG9nZ2xlXG4gICAqL1xuICBASW5wdXQoKSBjdXN0b21JY29uID0gXCJcIjtcblxuICAvKipcbiAgICogQ29sb3IgZm9yIGN1c3RvbSBpY29uXG4gICAqL1xuICBASW5wdXQoKSBjdXN0b21JY29uQ29sb3IgPSBcIlwiO1xuXG4gIC8qKlxuICAgKiBUcnVuY2F0ZSB0ZXh0IHdpdGggXCIuLi5cIiBhdCB0aGUgZW5kXG4gICAqL1xuICBASW5wdXQoKSBpc1RydW5jYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEZpbHRlcmVkIGl0ZW1zIHZpc2libGUgb24gZHJvcGRvd25cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXJlZE9wdGlvbnM6IGFueVtdO1xuXG4gIC8qKlxuICAgKiBJcyBkcm9wZG93biBleHBhbmRlZFxuICAgKi9cbiAgcHVibGljIGlzRXhwYW5kZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgc2VhcmNoVGV4dCA9ICcnO1xuXG4gIHB1YmxpYyBsYWJlbFRleHQgPSAnJztcblxuICBwdWJsaWMgaXNUb3BNZW51RGlyZWN0aW9uID0gZmFsc2U7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgT3B0aW9uIFRlbXBsYXRlIGZvciBjdXN0b20gSFRNTFxuICAgKi9cbiAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdE9wdGlvbkRpcmVjdGl2ZSkgb3B0aW9uVGVtcGxhdGU6IFplbmR1U2VsZWN0T3B0aW9uRGlyZWN0aXZlO1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgVmFsdWUgVGVtcGxhdGUgZm9yIGN1c3RvbSBIVE1MXG4gICAqL1xuICBAQ29udGVudENoaWxkKFplbmR1U2VsZWN0VmFsdWVEaXJlY3RpdmUpIHZhbHVlVGVtcGxhdGU6IFplbmR1U2VsZWN0VmFsdWVEaXJlY3RpdmU7XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gIG91dHNpZGVIYW5kbGluZyhldmVudCkge1xuICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAvLyBlbGVtZW50IG5vdCBpbiB0aGUgRE9NXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBoaWRlIHRoZSBtZW51IGZvciBvdXRzaWRlIGNsaWNrXG4gICAgdGhpcy5oaWRlRHJvcERvd24oKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbXSlcbiAgc2Nyb2xsKCkge1xuICAgIHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlT2JqOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gIH1cblxuICBwdWJsaWMgaXNNb2RlbEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgIHJldHVybiAhdGhpcy5zZWxlY3RNb2RlbCB8fCAhdGhpcy5zZWxlY3RNb2RlbC5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5zZWxlY3RNb2RlbCA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5zZWxlY3RNb2RlbCA9PT0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlT3B0aW9uQ2xpY2sob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpIHtcbiAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMucmV0dXJuT3B0aW9uID8gb3B0aW9uIDogdGhpcy5nZXRJZChvcHRpb24pO1xuXG4gICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCkge1xuICAgICAgdGhpcy50b2dnbGVPcHRpb24ob3B0aW9uVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNpbmdsZVNlbGVjdChvcHRpb25WYWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICAvLyBMb2dpYyBmb3Igc2luZ2xlIHNlbGVjdFxuICBwcml2YXRlIHNpbmdsZVNlbGVjdCh2YWx1ZTogc3RyaW5nIHwgb2JqZWN0KSB7XG4gICAgdGhpcy5zZWxlY3RNb2RlbCA9IHZhbHVlO1xuXG4gICAgLy8gIEhpZGUgZHJvcGRvd24gaWYgc2luZ2xlIHNlbGVjdFxuICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRXhwYW5kKCkge1xuICAgIHRoaXMuaXNFeHBhbmRlZCA9ICF0aGlzLmlzRXhwYW5kZWQ7XG4gICAgdGhpcy5zZWFyY2hUZXh0ID0gXCJcIjtcbiAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgICB0aGlzLnVwZGF0ZVBsYWNlbWVudCgpO1xuICB9XG5cbiAgLy8gTG9naWMgZm9yIG11bHRpc2VsZWN0XG4gIHByaXZhdGUgdG9nZ2xlT3B0aW9uKHZhbHVlOiBzdHJpbmcgfCBvYmplY3QpOiB2b2lkIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RNb2RlbCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RWxlbWVudEluZGV4KHZhbHVlKTtcblxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0TW9kZWwucHVzaCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0TW9kZWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEVsZW1lbnRJbmRleCh2YWx1ZTogc3RyaW5nIHwgb2JqZWN0KTogbnVtYmVyIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgdmFsdWVJZCA9IHRoaXMuZ2V0SWQodmFsdWUpO1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZWwuZmluZEluZGV4KGVsID0+IHRoaXMuZ2V0SWQoZWwpID09PSB2YWx1ZUlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZWwuaW5kZXhPZih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvZ2dsZUFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RNb2RlbC5sZW5ndGggIT09IHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSB0aGlzLm9wdGlvbnMubWFwKGVsID0+IHRoaXMucmV0dXJuT3B0aW9uID8gZWwgOiB0aGlzLmdldElkKGVsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlYXJjaENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyT3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLnNsaWNlKDApO1xuXG4gICAgaWYgKCF0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodGhpcy5zZWFyY2hUZXh0LCAnaScpO1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHJlZ2V4LnRlc3QodGhpcy5nZXROYW1lKG9wdGlvbikpKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGVjdGVkKG9wdGlvbjogc3RyaW5nIHwgb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNNb2RlbEVtcHR5KCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25JZCA9IHRoaXMuZ2V0SWQob3B0aW9uKTtcblxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGVsLmZpbmRJbmRleChlbCA9PiB0aGlzLmdldElkKGVsKSA9PT0gb3B0aW9uSWQpID49IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmdldElkKHRoaXMuc2VsZWN0TW9kZWwpID09PSBvcHRpb25JZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlTGFiZWwoKSB7XG4gICAgaWYgKHRoaXMuaXNNb2RlbEVtcHR5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gdGhpcy5zZWxlY3RNb2RlbC5sZW5ndGg7XG5cbiAgICAgIGlmIChzZWxlY3RlZENvdW50ID09PSAxKSB7XG4gICAgICAgIHRoaXMubGFiZWxUZXh0ID0gdGhpcy5nZXROYW1lRnJvbVZhbHVlKHRoaXMuc2VsZWN0TW9kZWxbMF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sYWJlbFRleHQgPSBgJHtzZWxlY3RlZENvdW50fSBTZWxlY3RlZGA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGFiZWxUZXh0ID0gdGhpcy5nZXROYW1lRnJvbVZhbHVlKHRoaXMuc2VsZWN0TW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXROYW1lRnJvbVZhbHVlKHZhbDogc3RyaW5nIHwgb2JqZWN0KTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5yZXR1cm5PcHRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE5hbWUodmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMgfHwgIXRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5nZXROYW1lKHRoaXMub3B0aW9ucy5maW5kKGVsID0+IHRoaXMuZ2V0SWQoZWwpID09PSB2YWwpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TmFtZShvcHRpb246IHN0cmluZyB8IG9iamVjdCk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodGhpcy5kaXNwbGF5UHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5HZXRSZWN1cnNpdmVQcm9wZXJ0eShvcHRpb24sIHRoaXMuZGlzcGxheVByb3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQXBwLVNlbGVjdDogd2hlbiB1c2luZyBvYmplY3RzIGFzIG1vZGVsLCBhIGRpc3BsYXlQcm9wIHZhbHVlIGlzIG1hbmRhdG9yeS4nKTtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJZChvcHRpb246IHN0cmluZyB8IG9iamVjdCk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodGhpcy5pZFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuR2V0UmVjdXJzaXZlUHJvcGVydHkob3B0aW9uLCB0aGlzLmlkUHJvcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBcHAtU2VsZWN0OiB3aGVuIHVzaW5nIG9iamVjdHMgYXMgbW9kZWwsIGEgaWRQcm9wIHZhbHVlIGlzIG1hbmRhdG9yeS4nKTtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBHZXRSZWN1cnNpdmVQcm9wZXJ0eShvYmplY3Q6IGFueSwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCB4KSA9PiB7XG4gICAgICBpZiAob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmpbeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9LCBvYmplY3QpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGhpZGVEcm9wRG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENoYW5nZSgpIHtcbiAgICAvLyBub3RpZnkgd2l0aCB0aW1lb3V0XG4gICAgLy8gYWxsb3cgb3V0cHV0IHByb3BlcnR5IFwiZW5hYmxlZFwiIGFwcGxpZWQgYnkgcGFyZW50IGZpcnN0IGFuZCB0aGVuIGVtaXQgdGhlIG9uQ2hhbmdlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdE1vZGVsQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RNb2RlbCk7XG4gICAgfSwgMSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBsYWNlbWVudCgpIHtcbiAgICAvLyB1cGRhdGUgbWVudSBwb3NpdGlvbiBiYXNlIG9uIHNjcm9sbFxuICAgIHRoaXMuaXNUb3BNZW51RGlyZWN0aW9uID0gdGhpcy5nZXRNZW51RGlyZWN0aW9uKCkgPT09IFwidG9wXCI7XG4gIH1cblxuICBwcml2YXRlIGdldE1lbnVEaXJlY3Rpb24oKTogXCJib3R0b21cIiB8IFwidG9wXCIge1xuXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCB0b3AgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblxuICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgIGlmICh0b3AgPiAoaGVpZ2h0IC8gMikpIHtcbiAgICAgIHJldHVybiBcInRvcFwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBcImJvdHRvbVwiXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXhNZW51SGVpZ2h0KCkge1xuICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKTtcbiAgICBpZiAoIWNvbnRhaW5lckVsZW1lbnQgfHwgIWNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG4gICAgICByZXR1cm4gXCIxOTBweFwiO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudEhlaWdodCA9IGNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGxldCBoZWlnaHQgPSBNYXRoLnJvdW5kKChwYXJlbnRIZWlnaHQgLyAyKSAtIDI1KTtcbiAgICBoZWlnaHQgPSBNYXRoLm1pbigyMTYsIGhlaWdodCk7XG4gICAgaGVpZ2h0ID0gTWF0aC5tYXgoOTYsIGhlaWdodCk7XG4gICAgcmV0dXJuIGAke2hlaWdodH1weGA7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRhaW5lckVsZW1lbnQoKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbXBvbmVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYXBwLXNlbGVjdFwiKS5pdGVtKDApIGFzIEhUTUxFbGVtZW50O1xuICAgIHJldHVybiBjb250YWluZXIub2Zmc2V0UGFyZW50O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdFwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYXBwLXNlbGVjdC10b2dnbGVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZCgpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzRXhwYW5kZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNb2RlbEVtcHR5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3twbGFjZWhvbGRlcn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTXVsdGlzZWxlY3QgJiYgIWlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInZhbHVlVGVtcGxhdGUgJiYgc2VsZWN0TW9kZWxbMF07IGVsc2UgdHBsVmFsdWVUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInZhbHVlVGVtcGxhdGUudGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgc2VsZWN0TW9kZWw6IHNlbGVjdE1vZGVsLCBsYWJlbFRleHQ6IGxhYmVsVGV4dCB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0cGxWYWx1ZVRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWxUZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiAhaXNNb2RlbEVtcHR5KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWxUZXh0IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhY3VzdG9tSWNvblwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBhcHAtc2VsZWN0LWljb25cIj5leHBhbmRfbW9yZTwvaT5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImN1c3RvbUljb25cIlxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgY3VzdG9tLWljb25cIlxuICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJjdXN0b21JY29uQ29sb3JcIj57e2N1c3RvbUljb259fTwvaT5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudSBhcHAtc2VsZWN0LWRyb3Bkb3duLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2hvdy10b3AnOiBpc1RvcE1lbnVEaXJlY3Rpb24gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzRXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNTZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU2VhcmNoIG9wdGlvbnMtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tc2VhcmNoLWJveCBbKHRleHQpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXh0Q2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKClcIj48L3plbi1zZWFyY2gtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tTm8gb3B0aW9ucyBmb3VuZC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1vcHRpb25zLWZvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIG1hdGNoaW5nIG9wdGlvbnMgZm91bmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TZWxlY3QgQWxsIE9wdGlvbi0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24taXRlbS1jaGVja2JveCBzZWxlY3QtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiAhc2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tY2hlY2tib3ggW2NoZWNrZWRdPVwic2VsZWN0TW9kZWwubGVuZ3RoID09PSBvcHRpb25zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdE1vZGVsLmxlbmd0aCAhPT0gb3B0aW9ucy5sZW5ndGggJiYgc2VsZWN0TW9kZWwubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVWYWx1ZUNoYW5nZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidTZWxlY3QgQWxsJ1wiPjwvemVuLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNpbmdsZSBzZWxlY3QgT3B0aW9ucy0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNNdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJhY3Rpb24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT3B0aW9uQ2xpY2sob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBpc1NlbGVjdGVkKG9wdGlvbikgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbi1pdGVtLXRydW5jYXRlXT1cImlzVHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJvcHRpb25UZW1wbGF0ZTsgZWxzZSB0cGxPcHRpb25UZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGUudGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb246IG9wdGlvbiB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RwbE9wdGlvblRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXROYW1lKG9wdGlvbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tTXVsdGlzZWxlY3QgT3B0aW9ucy0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc011bHRpc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWl0ZW0tY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHRpb25DbGljayhvcHRpb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tY2hlY2tib3ggKm5nSWY9XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJnZXROYW1lKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVmFsdWVDaGFuZ2VdPVwidHJ1ZVwiPjwvemVuLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuPC9kaXY+Il19
|