master-control 0.3.32 → 0.3.34

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.
@@ -1,4 +1,4 @@
1
- import { Component, input, Output, EventEmitter } from '@angular/core';
1
+ import { Component, forwardRef, input, Output, EventEmitter, effect, } from '@angular/core';
2
2
  import { MatInputModule } from '@angular/material/input';
3
3
  import { MatFormFieldModule } from '@angular/material/form-field';
4
4
  import { CommonModule } from '@angular/common';
@@ -11,100 +11,252 @@ import * as i4 from "@angular/common";
11
11
  import * as i5 from "@angular/forms";
12
12
  export class TextboxComponent {
13
13
  masterService;
14
- constructor(masterService) {
14
+ kvDiffers;
15
+ constructor(masterService, kvDiffers) {
15
16
  this.masterService = masterService;
17
+ this.kvDiffers = kvDiffers;
18
+ effect(() => {
19
+ const f = this.field();
20
+ if (!f)
21
+ return;
22
+ if (f.isInputMasked == null)
23
+ f.isInputMasked = false;
24
+ this.syncUIFromRaw();
25
+ });
16
26
  }
17
- inputValue = null;
18
27
  field = input.required();
19
28
  reactiveFormControlobject = input();
20
- _onChange = (inputValue) => { };
21
- _unTouched = () => { };
22
- maskEnabled = true;
23
- inputValueDeepCopy = null;
24
- // Declare Output event emitter here (class level)
29
+ _onChange = () => { };
30
+ _onTouched = () => { };
31
+ inputValueDeepCopy = '';
32
+ inputValue = '';
33
+ lastBeforeInput = null;
34
+ fieldDiffer;
35
+ cfgDiffer;
36
+ styleDiffer;
37
+ validatorsDiffer;
25
38
  blur = new EventEmitter();
26
- ngOnInit() {
27
- if (!this.field().isInputMasked) {
28
- this.field().isInputMasked = false;
39
+ ngDoCheck() {
40
+ const f = this.field?.();
41
+ if (!f)
42
+ return;
43
+ if (!this.fieldDiffer)
44
+ this.fieldDiffer = this.kvDiffers.find(f).create();
45
+ let changed = !!this.fieldDiffer.diff(f);
46
+ if (f.configData) {
47
+ if (!this.cfgDiffer)
48
+ this.cfgDiffer = this.kvDiffers.find(f.configData).create();
49
+ if (this.cfgDiffer.diff(f.configData))
50
+ changed = true;
29
51
  }
30
- if (this.field()?.configData?.isTextCapitalized && this.field().isInputMasked) {
31
- this.inputValue = this.field()?.configData?.isTextCapitalized;
32
- this.checkinputMasked();
52
+ if (f.controlStyle) {
53
+ if (!this.styleDiffer)
54
+ this.styleDiffer = this.kvDiffers.find(f.controlStyle).create();
55
+ if (this.styleDiffer.diff(f.controlStyle))
56
+ changed = true;
57
+ }
58
+ if (f.validators) {
59
+ if (!this.validatorsDiffer)
60
+ this.validatorsDiffer = this.kvDiffers.find(f.validators).create();
61
+ if (this.validatorsDiffer.diff(f.validators))
62
+ changed = true;
63
+ }
64
+ if (changed) {
65
+ this.onFieldConfigChanged();
33
66
  }
34
67
  }
68
+ onFieldConfigChanged() {
69
+ const oldRaw = this.inputValueDeepCopy ?? '';
70
+ const newRaw = this.applyCapitalization(oldRaw);
71
+ if (newRaw !== oldRaw) {
72
+ this.inputValueDeepCopy = newRaw;
73
+ const maskEnabled = !!this.field?.().isInputMasked;
74
+ const hasReactive = !!this.reactiveFormControlobject?.();
75
+ if (hasReactive && !maskEnabled) {
76
+ try {
77
+ this.reactiveFormControlobject().setValue(newRaw, { emitEvent: true });
78
+ }
79
+ catch {
80
+ this._onChange(newRaw);
81
+ }
82
+ }
83
+ else {
84
+ this._onChange(newRaw);
85
+ }
86
+ }
87
+ this.syncUIFromRaw();
88
+ }
35
89
  writeValue(obj) {
36
- this.inputValue = !this.masterService.checkIfValueIsEmpty(obj) ? obj : '';
90
+ const raw = !this.masterService.checkIfValueIsEmpty(obj) ? String(obj) : '';
91
+ const capitalized = this.applyCapitalization(raw);
92
+ this.inputValueDeepCopy = capitalized;
93
+ this.syncUIFromRaw();
37
94
  }
38
- ;
39
95
  registerOnChange(fn) {
40
96
  this._onChange = fn;
41
97
  }
42
- ;
43
98
  registerOnTouched(fn) {
44
- this._unTouched = fn;
99
+ this._onTouched = fn;
100
+ }
101
+ setDisabledState(isDisabled) {
102
+ const f = this.field?.();
103
+ if (f)
104
+ f.isDisable = !!isDisabled;
105
+ }
106
+ onBeforeInput(event) {
107
+ const target = event.target;
108
+ const start = target?.selectionStart ?? 0;
109
+ const end = target?.selectionEnd ?? start;
110
+ this.lastBeforeInput = {
111
+ type: event.inputType,
112
+ data: event.data,
113
+ start,
114
+ end,
115
+ };
45
116
  }
46
- ;
47
- setDisabledState(isDisabled) { }
48
- ;
49
117
  onInputChange(event) {
50
- let min = null;
51
- let max = null;
52
- let value = event.target.value;
53
- if (!this.masterService.checkIfValueIsEmpty(this.field()?.configData) && !this.masterService.checkIfValueIsEmpty(this.field()?.configData?.minValue) && !this.masterService.checkIfValueIsEmpty(this.field()?.configData?.maxValue)) {
54
- min = parseInt(this.field()?.configData?.minValue);
55
- max = parseInt(this.field()?.configData?.maxValue);
118
+ const target = event.target;
119
+ const f = this.field?.();
120
+ const cfg = f?.configData;
121
+ const intent = this.lastBeforeInput ?? {
122
+ type: 'insertText',
123
+ data: null,
124
+ start: target.selectionStart ?? this.inputValueDeepCopy.length,
125
+ end: target.selectionEnd ?? target.selectionStart ?? this.inputValueDeepCopy.length,
126
+ };
127
+ let newVal = this.applyIntentToRaw(this.inputValueDeepCopy, intent);
128
+ newVal = this.applyCapitalization(newVal);
129
+ if (cfg?.inputType === 'number') {
130
+ const min = this.normalizeNumber(cfg?.minValue);
131
+ const max = this.normalizeNumber(cfg?.maxValue);
132
+ const num = Number(newVal);
133
+ if (!Number.isNaN(num)) {
134
+ if (min !== null && num < min)
135
+ newVal = String(min);
136
+ if (max !== null && num > max)
137
+ newVal = String(max);
138
+ }
56
139
  }
57
- if (!this.masterService.checkIfValueIsEmpty(this.field()?.configData?.inputType) && this.field()?.configData?.inputType === 'number' && !this.masterService.checkIfValueIsEmpty(max) && !this.masterService.checkIfValueIsEmpty(min)) {
58
- if (parseInt(value) < min || parseInt(value) > max) {
59
- event.target.value = parseInt(event.target.value.toString().slice(0, -1));
140
+ this.inputValueDeepCopy = newVal;
141
+ const maskEnabled = !!f?.isInputMasked;
142
+ const hasReactive = !!this.reactiveFormControlobject?.();
143
+ if (hasReactive && !maskEnabled) {
144
+ try {
145
+ this.reactiveFormControlobject().setValue(newVal, { emitEvent: true });
146
+ }
147
+ catch {
148
+ this._onChange(newVal);
149
+ }
150
+ }
151
+ else {
152
+ this._onChange(newVal);
153
+ }
154
+ const display = maskEnabled ? this.maskInput(newVal) : newVal;
155
+ this.inputValue = display;
156
+ const nextCaret = this.computeNextCaret(intent, newVal.length);
157
+ if (target.value !== display) {
158
+ target.value = display;
159
+ try {
160
+ target.setSelectionRange(nextCaret, nextCaret);
161
+ }
162
+ catch {
163
+ console.log(this.inputValue);
60
164
  }
61
165
  }
62
- this.inputValue = this.field()?.configData?.isTextCapitalized ? (event.target.value).toUpperCase() : event.target.value;
63
- this.inputValueDeepCopy = JSON.parse(JSON.stringify(this.inputValue));
64
- this._onChange(this.inputValue);
166
+ this.lastBeforeInput = null;
65
167
  }
66
168
  onInputBlur(event) {
67
- this._unTouched();
169
+ this._onTouched();
68
170
  this.blur.emit(event);
69
- if (!this.masterService.checkIfValueIsEmpty(event.target.value)) {
70
- this.checkinputMasked();
71
- }
72
171
  }
73
- checkinputMasked() {
74
- if (!this.field().isInputMasked) {
75
- this.inputValue = this.inputValueDeepCopy;
76
- }
77
- return this.field().isInputMasked ? this.maskInput(this.inputValue) : this.inputValue;
172
+ onInputFocus() {
173
+ }
174
+ syncUIFromRaw() {
175
+ const f = this.field?.();
176
+ const maskEnabled = !!f?.isInputMasked;
177
+ const raw = this.inputValueDeepCopy ?? '';
178
+ this.inputValue = maskEnabled ? this.maskInput(raw) : raw;
179
+ }
180
+ applyCapitalization(v) {
181
+ const f = this.field?.();
182
+ return f?.configData?.isTextCapitalized ? v.toUpperCase() : v;
183
+ }
184
+ normalizeNumber(v) {
185
+ if (this.masterService.checkIfValueIsEmpty(v))
186
+ return null;
187
+ const n = Number(v);
188
+ return Number.isNaN(n) ? null : n;
78
189
  }
79
190
  maskInput(value) {
80
- if (value.length > 3) {
81
- this.inputValue = value[0] + 'X'.repeat(value.length - 2) + value[value.length - 1];
191
+ if (!value || value.length < 3)
192
+ return value || '';
193
+ return value[0] + 'X'.repeat(value.length - 2) + value[value.length - 1];
194
+ }
195
+ applyIntentToRaw(raw, intent) {
196
+ const { type, data, start, end } = intent;
197
+ const s = Math.max(0, Math.min(start, raw.length));
198
+ const e = Math.max(s, Math.min(end, raw.length));
199
+ switch (type) {
200
+ case 'insertText': {
201
+ const insert = data ?? '';
202
+ return raw.slice(0, s) + insert + raw.slice(e);
203
+ }
204
+ case 'insertFromPaste': {
205
+ const paste = data ?? '';
206
+ return raw.slice(0, s) + paste + raw.slice(e);
207
+ }
208
+ case 'deleteContentBackward': {
209
+ if (s !== e)
210
+ return raw.slice(0, s) + raw.slice(e);
211
+ const idx = Math.max(0, s - 1);
212
+ return raw.slice(0, idx) + raw.slice(e);
213
+ }
214
+ case 'deleteContentForward': {
215
+ if (s !== e)
216
+ return raw.slice(0, s) + raw.slice(e);
217
+ return raw.slice(0, s) + raw.slice(Math.min(e + 1, raw.length));
218
+ }
219
+ case 'deleteByCut': {
220
+ return raw.slice(0, s) + raw.slice(e);
221
+ }
222
+ default:
223
+ return raw;
82
224
  }
83
225
  }
84
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextboxComponent, deps: [{ token: i1.MasterControlService }], target: i0.ɵɵFactoryTarget.Component });
226
+ computeNextCaret(intent, newLen) {
227
+ const { type, data, start, end } = intent;
228
+ switch (type) {
229
+ case 'insertText':
230
+ case 'insertFromPaste':
231
+ return start + (data?.length ?? 0);
232
+ case 'deleteContentBackward':
233
+ return Math.max(0, start - (start === end ? 1 : 0));
234
+ case 'deleteContentForward':
235
+ case 'deleteByCut':
236
+ return start;
237
+ default:
238
+ return Math.max(0, Math.min(start, newLen));
239
+ }
240
+ }
241
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextboxComponent, deps: [{ token: i1.MasterControlService }, { token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Component });
85
242
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TextboxComponent, isStandalone: true, selector: "lib-textbox", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, reactiveFormControlobject: { classPropertyName: "reactiveFormControlobject", publicName: "reactiveFormControlobject", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { blur: "blur" }, providers: [
86
243
  {
87
244
  provide: NG_VALUE_ACCESSOR,
88
- useExisting: TextboxComponent,
89
- multi: true
90
- }
91
- ], ngImport: i0, template: "<label\r\n class=\"field-lable\"\r\n *ngIf=\"field() && field()?.isVisible && field().isShowLabel\"\r\n >{{ field()?.label\r\n }}<span style=\"color: red\" *ngIf=\"field() && field()?.validators?.isRequired\"\r\n >*</span\r\n ></label\r\n>\r\n<mat-form-field\r\n class=\"w-100\"\r\n appearance=\"outline\"\r\n *ngIf=\"field() && field()?.isVisible\"\r\n [ngStyle]=\"{\r\n'--custom-border-color': field()?.controlStyle?.borderColor ,\r\n'--custom-border-width': field()?.controlStyle?.borderWidth ,\r\n'--custom-border-radius': field()?.controlStyle?.borderRadius ,\r\n'--custom-bg-color': field()?.controlStyle?.background ,\r\n'--custom-border-color-focus': field()?.controlStyle?.focusBorderColor ,\r\n'--custom-border-width-focus': field()?.controlStyle?.focusBorderWidth ,\r\n'--custom-bg-color-focus': field()?.controlStyle?.focusBackground ,\r\n'--custom-border-color-hover': field()?.controlStyle?.hoverBorderColor ,\r\n'--custom-border-width-hover': field()?.controlStyle?.hoverBorderWidth ,\r\n'--custom-border-color-error': field()?.controlStyle?.errorBorderColor ,\r\n'--custom-border-width-error': field()?.controlStyle?.errorBorderWidth ,\r\n'--custom-font-size': field()?.controlStyle?.fontSize ,\r\n'--custom-font-weight': field()?.controlStyle?.fontWeight ,\r\n'--custom-font-family': field()?.controlStyle?.fontFamily ,\r\n'--custom-font-color': field()?.controlStyle?.color ,\r\n'--custom-caret-color': field()?.controlStyle?.caretColor ,\r\n'--custom-font-color-disabled' : field()?.controlStyle?.disableColor ,\r\n'--custom-bg-color-disabled' : field()?.controlStyle?.disableBackground ,\r\n'--custom-width': field()?.controlStyle?.width ,\r\n}\"\r\n>\r\n @if(reactiveFormControlobject()) {\r\n <input\r\n matInput\r\n autocomplete=\"none\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n [value]=\"inputValue\"\r\n [formControl]=\"reactiveFormControlobject()\"\r\n />\r\n }@else {\r\n <input\r\n matInput\r\n autocomplete=\"none\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n [value]=\"inputValue\"\r\n />\r\n }\r\n <mat-hint *ngIf=\"field()?.configData?.helperText\">{{field()?.configData?.helperText}}</mat-hint>\r\n\r\n <mat-error *ngIf=\"false\">\r\n {{ field()?.validators?.isRequiredMessage }}\r\n </mat-error>\r\n <!-- <mat-error *ngIf=\"field()?.configData?.isInvalidPattern && !masterService.checkIfValueIsEmpty(field()?.validators?.patternMessage)\">\r\n {{ field()?.validators?.patternMessage }}\r\n </mat-error> -->\r\n</mat-form-field>\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.isRequiredMessage }}.\r\n</div>\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.patternMessage }}.\r\n</div>\r\n", styles: [".field-lable{font-size:12px!important;font-weight:700!important;color:#444!important;margin-bottom:5px}.error-message{color:red}*{font-family:mulish!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--custom-border-color-focus, #ffbb00)!important;border-width:var(--custom-border-width-focus, 1.5px)!important}::ng-deep .mat-mdc-form-field{background-color:var(--custom-bg-color, #ffffff)!important;border-radius:var(--custom-border-radius , 4px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color, #dddddd)!important;border-width:var(--custom-border-width, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--custom-caret-color, #ffbb00)!important;font-size:12px!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important;color:var(--custom-font-color, #444444)!important}::ng-deep .mat-form-field-invalid .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field.mat-form-field-disabled{background:var(--custom-bg-color-disabled, #ECECEC)!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--custom-font-color-disabled, #999999)!important}::ng-deep .mdc-label{color:var(--custom-font-color, #444)!important;font-size:var(--custom-font-size, 16px)!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important}::placeholder{color:#8f8f8f!important;font-size:12px!important}::ng-deep .mat-mdc-form-field-hint-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error{color:#e00!important;font-size:12px;font-weight:500;font-family:Mulish!important;letter-spacing:0}::ng-deep .mdc-text-field--outlined{--mdc-outlined-text-field-container-shape: var(--custom-border-radius , 4px) !important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{font-size:14px!important}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
245
+ useExisting: forwardRef(() => TextboxComponent),
246
+ multi: true,
247
+ },
248
+ ], ngImport: i0, template: "<label\r\n class=\"field-lable\"\r\n *ngIf=\"field() && field()?.isVisible && field().isShowLabel\"\r\n>\r\n {{ field()?.label }}\r\n <span style=\"color: red\" *ngIf=\"field() && field()?.validators?.isRequired\">*</span>\r\n</label>\r\n\r\n<mat-form-field\r\n class=\"w-100\"\r\n appearance=\"outline\"\r\n *ngIf=\"field() && field()?.isVisible\"\r\n [ngStyle]=\"{\r\n '--custom-border-color': field()?.controlStyle?.borderColor ,\r\n '--custom-border-width': field()?.controlStyle?.borderWidth ,\r\n '--custom-border-radius': field()?.controlStyle?.borderRadius ,\r\n '--custom-bg-color': field()?.controlStyle?.background ,\r\n '--custom-border-color-focus': field()?.controlStyle?.focusBorderColor ,\r\n '--custom-border-width-focus': field()?.controlStyle?.focusBorderWidth ,\r\n '--custom-bg-color-focus': field()?.controlStyle?.focusBackground ,\r\n '--custom-border-color-hover': field()?.controlStyle?.hoverBorderColor ,\r\n '--custom-border-width-hover': field()?.controlStyle?.hoverBorderWidth ,\r\n '--custom-border-color-error': field()?.controlStyle?.errorBorderColor ,\r\n '--custom-border-width-error': field()?.controlStyle?.errorBorderWidth ,\r\n '--custom-font-size': field()?.controlStyle?.fontSize ,\r\n '--custom-font-weight': field()?.controlStyle?.fontWeight ,\r\n '--custom-font-family': field()?.controlStyle?.fontFamily ,\r\n '--custom-font-color': field()?.controlStyle?.color ,\r\n '--custom-caret-color': field()?.controlStyle?.caretColor ,\r\n '--custom-font-color-disabled' : field()?.controlStyle?.disableColor ,\r\n '--custom-bg-color-disabled' : field()?.controlStyle?.disableBackground ,\r\n '--custom-width': field()?.controlStyle?.width\r\n }\"\r\n>\r\n\r\n @if (reactiveFormControlobject() && !field()?.isInputMasked) {\r\n <input\r\n matInput\r\n autocomplete=\"off\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (beforeinput)=\"onBeforeInput($event)\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (focus)=\"onInputFocus()\"\r\n [formControl]=\"reactiveFormControlobject()\"\r\n />\r\n } @else {\r\n\r\n <input\r\n matInput\r\n autocomplete=\"off\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (beforeinput)=\"onBeforeInput($event)\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (focus)=\"onInputFocus()\"\r\n [value]=\"inputValue\"\r\n />\r\n }\r\n\r\n <mat-hint *ngIf=\"field()?.configData?.helperText\">{{ field()?.configData?.helperText }}</mat-hint>\r\n\r\n <mat-error *ngIf=\"false\">\r\n {{ field()?.validators?.requiredMessage || 'This field cannot be empty' }}\r\n </mat-error>\r\n\r\n</mat-form-field>\r\n\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.requiredMessage }}.\r\n</div>\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.patternMessage }}.\r\n</div>", styles: [".field-lable{font-size:12px!important;font-weight:700!important;color:#444!important;margin-bottom:5px}.error-message{color:red}*{font-family:mulish!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--custom-border-color-focus, #ffbb00)!important;border-width:var(--custom-border-width-focus, 1.5px)!important}::ng-deep .mat-mdc-form-field{background-color:var(--custom-bg-color, #ffffff)!important;border-radius:var(--custom-border-radius , 4px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color, #dddddd)!important;border-width:var(--custom-border-width, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--custom-caret-color, #ffbb00)!important;font-size:12px!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important;color:var(--custom-font-color, #444444)!important}::ng-deep .mat-form-field-invalid .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field.mat-form-field-disabled{background:var(--custom-bg-color-disabled, #ECECEC)!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--custom-font-color-disabled, #999999)!important}::ng-deep .mdc-label{color:var(--custom-font-color, #444)!important;font-size:var(--custom-font-size, 16px)!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important}::placeholder{color:#8f8f8f!important;font-size:12px!important}::ng-deep .mat-mdc-form-field-hint-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error{color:#e00!important;font-size:12px;font-weight:500;font-family:Mulish!important;letter-spacing:0}::ng-deep .mdc-text-field--outlined{--mdc-outlined-text-field-container-shape: var(--custom-border-radius , 4px) !important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{font-size:14px!important}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
92
249
  }
93
250
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TextboxComponent, decorators: [{
94
251
  type: Component,
95
- args: [{ selector: 'lib-textbox', standalone: true, imports: [
96
- MatInputModule,
97
- MatFormFieldModule,
98
- CommonModule,
99
- ReactiveFormsModule
100
- ], providers: [
252
+ args: [{ selector: 'lib-textbox', standalone: true, imports: [MatInputModule, MatFormFieldModule, CommonModule, ReactiveFormsModule], providers: [
101
253
  {
102
254
  provide: NG_VALUE_ACCESSOR,
103
- useExisting: TextboxComponent,
104
- multi: true
105
- }
106
- ], template: "<label\r\n class=\"field-lable\"\r\n *ngIf=\"field() && field()?.isVisible && field().isShowLabel\"\r\n >{{ field()?.label\r\n }}<span style=\"color: red\" *ngIf=\"field() && field()?.validators?.isRequired\"\r\n >*</span\r\n ></label\r\n>\r\n<mat-form-field\r\n class=\"w-100\"\r\n appearance=\"outline\"\r\n *ngIf=\"field() && field()?.isVisible\"\r\n [ngStyle]=\"{\r\n'--custom-border-color': field()?.controlStyle?.borderColor ,\r\n'--custom-border-width': field()?.controlStyle?.borderWidth ,\r\n'--custom-border-radius': field()?.controlStyle?.borderRadius ,\r\n'--custom-bg-color': field()?.controlStyle?.background ,\r\n'--custom-border-color-focus': field()?.controlStyle?.focusBorderColor ,\r\n'--custom-border-width-focus': field()?.controlStyle?.focusBorderWidth ,\r\n'--custom-bg-color-focus': field()?.controlStyle?.focusBackground ,\r\n'--custom-border-color-hover': field()?.controlStyle?.hoverBorderColor ,\r\n'--custom-border-width-hover': field()?.controlStyle?.hoverBorderWidth ,\r\n'--custom-border-color-error': field()?.controlStyle?.errorBorderColor ,\r\n'--custom-border-width-error': field()?.controlStyle?.errorBorderWidth ,\r\n'--custom-font-size': field()?.controlStyle?.fontSize ,\r\n'--custom-font-weight': field()?.controlStyle?.fontWeight ,\r\n'--custom-font-family': field()?.controlStyle?.fontFamily ,\r\n'--custom-font-color': field()?.controlStyle?.color ,\r\n'--custom-caret-color': field()?.controlStyle?.caretColor ,\r\n'--custom-font-color-disabled' : field()?.controlStyle?.disableColor ,\r\n'--custom-bg-color-disabled' : field()?.controlStyle?.disableBackground ,\r\n'--custom-width': field()?.controlStyle?.width ,\r\n}\"\r\n>\r\n @if(reactiveFormControlobject()) {\r\n <input\r\n matInput\r\n autocomplete=\"none\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n [value]=\"inputValue\"\r\n [formControl]=\"reactiveFormControlobject()\"\r\n />\r\n }@else {\r\n <input\r\n matInput\r\n autocomplete=\"none\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n [value]=\"inputValue\"\r\n />\r\n }\r\n <mat-hint *ngIf=\"field()?.configData?.helperText\">{{field()?.configData?.helperText}}</mat-hint>\r\n\r\n <mat-error *ngIf=\"false\">\r\n {{ field()?.validators?.isRequiredMessage }}\r\n </mat-error>\r\n <!-- <mat-error *ngIf=\"field()?.configData?.isInvalidPattern && !masterService.checkIfValueIsEmpty(field()?.validators?.patternMessage)\">\r\n {{ field()?.validators?.patternMessage }}\r\n </mat-error> -->\r\n</mat-form-field>\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.isRequiredMessage }}.\r\n</div>\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.patternMessage }}.\r\n</div>\r\n", styles: [".field-lable{font-size:12px!important;font-weight:700!important;color:#444!important;margin-bottom:5px}.error-message{color:red}*{font-family:mulish!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--custom-border-color-focus, #ffbb00)!important;border-width:var(--custom-border-width-focus, 1.5px)!important}::ng-deep .mat-mdc-form-field{background-color:var(--custom-bg-color, #ffffff)!important;border-radius:var(--custom-border-radius , 4px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color, #dddddd)!important;border-width:var(--custom-border-width, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--custom-caret-color, #ffbb00)!important;font-size:12px!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important;color:var(--custom-font-color, #444444)!important}::ng-deep .mat-form-field-invalid .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field.mat-form-field-disabled{background:var(--custom-bg-color-disabled, #ECECEC)!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--custom-font-color-disabled, #999999)!important}::ng-deep .mdc-label{color:var(--custom-font-color, #444)!important;font-size:var(--custom-font-size, 16px)!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important}::placeholder{color:#8f8f8f!important;font-size:12px!important}::ng-deep .mat-mdc-form-field-hint-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error{color:#e00!important;font-size:12px;font-weight:500;font-family:Mulish!important;letter-spacing:0}::ng-deep .mdc-text-field--outlined{--mdc-outlined-text-field-container-shape: var(--custom-border-radius , 4px) !important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{font-size:14px!important}\n"] }]
107
- }], ctorParameters: () => [{ type: i1.MasterControlService }], propDecorators: { blur: [{
255
+ useExisting: forwardRef(() => TextboxComponent),
256
+ multi: true,
257
+ },
258
+ ], template: "<label\r\n class=\"field-lable\"\r\n *ngIf=\"field() && field()?.isVisible && field().isShowLabel\"\r\n>\r\n {{ field()?.label }}\r\n <span style=\"color: red\" *ngIf=\"field() && field()?.validators?.isRequired\">*</span>\r\n</label>\r\n\r\n<mat-form-field\r\n class=\"w-100\"\r\n appearance=\"outline\"\r\n *ngIf=\"field() && field()?.isVisible\"\r\n [ngStyle]=\"{\r\n '--custom-border-color': field()?.controlStyle?.borderColor ,\r\n '--custom-border-width': field()?.controlStyle?.borderWidth ,\r\n '--custom-border-radius': field()?.controlStyle?.borderRadius ,\r\n '--custom-bg-color': field()?.controlStyle?.background ,\r\n '--custom-border-color-focus': field()?.controlStyle?.focusBorderColor ,\r\n '--custom-border-width-focus': field()?.controlStyle?.focusBorderWidth ,\r\n '--custom-bg-color-focus': field()?.controlStyle?.focusBackground ,\r\n '--custom-border-color-hover': field()?.controlStyle?.hoverBorderColor ,\r\n '--custom-border-width-hover': field()?.controlStyle?.hoverBorderWidth ,\r\n '--custom-border-color-error': field()?.controlStyle?.errorBorderColor ,\r\n '--custom-border-width-error': field()?.controlStyle?.errorBorderWidth ,\r\n '--custom-font-size': field()?.controlStyle?.fontSize ,\r\n '--custom-font-weight': field()?.controlStyle?.fontWeight ,\r\n '--custom-font-family': field()?.controlStyle?.fontFamily ,\r\n '--custom-font-color': field()?.controlStyle?.color ,\r\n '--custom-caret-color': field()?.controlStyle?.caretColor ,\r\n '--custom-font-color-disabled' : field()?.controlStyle?.disableColor ,\r\n '--custom-bg-color-disabled' : field()?.controlStyle?.disableBackground ,\r\n '--custom-width': field()?.controlStyle?.width\r\n }\"\r\n>\r\n\r\n @if (reactiveFormControlobject() && !field()?.isInputMasked) {\r\n <input\r\n matInput\r\n autocomplete=\"off\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (beforeinput)=\"onBeforeInput($event)\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (focus)=\"onInputFocus()\"\r\n [formControl]=\"reactiveFormControlobject()\"\r\n />\r\n } @else {\r\n\r\n <input\r\n matInput\r\n autocomplete=\"off\"\r\n [type]=\"field()?.configData?.inputType ? field()?.configData?.inputType : field()?.controlType\"\r\n [name]=\"field()?.fieldName\"\r\n [id]=\"field()?.fieldName\"\r\n [placeholder]=\"field()?.placeHolder\"\r\n [maxLength]=\"field()?.validators?.maxLength\"\r\n [minLength]=\"field()?.validators?.minLength\"\r\n [disabled]=\"field()?.isDisable\"\r\n [required]=\"field()?.validators?.isRequired\"\r\n [pattern]=\"field()?.validators?.pattern\"\r\n (beforeinput)=\"onBeforeInput($event)\"\r\n (input)=\"onInputChange($event)\"\r\n (blur)=\"onInputBlur($event)\"\r\n (focus)=\"onInputFocus()\"\r\n [value]=\"inputValue\"\r\n />\r\n }\r\n\r\n <mat-hint *ngIf=\"field()?.configData?.helperText\">{{ field()?.configData?.helperText }}</mat-hint>\r\n\r\n <mat-error *ngIf=\"false\">\r\n {{ field()?.validators?.requiredMessage || 'This field cannot be empty' }}\r\n </mat-error>\r\n\r\n</mat-form-field>\r\n\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.requiredMessage }}.\r\n</div>\r\n<div class=\"error-message\" *ngIf=\"false\">\r\n {{ field()?.validators?.patternMessage }}.\r\n</div>", styles: [".field-lable{font-size:12px!important;font-weight:700!important;color:#444!important;margin-bottom:5px}.error-message{color:red}*{font-family:mulish!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mat-mdc-notch-piece{border-color:var(--custom-border-color-focus, #ffbb00)!important;border-width:var(--custom-border-width-focus, 1.5px)!important}::ng-deep .mat-mdc-form-field{background-color:var(--custom-bg-color, #ffffff)!important;border-radius:var(--custom-border-radius , 4px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:var(--custom-border-color-hover, #ffbb00)!important;border-width:var(--custom-border-width-hover, 1.5px)!important}::ng-deep .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color, #dddddd)!important;border-width:var(--custom-border-width, 1.5px)!important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-text-field__input{caret-color:var(--custom-caret-color, #ffbb00)!important;font-size:12px!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important;color:var(--custom-font-color, #444444)!important}::ng-deep .mat-form-field-invalid .mdc-text-field--outlined .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field.mat-form-field-disabled{background:var(--custom-bg-color-disabled, #ECECEC)!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{color:var(--custom-font-color-disabled, #999999)!important}::ng-deep .mdc-label{color:var(--custom-font-color, #444)!important;font-size:var(--custom-font-size, 16px)!important;font-weight:var(--custom-font-weight, 400)!important;font-family:var(--custom-font-family, \"Mulish\")!important}::placeholder{color:#8f8f8f!important;font-size:12px!important}::ng-deep .mat-mdc-form-field-hint-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error-wrapper{padding:0!important}::ng-deep .mat-mdc-form-field-error{color:#e00!important;font-size:12px;font-weight:500;font-family:Mulish!important;letter-spacing:0}::ng-deep .mdc-text-field--outlined{--mdc-outlined-text-field-container-shape: var(--custom-border-radius , 4px) !important}::ng-deep .mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--invalid .mat-mdc-notch-piece{border-color:var(--custom-border-color-error, red)!important;border-width:var(--custom-border-width-error, 1.5px)!important}::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none!important}::ng-deep .mdc-text-field--outlined.mdc-text-field--disabled .mdc-text-field__input{font-size:14px!important}\n"] }]
259
+ }], ctorParameters: () => [{ type: i1.MasterControlService }, { type: i0.KeyValueDiffers }], propDecorators: { blur: [{
108
260
  type: Output
109
261
  }] } });
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFHLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBcUI5RixNQUFNLE9BQU8sZ0JBQWdCO0lBQ1I7SUFBbkIsWUFBbUIsYUFBb0M7UUFBcEMsa0JBQWEsR0FBYixhQUFhLENBQXVCO0lBQUUsQ0FBQztJQUMxRCxVQUFVLEdBQVEsSUFBSSxDQUFDO0lBQ3ZCLEtBQUssR0FBUyxLQUFLLENBQUMsUUFBUSxFQUFPLENBQUM7SUFDcEMseUJBQXlCLEdBQVMsS0FBSyxFQUFPLENBQUM7SUFFL0MsU0FBUyxHQUFRLENBQUMsVUFBYyxFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDeEMsVUFBVSxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUMzQixXQUFXLEdBQVEsSUFBSSxDQUFDO0lBQ3hCLGtCQUFrQixHQUFPLElBQUksQ0FBQztJQUU3QixrREFBa0Q7SUFDekMsSUFBSSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFF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QUksQ0FBQyxVQUFVLEdBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQzt3R0F6RVUsZ0JBQWdCOzRGQUFoQixnQkFBZ0IsNFlBUmhCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLGdCQUFnQjtnQkFDN0IsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQ3hCSCwwckhBcUZBLDY3R0QxRUksY0FBYywwdUJBQ2Qsa0JBQWtCLDhCQUNsQixZQUFZLHVOQUNaLG1CQUFtQjs7NEZBWVYsZ0JBQWdCO2tCQW5CNUIsU0FBUzsrQkFDRSxhQUFhLGNBQ1gsSUFBSSxXQUNQO3dCQUNQLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixZQUFZO3dCQUNaLG1CQUFtQjtxQkFDcEIsYUFHVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLGtCQUFrQjs0QkFDN0IsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7eUZBY1MsSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBpbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWFzdGVyQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuLi9tYXN0ZXItY29udHJvbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdGV4dGJveCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSAsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dGJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3RleHRib3guY29tcG9uZW50LmNzcycsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogVGV4dGJveENvbXBvbmVudCxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZXh0Ym94Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtYXN0ZXJTZXJ2aWNlIDogTWFzdGVyQ29udHJvbFNlcnZpY2Upe31cclxuICBpbnB1dFZhbHVlOiBhbnkgPSBudWxsO1xyXG4gIGZpZWxkIDogYW55ID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xyXG4gIHJlYWN0aXZlRm9ybUNvbnRyb2xvYmplY3QgOiBhbnkgPSBpbnB1dDxhbnk+KCk7XHJcblxyXG4gIF9vbkNoYW5nZTogYW55ID0gKGlucHV0VmFsdWU6YW55KSA9PiB7fTtcclxuICBfdW5Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcclxuICBtYXNrRW5hYmxlZDogYW55ID0gdHJ1ZTtcclxuICBpbnB1dFZhbHVlRGVlcENvcHk6YW55ID0gbnVsbDtcclxuXHJcbiAgIC8vIERlY2xhcmUgT3V0cHV0IGV2ZW50IGVtaXR0ZXIgaGVyZSAoY2xhc3MgbGV2ZWwpXHJcbiAgQE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgIG5nT25Jbml0KCkge1xyXG4gICAgaWYoIXRoaXMuZmllbGQoKS5pc0lucHV0TWFza2VkKXtcclxuICAgICAgdGhpcy5maWVsZCgpLmlzSW5wdXRNYXNrZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YT8uaXNUZXh0Q2FwaXRhbGl6ZWQgJiYgdGhpcy5maWVsZCgpLmlzSW5wdXRNYXNrZWQpe1xyXG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGE/LmlzVGV4dENhcGl0YWxpemVkO1xyXG4gICAgICB0aGlzLmNoZWNraW5wdXRNYXNrZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lke1xyXG4gICAgdGhpcy5pbnB1dFZhbHVlPSF0aGlzLm1hc3RlclNlcnZpY2UuY2hlY2tJZlZhbHVlSXNFbXB0eShvYmopID8gb2JqIDogJyc7XHJcbiAgfTtcclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lke1xyXG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcclxuICB9O1xyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lke1xyXG4gICAgdGhpcy5fdW5Ub3VjaGVkID0gZm47XHJcbiAgfTtcclxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZHt9O1xyXG5cclxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBtaW4gOiBhbnkgPSBudWxsO1xyXG4gICAgbGV0IG1heCA6IGFueT0gbnVsbDtcclxuICAgIGxldCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgIGlmKCF0aGlzLm1hc3RlclNlcnZpY2UuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGEpICYmICF0aGlzLm1hc3RlclNlcnZpY2UuY2hlY2tJZlZhbHVlSXNFbXB0eSh0aGlzLmZpZWxkKCk/LmNvbmZpZ0RhdGE/Lm1pblZhbHVlKSAmJiAhdGhpcy5tYXN0ZXJTZXJ2aWNlLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5maWVsZCgpPy5jb25maWdEYXRhPy5tYXhWYWx1ZSkpIHtcclxuICAgICAgbWluID0gcGFyc2VJbnQodGhpcy5maWVsZCgpPy5jb25maWdEYXRhPy5taW5WYWx1ZSk7XHJcbiAgICAgIG1heCA9IHBhcnNlSW50KHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YT8ubWF4VmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5tYXN0ZXJTZXJ2aWNlLmNoZWNrSWZWYWx1ZUlzRW1wdHkodGhpcy5maWVsZCgpPy5jb25maWdEYXRhPy5pbnB1dFR5cGUpICYmIHRoaXMuZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlID09PSAnbnVtYmVyJyAmJiAhdGhpcy5tYXN0ZXJTZXJ2aWNlLmNoZWNrSWZWYWx1ZUlzRW1wdHkobWF4KSAmJiAhdGhpcy5tYXN0ZXJTZXJ2aWNlLmNoZWNrSWZWYWx1ZUlzRW1wdHkobWluKSkge1xyXG4gICAgICBpZihwYXJzZUludCh2YWx1ZSkgPCBtaW4gfHwgcGFyc2VJbnQodmFsdWUpID4gbWF4KSB7XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gcGFyc2VJbnQoZXZlbnQudGFyZ2V0LnZhbHVlLnRvU3RyaW5nKCkuc2xpY2UoMCwgLTEpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5maWVsZCgpPy5jb25maWdEYXRhPy5pc1RleHRDYXBpdGFsaXplZCA/IChldmVudC50YXJnZXQudmFsdWUpLnRvVXBwZXJDYXNlKCkgOiBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICB0aGlzLmlucHV0VmFsdWVEZWVwQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5pbnB1dFZhbHVlKSk7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSh0aGlzLmlucHV0VmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25JbnB1dEJsdXIoZXZlbnQ/OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX3VuVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5ibHVyLmVtaXQoZXZlbnQpO1xyXG4gICAgaWYoIXRoaXMubWFzdGVyU2VydmljZS5jaGVja0lmVmFsdWVJc0VtcHR5KGV2ZW50LnRhcmdldC52YWx1ZSkpIHtcclxuICAgICAgdGhpcy5jaGVja2lucHV0TWFza2VkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja2lucHV0TWFza2VkKCkge1xyXG4gICAgaWYoIXRoaXMuZmllbGQoKS5pc0lucHV0TWFza2VkKXtcclxuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlRGVlcENvcHk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5maWVsZCgpLmlzSW5wdXRNYXNrZWQgPyB0aGlzLm1hc2tJbnB1dCh0aGlzLmlucHV0VmFsdWUpIDogdGhpcy5pbnB1dFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgbWFza0lucHV0KHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZS5sZW5ndGggPiAzKXtcclxuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gIHZhbHVlWzBdICsgJ1gnLnJlcGVhdCh2YWx1ZS5sZW5ndGggLSAyKSArIHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8bGFiZWxcclxuICBjbGFzcz1cImZpZWxkLWxhYmxlXCJcclxuICAqbmdJZj1cImZpZWxkKCkgJiYgZmllbGQoKT8uaXNWaXNpYmxlICYmIGZpZWxkKCkuaXNTaG93TGFiZWxcIlxyXG4gID57eyBmaWVsZCgpPy5sYWJlbFxyXG4gIH19PHNwYW4gc3R5bGU9XCJjb2xvcjogcmVkXCIgKm5nSWY9XCJmaWVsZCgpICYmIGZpZWxkKCk/LnZhbGlkYXRvcnM/LmlzUmVxdWlyZWRcIlxyXG4gICAgPio8L3NwYW5cclxuICA+PC9sYWJlbFxyXG4+XHJcbjxtYXQtZm9ybS1maWVsZFxyXG4gIGNsYXNzPVwidy0xMDBcIlxyXG4gIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAqbmdJZj1cImZpZWxkKCkgJiYgZmllbGQoKT8uaXNWaXNpYmxlXCJcclxuICBbbmdTdHlsZV09XCJ7XHJcbictLWN1c3RvbS1ib3JkZXItY29sb3InOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmJvcmRlckNvbG9yICxcclxuJy0tY3VzdG9tLWJvcmRlci13aWR0aCc6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uYm9yZGVyV2lkdGggLFxyXG4nLS1jdXN0b20tYm9yZGVyLXJhZGl1cyc6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uYm9yZGVyUmFkaXVzICxcclxuJy0tY3VzdG9tLWJnLWNvbG9yJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5iYWNrZ3JvdW5kICxcclxuJy0tY3VzdG9tLWJvcmRlci1jb2xvci1mb2N1cyc6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZm9jdXNCb3JkZXJDb2xvciAsXHJcbictLWN1c3RvbS1ib3JkZXItd2lkdGgtZm9jdXMnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvY3VzQm9yZGVyV2lkdGggLFxyXG4nLS1jdXN0b20tYmctY29sb3ItZm9jdXMnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvY3VzQmFja2dyb3VuZCAsXHJcbictLWN1c3RvbS1ib3JkZXItY29sb3ItaG92ZXInOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmhvdmVyQm9yZGVyQ29sb3IgLFxyXG4nLS1jdXN0b20tYm9yZGVyLXdpZHRoLWhvdmVyJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5ob3ZlckJvcmRlcldpZHRoICxcclxuJy0tY3VzdG9tLWJvcmRlci1jb2xvci1lcnJvcic6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZXJyb3JCb3JkZXJDb2xvciAsXHJcbictLWN1c3RvbS1ib3JkZXItd2lkdGgtZXJyb3InOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmVycm9yQm9yZGVyV2lkdGggLFxyXG4nLS1jdXN0b20tZm9udC1zaXplJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5mb250U2l6ZSAsXHJcbictLWN1c3RvbS1mb250LXdlaWdodCc6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZm9udFdlaWdodCAsXHJcbictLWN1c3RvbS1mb250LWZhbWlseSc6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZm9udEZhbWlseSAsXHJcbictLWN1c3RvbS1mb250LWNvbG9yJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5jb2xvciAsXHJcbictLWN1c3RvbS1jYXJldC1jb2xvcic6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uY2FyZXRDb2xvciAsXHJcbictLWN1c3RvbS1mb250LWNvbG9yLWRpc2FibGVkJyA6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZGlzYWJsZUNvbG9yICxcclxuJy0tY3VzdG9tLWJnLWNvbG9yLWRpc2FibGVkJyA6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZGlzYWJsZUJhY2tncm91bmQgLFxyXG4nLS1jdXN0b20td2lkdGgnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LndpZHRoICxcclxufVwiXHJcbj5cclxuICBAaWYocmVhY3RpdmVGb3JtQ29udHJvbG9iamVjdCgpKSB7XHJcbiAgPGlucHV0XHJcbiAgICBtYXRJbnB1dFxyXG4gICAgYXV0b2NvbXBsZXRlPVwibm9uZVwiXHJcbiAgICBbdHlwZV09XCJmaWVsZCgpPy5jb25maWdEYXRhPy5pbnB1dFR5cGUgPyBmaWVsZCgpPy5jb25maWdEYXRhPy5pbnB1dFR5cGUgOiBmaWVsZCgpPy5jb250cm9sVHlwZVwiXHJcbiAgICBbbmFtZV09XCJmaWVsZCgpPy5maWVsZE5hbWVcIlxyXG4gICAgW2lkXT1cImZpZWxkKCk/LmZpZWxkTmFtZVwiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQoKT8ucGxhY2VIb2xkZXJcIlxyXG4gICAgW21heExlbmd0aF09XCJmaWVsZCgpPy52YWxpZGF0b3JzPy5tYXhMZW5ndGhcIlxyXG4gICAgW21pbkxlbmd0aF09XCJmaWVsZCgpPy52YWxpZGF0b3JzPy5taW5MZW5ndGhcIlxyXG4gICAgW2Rpc2FibGVkXT1cImZpZWxkKCk/LmlzRGlzYWJsZVwiXHJcbiAgICBbcmVxdWlyZWRdPVwiZmllbGQoKT8udmFsaWRhdG9ycz8uaXNSZXF1aXJlZFwiXHJcbiAgICBbcGF0dGVybl09XCJmaWVsZCgpPy52YWxpZGF0b3JzPy5wYXR0ZXJuXCJcclxuICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXHJcbiAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXHJcbiAgICBbZm9ybUNvbnRyb2xdPVwicmVhY3RpdmVGb3JtQ29udHJvbG9iamVjdCgpXCJcclxuICAvPlxyXG4gIH1AZWxzZSB7XHJcbiAgPGlucHV0XHJcbiAgICBtYXRJbnB1dFxyXG4gICAgYXV0b2NvbXBsZXRlPVwibm9uZVwiXHJcbiAgICBbdHlwZV09XCJmaWVsZCgpPy5jb25maWdEYXRhPy5pbnB1dFR5cGUgPyBmaWVsZCgpPy5jb25maWdEYXRhPy5pbnB1dFR5cGUgOiBmaWVsZCgpPy5jb250cm9sVHlwZVwiXHJcbiAgICBbbmFtZV09XCJmaWVsZCgpPy5maWVsZE5hbWVcIlxyXG4gICAgW2lkXT1cImZpZWxkKCk/LmZpZWxkTmFtZVwiXHJcbiAgICBbcGxhY2Vob2xkZXJdPVwiZmllbGQoKT8ucGxhY2VIb2xkZXJcIlxyXG4gICAgW21heExlbmd0aF09XCJmaWVsZCgpPy52YWxpZGF0b3JzPy5tYXhMZW5ndGhcIlxyXG4gICAgW21pbkxlbmd0aF09XCJmaWVsZCgpPy52YWxpZGF0b3JzPy5taW5MZW5ndGhcIlxyXG4gICAgW2Rpc2FibGVkXT1cImZpZWxkKCk/LmlzRGlzYWJsZVwiXHJcbiAgICBbcmVxdWlyZWRdPVwiZmllbGQoKT8udmFsaWRhdG9ycz8uaXNSZXF1aXJlZFwiXHJcbiAgICBbcGF0dGVybl09XCJmaWVsZCgpPy52YWxpZGF0b3JzPy5wYXR0ZXJuXCJcclxuICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgKGJsdXIpPVwib25JbnB1dEJsdXIoJGV2ZW50KVwiXHJcbiAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXHJcbiAgLz5cclxuICB9XHJcbiAgICA8bWF0LWhpbnQgKm5nSWY9XCJmaWVsZCgpPy5jb25maWdEYXRhPy5oZWxwZXJUZXh0XCI+e3tmaWVsZCgpPy5jb25maWdEYXRhPy5oZWxwZXJUZXh0fX08L21hdC1oaW50PlxyXG5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiZmFsc2VcIj5cclxuICAgIHt7IGZpZWxkKCk/LnZhbGlkYXRvcnM/LmlzUmVxdWlyZWRNZXNzYWdlIH19XHJcbiAgPC9tYXQtZXJyb3I+XHJcbiAgPCEtLSA8bWF0LWVycm9yICpuZ0lmPVwiZmllbGQoKT8uY29uZmlnRGF0YT8uaXNJbnZhbGlkUGF0dGVybiAmJiAhbWFzdGVyU2VydmljZS5jaGVja0lmVmFsdWVJc0VtcHR5KGZpZWxkKCk/LnZhbGlkYXRvcnM/LnBhdHRlcm5NZXNzYWdlKVwiPlxyXG4gICAge3sgZmllbGQoKT8udmFsaWRhdG9ycz8ucGF0dGVybk1lc3NhZ2UgfX1cclxuICA8L21hdC1lcnJvcj4gLS0+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcbjxkaXYgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJmYWxzZVwiPlxyXG4gIHt7IGZpZWxkKCk/LnZhbGlkYXRvcnM/LmlzUmVxdWlyZWRNZXNzYWdlIH19LlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImZhbHNlXCI+XHJcbiAge3sgZmllbGQoKT8udmFsaWRhdG9ycz8ucGF0dGVybk1lc3NhZ2UgfX0uXHJcbjwvZGl2PlxyXG4iXX0=
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL3RleHRib3gvdGV4dGJveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixNQUFNLEdBSVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7QUF1QjlGLE1BQU0sT0FBTyxnQkFBZ0I7SUFFbEI7SUFDQztJQUZWLFlBQ1MsYUFBbUMsRUFDbEMsU0FBMEI7UUFEM0Isa0JBQWEsR0FBYixhQUFhLENBQXNCO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBRWxDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLENBQUM7Z0JBQUUsT0FBTztZQUVmLElBQUksQ0FBQyxDQUFDLGFBQWEsSUFBSSxJQUFJO2dCQUFFLENBQUMsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBRXJELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFL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QUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO3dHQXJQVSxnQkFBZ0I7NEZBQWhCLGdCQUFnQiw0WUFSaEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJDcENILDR6SEF5Rk0sNjdHRDlETSxjQUFjLDB1QkFBRSxrQkFBa0IsOEJBQUUsWUFBWSx1TkFBRSxtQkFBbUI7OzRGQVdwRSxnQkFBZ0I7a0JBZDVCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLENBQUMsYUFHckU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUM7NEJBQy9DLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO3VIQWdDUyxJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBmb3J3YXJkUmVmLFxyXG4gIGlucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZWZmZWN0LFxyXG4gIERvQ2hlY2ssXHJcbiAgS2V5VmFsdWVEaWZmZXJzLFxyXG4gIEtleVZhbHVlRGlmZmVyLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hc3RlckNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vbWFzdGVyLWNvbnRyb2wuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbnR5cGUgQmVmb3JlSW5wdXRJbmZvID0ge1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBkYXRhOiBzdHJpbmcgfCBudWxsO1xyXG4gIHN0YXJ0OiBudW1iZXI7XHJcbiAgZW5kOiBudW1iZXI7XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10ZXh0Ym94JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtNYXRJbnB1dE1vZHVsZSwgTWF0Rm9ybUZpZWxkTW9kdWxlLCBDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXh0Ym94LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90ZXh0Ym94LmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRleHRib3hDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRleHRib3hDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVjayB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgbWFzdGVyU2VydmljZTogTWFzdGVyQ29udHJvbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGt2RGlmZmVyczogS2V5VmFsdWVEaWZmZXJzXHJcbiAgKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBmID0gdGhpcy5maWVsZCgpO1xyXG4gICAgICBpZiAoIWYpIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChmLmlzSW5wdXRNYXNrZWQgPT0gbnVsbCkgZi5pc0lucHV0TWFza2VkID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLnN5bmNVSUZyb21SYXcoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmllbGQ6IGFueSA9IGlucHV0LnJlcXVpcmVkPGFueT4oKTtcclxuICByZWFjdGl2ZUZvcm1Db250cm9sb2JqZWN0OiBhbnkgPSBpbnB1dDxhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgX29uQ2hhbmdlOiAodmFsOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgaW5wdXRWYWx1ZURlZXBDb3B5OiBzdHJpbmcgPSAnJzsgXHJcbiAgaW5wdXRWYWx1ZTogc3RyaW5nID0gJyc7ICAgICAgICBcclxuICBwcml2YXRlIGxhc3RCZWZvcmVJbnB1dDogQmVmb3JlSW5wdXRJbmZvIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgZmllbGREaWZmZXI/OiBLZXlWYWx1ZURpZmZlcjxzdHJpbmcsIGFueT47XHJcbiAgcHJpdmF0ZSBjZmdEaWZmZXI/OiBLZXlWYWx1ZURpZmZlcjxzdHJpbmcsIGFueT47XHJcbiAgcHJpdmF0ZSBzdHlsZURpZmZlcj86IEtleVZhbHVlRGlmZmVyPHN0cmluZywgYW55PjtcclxuICBwcml2YXRlIHZhbGlkYXRvcnNEaWZmZXI/OiBLZXlWYWx1ZURpZmZlcjxzdHJpbmcsIGFueT47XHJcblxyXG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGYgPSB0aGlzLmZpZWxkPy4oKTtcclxuICAgIGlmICghZikgcmV0dXJuO1xyXG5cclxuICAgIGlmICghdGhpcy5maWVsZERpZmZlcikgdGhpcy5maWVsZERpZmZlciA9IHRoaXMua3ZEaWZmZXJzLmZpbmQoZikuY3JlYXRlKCk7XHJcbiAgICBsZXQgY2hhbmdlZCA9ICEhdGhpcy5maWVsZERpZmZlci5kaWZmKGYpO1xyXG5cclxuICAgIGlmIChmLmNvbmZpZ0RhdGEpIHtcclxuICAgICAgaWYgKCF0aGlzLmNmZ0RpZmZlcikgdGhpcy5jZmdEaWZmZXIgPSB0aGlzLmt2RGlmZmVycy5maW5kKGYuY29uZmlnRGF0YSkuY3JlYXRlKCk7XHJcbiAgICAgIGlmICh0aGlzLmNmZ0RpZmZlci5kaWZmKGYuY29uZmlnRGF0YSkpIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmLmNvbnRyb2xTdHlsZSkge1xyXG4gICAgICBpZiAoIXRoaXMuc3R5bGVEaWZmZXIpIHRoaXMuc3R5bGVEaWZmZXIgPSB0aGlzLmt2RGlmZmVycy5maW5kKGYuY29udHJvbFN0eWxlKS5jcmVhdGUoKTtcclxuICAgICAgaWYgKHRoaXMuc3R5bGVEaWZmZXIuZGlmZihmLmNvbnRyb2xTdHlsZSkpIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmLnZhbGlkYXRvcnMpIHtcclxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRvcnNEaWZmZXIpIHRoaXMudmFsaWRhdG9yc0RpZmZlciA9IHRoaXMua3ZEaWZmZXJzLmZpbmQoZi52YWxpZGF0b3JzKS5jcmVhdGUoKTtcclxuICAgICAgaWYgKHRoaXMudmFsaWRhdG9yc0RpZmZlci5kaWZmKGYudmFsaWRhdG9ycykpIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMub25GaWVsZENvbmZpZ0NoYW5nZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25GaWVsZENvbmZpZ0NoYW5nZWQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBvbGRSYXcgPSB0aGlzLmlucHV0VmFsdWVEZWVwQ29weSA/PyAnJztcclxuICAgIGNvbnN0IG5ld1JhdyA9IHRoaXMuYXBwbHlDYXBpdGFsaXphdGlvbihvbGRSYXcpO1xyXG5cclxuICAgIGlmIChuZXdSYXcgIT09IG9sZFJhdykge1xyXG4gICAgICB0aGlzLmlucHV0VmFsdWVEZWVwQ29weSA9IG5ld1JhdztcclxuXHJcbiAgICAgIGNvbnN0IG1hc2tFbmFibGVkID0gISF0aGlzLmZpZWxkPy4oKS5pc0lucHV0TWFza2VkO1xyXG4gICAgICBjb25zdCBoYXNSZWFjdGl2ZSA9ICEhdGhpcy5yZWFjdGl2ZUZvcm1Db250cm9sb2JqZWN0Py4oKTtcclxuICAgICAgaWYgKGhhc1JlYWN0aXZlICYmICFtYXNrRW5hYmxlZCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLnJlYWN0aXZlRm9ybUNvbnRyb2xvYmplY3QoKS5zZXRWYWx1ZShuZXdSYXcsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgdGhpcy5fb25DaGFuZ2UobmV3UmF3KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UobmV3UmF3KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zeW5jVUlGcm9tUmF3KCk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCByYXcgPSAhdGhpcy5tYXN0ZXJTZXJ2aWNlLmNoZWNrSWZWYWx1ZUlzRW1wdHkob2JqKSA/IFN0cmluZyhvYmopIDogJyc7XHJcbiAgICBjb25zdCBjYXBpdGFsaXplZCA9IHRoaXMuYXBwbHlDYXBpdGFsaXphdGlvbihyYXcpO1xyXG4gICAgdGhpcy5pbnB1dFZhbHVlRGVlcENvcHkgPSBjYXBpdGFsaXplZDtcclxuICAgIHRoaXMuc3luY1VJRnJvbVJhdygpO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IGYgPSB0aGlzLmZpZWxkPy4oKTtcclxuICAgIGlmIChmKSBmLmlzRGlzYWJsZSA9ICEhaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG5cclxuICBvbkJlZm9yZUlucHV0KGV2ZW50OiBJbnB1dEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XHJcbiAgICBjb25zdCBzdGFydCA9IHRhcmdldD8uc2VsZWN0aW9uU3RhcnQgPz8gMDtcclxuICAgIGNvbnN0IGVuZCA9IHRhcmdldD8uc2VsZWN0aW9uRW5kID8/IHN0YXJ0O1xyXG4gICAgdGhpcy5sYXN0QmVmb3JlSW5wdXQgPSB7XHJcbiAgICAgIHR5cGU6IGV2ZW50LmlucHV0VHlwZSxcclxuICAgICAgZGF0YTogZXZlbnQuZGF0YSxcclxuICAgICAgc3RhcnQsXHJcbiAgICAgIGVuZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBjb25zdCBmID0gdGhpcy5maWVsZD8uKCk7XHJcbiAgICBjb25zdCBjZmcgPSBmPy5jb25maWdEYXRhO1xyXG5cclxuICAgIGNvbnN0IGludGVudCA9IHRoaXMubGFzdEJlZm9yZUlucHV0ID8/IHtcclxuICAgICAgdHlwZTogJ2luc2VydFRleHQnLFxyXG4gICAgICBkYXRhOiBudWxsLFxyXG4gICAgICBzdGFydDogdGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID8/IHRoaXMuaW5wdXRWYWx1ZURlZXBDb3B5Lmxlbmd0aCxcclxuICAgICAgZW5kOiB0YXJnZXQuc2VsZWN0aW9uRW5kID8/IHRhcmdldC5zZWxlY3Rpb25TdGFydCA/PyB0aGlzLmlucHV0VmFsdWVEZWVwQ29weS5sZW5ndGgsXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCBuZXdWYWwgPSB0aGlzLmFwcGx5SW50ZW50VG9SYXcodGhpcy5pbnB1dFZhbHVlRGVlcENvcHksIGludGVudCk7XHJcblxyXG4gICAgbmV3VmFsID0gdGhpcy5hcHBseUNhcGl0YWxpemF0aW9uKG5ld1ZhbCk7XHJcblxyXG4gICAgaWYgKGNmZz8uaW5wdXRUeXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICBjb25zdCBtaW4gPSB0aGlzLm5vcm1hbGl6ZU51bWJlcihjZmc/Lm1pblZhbHVlKTtcclxuICAgICAgY29uc3QgbWF4ID0gdGhpcy5ub3JtYWxpemVOdW1iZXIoY2ZnPy5tYXhWYWx1ZSk7XHJcbiAgICAgIGNvbnN0IG51bSA9IE51bWJlcihuZXdWYWwpO1xyXG4gICAgICBpZiAoIU51bWJlci5pc05hTihudW0pKSB7XHJcbiAgICAgICAgaWYgKG1pbiAhPT0gbnVsbCAmJiBudW0gPCBtaW4pIG5ld1ZhbCA9IFN0cmluZyhtaW4pO1xyXG4gICAgICAgIGlmIChtYXggIT09IG51bGwgJiYgbnVtID4gbWF4KSBuZXdWYWwgPSBTdHJpbmcobWF4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5wdXRWYWx1ZURlZXBDb3B5ID0gbmV3VmFsO1xyXG5cclxuICAgIGNvbnN0IG1hc2tFbmFibGVkID0gISFmPy5pc0lucHV0TWFza2VkO1xyXG4gICAgY29uc3QgaGFzUmVhY3RpdmUgPSAhIXRoaXMucmVhY3RpdmVGb3JtQ29udHJvbG9iamVjdD8uKCk7XHJcblxyXG4gICAgaWYgKGhhc1JlYWN0aXZlICYmICFtYXNrRW5hYmxlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMucmVhY3RpdmVGb3JtQ29udHJvbG9iamVjdCgpLnNldFZhbHVlKG5ld1ZhbCwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKG5ld1ZhbCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX29uQ2hhbmdlKG5ld1ZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGlzcGxheSA9IG1hc2tFbmFibGVkID8gdGhpcy5tYXNrSW5wdXQobmV3VmFsKSA6IG5ld1ZhbDtcclxuICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGRpc3BsYXk7XHJcblxyXG4gICAgY29uc3QgbmV4dENhcmV0ID0gdGhpcy5jb21wdXRlTmV4dENhcmV0KGludGVudCwgbmV3VmFsLmxlbmd0aCk7XHJcbiAgICBpZiAodGFyZ2V0LnZhbHVlICE9PSBkaXNwbGF5KSB7XHJcbiAgICAgIHRhcmdldC52YWx1ZSA9IGRpc3BsYXk7XHJcbiAgICAgIHRyeSB7IHRhcmdldC5zZXRTZWxlY3Rpb25SYW5nZShuZXh0Q2FyZXQsIG5leHRDYXJldCk7IH0gY2F0Y2gge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuaW5wdXRWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhc3RCZWZvcmVJbnB1dCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBvbklucHV0Qmx1cihldmVudD86IEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcclxuICAgIHRoaXMuYmx1ci5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIG9uSW5wdXRGb2N1cygpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3luY1VJRnJvbVJhdygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGYgPSB0aGlzLmZpZWxkPy4oKTtcclxuICAgIGNvbnN0IG1hc2tFbmFibGVkID0gISFmPy5pc0lucHV0TWFza2VkO1xyXG4gICAgY29uc3QgcmF3ID0gdGhpcy5pbnB1dFZhbHVlRGVlcENvcHkgPz8gJyc7XHJcbiAgICB0aGlzLmlucHV0VmFsdWUgPSBtYXNrRW5hYmxlZCA/IHRoaXMubWFza0lucHV0KHJhdykgOiByYXc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5Q2FwaXRhbGl6YXRpb24odjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGYgPSB0aGlzLmZpZWxkPy4oKTtcclxuICAgIHJldHVybiBmPy5jb25maWdEYXRhPy5pc1RleHRDYXBpdGFsaXplZCA/IHYudG9VcHBlckNhc2UoKSA6IHY7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5vcm1hbGl6ZU51bWJlcih2OiBhbnkpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLm1hc3RlclNlcnZpY2UuY2hlY2tJZlZhbHVlSXNFbXB0eSh2KSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBuID0gTnVtYmVyKHYpO1xyXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IG51bGwgOiBuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtYXNrSW5wdXQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA8IDMpIHJldHVybiB2YWx1ZSB8fCAnJztcclxuICAgIHJldHVybiB2YWx1ZVswXSArICdYJy5yZXBlYXQodmFsdWUubGVuZ3RoIC0gMikgKyB2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlJbnRlbnRUb1JhdyhyYXc6IHN0cmluZywgaW50ZW50OiBCZWZvcmVJbnB1dEluZm8pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeyB0eXBlLCBkYXRhLCBzdGFydCwgZW5kIH0gPSBpbnRlbnQ7XHJcbiAgICBjb25zdCBzID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc3RhcnQsIHJhdy5sZW5ndGgpKTtcclxuICAgIGNvbnN0IGUgPSBNYXRoLm1heChzLCBNYXRoLm1pbihlbmQsIHJhdy5sZW5ndGgpKTtcclxuXHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnaW5zZXJ0VGV4dCc6IHtcclxuICAgICAgICBjb25zdCBpbnNlcnQgPSBkYXRhID8/ICcnO1xyXG4gICAgICAgIHJldHVybiByYXcuc2xpY2UoMCwgcykgKyBpbnNlcnQgKyByYXcuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnaW5zZXJ0RnJvbVBhc3RlJzoge1xyXG4gICAgICAgIGNvbnN0IHBhc3RlID0gZGF0YSA/PyAnJztcclxuICAgICAgICByZXR1cm4gcmF3LnNsaWNlKDAsIHMpICsgcGFzdGUgKyByYXcuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVsZXRlQ29udGVudEJhY2t3YXJkJzoge1xyXG4gICAgICAgIGlmIChzICE9PSBlKSByZXR1cm4gcmF3LnNsaWNlKDAsIHMpICsgcmF3LnNsaWNlKGUpO1xyXG4gICAgICAgIGNvbnN0IGlkeCA9IE1hdGgubWF4KDAsIHMgLSAxKTtcclxuICAgICAgICByZXR1cm4gcmF3LnNsaWNlKDAsIGlkeCkgKyByYXcuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnZGVsZXRlQ29udGVudEZvcndhcmQnOiB7XHJcbiAgICAgICAgaWYgKHMgIT09IGUpIHJldHVybiByYXcuc2xpY2UoMCwgcykgKyByYXcuc2xpY2UoZSk7XHJcbiAgICAgICAgcmV0dXJuIHJhdy5zbGljZSgwLCBzKSArIHJhdy5zbGljZShNYXRoLm1pbihlICsgMSwgcmF3Lmxlbmd0aCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2RlbGV0ZUJ5Q3V0Jzoge1xyXG4gICAgICAgIHJldHVybiByYXcuc2xpY2UoMCwgcykgKyByYXcuc2xpY2UoZSk7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gcmF3O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlTmV4dENhcmV0KGludGVudDogQmVmb3JlSW5wdXRJbmZvLCBuZXdMZW46IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCB7IHR5cGUsIGRhdGEsIHN0YXJ0LCBlbmQgfSA9IGludGVudDtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdpbnNlcnRUZXh0JzpcclxuICAgICAgY2FzZSAnaW5zZXJ0RnJvbVBhc3RlJzpcclxuICAgICAgICByZXR1cm4gc3RhcnQgKyAoZGF0YT8ubGVuZ3RoID8/IDApO1xyXG4gICAgICBjYXNlICdkZWxldGVDb250ZW50QmFja3dhcmQnOlxyXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBzdGFydCAtIChzdGFydCA9PT0gZW5kID8gMSA6IDApKTtcclxuICAgICAgY2FzZSAnZGVsZXRlQ29udGVudEZvcndhcmQnOlxyXG4gICAgICBjYXNlICdkZWxldGVCeUN1dCc6XHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0O1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihzdGFydCwgbmV3TGVuKSk7XHJcbiAgICB9XHJcbiAgfVxyXG59IiwiPGxhYmVsXHJcbiAgY2xhc3M9XCJmaWVsZC1sYWJsZVwiXHJcbiAgKm5nSWY9XCJmaWVsZCgpICYmIGZpZWxkKCk/LmlzVmlzaWJsZSAmJiBmaWVsZCgpLmlzU2hvd0xhYmVsXCJcclxuPlxyXG4gIHt7IGZpZWxkKCk/LmxhYmVsIH19XHJcbiAgPHNwYW4gc3R5bGU9XCJjb2xvcjogcmVkXCIgKm5nSWY9XCJmaWVsZCgpICYmIGZpZWxkKCk/LnZhbGlkYXRvcnM/LmlzUmVxdWlyZWRcIj4qPC9zcGFuPlxyXG48L2xhYmVsPlxyXG5cclxuPG1hdC1mb3JtLWZpZWxkXHJcbiAgY2xhc3M9XCJ3LTEwMFwiXHJcbiAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICpuZ0lmPVwiZmllbGQoKSAmJiBmaWVsZCgpPy5pc1Zpc2libGVcIlxyXG4gIFtuZ1N0eWxlXT1cIntcclxuICAgICctLWN1c3RvbS1ib3JkZXItY29sb3InOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmJvcmRlckNvbG9yICxcclxuICAgICctLWN1c3RvbS1ib3JkZXItd2lkdGgnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmJvcmRlcldpZHRoICxcclxuICAgICctLWN1c3RvbS1ib3JkZXItcmFkaXVzJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5ib3JkZXJSYWRpdXMgLFxyXG4gICAgJy0tY3VzdG9tLWJnLWNvbG9yJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5iYWNrZ3JvdW5kICxcclxuICAgICctLWN1c3RvbS1ib3JkZXItY29sb3ItZm9jdXMnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvY3VzQm9yZGVyQ29sb3IgLFxyXG4gICAgJy0tY3VzdG9tLWJvcmRlci13aWR0aC1mb2N1cyc6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZm9jdXNCb3JkZXJXaWR0aCAsXHJcbiAgICAnLS1jdXN0b20tYmctY29sb3ItZm9jdXMnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvY3VzQmFja2dyb3VuZCAsXHJcbiAgICAnLS1jdXN0b20tYm9yZGVyLWNvbG9yLWhvdmVyJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5ob3ZlckJvcmRlckNvbG9yICxcclxuICAgICctLWN1c3RvbS1ib3JkZXItd2lkdGgtaG92ZXInOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmhvdmVyQm9yZGVyV2lkdGggLFxyXG4gICAgJy0tY3VzdG9tLWJvcmRlci1jb2xvci1lcnJvcic6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZXJyb3JCb3JkZXJDb2xvciAsXHJcbiAgICAnLS1jdXN0b20tYm9yZGVyLXdpZHRoLWVycm9yJzogZmllbGQoKT8uY29udHJvbFN0eWxlPy5lcnJvckJvcmRlcldpZHRoICxcclxuICAgICctLWN1c3RvbS1mb250LXNpemUnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvbnRTaXplICxcclxuICAgICctLWN1c3RvbS1mb250LXdlaWdodCc6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uZm9udFdlaWdodCAsXHJcbiAgICAnLS1jdXN0b20tZm9udC1mYW1pbHknOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmZvbnRGYW1pbHkgLFxyXG4gICAgJy0tY3VzdG9tLWZvbnQtY29sb3InOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmNvbG9yICxcclxuICAgICctLWN1c3RvbS1jYXJldC1jb2xvcic6IGZpZWxkKCk/LmNvbnRyb2xTdHlsZT8uY2FyZXRDb2xvciAsXHJcbiAgICAnLS1jdXN0b20tZm9udC1jb2xvci1kaXNhYmxlZCcgOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LmRpc2FibGVDb2xvciAsXHJcbiAgICAnLS1jdXN0b20tYmctY29sb3ItZGlzYWJsZWQnIDogZmllbGQoKT8uY29udHJvbFN0eWxlPy5kaXNhYmxlQmFja2dyb3VuZCAsXHJcbiAgICAnLS1jdXN0b20td2lkdGgnOiBmaWVsZCgpPy5jb250cm9sU3R5bGU/LndpZHRoXHJcbiAgfVwiXHJcbj5cclxuXHJcbiAgQGlmIChyZWFjdGl2ZUZvcm1Db250cm9sb2JqZWN0KCkgJiYgIWZpZWxkKCk/LmlzSW5wdXRNYXNrZWQpIHtcclxuICAgIDxpbnB1dFxyXG4gICAgICBtYXRJbnB1dFxyXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgW3R5cGVdPVwiZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlID8gZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlIDogZmllbGQoKT8uY29udHJvbFR5cGVcIlxyXG4gICAgICBbbmFtZV09XCJmaWVsZCgpPy5maWVsZE5hbWVcIlxyXG4gICAgICBbaWRdPVwiZmllbGQoKT8uZmllbGROYW1lXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkKCk/LnBsYWNlSG9sZGVyXCJcclxuICAgICAgW21heExlbmd0aF09XCJmaWVsZCgpPy52YWxpZGF0b3JzPy5tYXhMZW5ndGhcIlxyXG4gICAgICBbbWluTGVuZ3RoXT1cImZpZWxkKCk/LnZhbGlkYXRvcnM/Lm1pbkxlbmd0aFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJmaWVsZCgpPy5pc0Rpc2FibGVcIlxyXG4gICAgICBbcmVxdWlyZWRdPVwiZmllbGQoKT8udmFsaWRhdG9ycz8uaXNSZXF1aXJlZFwiXHJcbiAgICAgIFtwYXR0ZXJuXT1cImZpZWxkKCk/LnZhbGlkYXRvcnM/LnBhdHRlcm5cIlxyXG4gICAgICAoYmVmb3JlaW5wdXQpPVwib25CZWZvcmVJbnB1dCgkZXZlbnQpXCJcclxuICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKCRldmVudClcIlxyXG4gICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxyXG4gICAgICBbZm9ybUNvbnRyb2xdPVwicmVhY3RpdmVGb3JtQ29udHJvbG9iamVjdCgpXCJcclxuICAgIC8+XHJcbiAgfSBAZWxzZSB7XHJcblxyXG4gICAgPGlucHV0XHJcbiAgICAgIG1hdElucHV0XHJcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgW3R5cGVdPVwiZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlID8gZmllbGQoKT8uY29uZmlnRGF0YT8uaW5wdXRUeXBlIDogZmllbGQoKT8uY29udHJvbFR5cGVcIlxyXG4gICAgICBbbmFtZV09XCJmaWVsZCgpPy5maWVsZE5hbWVcIlxyXG4gICAgICBbaWRdPVwiZmllbGQoKT8uZmllbGROYW1lXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkKCk/LnBsYWNlSG9sZGVyXCJcclxuICAgICAgW21heExlbmd0aF09XCJmaWVsZCgpPy52YWxpZGF0b3JzPy5tYXhMZW5ndGhcIlxyXG4gICAgICBbbWluTGVuZ3RoXT1cImZpZWxkKCk/LnZhbGlkYXRvcnM/Lm1pbkxlbmd0aFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJmaWVsZCgpPy5pc0Rpc2FibGVcIlxyXG4gICAgICBbcmVxdWlyZWRdPVwiZmllbGQoKT8udmFsaWRhdG9ycz8uaXNSZXF1aXJlZFwiXHJcbiAgICAgIFtwYXR0ZXJuXT1cImZpZWxkKCk/LnZhbGlkYXRvcnM/LnBhdHRlcm5cIlxyXG4gICAgICAoYmVmb3JlaW5wdXQpPVwib25CZWZvcmVJbnB1dCgkZXZlbnQpXCJcclxuICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKCRldmVudClcIlxyXG4gICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKClcIlxyXG4gICAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXHJcbiAgICAvPlxyXG4gIH1cclxuXHJcbiAgPG1hdC1oaW50ICpuZ0lmPVwiZmllbGQoKT8uY29uZmlnRGF0YT8uaGVscGVyVGV4dFwiPnt7IGZpZWxkKCk/LmNvbmZpZ0RhdGE/LmhlbHBlclRleHQgfX08L21hdC1oaW50PlxyXG5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiZmFsc2VcIj5cclxuICAgIHt7IGZpZWxkKCk/LnZhbGlkYXRvcnM/LnJlcXVpcmVkTWVzc2FnZSB8fCAnVGhpcyBmaWVsZCBjYW5ub3QgYmUgZW1wdHknIH19XHJcbiAgPC9tYXQtZXJyb3I+XHJcblxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImZhbHNlXCI+XHJcbiAge3sgZmllbGQoKT8udmFsaWRhdG9ycz8ucmVxdWlyZWRNZXNzYWdlIH19LlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cImZhbHNlXCI+XHJcbiAge3sgZmllbGQoKT8udmFsaWRhdG9ycz8ucGF0dGVybk1lc3NhZ2UgfX0uXHJcbjwvZGl2PiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { Component, input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class TopHeaderComponent {
6
+ field = input.required();
7
+ showProfileMenu = false;
8
+ configData = {
9
+ options: [
10
+ { label: "",
11
+ value: ""
12
+ }
13
+ ],
14
+ configData: {
15
+ logoUrl: "",
16
+ notificationBellVisible: "",
17
+ notificationCount: "",
18
+ notificationImageUrl: "",
19
+ UserProfileVisible: "",
20
+ imageUrl: "",
21
+ userProfileText: "",
22
+ }
23
+ };
24
+ ngOnInit() {
25
+ this.configData = this.field();
26
+ }
27
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
28
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: TopHeaderComponent, isStandalone: true, selector: "lib-top-header", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<header class=\"sticky-top bg-white shadow-sm\">\r\n <div class=\"container-fluid mx-auto p-0\">\r\n <div class=\"header row align-items-center\">\r\n <div class=\"col-11\">\r\n <a href=\"/\" class=\"d-flex align-items-center gap-3 fixMargin\">\r\n <img\r\n [src]=\"configData.configData.logoUrl\"\r\n class=\"logo\"\r\n height=\"32\"\r\n alt=\"Logo\"\r\n />\r\n </a>\r\n </div>\r\n <div class=\"col-1 d-flex justify-content-end align-items-center p-1 position-relative\">\r\n <div class=\"me-3 position-relative notification-icon\" role=\"button\" *ngIf=\"configData.configData.notificationBellVisible=='true'\">\r\n <img\r\n [src]=\"configData.configData.notificationImageUrl\"\r\n alt=\"Notifications\"\r\n width=\"28\"\r\n height=\"28\"\r\n />\r\n <span \r\n class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger\"\r\n >\r\n {{configData.configData.notificationCount}}\r\n </span>\r\n </div>\r\n <div\r\n (mouseenter)=\"showProfileMenu=true\"\r\n class=\"profile-icon d-flex align-items-center rounded-pill bg-light\"\r\n role=\"button\" *ngIf=\"configData.configData.UserProfileVisible=='true'\"\r\n >\r\n <img\r\n [src]=\"configData.configData.imageUrl\"\r\n alt=\"Profile\"\r\n class=\"rounded-circle me-2\"\r\n width=\"36\"\r\n height=\"36\"\r\n />\r\n <span class=\"fw-medium\">{{configData.configData.userProfileText}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"showProfileMenu\"\r\n class=\"profile-menu position-absolute top-100 end-0 bg-white border border-warning rounded-3 shadow-sm mt-2\" (mouseenter)=\"showProfileMenu=true\" (mouseleave)=\"showProfileMenu=false\"\r\n >\r\n <div class=\"profile-menu-caret\"></div>\r\n \r\n <ul class=\"list-unstyled m-0 py-2\">\r\n <li class=\"px-3 py-2 text-nowrap\" *ngFor=\"let item of configData.options || []\">\r\n {{ item.label || 'No label' }}\r\n </li>\r\n </ul>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n</header>", styles: [".header{background:#fff;box-shadow:0 2px 4px #00000014;height:59px;margin:0;padding:0 40px}.logo{width:64px;height:32px}.profile-menu-caret{position:absolute;top:-11px;right:16px;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:11px solid #fa0;z-index:1}.profile-menu-caret:after{content:\"\";position:absolute;left:-9.8px;top:1.7px;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #fff;z-index:2}.my_templates{white-space:nowrap}ul li{cursor:pointer}.fixMargin{width:68px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TopHeaderComponent, decorators: [{
31
+ type: Component,
32
+ args: [{ selector: 'lib-top-header', standalone: true, imports: [CommonModule], template: "<header class=\"sticky-top bg-white shadow-sm\">\r\n <div class=\"container-fluid mx-auto p-0\">\r\n <div class=\"header row align-items-center\">\r\n <div class=\"col-11\">\r\n <a href=\"/\" class=\"d-flex align-items-center gap-3 fixMargin\">\r\n <img\r\n [src]=\"configData.configData.logoUrl\"\r\n class=\"logo\"\r\n height=\"32\"\r\n alt=\"Logo\"\r\n />\r\n </a>\r\n </div>\r\n <div class=\"col-1 d-flex justify-content-end align-items-center p-1 position-relative\">\r\n <div class=\"me-3 position-relative notification-icon\" role=\"button\" *ngIf=\"configData.configData.notificationBellVisible=='true'\">\r\n <img\r\n [src]=\"configData.configData.notificationImageUrl\"\r\n alt=\"Notifications\"\r\n width=\"28\"\r\n height=\"28\"\r\n />\r\n <span \r\n class=\"position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger\"\r\n >\r\n {{configData.configData.notificationCount}}\r\n </span>\r\n </div>\r\n <div\r\n (mouseenter)=\"showProfileMenu=true\"\r\n class=\"profile-icon d-flex align-items-center rounded-pill bg-light\"\r\n role=\"button\" *ngIf=\"configData.configData.UserProfileVisible=='true'\"\r\n >\r\n <img\r\n [src]=\"configData.configData.imageUrl\"\r\n alt=\"Profile\"\r\n class=\"rounded-circle me-2\"\r\n width=\"36\"\r\n height=\"36\"\r\n />\r\n <span class=\"fw-medium\">{{configData.configData.userProfileText}}</span>\r\n </div>\r\n <div\r\n *ngIf=\"showProfileMenu\"\r\n class=\"profile-menu position-absolute top-100 end-0 bg-white border border-warning rounded-3 shadow-sm mt-2\" (mouseenter)=\"showProfileMenu=true\" (mouseleave)=\"showProfileMenu=false\"\r\n >\r\n <div class=\"profile-menu-caret\"></div>\r\n \r\n <ul class=\"list-unstyled m-0 py-2\">\r\n <li class=\"px-3 py-2 text-nowrap\" *ngFor=\"let item of configData.options || []\">\r\n {{ item.label || 'No label' }}\r\n </li>\r\n </ul>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n</header>", styles: [".header{background:#fff;box-shadow:0 2px 4px #00000014;height:59px;margin:0;padding:0 40px}.logo{width:64px;height:32px}.profile-menu-caret{position:absolute;top:-11px;right:16px;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:11px solid #fa0;z-index:1}.profile-menu-caret:after{content:\"\";position:absolute;left:-9.8px;top:1.7px;width:0;height:0;border-left:10px solid transparent;border-right:10px solid transparent;border-bottom:10px solid #fff;z-index:2}.my_templates{white-space:nowrap}ul li{cursor:pointer}.fixMargin{width:68px}\n"] }]
33
+ }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9wLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL3RvcC1oZWFkZXIvdG9wLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXN0ZXItY29udHJvbC9zcmMvbGliL3RvcC1oZWFkZXIvdG9wLWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE0QixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFTL0MsTUFBTSxPQUFPLGtCQUFrQjtJQUMvQixLQUFLLEdBQVMsS0FBSyxDQUFDLFFBQVEsRUFBTyxDQUFDO0lBRXBDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDeEIsVUFBVSxHQUFDO1FBQ1QsT0FBTyxFQUFDO1lBQ04sRUFBQyxLQUFLLEVBQUMsRUFBRTtnQkFDUCxLQUFLLEVBQUMsRUFBRTthQUNUO1NBQ0Y7UUFDSCxVQUFVLEVBQUM7WUFDVCxPQUFPLEVBQUUsRUFBRTtZQUNYLHVCQUF1QixFQUFDLEVBQUU7WUFDMUIsaUJBQWlCLEVBQUMsRUFBRTtZQUNwQixvQkFBb0IsRUFBQyxFQUFFO1lBQ3ZCLGtCQUFrQixFQUFDLEVBQUU7WUFDckIsUUFBUSxFQUFDLEVBQUU7WUFDWixlQUFlLEVBQUMsRUFBRTtTQUNsQjtLQUFDLENBQUM7SUFFSCxRQUFRO1FBRU4sSUFBSSxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQzt3R0F2Qlksa0JBQWtCOzRGQUFsQixrQkFBa0IsNk1DVi9CLHV3RUF5RFMseW9CRGpERyxZQUFZOzs0RkFFWCxrQkFBa0I7a0JBUDlCLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsSUFBSSxXQUdQLENBQUMsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10b3AtaGVhZGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90b3AtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdG9wLWhlYWRlci5jb21wb25lbnQuY3NzJyxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9wSGVhZGVyQ29tcG9uZW50IHtcclxuZmllbGQgOiBhbnkgPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XHJcblxyXG5zaG93UHJvZmlsZU1lbnUgPSBmYWxzZTtcclxuY29uZmlnRGF0YT17XHJcbiAgb3B0aW9uczpbXHJcbiAgICB7bGFiZWw6XCJcIixcclxuICAgICAgdmFsdWU6XCJcIlxyXG4gICAgfVxyXG4gIF0sXHJcbmNvbmZpZ0RhdGE6e1xyXG4gIGxvZ29Vcmw6IFwiXCIsXHJcbiAgbm90aWZpY2F0aW9uQmVsbFZpc2libGU6XCJcIixcclxuICBub3RpZmljYXRpb25Db3VudDpcIlwiLFxyXG4gIG5vdGlmaWNhdGlvbkltYWdlVXJsOlwiXCIsXHJcbiAgVXNlclByb2ZpbGVWaXNpYmxlOlwiXCIsXHJcbiAgaW1hZ2VVcmw6XCJcIixcclxuIHVzZXJQcm9maWxlVGV4dDpcIlwiLFxyXG59fTtcclxuXHJcbm5nT25Jbml0KClcclxue1xyXG4gIHRoaXMuY29uZmlnRGF0YT10aGlzLmZpZWxkKCk7XHJcbn1cclxufVxyXG4iLCI8aGVhZGVyIGNsYXNzPVwic3RpY2t5LXRvcCBiZy13aGl0ZSBzaGFkb3ctc21cIj5cclxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIG14LWF1dG8gcC0wXCI+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlciByb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTFcIj5cclxuICAgICAgICA8YSBocmVmPVwiL1wiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBmaXhNYXJnaW5cIj5cclxuICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgW3NyY109XCJjb25maWdEYXRhLmNvbmZpZ0RhdGEubG9nb1VybFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibG9nb1wiXHJcbiAgICAgICAgICAgIGhlaWdodD1cIjMyXCJcclxuICAgICAgICAgICAgYWx0PVwiTG9nb1wiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMSBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgcC0xIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTMgcG9zaXRpb24tcmVsYXRpdmUgbm90aWZpY2F0aW9uLWljb25cIiByb2xlPVwiYnV0dG9uXCIgKm5nSWY9XCJjb25maWdEYXRhLmNvbmZpZ0RhdGEubm90aWZpY2F0aW9uQmVsbFZpc2libGU9PSd0cnVlJ1wiPlxyXG4gICAgPGltZ1xyXG4gICAgICBbc3JjXT1cImNvbmZpZ0RhdGEuY29uZmlnRGF0YS5ub3RpZmljYXRpb25JbWFnZVVybFwiXHJcbiAgICAgIGFsdD1cIk5vdGlmaWNhdGlvbnNcIlxyXG4gICAgICB3aWR0aD1cIjI4XCJcclxuICAgICAgaGVpZ2h0PVwiMjhcIlxyXG4gICAgLz5cclxuICAgIDxzcGFuIFxyXG4gICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC0wIHN0YXJ0LTEwMCB0cmFuc2xhdGUtbWlkZGxlIGJhZGdlIHJvdW5kZWQtcGlsbCBiZy1kYW5nZXJcIlxyXG4gICAgPlxyXG4gICAgIHt7Y29uZmlnRGF0YS5jb25maWdEYXRhLm5vdGlmaWNhdGlvbkNvdW50fX1cclxuICAgIDwvc3Bhbj5cclxuICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAobW91c2VlbnRlcik9XCJzaG93UHJvZmlsZU1lbnU9dHJ1ZVwiXHJcbiAgICAgICAgICBjbGFzcz1cInByb2ZpbGUtaWNvbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHJvdW5kZWQtcGlsbCBiZy1saWdodFwiXHJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCIgKm5nSWY9XCJjb25maWdEYXRhLmNvbmZpZ0RhdGEuVXNlclByb2ZpbGVWaXNpYmxlPT0ndHJ1ZSdcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgW3NyY109XCJjb25maWdEYXRhLmNvbmZpZ0RhdGEuaW1hZ2VVcmxcIlxyXG4gICAgICAgICAgICBhbHQ9XCJQcm9maWxlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJyb3VuZGVkLWNpcmNsZSBtZS0yXCJcclxuICAgICAgICAgICAgd2lkdGg9XCIzNlwiXHJcbiAgICAgICAgICAgIGhlaWdodD1cIjM2XCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LW1lZGl1bVwiPnt7Y29uZmlnRGF0YS5jb25maWdEYXRhLnVzZXJQcm9maWxlVGV4dH19PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwic2hvd1Byb2ZpbGVNZW51XCJcclxuICAgICAgICAgIGNsYXNzPVwicHJvZmlsZS1tZW51IHBvc2l0aW9uLWFic29sdXRlIHRvcC0xMDAgZW5kLTAgYmctd2hpdGUgYm9yZGVyIGJvcmRlci13YXJuaW5nIHJvdW5kZWQtMyBzaGFkb3ctc20gbXQtMlwiICAobW91c2VlbnRlcik9XCJzaG93UHJvZmlsZU1lbnU9dHJ1ZVwiICAobW91c2VsZWF2ZSk9XCJzaG93UHJvZmlsZU1lbnU9ZmFsc2VcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9maWxlLW1lbnUtY2FyZXRcIj48L2Rpdj5cclxuICAgICAgICAgIFxyXG4gICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBtLTAgcHktMlwiPlxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwicHgtMyBweS0yIHRleHQtbm93cmFwXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29uZmlnRGF0YS5vcHRpb25zIHx8IFtdXCI+XHJcbiAgICAgICAgICB7eyBpdGVtLmxhYmVsIHx8ICdObyBsYWJlbCcgfX1cclxuICAgICAgICAgIDwvbGk+XHJcbiAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvaGVhZGVyPiJdfQ==