@esfaenza/forms-and-validations 12.2.27 → 13.1.2
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/esfaenza-forms-and-validations.d.ts +1 -12
- package/esm2020/esfaenza-forms-and-validations.mjs +5 -0
- package/esm2020/lib/forms/base-form-control.mjs +482 -0
- package/esm2020/lib/forms/form-adaptive/form-adaptive.component.loc.mjs +28 -0
- package/esm2020/lib/forms/form-adaptive/form-adaptive.component.mjs +294 -0
- package/esm2020/lib/forms/form-autocomplete/form-autocomplete.component.loc.mjs +26 -0
- package/esm2020/lib/forms/form-autocomplete/form-autocomplete.component.mjs +200 -0
- package/esm2020/lib/forms/form-checkbox/form-checkbox.component.mjs +52 -0
- package/esm2020/lib/forms/form-date/form-date.component.mjs +59 -0
- package/esm2020/lib/forms/form-datetime/form-datetime.component.mjs +59 -0
- package/esm2020/lib/forms/form-empty/form-empty.component.mjs +36 -0
- package/esm2020/lib/forms/form-error/form-error.component.mjs +52 -0
- package/esm2020/lib/forms/form-file/form-file.component.loc.mjs +28 -0
- package/esm2020/lib/forms/form-file/form-file.component.mjs +119 -0
- package/esm2020/lib/forms/form-info/form-info.component.mjs +52 -0
- package/esm2020/lib/forms/form-input/form-input.component.mjs +93 -0
- package/esm2020/lib/forms/form-multiselect/form-multiselect.component.loc.mjs +29 -0
- package/esm2020/lib/forms/form-multiselect/form-multiselect.component.mjs +159 -0
- package/esm2020/lib/forms/form-select/form-select.component.loc.mjs +26 -0
- package/esm2020/lib/forms/form-select/form-select.component.mjs +129 -0
- package/esm2020/lib/forms/form-template/form-template.component.mjs +71 -0
- package/esm2020/lib/forms/form-textarea/form-textarea.component.mjs +54 -0
- package/esm2020/lib/forms/form-time/form-time.component.mjs +131 -0
- package/esm2020/lib/forms-and-validations.module.mjs +203 -0
- package/{esm2015/lib/models/AppFile.js → esm2020/lib/models/AppFile.mjs} +0 -0
- package/{esm2015/lib/models/FormsAndValidationsModuleConfig.js → esm2020/lib/models/FormsAndValidationsModuleConfig.mjs} +0 -0
- package/esm2020/lib/models/dayjs-adapter/dayjs-date-adapter.mjs +89 -0
- package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
- package/esm2020/lib/validations/base-validation.loc.mjs +28 -0
- package/esm2020/lib/validations/base-validation.mjs +232 -0
- package/esm2020/lib/validations/customValidators/CustomRequiredDirective.mjs +41 -0
- package/esm2020/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs +168 -0
- package/esm2020/lib/validations/validation-currency/validation-currency.component.mjs +61 -0
- package/esm2020/lib/validations/validation-date/validation-date.component.mjs +177 -0
- package/esm2020/lib/validations/validation-datetime/validation-datetime.component.mjs +206 -0
- package/esm2020/lib/validations/validation-input/validation-input.component.mjs +207 -0
- package/esm2020/lib/validations/validation-select/validation-select.component.mjs +184 -0
- package/esm2020/lib/validations/validation-text-area/validation-text-area.component.mjs +64 -0
- package/esm2020/public-api.mjs +35 -0
- package/fesm2015/esfaenza-forms-and-validations.mjs +3620 -0
- package/fesm2015/esfaenza-forms-and-validations.mjs.map +1 -0
- package/fesm2020/esfaenza-forms-and-validations.mjs +3562 -0
- package/fesm2020/esfaenza-forms-and-validations.mjs.map +1 -0
- package/lib/forms/base-form-control.d.ts +27 -0
- package/lib/forms/form-adaptive/form-adaptive.component.d.ts +25 -0
- package/lib/forms/form-adaptive/form-adaptive.component.loc.d.ts +3 -0
- package/lib/forms/form-autocomplete/form-autocomplete.component.d.ts +19 -1
- package/lib/forms/form-autocomplete/form-autocomplete.component.loc.d.ts +3 -0
- package/lib/forms/form-checkbox/form-checkbox.component.d.ts +3 -0
- package/lib/forms/form-date/form-date.component.d.ts +3 -0
- package/lib/forms/form-datetime/form-datetime.component.d.ts +3 -0
- package/lib/forms/form-empty/form-empty.component.d.ts +3 -0
- package/lib/forms/form-error/form-error.component.d.ts +3 -0
- package/lib/forms/form-file/form-file.component.d.ts +3 -0
- package/lib/forms/form-file/form-file.component.loc.d.ts +3 -0
- package/lib/forms/form-info/form-info.component.d.ts +3 -0
- package/lib/forms/form-input/form-input.component.d.ts +3 -0
- package/lib/forms/form-multiselect/form-multiselect.component.d.ts +4 -0
- package/lib/forms/form-multiselect/form-multiselect.component.loc.d.ts +3 -0
- package/lib/forms/form-select/form-select.component.d.ts +3 -0
- package/lib/forms/form-select/form-select.component.loc.d.ts +3 -0
- package/lib/forms/form-template/form-template.component.d.ts +3 -0
- package/lib/forms/form-textarea/form-textarea.component.d.ts +3 -0
- package/lib/forms/form-time/form-time.component.d.ts +3 -0
- package/lib/forms-and-validations.module.d.ts +38 -0
- package/lib/models/dayjs-adapter/dayjs-date-adapter.d.ts +3 -0
- package/lib/validations/base-validation.d.ts +3 -0
- package/lib/validations/base-validation.loc.d.ts +3 -0
- package/lib/validations/customValidators/CustomRequiredDirective.d.ts +3 -0
- package/lib/validations/validation-autocomplete/validation-autocomplete.component.d.ts +3 -4
- package/lib/validations/validation-currency/validation-currency.component.d.ts +3 -0
- package/lib/validations/validation-date/validation-date.component.d.ts +3 -0
- package/lib/validations/validation-datetime/validation-datetime.component.d.ts +3 -0
- package/lib/validations/validation-input/validation-input.component.d.ts +3 -0
- package/lib/validations/validation-select/validation-select.component.d.ts +3 -0
- package/lib/validations/validation-text-area/validation-text-area.component.d.ts +3 -0
- package/package.json +31 -19
- package/public-api.d.ts +2 -0
- package/bundles/esfaenza-forms-and-validations.umd.js +0 -3628
- package/bundles/esfaenza-forms-and-validations.umd.js.map +0 -1
- package/esfaenza-forms-and-validations.metadata.json +0 -1
- package/esm2015/esfaenza-forms-and-validations.js +0 -17
- package/esm2015/lib/forms/base-form-control.js +0 -424
- package/esm2015/lib/forms/form-adaptive/form-adaptive.component.js +0 -219
- package/esm2015/lib/forms/form-adaptive/form-adaptive.component.loc.js +0 -23
- package/esm2015/lib/forms/form-autocomplete/form-autocomplete.component.js +0 -145
- package/esm2015/lib/forms/form-autocomplete/form-autocomplete.component.loc.js +0 -21
- package/esm2015/lib/forms/form-checkbox/form-checkbox.component.js +0 -41
- package/esm2015/lib/forms/form-date/form-date.component.js +0 -49
- package/esm2015/lib/forms/form-datetime/form-datetime.component.js +0 -49
- package/esm2015/lib/forms/form-empty/form-empty.component.js +0 -34
- package/esm2015/lib/forms/form-error/form-error.component.js +0 -49
- package/esm2015/lib/forms/form-file/form-file.component.js +0 -109
- package/esm2015/lib/forms/form-file/form-file.component.loc.js +0 -23
- package/esm2015/lib/forms/form-info/form-info.component.js +0 -49
- package/esm2015/lib/forms/form-input/form-input.component.js +0 -76
- package/esm2015/lib/forms/form-multiselect/form-multiselect.component.js +0 -153
- package/esm2015/lib/forms/form-multiselect/form-multiselect.component.loc.js +0 -24
- package/esm2015/lib/forms/form-select/form-select.component.js +0 -114
- package/esm2015/lib/forms/form-select/form-select.component.loc.js +0 -21
- package/esm2015/lib/forms/form-template/form-template.component.js +0 -64
- package/esm2015/lib/forms/form-textarea/form-textarea.component.js +0 -44
- package/esm2015/lib/forms/form-time/form-time.component.js +0 -117
- package/esm2015/lib/forms-and-validations.module.js +0 -144
- package/esm2015/lib/models/dayjs-adapter/dayjs-date-adapter.js +0 -86
- package/esm2015/lib/validations/base-validation.js +0 -208
- package/esm2015/lib/validations/base-validation.loc.js +0 -23
- package/esm2015/lib/validations/customValidators/CustomRequiredDirective.js +0 -35
- package/esm2015/lib/validations/validation-autocomplete/validation-autocomplete.component.js +0 -163
- package/esm2015/lib/validations/validation-currency/validation-currency.component.js +0 -48
- package/esm2015/lib/validations/validation-date/validation-date.component.js +0 -165
- package/esm2015/lib/validations/validation-datetime/validation-datetime.component.js +0 -193
- package/esm2015/lib/validations/validation-input/validation-input.component.js +0 -186
- package/esm2015/lib/validations/validation-select/validation-select.component.js +0 -166
- package/esm2015/lib/validations/validation-text-area/validation-text-area.component.js +0 -52
- package/esm2015/public-api.js +0 -32
- package/fesm2015/esfaenza-forms-and-validations.js +0 -3137
- package/fesm2015/esfaenza-forms-and-validations.js.map +0 -1
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// Angular
|
|
2
|
+
import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from "@angular/forms";
|
|
3
|
+
import { ChangeDetectionStrategy, Component, forwardRef, Inject, Input, Optional, ViewEncapsulation } from "@angular/core";
|
|
4
|
+
// Configurazioni
|
|
5
|
+
import { LocalizationService } from "@esfaenza/localizations";
|
|
6
|
+
// Direttive, Componenti, Librerie
|
|
7
|
+
import { BaseValidation } from "../base-validation";
|
|
8
|
+
import { BaseValidationLoc } from "../base-validation.loc";
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@esfaenza/localizations";
|
|
11
|
+
import * as i2 from "@esfaenza/extensions";
|
|
12
|
+
import * as i3 from "@angular/material/form-field";
|
|
13
|
+
import * as i4 from "@angular/material/datepicker";
|
|
14
|
+
import * as i5 from "@angular-material-components/datetime-picker";
|
|
15
|
+
import * as i6 from "@angular/common";
|
|
16
|
+
import * as i7 from "@angular/material/input";
|
|
17
|
+
import * as i8 from "@angular/forms";
|
|
18
|
+
import * as i9 from "ngx-bootstrap/tooltip";
|
|
19
|
+
/**
|
|
20
|
+
* Componente di validaizone per gli input di tipo data-ora
|
|
21
|
+
*/
|
|
22
|
+
export class ValidationDateTimeComponent extends BaseValidation {
|
|
23
|
+
/**
|
|
24
|
+
* @ignore
|
|
25
|
+
*/
|
|
26
|
+
constructor(cdr, _validators, _asyncValidators, injector, lc, dateExts) {
|
|
27
|
+
super();
|
|
28
|
+
this.cdr = cdr;
|
|
29
|
+
this._validators = _validators;
|
|
30
|
+
this._asyncValidators = _asyncValidators;
|
|
31
|
+
this.injector = injector;
|
|
32
|
+
this.lc = lc;
|
|
33
|
+
this.dateExts = dateExts;
|
|
34
|
+
/**
|
|
35
|
+
* Proprietà dell'elemento di selezione dell'orario. Mostra o nasconde gli spinner
|
|
36
|
+
*
|
|
37
|
+
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
38
|
+
*/
|
|
39
|
+
this.showSpinners = true;
|
|
40
|
+
/**
|
|
41
|
+
* Proprietà dell'elemento di selezione dell'orario. Mostra o nasconde i secondi
|
|
42
|
+
*
|
|
43
|
+
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
44
|
+
*/
|
|
45
|
+
this.showSeconds = true;
|
|
46
|
+
/**
|
|
47
|
+
* Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per le ore
|
|
48
|
+
*
|
|
49
|
+
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
50
|
+
*/
|
|
51
|
+
this.stepHour = 1;
|
|
52
|
+
/**
|
|
53
|
+
* Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per i minuti
|
|
54
|
+
*
|
|
55
|
+
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
56
|
+
*/
|
|
57
|
+
this.stepMinute = 1;
|
|
58
|
+
/**
|
|
59
|
+
* Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per i secondi
|
|
60
|
+
*
|
|
61
|
+
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
62
|
+
*/
|
|
63
|
+
this.stepSecond = 1;
|
|
64
|
+
/**
|
|
65
|
+
* Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs
|
|
66
|
+
*/
|
|
67
|
+
this.useJsDates = false;
|
|
68
|
+
/**
|
|
69
|
+
* @ignore
|
|
70
|
+
*/
|
|
71
|
+
this.onTouched = () => { };
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @ignore
|
|
75
|
+
*/
|
|
76
|
+
ngOnInit() {
|
|
77
|
+
// Controllo se è settato un required per decidere in maniera condizionale se utilizzare il validatore required nel componente interno
|
|
78
|
+
if (this._validators && !this.noValidate && this._validators.some(elem => elem instanceof RequiredValidator))
|
|
79
|
+
this.required = true;
|
|
80
|
+
this._format = this.lc.token("getSmallDateDisplayFormat");
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* @ignore
|
|
84
|
+
*/
|
|
85
|
+
ngAfterViewInit() {
|
|
86
|
+
this.postBinding();
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato
|
|
90
|
+
* da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML
|
|
91
|
+
*/
|
|
92
|
+
postBinding() {
|
|
93
|
+
this.CheckValidity();
|
|
94
|
+
const ngControl = this.injector.get(NgControl, null);
|
|
95
|
+
if (ngControl) {
|
|
96
|
+
this.parentControl = ngControl.control;
|
|
97
|
+
// Se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti
|
|
98
|
+
if (this.noValidate) {
|
|
99
|
+
this.parentControl.clearValidators();
|
|
100
|
+
this.parentControl.clearAsyncValidators();
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
this.baseInput.control.setAsyncValidators(this._asyncValidators);
|
|
104
|
+
this.baseInput.control.setValidators(this._validators);
|
|
105
|
+
}
|
|
106
|
+
// Faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo
|
|
107
|
+
const origFunc = this.parentControl.reset;
|
|
108
|
+
this.parentControl.reset = () => {
|
|
109
|
+
origFunc.apply(this.parentControl);
|
|
110
|
+
this.baseInput.control.reset();
|
|
111
|
+
this.tooltip.hide();
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* @ignore
|
|
117
|
+
*/
|
|
118
|
+
writeValue(value) {
|
|
119
|
+
if (!value) {
|
|
120
|
+
this.value = null;
|
|
121
|
+
if (this.baseInput)
|
|
122
|
+
this.baseInput.reset();
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
var date = null;
|
|
126
|
+
if (this.useJsDates) {
|
|
127
|
+
date = this.dateExts.getDateConvertion(value);
|
|
128
|
+
this.propagateChange(date);
|
|
129
|
+
this.inputChange.emit(date);
|
|
130
|
+
}
|
|
131
|
+
else
|
|
132
|
+
date = dayjs(value, this.lc.token("getSmallDateFormat") + " HH:mm:ss");
|
|
133
|
+
this.value = date;
|
|
134
|
+
}
|
|
135
|
+
this.cdr.markForCheck();
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Metodo che si occupa di, eventualmente, aggiustare il valore da propagare ed emetterlo
|
|
139
|
+
*
|
|
140
|
+
* L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo
|
|
141
|
+
*
|
|
142
|
+
* @param {any} toEmit valore da propagare all'esterno
|
|
143
|
+
*/
|
|
144
|
+
outputValue(toEmit) {
|
|
145
|
+
let value = toEmit.value;
|
|
146
|
+
let propagateValue;
|
|
147
|
+
if (!value)
|
|
148
|
+
propagateValue = null;
|
|
149
|
+
else if (!this.useJsDates)
|
|
150
|
+
propagateValue = value.format(this.lc.token("getSmallDateFormat") + " HH:mm:ss");
|
|
151
|
+
else {
|
|
152
|
+
if (value && value.isValid())
|
|
153
|
+
propagateValue = value.toDate();
|
|
154
|
+
else
|
|
155
|
+
propagateValue = null;
|
|
156
|
+
}
|
|
157
|
+
this.propagateChange(propagateValue);
|
|
158
|
+
this.inputChange.emit(propagateValue);
|
|
159
|
+
this.onTouched();
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* @ignore
|
|
163
|
+
*/
|
|
164
|
+
registerOnChange(fn) {
|
|
165
|
+
this.propagateChange = fn;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* @ignore
|
|
169
|
+
*/
|
|
170
|
+
registerOnTouched(fn) {
|
|
171
|
+
this.onTouched = fn;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
ValidationDateTimeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ValidationDateTimeComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: NG_VALIDATORS, optional: true }, { token: NG_ASYNC_VALIDATORS, optional: true }, { token: i0.Injector }, { token: i1.LocalizationService }, { token: i2.DateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
175
|
+
ValidationDateTimeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: ValidationDateTimeComponent, selector: "val-datetime", inputs: { useJsDates: "useJsDates" }, providers: [
|
|
176
|
+
{ provide: LocalizationService, useClass: BaseValidationLoc },
|
|
177
|
+
{
|
|
178
|
+
provide: NG_VALUE_ACCESSOR,
|
|
179
|
+
useExisting: forwardRef(() => ValidationDateTimeComponent),
|
|
180
|
+
multi: true
|
|
181
|
+
}
|
|
182
|
+
], usesInheritance: true, ngImport: i0, template: "<mat-form-field appearance=\"outline\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder\">{{placeholder}}</mat-label>\r\n\r\n <input matInput \r\n [ngxMatDatetimePicker]=\"datepicker\" \r\n #baseInput=\"ngModel\"\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n name=\"val-date\"\r\n class=\"form-control {{class}}\"\r\n autocomplete=\"{{autocomplete}}\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate\"\r\n [tooltip]=\"tolTemplate\"\r\n [placeholder]=\"placeholder ? '' : _format\"\r\n [disabled]=\"readonly || disabled\"\r\n [isDisabled]=\"readonly || disabled\"\r\n (dateChange)=\"outputValue($event)\"/>\r\n\r\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n\r\n <ngx-mat-datetime-picker #datepicker \r\n [showSpinners]=\"showSpinners\" \r\n [showSeconds]=\"showSeconds\" \r\n [stepHour]=\"stepHour\" \r\n [stepMinute]=\"stepMinute\" \r\n [stepSecond]=\"stepSecond\" \r\n [touchUi]=\"false\" \r\n [color]=\"'primary'\">\r\n </ngx-mat-datetime-picker>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailed}}</span>\r\n </div>\r\n</ng-template>", styles: [".tooltip-inner{background-color:#842a30;color:#fff;font-size:12px;width:max-content}.tooltip{margin:auto auto auto 20%!important}.tooltip-inner{background-color:#842a30!important;color:#fff}.tooltip.top .tooltip-arrow:before,.tooltip.top .tooltip-arrow{border-top-color:#842a30}.close-button{position:absolute;right:0em;top:-.2em;float:right;font-size:16px;font-weight:700;color:inherit;text-shadow:0 1px 0 #fff;opacity:.5}.close-button:hover,.close-button:focus{text-decoration:none;cursor:pointer;opacity:.75}\n"], components: [{ type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { type: i5.NgxMatDatetimePicker, selector: "ngx-mat-datetime-picker", inputs: ["calendarHeaderComponent", "startAt", "startView", "defaultColor", "color", "touchUi", "hideTime", "disabled", "panelClass", "dateClass", "opened", "showSpinners", "showSeconds", "stepHour", "stepMinute", "stepSecond", "enableMeridian", "disableMinute", "defaultTime"], outputs: ["yearSelected", "monthSelected", "opened", "closed"], exportAs: ["ngxMatDatetimePicker"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatLabel, selector: "mat-label" }, { type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i5.NgxMatDatetimeInput, selector: "input[ngxMatDatetimePicker]", inputs: ["ngxMatDatetimePicker", "ngxMatDatetimePickerFilter", "value", "min", "max", "disabled"], outputs: ["dateChange", "dateInput"], exportAs: ["ngxMatDatetimePickerInput"] }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "placement", "triggers", "containerClass", "isDisabled", "delay", "tooltipAnimation", "tooltipFadeDuration", "isOpen", "tooltipHtml", "tooltip", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "container", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipTrigger", "boundariesElement"], outputs: ["tooltipChange", "tooltipStateChanged", "onShown", "onHidden"], exportAs: ["bs-tooltip"] }, { type: i3.MatSuffix, selector: "[matSuffix]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ValidationDateTimeComponent, decorators: [{
|
|
184
|
+
type: Component,
|
|
185
|
+
args: [{ selector: "val-datetime", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
186
|
+
{ provide: LocalizationService, useClass: BaseValidationLoc },
|
|
187
|
+
{
|
|
188
|
+
provide: NG_VALUE_ACCESSOR,
|
|
189
|
+
useExisting: forwardRef(() => ValidationDateTimeComponent),
|
|
190
|
+
multi: true
|
|
191
|
+
}
|
|
192
|
+
], template: "<mat-form-field appearance=\"outline\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder\">{{placeholder}}</mat-label>\r\n\r\n <input matInput \r\n [ngxMatDatetimePicker]=\"datepicker\" \r\n #baseInput=\"ngModel\"\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n name=\"val-date\"\r\n class=\"form-control {{class}}\"\r\n autocomplete=\"{{autocomplete}}\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate\"\r\n [tooltip]=\"tolTemplate\"\r\n [placeholder]=\"placeholder ? '' : _format\"\r\n [disabled]=\"readonly || disabled\"\r\n [isDisabled]=\"readonly || disabled\"\r\n (dateChange)=\"outputValue($event)\"/>\r\n\r\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n\r\n <ngx-mat-datetime-picker #datepicker \r\n [showSpinners]=\"showSpinners\" \r\n [showSeconds]=\"showSeconds\" \r\n [stepHour]=\"stepHour\" \r\n [stepMinute]=\"stepMinute\" \r\n [stepSecond]=\"stepSecond\" \r\n [touchUi]=\"false\" \r\n [color]=\"'primary'\">\r\n </ngx-mat-datetime-picker>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailed}}</span>\r\n </div>\r\n</ng-template>", styles: [".tooltip-inner{background-color:#842a30;color:#fff;font-size:12px;width:max-content}.tooltip{margin:auto auto auto 20%!important}.tooltip-inner{background-color:#842a30!important;color:#fff}.tooltip.top .tooltip-arrow:before,.tooltip.top .tooltip-arrow{border-top-color:#842a30}.close-button{position:absolute;right:0em;top:-.2em;float:right;font-size:16px;font-weight:700;color:inherit;text-shadow:0 1px 0 #fff;opacity:.5}.close-button:hover,.close-button:focus{text-decoration:none;cursor:pointer;opacity:.75}\n"] }]
|
|
193
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: Array, decorators: [{
|
|
194
|
+
type: Optional
|
|
195
|
+
}, {
|
|
196
|
+
type: Inject,
|
|
197
|
+
args: [NG_VALIDATORS]
|
|
198
|
+
}] }, { type: Array, decorators: [{
|
|
199
|
+
type: Optional
|
|
200
|
+
}, {
|
|
201
|
+
type: Inject,
|
|
202
|
+
args: [NG_ASYNC_VALIDATORS]
|
|
203
|
+
}] }, { type: i0.Injector }, { type: i1.LocalizationService }, { type: i2.DateService }]; }, propDecorators: { useJsDates: [{
|
|
204
|
+
type: Input
|
|
205
|
+
}] } });
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1kYXRldGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi92YWxpZGF0aW9ucy92YWxpZGF0aW9uLWRhdGV0aW1lL3ZhbGlkYXRpb24tZGF0ZXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvdmFsaWRhdGlvbi1kYXRldGltZS92YWxpZGF0aW9uLWRhdGV0aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQXFDLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4SixPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFZLEtBQUssRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEosaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELGtDQUFrQztBQUNsQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7Ozs7Ozs7Ozs7O0FBUzFEOztHQUVHO0FBZ0JILE1BQU0sT0FBTywyQkFBNEIsU0FBUSxjQUFjO0lBeUQzRDs7T0FFRztJQUNILFlBQW9CLEdBQXNCLEVBQTZDLFdBQXVCLEVBQW1ELGdCQUE0QixFQUFVLFFBQWtCLEVBQVksRUFBdUIsRUFBVSxRQUFxQjtRQUN2UixLQUFLLEVBQUUsQ0FBQztRQURRLFFBQUcsR0FBSCxH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LENBQUMsRUFBTztRQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7O3dIQWxMUSwyQkFBMkIsbURBNEQ0QixhQUFhLDZCQUF1RCxtQkFBbUI7NEdBNUQ5SSwyQkFBMkIsNkVBVHpCO1FBQ1AsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO1FBQzdEO1lBQ0ksT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO1lBQzFELEtBQUssRUFBRSxJQUFJO1NBQ2Q7S0FDSixpRENsQ0wscStDQXFDYzsyRkRERCwyQkFBMkI7a0JBZnZDLFNBQVM7K0JBQ0ksY0FBYyxpQkFFVCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBRXBDO3dCQUNQLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRTt3QkFDN0Q7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLENBQUM7NEJBQzFELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKOzBGQThEbUcsS0FBSzswQkFBNUQsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzhCQUFzRyxLQUFLOzBCQUF2RSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjsrSEFMdkksVUFBVTtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19BU1lOQ19WQUxJREFUT1JTLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdDb250cm9sLCBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9wdGlvbmFsLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcblxyXG4vLyBEaXJldHRpdmUsIENvbXBvbmVudGksIExpYnJlcmllXHJcbmltcG9ydCB7IEJhc2VWYWxpZGF0aW9uIH0gZnJvbSBcIi4uL2Jhc2UtdmFsaWRhdGlvblwiO1xyXG5pbXBvcnQgeyBCYXNlVmFsaWRhdGlvbkxvYyB9IGZyb20gXCIuLi9iYXNlLXZhbGlkYXRpb24ubG9jXCJcclxuaW1wb3J0IHsgRGF0ZVNlcnZpY2UgfSBmcm9tICdAZXNmYWVuemEvZXh0ZW5zaW9ucyc7XHJcblxyXG4vKipcclxuICogRGljaGlhcmF6aW9uZSBkZWxsYSB2YXJpYWJpbGUgZ2xvYmFsZSBkYXlqcy4gTCdvbmVyZSBkaSBcImNyZWFybGFcIiDDqCBhZmZpZGF0byBhbGwnYXBwbGljYXppb25lIGNoZSB1dGlsaXp6YSBxdWVzdGEgbGlicmVyaWEsIFxyXG4gKiBjaGUgZG92csOgIGltcG9ydGFyZSBsbyBzY3JpcHQgZ2xvYmFsZSBkaSBkYXlqcyBuZWxsYSBDTElcclxuICovXHJcbmRlY2xhcmUgdmFyIGRheWpzOiBhbnk7XHJcblxyXG4vKipcclxuICogQ29tcG9uZW50ZSBkaSB2YWxpZGFpem9uZSBwZXIgZ2xpIGlucHV0IGRpIHRpcG8gZGF0YS1vcmFcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwidmFsLWRhdGV0aW1lXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJ2YWxpZGF0aW9uLWRhdGV0aW1lLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4uL3ZhbGlkYXRpb24tc3R5bGUuc2Nzc1wiXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHsgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEJhc2VWYWxpZGF0aW9uTG9jIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVmFsaWRhdGlvbkRhdGVUaW1lQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRGF0ZVRpbWVDb21wb25lbnQgZXh0ZW5kcyBCYXNlVmFsaWRhdGlvbiBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzYXRvIHNvbG8gcGVyIHN0YW1wYXJlIGlsIHBsYWNlaG9sZGVyIHF1YWxvcmEgbCdJbnB1dCAqKnBsYWNlaG9sZGVyKiogbm9uIGZvc3NlIHZhbG9yaXp6YXRvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBfZm9ybWF0OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb2RlbGxvIGNvbGxlZ2F0byBhbGwnaW5wdXRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbHVlOiBEYXRlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udHJvbGxvIGVzcG9zdG8gb3R0ZW51dG8gdHJhbWl0ZSBpbmplY3RvclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBhcmVudENvbnRyb2w6IEZvcm1Db250cm9sO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcHJpZXTDoCBkZWxsJ2VsZW1lbnRvIGRpIHNlbGV6aW9uZSBkZWxsJ29yYXJpby4gTW9zdHJhIG8gbmFzY29uZGUgZ2xpIHNwaW5uZXJcclxuICAgICAqIFxyXG4gICAgICogQXR0dWFsZW1udGUgbm9uIGJpbmRhdGEgZWQgdXRpbGl6emF0YSBzb2xvIGEgbGl2ZWxsbyBkaSBkZWZhdWx0IG1hIG5vbiBzaSBzYSBtYWlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dTcGlubmVycyA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wcmlldMOgIGRlbGwnZWxlbWVudG8gZGkgc2VsZXppb25lIGRlbGwnb3JhcmlvLiBNb3N0cmEgbyBuYXNjb25kZSBpIHNlY29uZGlcclxuICAgICAqIFxyXG4gICAgICogQXR0dWFsZW1udGUgbm9uIGJpbmRhdGEgZWQgdXRpbGl6emF0YSBzb2xvIGEgbGl2ZWxsbyBkaSBkZWZhdWx0IG1hIG5vbiBzaSBzYSBtYWlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dTZWNvbmRzID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ByaWV0w6AgZGVsbCdlbGVtZW50byBkaSBzZWxlemlvbmUgZGVsbCdvcmFyaW8uIEltcG9zdGEgbCdpbmNyZW1lbnRvL2RlY3JlbWVudG8gbWluaW1vIHBlciBsZSBvcmVcclxuICAgICAqIFxyXG4gICAgICogQXR0dWFsZW1udGUgbm9uIGJpbmRhdGEgZWQgdXRpbGl6emF0YSBzb2xvIGEgbGl2ZWxsbyBkaSBkZWZhdWx0IG1hIG5vbiBzaSBzYSBtYWlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0ZXBIb3VyID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ByaWV0w6AgZGVsbCdlbGVtZW50byBkaSBzZWxlemlvbmUgZGVsbCdvcmFyaW8uIEltcG9zdGEgbCdpbmNyZW1lbnRvL2RlY3JlbWVudG8gbWluaW1vIHBlciBpIG1pbnV0aVxyXG4gICAgICogXHJcbiAgICAgKiBBdHR1YWxlbW50ZSBub24gYmluZGF0YSBlZCB1dGlsaXp6YXRhIHNvbG8gYSBsaXZlbGxvIGRpIGRlZmF1bHQgbWEgbm9uIHNpIHNhIG1haVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RlcE1pbnV0ZSA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wcmlldMOgIGRlbGwnZWxlbWVudG8gZGkgc2VsZXppb25lIGRlbGwnb3JhcmlvLiBJbXBvc3RhIGwnaW5jcmVtZW50by9kZWNyZW1lbnRvIG1pbmltbyBwZXIgaSBzZWNvbmRpXHJcbiAgICAgKiBcclxuICAgICAqIEF0dHVhbGVtbnRlIG5vbiBiaW5kYXRhIGVkIHV0aWxpenphdGEgc29sbyBhIGxpdmVsbG8gZGkgZGVmYXVsdCBtYSBub24gc2kgc2EgbWFpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGVwU2Vjb25kID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFV0aWxpenphIGlsIERhdGUgZGkgSmF2YXNjcmlwdCBjb21lIG1vZGVsbG8gaW4gdXNjaXRhLiBJbCBtb2RlbGxvIGluIGVudHJhdGEgdmVycsOgIGNvbXVucXVlIHJpY29uZG90dG8gYSB1biBEYXlKc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgdXNlSnNEYXRlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfVkFMSURBVE9SUykgcHJpdmF0ZSBfdmFsaWRhdG9yczogQXJyYXk8YW55PiwgQE9wdGlvbmFsKCkgQEluamVjdChOR19BU1lOQ19WQUxJREFUT1JTKSBwcml2YXRlIF9hc3luY1ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCBwcm90ZWN0ZWQgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsIHByaXZhdGUgZGF0ZUV4dHM6IERhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgLy8gQ29udHJvbGxvIHNlIMOoIHNldHRhdG8gdW4gcmVxdWlyZWQgcGVyIGRlY2lkZXJlIGluIG1hbmllcmEgY29uZGl6aW9uYWxlIHNlIHV0aWxpenphcmUgaWwgdmFsaWRhdG9yZSByZXF1aXJlZCBuZWwgY29tcG9uZW50ZSBpbnRlcm5vXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRvcnMgJiYgIXRoaXMubm9WYWxpZGF0ZSAmJiB0aGlzLl92YWxpZGF0b3JzLnNvbWUoZWxlbSA9PiBlbGVtIGluc3RhbmNlb2YgUmVxdWlyZWRWYWxpZGF0b3IpKVxyXG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fZm9ybWF0ID0gdGhpcy5sYy50b2tlbihcImdldFNtYWxsRGF0ZURpc3BsYXlGb3JtYXRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLnBvc3RCaW5kaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBjb2xsZWdhcmUgaSB2YWxpZGF0b3JpIGUgbGEgZnVuemlvbmUgZGkgcmVzZXQgZGFsICoqQ29udHJvbFZhbHVlQWNjZXNzb3IqKiByYXBwcmVzZW50YXRvIFxyXG4gICAgICogZGEgcXVlc3RvIGNvbXBvbmVudGUgYWwgKipDb250cm9sVmFsdWVBY2Nlc3NvcioqIHJhcHByZXNlbnRhdG8gZGFsbCdlZmZldHRpdm8gZWxlbWVudG8gZGkgSW5wdXQgcHJlc2VudGUgbGF0byBIVE1MXHJcbiAgICAgKi9cclxuICAgIHBvc3RCaW5kaW5nKCkge1xyXG4gICAgICAgIHRoaXMuQ2hlY2tWYWxpZGl0eSgpO1xyXG4gICAgICAgIGNvbnN0IG5nQ29udHJvbDogTmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgICAgICBpZiAobmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sIGFzIEZvcm1Db250cm9sO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgbGEgdmFyaWFiaWxlIG5vdmFsaWRhdGUgw6ggdHJ1ZSwgZWxpbWlubyB0dXR0aSBpIHZhbGlkYXRvcmkgZXZlbnR1YWxtZW50ZSBpbnNlcml0aVxyXG4gICAgICAgICAgICBpZiAodGhpcy5ub1ZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2wuY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuX2FzeW5jVmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5jb250cm9sLnNldFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEZhY2NpbyBpbiBtb2RvIGNoZSBzZSBjaGlhbW8gaWwgcmVzZXQgZGVsIGNvbnRyb2xsbyAobyBkZWxsYSBmb3JtKSBkYWxsJ2VzdGVybm8gc2kgcmVzZXR0aSBhbmNoZSBpbCBjb250cm9sbG8gbmF0aXZvXHJcbiAgICAgICAgICAgIGNvbnN0IG9yaWdGdW5jID0gdGhpcy5wYXJlbnRDb250cm9sLnJlc2V0O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2wucmVzZXQgPSAoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgb3JpZ0Z1bmMuYXBwbHkodGhpcy5wYXJlbnRDb250cm9sKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wucmVzZXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZSBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7IH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlIFxyXG4gICAgICovXHJcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5iYXNlSW5wdXQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5yZXNldCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBkYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlSnNEYXRlcykge1xyXG4gICAgICAgICAgICAgICAgZGF0ZSA9IHRoaXMuZGF0ZUV4dHMuZ2V0RGF0ZUNvbnZlcnRpb24odmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShkYXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdChkYXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBkYXRlID0gZGF5anModmFsdWUsIHRoaXMubGMudG9rZW4oXCJnZXRTbWFsbERhdGVGb3JtYXRcIikgKyBcIiBISDptbTpzc1wiKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBkYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBjaGUgc2kgb2NjdXBhIGRpLCBldmVudHVhbG1lbnRlLCBhZ2dpdXN0YXJlIGlsIHZhbG9yZSBkYSBwcm9wYWdhcmUgZWQgZW1ldHRlcmxvXHJcbiAgICAgKiBcclxuICAgICAqIEwnZW1pdCBkZWxsYSBtb2RpZmljYSBhbCB2YWxvcmUgdmllbmUgZ2VzdGl0byBzdSB1biBldmVudG8gY3VzdG9tICgqKmlucHV0Q2hhbmdlKiopIGNvbWUgd29ya2Fyb3VuZCBhbCBtYWxmdW56aW9uYW1lbnRvIGRlbGwnKipuZ01vZGVsQ2hhbmdlKiogbmF0aXZvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSB0b0VtaXQgdmFsb3JlIGRhIHByb3BhZ2FyZSBhbGwnZXN0ZXJub1xyXG4gICAgICovXHJcbiAgICBvdXRwdXRWYWx1ZSh0b0VtaXQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRvRW1pdC52YWx1ZTtcclxuICAgICAgICBsZXQgcHJvcGFnYXRlVmFsdWU6IGFueTtcclxuXHJcbiAgICAgICAgaWYgKCF2YWx1ZSlcclxuICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLnVzZUpzRGF0ZXMpXHJcbiAgICAgICAgICAgIHByb3BhZ2F0ZVZhbHVlID0gdmFsdWUuZm9ybWF0KHRoaXMubGMudG9rZW4oXCJnZXRTbWFsbERhdGVGb3JtYXRcIikgKyBcIiBISDptbTpzc1wiKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlzVmFsaWQoKSlcclxuICAgICAgICAgICAgICAgIHByb3BhZ2F0ZVZhbHVlID0gdmFsdWUudG9EYXRlKCk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHByb3BhZ2F0ZVZhbHVlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UocHJvcGFnYXRlVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdChwcm9wYWdhdGVWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmUgXHJcbiAgICAgKi9cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlIFxyXG4gICAgICovXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxufSIsIjxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGggbWF0LW5vLWJvcmRlci10b3AgbWF0LWhlaWdodC1maXhlZFwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFB4XCI+XHJcbiAgICA8bWF0LWxhYmVsICpuZ0lmPVwicGxhY2Vob2xkZXJcIj57e3BsYWNlaG9sZGVyfX08L21hdC1sYWJlbD5cclxuXHJcbiAgICA8aW5wdXQgbWF0SW5wdXQgXHJcbiAgICAgICAgICAgW25neE1hdERhdGV0aW1lUGlja2VyXT1cImRhdGVwaWNrZXJcIiBcclxuICAgICAgICAgICAjYmFzZUlucHV0PVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgIHRyaWdnZXJzPVwiXCJcclxuICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxyXG4gICAgICAgICAgIG5hbWU9XCJ2YWwtZGF0ZVwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wge3tjbGFzc319XCJcclxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJ7e2F1dG9jb21wbGV0ZX19XCJcclxuICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgICAgICAgICBbY2xhc3MuY2hlY2tpbmctZmllbGRdPVwiIW5vVmFsaWRhdGVcIlxyXG4gICAgICAgICAgIFt0b29sdGlwXT1cInRvbFRlbXBsYXRlXCJcclxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgPyAnJyA6IF9mb3JtYXRcIlxyXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seSB8fCBkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwicmVhZG9ubHkgfHwgZGlzYWJsZWRcIlxyXG4gICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm91dHB1dFZhbHVlKCRldmVudClcIi8+XHJcblxyXG4gIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZGF0ZXBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG5cclxuICA8bmd4LW1hdC1kYXRldGltZS1waWNrZXIgI2RhdGVwaWNrZXIgXHJcbiAgICAgICAgICAgIFtzaG93U3Bpbm5lcnNdPVwic2hvd1NwaW5uZXJzXCIgXHJcbiAgICAgICAgICAgIFtzaG93U2Vjb25kc109XCJzaG93U2Vjb25kc1wiIFxyXG4gICAgICAgICAgICBbc3RlcEhvdXJdPVwic3RlcEhvdXJcIiBcclxuICAgICAgICAgICAgW3N0ZXBNaW51dGVdPVwic3RlcE1pbnV0ZVwiIFxyXG4gICAgICAgICAgICBbc3RlcFNlY29uZF09XCJzdGVwU2Vjb25kXCIgXHJcbiAgICAgICAgICAgIFt0b3VjaFVpXT1cImZhbHNlXCIgXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIj5cclxuICA8L25neC1tYXQtZGF0ZXRpbWUtcGlja2VyPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0b2xUZW1wbGF0ZT5cclxuICAgIDxkaXYgKGNsaWNrKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgPHNwYW4+e3t2YWxpZGF0aW9uRmFpbGVkfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// Angular
|
|
2
|
+
import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from "@angular/forms";
|
|
3
|
+
import { ChangeDetectionStrategy, Component, ContentChild, forwardRef, Inject, Input, Optional, ViewEncapsulation } from "@angular/core";
|
|
4
|
+
// Configurazioni
|
|
5
|
+
import { LocalizationService } from "@esfaenza/localizations";
|
|
6
|
+
// Direttive, Componenti, Librerie
|
|
7
|
+
import { BaseValidation } from "../base-validation";
|
|
8
|
+
import { BaseValidationLoc } from '../base-validation.loc';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@esfaenza/localizations";
|
|
11
|
+
import * as i2 from "@angular/material/form-field";
|
|
12
|
+
import * as i3 from "@angular/common";
|
|
13
|
+
import * as i4 from "@angular/material/input";
|
|
14
|
+
import * as i5 from "@angular/forms";
|
|
15
|
+
import * as i6 from "ngx-bootstrap/tooltip";
|
|
16
|
+
/**
|
|
17
|
+
* Componente di validaizone per gli input a semplice casella di testo
|
|
18
|
+
*/
|
|
19
|
+
export class ValidationInputComponent extends BaseValidation {
|
|
20
|
+
/**
|
|
21
|
+
* @ignore
|
|
22
|
+
*/
|
|
23
|
+
constructor(cdr, _validators, _asyncValidators, injector, lc) {
|
|
24
|
+
super();
|
|
25
|
+
this.cdr = cdr;
|
|
26
|
+
this._validators = _validators;
|
|
27
|
+
this._asyncValidators = _asyncValidators;
|
|
28
|
+
this.injector = injector;
|
|
29
|
+
this.lc = lc;
|
|
30
|
+
/**
|
|
31
|
+
* Indica se questo Comopnente deve rappresentare un oggetto di Input di tipo "Password"
|
|
32
|
+
*/
|
|
33
|
+
this.Password = false;
|
|
34
|
+
/**
|
|
35
|
+
* Indica se deve mostrare un indicazione di warning nel suffisso
|
|
36
|
+
*/
|
|
37
|
+
this.showWarning = false;
|
|
38
|
+
/**
|
|
39
|
+
* Classe del warning eventualmente modificabile.
|
|
40
|
+
*
|
|
41
|
+
* Default: "fa fa-warning"
|
|
42
|
+
*/
|
|
43
|
+
this.warningClass = "fa fa-warning";
|
|
44
|
+
/**
|
|
45
|
+
* Identifica se il testo di un componente di tipo "password" dev'essere visualizzato o meno
|
|
46
|
+
*/
|
|
47
|
+
this.passShown = false;
|
|
48
|
+
/**
|
|
49
|
+
* Tipo del componente, può essere "text" o "password" e viene impostato automaticamente dall'Input **Password**
|
|
50
|
+
*/
|
|
51
|
+
this.type = "text";
|
|
52
|
+
/**
|
|
53
|
+
* Indicazione se il componente ha o meno un suffisso.
|
|
54
|
+
*
|
|
55
|
+
* Valorizzato a **true** solo se viene trovata una proiezione su **suffix_internal** o se l'Input **showWarning** viene impostato a **true**
|
|
56
|
+
*/
|
|
57
|
+
this.HasSuffix = false;
|
|
58
|
+
/**
|
|
59
|
+
* Indicazione se il componente ha o meno un prefisso.
|
|
60
|
+
*
|
|
61
|
+
* Valorizzato a **true** solo se viene trovata una proiezione su **prefix_internal**
|
|
62
|
+
*/
|
|
63
|
+
this.HasPrefix = false;
|
|
64
|
+
/**
|
|
65
|
+
* @ignore
|
|
66
|
+
*/
|
|
67
|
+
this.onTouched = () => { };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @ignore
|
|
71
|
+
*/
|
|
72
|
+
ngOnInit() {
|
|
73
|
+
//controllo se è settato un required per decidere in maniera condizionale se utilizzare il validatore required nel componente interno
|
|
74
|
+
if (this._validators && !this.noValidate && this._validators.some(elem => elem instanceof RequiredValidator))
|
|
75
|
+
this.required = true;
|
|
76
|
+
if (this.Password)
|
|
77
|
+
this.type = "password";
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @ignore
|
|
81
|
+
*/
|
|
82
|
+
ngOnDestroy() {
|
|
83
|
+
if (this.tooltipSubscription)
|
|
84
|
+
this.tooltipSubscription.unsubscribe();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* @ignore
|
|
88
|
+
*/
|
|
89
|
+
ngAfterViewInit() {
|
|
90
|
+
this.HasSuffix = !!this.suffix_internal || this.showWarning;
|
|
91
|
+
this.HasPrefix = !!this.prefix_internal;
|
|
92
|
+
this.postBinding();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* @ignore
|
|
96
|
+
*/
|
|
97
|
+
ngOnChanges(changes) {
|
|
98
|
+
const newShowWarnings = changes["showWarning"];
|
|
99
|
+
if (newShowWarnings)
|
|
100
|
+
this.HasSuffix = !!this.suffix_internal || this.showWarning;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato
|
|
104
|
+
* da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML
|
|
105
|
+
*/
|
|
106
|
+
postBinding() {
|
|
107
|
+
this.CheckValidity();
|
|
108
|
+
const ngControl = this.injector.get(NgControl, null);
|
|
109
|
+
if (ngControl) {
|
|
110
|
+
this.parentControl = ngControl.control;
|
|
111
|
+
// Se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti
|
|
112
|
+
if (this.noValidate) {
|
|
113
|
+
this.parentControl.clearValidators();
|
|
114
|
+
this.parentControl.clearAsyncValidators();
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
this.baseInput.control.setAsyncValidators(this._asyncValidators);
|
|
118
|
+
this.baseInput.control.setValidators(this._validators);
|
|
119
|
+
}
|
|
120
|
+
// Faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo
|
|
121
|
+
const origFunc = this.parentControl.reset;
|
|
122
|
+
this.parentControl.reset = () => {
|
|
123
|
+
origFunc.apply(this.parentControl);
|
|
124
|
+
this.baseInput.control.reset();
|
|
125
|
+
this.tooltip.hide();
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* @ignore
|
|
131
|
+
*/
|
|
132
|
+
writeValue(value) {
|
|
133
|
+
this.value = value;
|
|
134
|
+
this.propagateChange(value);
|
|
135
|
+
this.cdr.markForCheck();
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo
|
|
139
|
+
*
|
|
140
|
+
* @param {any} toEmit valore da propagare all'esterno
|
|
141
|
+
*/
|
|
142
|
+
onModelChange(toEmit) {
|
|
143
|
+
this.writeValue(toEmit);
|
|
144
|
+
this.inputChange.emit(toEmit);
|
|
145
|
+
this.onTouched();
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* @ignore
|
|
149
|
+
*/
|
|
150
|
+
registerOnChange(fn) {
|
|
151
|
+
this.propagateChange = fn;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* @ignore
|
|
155
|
+
*/
|
|
156
|
+
registerOnTouched(fn) {
|
|
157
|
+
this.onTouched = fn;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
ValidationInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ValidationInputComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: NG_VALIDATORS, optional: true }, { token: NG_ASYNC_VALIDATORS, optional: true }, { token: i0.Injector }, { token: i1.LocalizationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
161
|
+
ValidationInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: ValidationInputComponent, selector: "val-input", inputs: { Password: "Password", showWarning: "showWarning", warningTitle: "warningTitle", warningClass: "warningClass", value: "value" }, providers: [
|
|
162
|
+
{ provide: LocalizationService, useClass: BaseValidationLoc },
|
|
163
|
+
{
|
|
164
|
+
provide: NG_VALUE_ACCESSOR,
|
|
165
|
+
useExisting: forwardRef(() => ValidationInputComponent),
|
|
166
|
+
multi: true
|
|
167
|
+
}
|
|
168
|
+
], queries: [{ propertyName: "suffix_internal", first: true, predicate: ["suffix_internal"], descendants: true }, { propertyName: "prefix_internal", first: true, predicate: ["prefix_internal"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<mat-form-field appearance=\"outline\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label [class.app-margin-left-25]=\"HasPrefix\" *ngIf=\"placeholder\">{{placeholder}}</mat-label>\r\n <ng-container *ngIf=\"HasPrefix\">\r\n <ng-container *ngTemplateOutlet=\"prefix_internal\"></ng-container>\r\n </ng-container>\r\n\r\n <input matInput\r\n #baseInput='ngModel'\r\n type=\"{{type}}\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n autocomplete=\"{{autocomplete}}\"\r\n name=\"val-input\"\r\n class=\"form-control {{class}}\"\r\n [class.app-margin-left-25]=\"HasPrefix\"\r\n [class.mat-input-with-suffix]=\"HasSuffix || Password || showWarning\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate && !showWarning\"\r\n [tooltip]=\"tolTemplate\"\r\n [disabled]=\"readonly || disabled\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (blur)=\"closeTooltip();\">\r\n <ng-container *ngIf=\"HasSuffix || Password || showWarning\">\r\n <ng-container *ngIf=\"!Password && !showWarning\">\r\n <ng-container *ngTemplateOutlet=\"suffix_internal\"></ng-container>\r\n </ng-container>\r\n\r\n <span class=\"form-input-suffix\" *ngIf=\"Password || showWarning\">\r\n <ng-container *ngIf=\"Password\" matSuffix>\r\n <a *ngIf=\"passShown\" class=\"fa fa-eye-slash app-fs-16 app-pointer\" (click)=\"type = 'password'; passShown = !passShown; $event.preventDefault()\"></a>\r\n <a *ngIf=\"!passShown\" class=\"fa fa-eye app-fs-16 app-pointer\" (click)=\"type = 'text'; passShown = !passShown; $event.preventDefault()\"></a>\r\n </ng-container>\r\n <ng-container *ngIf=\"showWarning\" matSuffix>\r\n <span title=\"{{warningTitle}}\" class=\"{{warningClass}} text-warning app-fs-16\"></span>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailed}}</span>\r\n </div>\r\n</ng-template>", styles: [".tooltip-inner{background-color:#842a30;color:#fff;font-size:12px;width:max-content}.tooltip{margin:auto auto auto 20%!important}.tooltip-inner{background-color:#842a30!important;color:#fff}.tooltip.top .tooltip-arrow:before,.tooltip.top .tooltip-arrow{border-top-color:#842a30}.close-button{position:absolute;right:0em;top:-.2em;float:right;font-size:16px;font-weight:700;color:inherit;text-shadow:0 1px 0 #fff;opacity:.5}.close-button:hover,.close-button:focus{text-decoration:none;cursor:pointer;opacity:.75}\n"], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatLabel, selector: "mat-label" }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { 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]" }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i6.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "placement", "triggers", "containerClass", "isDisabled", "delay", "tooltipAnimation", "tooltipFadeDuration", "isOpen", "tooltipHtml", "tooltip", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "container", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipTrigger", "boundariesElement"], outputs: ["tooltipChange", "tooltipStateChanged", "onShown", "onHidden"], exportAs: ["bs-tooltip"] }, { type: i2.MatSuffix, selector: "[matSuffix]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
169
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ValidationInputComponent, decorators: [{
|
|
170
|
+
type: Component,
|
|
171
|
+
args: [{ selector: "val-input", changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
172
|
+
{ provide: LocalizationService, useClass: BaseValidationLoc },
|
|
173
|
+
{
|
|
174
|
+
provide: NG_VALUE_ACCESSOR,
|
|
175
|
+
useExisting: forwardRef(() => ValidationInputComponent),
|
|
176
|
+
multi: true
|
|
177
|
+
}
|
|
178
|
+
], encapsulation: ViewEncapsulation.None, template: "<mat-form-field appearance=\"outline\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label [class.app-margin-left-25]=\"HasPrefix\" *ngIf=\"placeholder\">{{placeholder}}</mat-label>\r\n <ng-container *ngIf=\"HasPrefix\">\r\n <ng-container *ngTemplateOutlet=\"prefix_internal\"></ng-container>\r\n </ng-container>\r\n\r\n <input matInput\r\n #baseInput='ngModel'\r\n type=\"{{type}}\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n autocomplete=\"{{autocomplete}}\"\r\n name=\"val-input\"\r\n class=\"form-control {{class}}\"\r\n [class.app-margin-left-25]=\"HasPrefix\"\r\n [class.mat-input-with-suffix]=\"HasSuffix || Password || showWarning\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate && !showWarning\"\r\n [tooltip]=\"tolTemplate\"\r\n [disabled]=\"readonly || disabled\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (blur)=\"closeTooltip();\">\r\n <ng-container *ngIf=\"HasSuffix || Password || showWarning\">\r\n <ng-container *ngIf=\"!Password && !showWarning\">\r\n <ng-container *ngTemplateOutlet=\"suffix_internal\"></ng-container>\r\n </ng-container>\r\n\r\n <span class=\"form-input-suffix\" *ngIf=\"Password || showWarning\">\r\n <ng-container *ngIf=\"Password\" matSuffix>\r\n <a *ngIf=\"passShown\" class=\"fa fa-eye-slash app-fs-16 app-pointer\" (click)=\"type = 'password'; passShown = !passShown; $event.preventDefault()\"></a>\r\n <a *ngIf=\"!passShown\" class=\"fa fa-eye app-fs-16 app-pointer\" (click)=\"type = 'text'; passShown = !passShown; $event.preventDefault()\"></a>\r\n </ng-container>\r\n <ng-container *ngIf=\"showWarning\" matSuffix>\r\n <span title=\"{{warningTitle}}\" class=\"{{warningClass}} text-warning app-fs-16\"></span>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailed}}</span>\r\n </div>\r\n</ng-template>", styles: [".tooltip-inner{background-color:#842a30;color:#fff;font-size:12px;width:max-content}.tooltip{margin:auto auto auto 20%!important}.tooltip-inner{background-color:#842a30!important;color:#fff}.tooltip.top .tooltip-arrow:before,.tooltip.top .tooltip-arrow{border-top-color:#842a30}.close-button{position:absolute;right:0em;top:-.2em;float:right;font-size:16px;font-weight:700;color:inherit;text-shadow:0 1px 0 #fff;opacity:.5}.close-button:hover,.close-button:focus{text-decoration:none;cursor:pointer;opacity:.75}\n"] }]
|
|
179
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: Array, decorators: [{
|
|
180
|
+
type: Optional
|
|
181
|
+
}, {
|
|
182
|
+
type: Inject,
|
|
183
|
+
args: [NG_VALIDATORS]
|
|
184
|
+
}] }, { type: Array, decorators: [{
|
|
185
|
+
type: Optional
|
|
186
|
+
}, {
|
|
187
|
+
type: Inject,
|
|
188
|
+
args: [NG_ASYNC_VALIDATORS]
|
|
189
|
+
}] }, { type: i0.Injector }, { type: i1.LocalizationService }]; }, propDecorators: { Password: [{
|
|
190
|
+
type: Input
|
|
191
|
+
}], showWarning: [{
|
|
192
|
+
type: Input
|
|
193
|
+
}], warningTitle: [{
|
|
194
|
+
type: Input
|
|
195
|
+
}], warningClass: [{
|
|
196
|
+
type: Input
|
|
197
|
+
}], value: [{
|
|
198
|
+
type: Input,
|
|
199
|
+
args: ["value"]
|
|
200
|
+
}], suffix_internal: [{
|
|
201
|
+
type: ContentChild,
|
|
202
|
+
args: ["suffix_internal", { static: false }]
|
|
203
|
+
}], prefix_internal: [{
|
|
204
|
+
type: ContentChild,
|
|
205
|
+
args: ["prefix_internal", { static: false }]
|
|
206
|
+
}] } });
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi92YWxpZGF0aW9ucy92YWxpZGF0aW9uLWlucHV0L3ZhbGlkYXRpb24taW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvdmFsaWRhdGlvbi1pbnB1dC92YWxpZGF0aW9uLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQXFDLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4SixPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQUUsUUFBUSxFQUFpQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyTCxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFOUQsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7QUFHM0Q7O0dBRUc7QUFnQkgsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGNBQWM7SUF5RXhEOztPQUVHO0lBQ0gsWUFBb0IsR0FBc0IsRUFBNkMsV0FBdUIsRUFBbUQsZ0JBQTRCLEVBQVUsUUFBa0IsRUFBWSxFQUF1QjtRQUN4UCxLQUFLLEVBQUUsQ0FBQztRQURRLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQTZDLGdC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a0JBZnBDLFNBQVM7K0JBQ0ksV0FBVyxtQkFFSix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNQLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRTt3QkFDN0Q7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUM7NEJBQ3ZELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKLGlCQUNjLGlCQUFpQixDQUFDLElBQUk7MEZBK0UrRCxLQUFLOzBCQUE1RCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OEJBQXNHLEtBQUs7MEJBQXZFLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1CO3FHQXZFdkksUUFBUTtzQkFBdkIsS0FBSztnQkFLVSxXQUFXO3NCQUExQixLQUFLO2dCQUtVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBT1UsWUFBWTtzQkFBM0IsS0FBSztnQkFLaUIsS0FBSztzQkFBM0IsS0FBSzt1QkFBQyxPQUFPO2dCQUtzQyxlQUFlO3NCQUFsRSxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLRSxlQUFlO3NCQUFsRSxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBOR19BU1lOQ19WQUxJREFUT1JTLCBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdDb250cm9sLCBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBmb3J3YXJkUmVmLCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT3B0aW9uYWwsIFNpbXBsZUNoYW5nZXMsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuXHJcbi8vIERpcmV0dGl2ZSwgQ29tcG9uZW50aSwgTGlicmVyaWVcclxuaW1wb3J0IHsgQmFzZVZhbGlkYXRpb24gfSBmcm9tIFwiLi4vYmFzZS12YWxpZGF0aW9uXCI7XHJcbmltcG9ydCB7IEJhc2VWYWxpZGF0aW9uTG9jIH0gZnJvbSAnLi4vYmFzZS12YWxpZGF0aW9uLmxvYyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG4vKipcclxuICogQ29tcG9uZW50ZSBkaSB2YWxpZGFpem9uZSBwZXIgZ2xpIGlucHV0IGEgc2VtcGxpY2UgY2FzZWxsYSBkaSB0ZXN0b1xyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJ2YWwtaW5wdXRcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZhbGlkYXRpb24taW5wdXQuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCB1c2VDbGFzczogQmFzZVZhbGlkYXRpb25Mb2MgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBWYWxpZGF0aW9uSW5wdXRDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIF0sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuLi92YWxpZGF0aW9uLXN0eWxlLnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25JbnB1dENvbXBvbmVudCBleHRlbmRzIEJhc2VWYWxpZGF0aW9uIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIHF1ZXN0byBDb21vcG5lbnRlIGRldmUgcmFwcHJlc2VudGFyZSB1biBvZ2dldHRvIGRpIElucHV0IGRpIHRpcG8gXCJQYXNzd29yZFwiXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBQYXNzd29yZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGRldmUgbW9zdHJhcmUgdW4gaW5kaWNhemlvbmUgZGkgd2FybmluZyBuZWwgc3VmZmlzc29cclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIHNob3dXYXJuaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaXRvbG8gZGVsIFdhcm5pbmcgZGEgaW1wb3N0YXJlIHNlICoqc2hvd1dhcm5pbmcqKiDDqCBpbXBvc3RhdG8gYSAqKnRydWUqKlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgd2FybmluZ1RpdGxlOiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGFzc2UgZGVsIHdhcm5pbmcgZXZlbnR1YWxtZW50ZSBtb2RpZmljYWJpbGUuIFxyXG4gICAgICogXHJcbiAgICAgKiBEZWZhdWx0OiBcImZhIGZhLXdhcm5pbmdcIlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgd2FybmluZ0NsYXNzOiBzdHJpbmcgPSBcImZhIGZhLXdhcm5pbmdcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhbG9yZSBkZWwgbW9kZWxsbyByYXBwcmVzZW50YXRvIGRhIHF1ZXN0byBpbnB1dFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoXCJ2YWx1ZVwiKSBwdWJsaWMgdmFsdWU6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRpZW5lIGxhIHByb2llemlvbmUgZGVsIHN1ZmZpc3NvIHF1YWxvcmEgZm9zc2UgZm9ybml0YVxyXG4gICAgICovXHJcbiAgICBAQ29udGVudENoaWxkKFwic3VmZml4X2ludGVybmFsXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBzdWZmaXhfaW50ZXJuYWw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250aWVuZSBsYSBwcm9pZXppb25lIGRlbCBwcmVmaXNzbyBxdWFsb3JhIGZvc3NlIGZvcm5pdGFcclxuICAgICAqL1xyXG4gICAgQENvbnRlbnRDaGlsZChcInByZWZpeF9pbnRlcm5hbFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgcHJlZml4X2ludGVybmFsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Vic2NyaXB0aW9uIGRlbCB0b29sdGlwIGRhIHJpcHVsaXJlIGFsIGRlc3Ryb3kgZGVsIGNvbXBvbmVudGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB0b29sdGlwU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9sbG8gZXNwb3N0byBvdHRlbnV0byB0cmFtaXRlIGluamVjdG9yXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGFyZW50Q29udHJvbDogRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJZGVudGlmaWNhIHNlIGlsIHRlc3RvIGRpIHVuIGNvbXBvbmVudGUgZGkgdGlwbyBcInBhc3N3b3JkXCIgZGV2J2Vzc2VyZSB2aXN1YWxpenphdG8gbyBtZW5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwYXNzU2hvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRpcG8gZGVsIGNvbXBvbmVudGUsIHB1w7IgZXNzZXJlIFwidGV4dFwiIG8gXCJwYXNzd29yZFwiIGUgdmllbmUgaW1wb3N0YXRvIGF1dG9tYXRpY2FtZW50ZSBkYWxsJ0lucHV0ICoqUGFzc3dvcmQqKlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nID0gXCJ0ZXh0XCI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F6aW9uZSBzZSBpbCBjb21wb25lbnRlIGhhIG8gbWVubyB1biBzdWZmaXNzby4gXHJcbiAgICAgKiBcclxuICAgICAqIFZhbG9yaXp6YXRvIGEgKip0cnVlKiogc29sbyBzZSB2aWVuZSB0cm92YXRhIHVuYSBwcm9pZXppb25lIHN1ICoqc3VmZml4X2ludGVybmFsKiogbyBzZSBsJ0lucHV0ICoqc2hvd1dhcm5pbmcqKiB2aWVuZSBpbXBvc3RhdG8gYSAqKnRydWUqKlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgSGFzU3VmZml4OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F6aW9uZSBzZSBpbCBjb21wb25lbnRlIGhhIG8gbWVubyB1biBwcmVmaXNzby4gXHJcbiAgICAgKiBcclxuICAgICAqIFZhbG9yaXp6YXRvIGEgKip0cnVlKiogc29sbyBzZSB2aWVuZSB0cm92YXRhIHVuYSBwcm9pZXppb25lIHN1ICoqcHJlZml4X2ludGVybmFsKipcclxuICAgICAqL1xyXG4gICAgcHVibGljIEhhc1ByZWZpeDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZSBcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBAT3B0aW9uYWwoKSBASW5qZWN0KE5HX1ZBTElEQVRPUlMpIHByaXZhdGUgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfQVNZTkNfVkFMSURBVE9SUykgcHJpdmF0ZSBfYXN5bmNWYWxpZGF0b3JzOiBBcnJheTxhbnk+LCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciwgcHJvdGVjdGVkIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmUgXHJcbiAgICAgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vY29udHJvbGxvIHNlIMOoIHNldHRhdG8gdW4gcmVxdWlyZWQgcGVyIGRlY2lkZXJlIGluIG1hbmllcmEgY29uZGl6aW9uYWxlIHNlIHV0aWxpenphcmUgaWwgdmFsaWRhdG9yZSByZXF1aXJlZCBuZWwgY29tcG9uZW50ZSBpbnRlcm5vXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRvcnMgJiYgIXRoaXMubm9WYWxpZGF0ZSAmJiB0aGlzLl92YWxpZGF0b3JzLnNvbWUoZWxlbSA9PiBlbGVtIGluc3RhbmNlb2YgUmVxdWlyZWRWYWxpZGF0b3IpKVxyXG4gICAgICAgICAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuUGFzc3dvcmQpXHJcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IFwicGFzc3dvcmRcIjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmUgXHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24pIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZSBcclxuICAgICAqL1xyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMuSGFzU3VmZml4ID0gISF0aGlzLnN1ZmZpeF9pbnRlcm5hbCB8fCB0aGlzLnNob3dXYXJuaW5nO1xyXG4gICAgICAgIHRoaXMuSGFzUHJlZml4ID0gISF0aGlzLnByZWZpeF9pbnRlcm5hbDtcclxuXHJcbiAgICAgICAgdGhpcy5wb3N0QmluZGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgY29uc3QgbmV3U2hvd1dhcm5pbmdzID0gY2hhbmdlc1tcInNob3dXYXJuaW5nXCJdO1xyXG4gICAgICAgIGlmIChuZXdTaG93V2FybmluZ3MpXHJcbiAgICAgICAgICAgIHRoaXMuSGFzU3VmZml4ID0gISF0aGlzLnN1ZmZpeF9pbnRlcm5hbCB8fCB0aGlzLnNob3dXYXJuaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBzaSBvY2N1cGEgZGkgY29sbGVnYXJlIGkgdmFsaWRhdG9yaSBlIGxhIGZ1bnppb25lIGRpIHJlc2V0IGRhbCAqKkNvbnRyb2xWYWx1ZUFjY2Vzc29yKiogcmFwcHJlc2VudGF0byBcclxuICAgICAqIGRhIHF1ZXN0byBjb21wb25lbnRlIGFsICoqQ29udHJvbFZhbHVlQWNjZXNzb3IqKiByYXBwcmVzZW50YXRvIGRhbGwnZWZmZXR0aXZvIGVsZW1lbnRvIGRpIElucHV0IHByZXNlbnRlIGxhdG8gSFRNTFxyXG4gICAgICovXHJcbiAgICBwb3N0QmluZGluZygpIHtcclxuICAgICAgICB0aGlzLkNoZWNrVmFsaWRpdHkoKTtcclxuICAgICAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XHJcbiAgICAgICAgaWYgKG5nQ29udHJvbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBGb3JtQ29udHJvbDtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGxhIHZhcmlhYmlsZSBub3ZhbGlkYXRlIMOoIHRydWUsIGVsaW1pbm8gdHV0dGkgaSB2YWxpZGF0b3JpIGV2ZW50dWFsbWVudGUgaW5zZXJpdGlcclxuICAgICAgICAgICAgaWYgKHRoaXMubm9WYWxpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250cm9sLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5jb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLl9hc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQuY29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuX3ZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBGYWNjaW8gaW4gbW9kbyBjaGUgc2UgY2hpYW1vIGlsIHJlc2V0IGRlbCBjb250cm9sbG8gKG8gZGVsbGEgZm9ybSkgZGFsbCdlc3Rlcm5vIHNpIHJlc2V0dGkgYW5jaGUgaWwgY29udHJvbGxvIG5hdGl2b1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnRnVuYyA9IHRoaXMucGFyZW50Q29udHJvbC5yZXNldDtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250cm9sLnJlc2V0ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgb3JpZ0Z1bmMuYXBwbHkodGhpcy5wYXJlbnRDb250cm9sKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wucmVzZXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZSBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7IH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlIFxyXG4gICAgICovXHJcbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTCdlbWl0IGRlbGxhIG1vZGlmaWNhIGFsIHZhbG9yZSB2aWVuZSBnZXN0aXRvIHN1IHVuIGV2ZW50byBjdXN0b20gKCoqaW5wdXRDaGFuZ2UqKikgY29tZSB3b3JrYXJvdW5kIGFsIG1hbGZ1bnppb25hbWVudG8gZGVsbCcqKm5nTW9kZWxDaGFuZ2UqKiBuYXRpdm9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IHRvRW1pdCB2YWxvcmUgZGEgcHJvcGFnYXJlIGFsbCdlc3Rlcm5vXHJcbiAgICAgKi9cclxuICAgIG9uTW9kZWxDaGFuZ2UodG9FbWl0KSB7XHJcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRvRW1pdCk7XHJcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHRvRW1pdCk7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmUgXHJcbiAgICAgKi9cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlIFxyXG4gICAgICovXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxufSIsIjxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGggbWF0LW5vLWJvcmRlci10b3AgbWF0LWhlaWdodC1maXhlZFwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFB4XCI+XHJcbiAgICA8bWF0LWxhYmVsIFtjbGFzcy5hcHAtbWFyZ2luLWxlZnQtMjVdPVwiSGFzUHJlZml4XCIgKm5nSWY9XCJwbGFjZWhvbGRlclwiPnt7cGxhY2Vob2xkZXJ9fTwvbWF0LWxhYmVsPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkhhc1ByZWZpeFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmVmaXhfaW50ZXJuYWxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxpbnB1dCBtYXRJbnB1dFxyXG4gICAgICAgICAgICNiYXNlSW5wdXQ9J25nTW9kZWwnXHJcbiAgICAgICAgICAgdHlwZT1cInt7dHlwZX19XCJcclxuICAgICAgICAgICB0cmlnZ2Vycz1cIlwiXHJcbiAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcclxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJ7e2F1dG9jb21wbGV0ZX19XCJcclxuICAgICAgICAgICBuYW1lPVwidmFsLWlucHV0XCJcclxuICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB7e2NsYXNzfX1cIlxyXG4gICAgICAgICAgIFtjbGFzcy5hcHAtbWFyZ2luLWxlZnQtMjVdPVwiSGFzUHJlZml4XCJcclxuICAgICAgICAgICBbY2xhc3MubWF0LWlucHV0LXdpdGgtc3VmZml4XT1cIkhhc1N1ZmZpeCB8fCBQYXNzd29yZCB8fCBzaG93V2FybmluZ1wiXHJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgW2NsYXNzLmNoZWNraW5nLWZpZWxkXT1cIiFub1ZhbGlkYXRlICYmICFzaG93V2FybmluZ1wiXHJcbiAgICAgICAgICAgW3Rvb2x0aXBdPVwidG9sVGVtcGxhdGVcIlxyXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWFkb25seSB8fCBkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAoZm9jdXMpPVwiY2hlY2tUb29sdGlwKCk7XCJcclxuICAgICAgICAgICAoYmx1cik9XCJjbG9zZVRvb2x0aXAoKTtcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJIYXNTdWZmaXggfHwgUGFzc3dvcmQgfHwgc2hvd1dhcm5pbmdcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIVBhc3N3b3JkICYmICFzaG93V2FybmluZ1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VmZml4X2ludGVybmFsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1pbnB1dC1zdWZmaXhcIiAqbmdJZj1cIlBhc3N3b3JkIHx8IHNob3dXYXJuaW5nXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJQYXNzd29yZFwiIG1hdFN1ZmZpeD5cclxuICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwicGFzc1Nob3duXCIgY2xhc3M9XCJmYSBmYS1leWUtc2xhc2ggYXBwLWZzLTE2IGFwcC1wb2ludGVyXCIgKGNsaWNrKT1cInR5cGUgPSAncGFzc3dvcmQnOyBwYXNzU2hvd24gPSAhcGFzc1Nob3duOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPjwvYT5cclxuICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiIXBhc3NTaG93blwiIGNsYXNzPVwiZmEgZmEtZXllIGFwcC1mcy0xNiBhcHAtcG9pbnRlclwiIChjbGljayk9XCJ0eXBlID0gJ3RleHQnOyBwYXNzU2hvd24gPSAhcGFzc1Nob3duOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPjwvYT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93V2FybmluZ1wiIG1hdFN1ZmZpeD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIHRpdGxlPVwie3t3YXJuaW5nVGl0bGV9fVwiIGNsYXNzPVwie3t3YXJuaW5nQ2xhc3N9fSB0ZXh0LXdhcm5pbmcgYXBwLWZzLTE2XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdG9sVGVtcGxhdGU+XHJcbiAgICA8ZGl2IChjbGljayk9XCJjbG9zZVRvb2x0aXAoKVwiPlxyXG4gICAgICAgIDxzcGFuPnt7dmFsaWRhdGlvbkZhaWxlZH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|