@esfaenza/forms-and-validations 16.2.31 → 17.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/esfaenza-forms-and-validations.mjs +4 -4
- package/esm2022/lib/forms/base-form-control.mjs +558 -558
- package/esm2022/lib/forms/form-adaptive/form-adaptive.component.loc.mjs +21 -21
- package/esm2022/lib/forms/form-adaptive/form-adaptive.component.mjs +420 -420
- package/esm2022/lib/forms/form-autocomplete/form-autocomplete.component.loc.mjs +20 -20
- package/esm2022/lib/forms/form-autocomplete/form-autocomplete.component.mjs +289 -289
- package/esm2022/lib/forms/form-checkbox/form-checkbox.component.mjs +74 -74
- package/esm2022/lib/forms/form-date/form-date.component.mjs +69 -69
- package/esm2022/lib/forms/form-datetime/form-datetime.component.mjs +67 -67
- package/esm2022/lib/forms/form-empty/form-empty.component.mjs +29 -29
- package/esm2022/lib/forms/form-error/form-error.component.mjs +41 -41
- package/esm2022/lib/forms/form-file/form-file.component.loc.mjs +21 -21
- package/esm2022/lib/forms/form-file/form-file.component.mjs +175 -175
- package/esm2022/lib/forms/form-info/form-info.component.mjs +41 -41
- package/esm2022/lib/forms/form-input/form-input.component.mjs +83 -83
- package/esm2022/lib/forms/form-multiselect/form-multiselect.component.loc.mjs +22 -22
- package/esm2022/lib/forms/form-multiselect/form-multiselect.component.mjs +163 -163
- package/esm2022/lib/forms/form-select/form-select.component.loc.mjs +20 -20
- package/esm2022/lib/forms/form-select/form-select.component.mjs +165 -165
- package/esm2022/lib/forms/form-template/form-template.component.mjs +76 -76
- package/esm2022/lib/forms/form-textarea/form-textarea.component.mjs +57 -57
- package/esm2022/lib/forms/form-time/form-time.component.mjs +115 -115
- package/esm2022/lib/forms-and-validations.module.mjs +199 -199
- package/esm2022/lib/models/AppFile.mjs +13 -13
- package/esm2022/lib/models/ChangeEvent.mjs +6 -6
- package/esm2022/lib/models/FormsAndValidationsModuleConfig.mjs +5 -5
- package/esm2022/lib/models/dayjs-adapter/dayjs-date-adapter.mjs +89 -89
- package/esm2022/lib/tokens.mjs +7 -7
- package/esm2022/lib/validations/base-validation.loc.mjs +22 -22
- package/esm2022/lib/validations/base-validation.mjs +328 -328
- package/esm2022/lib/validations/customValidators/CustomRequiredDirective.mjs +40 -40
- package/esm2022/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs +147 -147
- package/esm2022/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.mjs +240 -240
- package/esm2022/lib/validations/validation-currency/validation-currency.component.mjs +75 -75
- package/esm2022/lib/validations/validation-date/validation-date.component.mjs +183 -183
- package/esm2022/lib/validations/validation-datetime/validation-datetime.component.mjs +212 -212
- package/esm2022/lib/validations/validation-input/validation-input.component.mjs +222 -222
- package/esm2022/lib/validations/validation-select/validation-select.component.mjs +183 -183
- package/esm2022/lib/validations/validation-text-area/validation-text-area.component.mjs +78 -78
- package/esm2022/public-api.mjs +39 -39
- package/fesm2022/esfaenza-forms-and-validations.mjs +4152 -4152
- package/fesm2022/esfaenza-forms-and-validations.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/forms/base-form-control.d.ts +276 -276
- package/lib/forms/form-adaptive/form-adaptive.component.d.ts +126 -126
- package/lib/forms/form-adaptive/form-adaptive.component.loc.d.ts +14 -14
- package/lib/forms/form-autocomplete/form-autocomplete.component.d.ts +84 -84
- package/lib/forms/form-autocomplete/form-autocomplete.component.loc.d.ts +14 -14
- package/lib/forms/form-checkbox/form-checkbox.component.d.ts +23 -23
- package/lib/forms/form-date/form-date.component.d.ts +21 -21
- package/lib/forms/form-datetime/form-datetime.component.d.ts +23 -23
- package/lib/forms/form-empty/form-empty.component.d.ts +15 -15
- package/lib/forms/form-error/form-error.component.d.ts +19 -19
- package/lib/forms/form-file/form-file.component.d.ts +46 -46
- package/lib/forms/form-file/form-file.component.loc.d.ts +14 -14
- package/lib/forms/form-info/form-info.component.d.ts +19 -19
- package/lib/forms/form-input/form-input.component.d.ts +33 -33
- package/lib/forms/form-multiselect/form-multiselect.component.d.ts +67 -67
- package/lib/forms/form-multiselect/form-multiselect.component.loc.d.ts +14 -14
- package/lib/forms/form-select/form-select.component.d.ts +43 -43
- package/lib/forms/form-select/form-select.component.loc.d.ts +14 -14
- package/lib/forms/form-template/form-template.component.d.ts +38 -38
- package/lib/forms/form-textarea/form-textarea.component.d.ts +18 -18
- package/lib/forms/form-time/form-time.component.d.ts +40 -40
- package/lib/forms-and-validations.module.d.ts +47 -47
- package/lib/models/AppFile.d.ts +21 -21
- package/lib/models/ChangeEvent.d.ts +5 -5
- package/lib/models/FormsAndValidationsModuleConfig.d.ts +11 -11
- package/lib/models/dayjs-adapter/dayjs-date-adapter.d.ts +49 -49
- package/lib/tokens.d.ts +7 -7
- package/lib/validations/base-validation.d.ts +219 -219
- package/lib/validations/base-validation.loc.d.ts +14 -14
- package/lib/validations/customValidators/CustomRequiredDirective.d.ts +24 -24
- package/lib/validations/validation-autocomplete/validation-autocomplete.component.d.ts +58 -58
- package/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.d.ts +88 -88
- package/lib/validations/validation-currency/validation-currency.component.d.ts +28 -28
- package/lib/validations/validation-date/validation-date.component.d.ts +79 -79
- package/lib/validations/validation-datetime/validation-datetime.component.d.ts +109 -109
- package/lib/validations/validation-input/validation-input.component.d.ts +134 -134
- package/lib/validations/validation-select/validation-select.component.d.ts +95 -95
- package/lib/validations/validation-text-area/validation-text-area.component.d.ts +28 -28
- package/package.json +13 -13
- package/public-api.d.ts +31 -31
|
@@ -1,212 +1,212 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl } 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/common";
|
|
13
|
-
import * as i4 from "@angular/forms";
|
|
14
|
-
import * as i5 from "@angular/material/legacy-form-field";
|
|
15
|
-
import * as i6 from "@angular/material/legacy-input";
|
|
16
|
-
import * as i7 from "@angular/material/datepicker";
|
|
17
|
-
import * as i8 from "ngx-bootstrap/tooltip";
|
|
18
|
-
import * as i9 from "@angular-material-components/datetime-picker";
|
|
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(cdr);
|
|
28
|
-
this._validators = _validators;
|
|
29
|
-
this._asyncValidators = _asyncValidators;
|
|
30
|
-
this.injector = injector;
|
|
31
|
-
this.lc = lc;
|
|
32
|
-
this.dateExts = dateExts;
|
|
33
|
-
/**
|
|
34
|
-
* Proprietà dell'elemento di selezione dell'orario. Mostra o nasconde gli spinner
|
|
35
|
-
*
|
|
36
|
-
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
37
|
-
*/
|
|
38
|
-
this.showSpinners = true;
|
|
39
|
-
/**
|
|
40
|
-
* Proprietà dell'elemento di selezione dell'orario. Mostra o nasconde i secondi
|
|
41
|
-
*
|
|
42
|
-
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
43
|
-
*/
|
|
44
|
-
this.showSeconds = true;
|
|
45
|
-
/**
|
|
46
|
-
* Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per le ore
|
|
47
|
-
*
|
|
48
|
-
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
49
|
-
*/
|
|
50
|
-
this.stepHour = 1;
|
|
51
|
-
/**
|
|
52
|
-
* Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per i minuti
|
|
53
|
-
*
|
|
54
|
-
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
55
|
-
*/
|
|
56
|
-
this.stepMinute = 1;
|
|
57
|
-
/**
|
|
58
|
-
* Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per i secondi
|
|
59
|
-
*
|
|
60
|
-
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
61
|
-
*/
|
|
62
|
-
this.stepSecond = 1;
|
|
63
|
-
/**
|
|
64
|
-
* Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs
|
|
65
|
-
*/
|
|
66
|
-
this.useJsDates = false;
|
|
67
|
-
/**
|
|
68
|
-
* @ignore
|
|
69
|
-
*/
|
|
70
|
-
this.onTouched = () => { };
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* @ignore
|
|
74
|
-
*/
|
|
75
|
-
ngOnInit() {
|
|
76
|
-
super.ngOnInit();
|
|
77
|
-
this.registerFocusRequest();
|
|
78
|
-
this.checkRequiredness(this._validators);
|
|
79
|
-
this._format = this.lc.token("getSmallDateDisplayFormat");
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* @ignore
|
|
83
|
-
*/
|
|
84
|
-
ngOnDestroy() {
|
|
85
|
-
super.ngOnDestroy();
|
|
86
|
-
this.deregisterFocusRequest();
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* @ignore
|
|
90
|
-
*/
|
|
91
|
-
ngAfterViewInit() {
|
|
92
|
-
this.postBinding();
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato
|
|
96
|
-
* da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML
|
|
97
|
-
*/
|
|
98
|
-
postBinding() {
|
|
99
|
-
this.CheckValidity();
|
|
100
|
-
const ngControl = this.injector.get(NgControl, null);
|
|
101
|
-
if (ngControl) {
|
|
102
|
-
this.parentControl = ngControl.control;
|
|
103
|
-
// Se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti
|
|
104
|
-
if (this.noValidate) {
|
|
105
|
-
this.parentControl.clearValidators();
|
|
106
|
-
this.parentControl.clearAsyncValidators();
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.baseInput.control.setAsyncValidators(this._asyncValidators);
|
|
110
|
-
this.baseInput.control.setValidators(this._validators);
|
|
111
|
-
}
|
|
112
|
-
// Faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo
|
|
113
|
-
const origFunc = this.parentControl.reset;
|
|
114
|
-
this.parentControl.reset = () => {
|
|
115
|
-
origFunc.apply(this.parentControl);
|
|
116
|
-
this.baseInput.control.reset();
|
|
117
|
-
this.tooltip.hide();
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* @ignore
|
|
123
|
-
*/
|
|
124
|
-
writeValue(value) {
|
|
125
|
-
if (!value) {
|
|
126
|
-
this.value = null;
|
|
127
|
-
if (this.baseInput)
|
|
128
|
-
this.baseInput.reset();
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
var date = null;
|
|
132
|
-
if (this.useJsDates) {
|
|
133
|
-
date = this.dateExts.getDateConvertion(value);
|
|
134
|
-
this.propagateChange(date);
|
|
135
|
-
this.inputChange.emit(date);
|
|
136
|
-
}
|
|
137
|
-
else
|
|
138
|
-
date = dayjs(value, this.lc.token("getSmallDateFormat") + " HH:mm:ss");
|
|
139
|
-
this.value = date;
|
|
140
|
-
}
|
|
141
|
-
this.cdr.markForCheck();
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Metodo che si occupa di, eventualmente, aggiustare il valore da propagare ed emetterlo
|
|
145
|
-
*
|
|
146
|
-
* L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo
|
|
147
|
-
*
|
|
148
|
-
* @param {any} toEmit valore da propagare all'esterno
|
|
149
|
-
*/
|
|
150
|
-
outputValue(toEmit) {
|
|
151
|
-
let value = toEmit.value;
|
|
152
|
-
let propagateValue;
|
|
153
|
-
if (!value)
|
|
154
|
-
propagateValue = null;
|
|
155
|
-
else if (!this.useJsDates)
|
|
156
|
-
propagateValue = value.format(this.lc.token("getSmallDateFormat") + " HH:mm:ss");
|
|
157
|
-
else {
|
|
158
|
-
if (value && value.isValid())
|
|
159
|
-
propagateValue = value.toDate();
|
|
160
|
-
else
|
|
161
|
-
propagateValue = null;
|
|
162
|
-
}
|
|
163
|
-
this.propagateChange(propagateValue);
|
|
164
|
-
this.inputChange.emit(propagateValue);
|
|
165
|
-
this.onTouched();
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* @ignore
|
|
169
|
-
*/
|
|
170
|
-
registerOnChange(fn) {
|
|
171
|
-
this.propagateChange = fn;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* @ignore
|
|
175
|
-
*/
|
|
176
|
-
registerOnTouched(fn) {
|
|
177
|
-
this.onTouched = fn;
|
|
178
|
-
}
|
|
179
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
180
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
181
|
-
{ provide: LocalizationService, useClass: BaseValidationLoc },
|
|
182
|
-
{
|
|
183
|
-
provide: NG_VALUE_ACCESSOR,
|
|
184
|
-
useExisting: forwardRef(() => ValidationDateTimeComponent),
|
|
185
|
-
multi: true
|
|
186
|
-
}
|
|
187
|
-
], usesInheritance: true, ngImport: i0, template: "<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n\r\n <input matInput \r\n [ngxMatDatetimePicker]=\"datepicker\" \r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n name=\"val-date\"\r\n id=\"{{id}}\"\r\n (click)=\"onFocus($event)\"\r\n class=\"form-control {{class}}\"\r\n autocomplete=\"{{autocomplete}}\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\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); onFinalize();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip();\"\r\n />\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>{{validationFailedBind}}</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:0;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"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatLegacySuffix, selector: "[matSuffix]" }, { kind: "directive", type: i6.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i8.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i9.NgxMatDatetimepicker, selector: "ngx-mat-datetime-picker", exportAs: ["ngxMatDatetimePicker"] }, { kind: "directive", type: i9.NgxMatDatepickerInput, selector: "input[ngxMatDatetimePicker]", inputs: ["ngxMatDatetimePicker", "min", "max", "matDatepickerFilter"], exportAs: ["ngxMatDatepickerInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
188
|
-
}
|
|
189
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
190
|
-
type: Component,
|
|
191
|
-
args: [{ selector: "val-datetime", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
192
|
-
{ provide: LocalizationService, useClass: BaseValidationLoc },
|
|
193
|
-
{
|
|
194
|
-
provide: NG_VALUE_ACCESSOR,
|
|
195
|
-
useExisting: forwardRef(() => ValidationDateTimeComponent),
|
|
196
|
-
multi: true
|
|
197
|
-
}
|
|
198
|
-
], template: "<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n\r\n <input matInput \r\n [ngxMatDatetimePicker]=\"datepicker\" \r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n name=\"val-date\"\r\n id=\"{{id}}\"\r\n (click)=\"onFocus($event)\"\r\n class=\"form-control {{class}}\"\r\n autocomplete=\"{{autocomplete}}\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\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); onFinalize();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip();\"\r\n />\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>{{validationFailedBind}}</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:0;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"] }]
|
|
199
|
-
}], ctorParameters:
|
|
200
|
-
type: Optional
|
|
201
|
-
}, {
|
|
202
|
-
type: Inject,
|
|
203
|
-
args: [NG_VALIDATORS]
|
|
204
|
-
}] }, { type: Array, decorators: [{
|
|
205
|
-
type: Optional
|
|
206
|
-
}, {
|
|
207
|
-
type: Inject,
|
|
208
|
-
args: [NG_ASYNC_VALIDATORS]
|
|
209
|
-
}] }, { type: i0.Injector }, { type: i1.LocalizationService }, { type: i2.DateService }]
|
|
210
|
-
type: Input
|
|
211
|
-
}] } });
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1kYXRldGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi92YWxpZGF0aW9ucy92YWxpZGF0aW9uLWRhdGV0aW1lL3ZhbGlkYXRpb24tZGF0ZXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvdmFsaWRhdGlvbi1kYXRldGltZS92YWxpZGF0aW9uLWRhdGV0aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQTRDLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0osT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhKLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxrQ0FBa0M7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBOzs7Ozs7Ozs7OztBQVMxRDs7R0FFRztBQWdCSCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsY0FBYztJQXlEM0Q7O09BRUc7SUFDSCxZQUFZLEdBQXNCLEVBQTZDLFdBQXVCLEVBQW1ELGdCQUE0QixFQUFVLFFBQWtCLEVBQVksRUFBdUIsRUFBVSxRQUFxQjtRQUMvUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFEZ0UsZ0JBQVcsR0FBWCxX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LGdCQUFnQixDQUFDLEVBQU87UUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsRUFBTztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQTNMUSwyQkFBMkIsbURBNERvQixhQUFhLDZCQUF1RCxtQkFBbUI7bUdBNUR0SSwyQkFBMkIsNkVBVHpCO1lBQ1AsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO1lBQzdEO2dCQUNJLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUM7Z0JBQzFELEtBQUssRUFBRSxJQUFJO2FBQ2Q7U0FDSixpRENsQ0wsODBEQTRDYzs7NEZEUkQsMkJBQTJCO2tCQWZ2QyxTQUFTOytCQUNJLGNBQWMsaUJBRVQsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUVwQzt3QkFDUCxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUU7d0JBQzdEOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDOzRCQUMxRCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjs7MEJBOERvQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUFvQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjsrSEFML0gsVUFBVTtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFVudHlwZWRGb3JtQ29udHJvbCwgTkdfQVNZTkNfVkFMSURBVE9SUywgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCwgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGZvcndhcmRSZWYsIEluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPcHRpb25hbCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgeyBCYXNlVmFsaWRhdGlvbiB9IGZyb20gXCIuLi9iYXNlLXZhbGlkYXRpb25cIjtcclxuaW1wb3J0IHsgQmFzZVZhbGlkYXRpb25Mb2MgfSBmcm9tIFwiLi4vYmFzZS12YWxpZGF0aW9uLmxvY1wiXHJcbmltcG9ydCB7IERhdGVTZXJ2aWNlIH0gZnJvbSAnQGVzZmFlbnphL2V4dGVuc2lvbnMnO1xyXG5cclxuLyoqXHJcbiAqIERpY2hpYXJhemlvbmUgZGVsbGEgdmFyaWFiaWxlIGdsb2JhbGUgZGF5anMuIEwnb25lcmUgZGkgXCJjcmVhcmxhXCIgw6ggYWZmaWRhdG8gYWxsJ2FwcGxpY2F6aW9uZSBjaGUgdXRpbGl6emEgcXVlc3RhIGxpYnJlcmlhLCBcclxuICogY2hlIGRvdnLDoCBpbXBvcnRhcmUgbG8gc2NyaXB0IGdsb2JhbGUgZGkgZGF5anMgbmVsbGEgQ0xJXHJcbiAqL1xyXG5kZWNsYXJlIHZhciBkYXlqczogYW55O1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgZGkgdmFsaWRhaXpvbmUgcGVyIGdsaSBpbnB1dCBkaSB0aXBvIGRhdGEtb3JhXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcInZhbC1kYXRldGltZVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmFsaWRhdGlvbi1kYXRldGltZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuLi92YWxpZGF0aW9uLXN0eWxlLnNjc3NcIl0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBCYXNlVmFsaWRhdGlvbkxvYyB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFZhbGlkYXRpb25EYXRlVGltZUNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkRhdGVUaW1lQ29tcG9uZW50IGV4dGVuZHMgQmFzZVZhbGlkYXRpb24gaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2F0byBzb2xvIHBlciBzdGFtcGFyZSBpbCBwbGFjZWhvbGRlciBxdWFsb3JhIGwnSW5wdXQgKipwbGFjZWhvbGRlcioqIG5vbiBmb3NzZSB2YWxvcml6emF0b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgX2Zvcm1hdDogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW9kZWxsbyBjb2xsZWdhdG8gYWxsJ2lucHV0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB2YWx1ZTogRGF0ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRyb2xsbyBlc3Bvc3RvIG90dGVudXRvIHRyYW1pdGUgaW5qZWN0b3JcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwYXJlbnRDb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wcmlldMOgIGRlbGwnZWxlbWVudG8gZGkgc2VsZXppb25lIGRlbGwnb3JhcmlvLiBNb3N0cmEgbyBuYXNjb25kZSBnbGkgc3Bpbm5lclxyXG4gICAgICogXHJcbiAgICAgKiBBdHR1YWxlbW50ZSBub24gYmluZGF0YSBlZCB1dGlsaXp6YXRhIHNvbG8gYSBsaXZlbGxvIGRpIGRlZmF1bHQgbWEgbm9uIHNpIHNhIG1haVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvd1NwaW5uZXJzID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ByaWV0w6AgZGVsbCdlbGVtZW50byBkaSBzZWxlemlvbmUgZGVsbCdvcmFyaW8uIE1vc3RyYSBvIG5hc2NvbmRlIGkgc2Vjb25kaVxyXG4gICAgICogXHJcbiAgICAgKiBBdHR1YWxlbW50ZSBub24gYmluZGF0YSBlZCB1dGlsaXp6YXRhIHNvbG8gYSBsaXZlbGxvIGRpIGRlZmF1bHQgbWEgbm9uIHNpIHNhIG1haVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2hvd1NlY29uZHMgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcHJpZXTDoCBkZWxsJ2VsZW1lbnRvIGRpIHNlbGV6aW9uZSBkZWxsJ29yYXJpby4gSW1wb3N0YSBsJ2luY3JlbWVudG8vZGVjcmVtZW50byBtaW5pbW8gcGVyIGxlIG9yZVxyXG4gICAgICogXHJcbiAgICAgKiBBdHR1YWxlbW50ZSBub24gYmluZGF0YSBlZCB1dGlsaXp6YXRhIHNvbG8gYSBsaXZlbGxvIGRpIGRlZmF1bHQgbWEgbm9uIHNpIHNhIG1haVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RlcEhvdXIgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcHJpZXTDoCBkZWxsJ2VsZW1lbnRvIGRpIHNlbGV6aW9uZSBkZWxsJ29yYXJpby4gSW1wb3N0YSBsJ2luY3JlbWVudG8vZGVjcmVtZW50byBtaW5pbW8gcGVyIGkgbWludXRpXHJcbiAgICAgKiBcclxuICAgICAqIEF0dHVhbGVtbnRlIG5vbiBiaW5kYXRhIGVkIHV0aWxpenphdGEgc29sbyBhIGxpdmVsbG8gZGkgZGVmYXVsdCBtYSBub24gc2kgc2EgbWFpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGVwTWludXRlID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ByaWV0w6AgZGVsbCdlbGVtZW50byBkaSBzZWxlemlvbmUgZGVsbCdvcmFyaW8uIEltcG9zdGEgbCdpbmNyZW1lbnRvL2RlY3JlbWVudG8gbWluaW1vIHBlciBpIHNlY29uZGlcclxuICAgICAqIFxyXG4gICAgICogQXR0dWFsZW1udGUgbm9uIGJpbmRhdGEgZWQgdXRpbGl6emF0YSBzb2xvIGEgbGl2ZWxsbyBkaSBkZWZhdWx0IG1hIG5vbiBzaSBzYSBtYWlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0ZXBTZWNvbmQgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXRpbGl6emEgaWwgRGF0ZSBkaSBKYXZhc2NyaXB0IGNvbWUgbW9kZWxsbyBpbiB1c2NpdGEuIElsIG1vZGVsbG8gaW4gZW50cmF0YSB2ZXJyw6AgY29tdW5xdWUgcmljb25kb3R0byBhIHVuIERheUpzXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB1c2VKc0RhdGVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfVkFMSURBVE9SUykgcHJpdmF0ZSBfdmFsaWRhdG9yczogQXJyYXk8YW55PiwgQE9wdGlvbmFsKCkgQEluamVjdChOR19BU1lOQ19WQUxJREFUT1JTKSBwcml2YXRlIF9hc3luY1ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCBwcm90ZWN0ZWQgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsIHByaXZhdGUgZGF0ZUV4dHM6IERhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgc3VwZXIoY2RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9jdXNSZXF1ZXN0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZG5lc3ModGhpcy5fdmFsaWRhdG9ycyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9IHRoaXMubGMudG9rZW4oXCJnZXRTbWFsbERhdGVEaXNwbGF5Rm9ybWF0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBuZ09uRGVzdHJveSgpe1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICAgICAgdGhpcy5kZXJlZ2lzdGVyRm9jdXNSZXF1ZXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLnBvc3RCaW5kaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBjb2xsZWdhcmUgaSB2YWxpZGF0b3JpIGUgbGEgZnVuemlvbmUgZGkgcmVzZXQgZGFsICoqQ29udHJvbFZhbHVlQWNjZXNzb3IqKiByYXBwcmVzZW50YXRvIFxyXG4gICAgICogZGEgcXVlc3RvIGNvbXBvbmVudGUgYWwgKipDb250cm9sVmFsdWVBY2Nlc3NvcioqIHJhcHByZXNlbnRhdG8gZGFsbCdlZmZldHRpdm8gZWxlbWVudG8gZGkgSW5wdXQgcHJlc2VudGUgbGF0byBIVE1MXHJcbiAgICAgKi9cclxuICAgIHBvc3RCaW5kaW5nKCkge1xyXG4gICAgICAgIHRoaXMuQ2hlY2tWYWxpZGl0eSgpO1xyXG4gICAgICAgIGNvbnN0IG5nQ29udHJvbDogTmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgICAgICBpZiAobmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGxhIHZhcmlhYmlsZSBub3ZhbGlkYXRlIMOoIHRydWUsIGVsaW1pbm8gdHV0dGkgaSB2YWxpZGF0b3JpIGV2ZW50dWFsbWVudGUgaW5zZXJpdGlcclxuICAgICAgICAgICAgaWYgKHRoaXMubm9WYWxpZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250cm9sLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5jb250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLl9hc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQuY29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuX3ZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBGYWNjaW8gaW4gbW9kbyBjaGUgc2UgY2hpYW1vIGlsIHJlc2V0IGRlbCBjb250cm9sbG8gKG8gZGVsbGEgZm9ybSkgZGFsbCdlc3Rlcm5vIHNpIHJlc2V0dGkgYW5jaGUgaWwgY29udHJvbGxvIG5hdGl2b1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnRnVuYyA9IHRoaXMucGFyZW50Q29udHJvbC5yZXNldDtcclxuICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250cm9sLnJlc2V0ID0gKCkgPT4geyBcclxuICAgICAgICAgICAgICAgIG9yaWdGdW5jLmFwcGx5KHRoaXMucGFyZW50Q29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5jb250cm9sLnJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmUgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4geyB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZSBcclxuICAgICAqL1xyXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYmFzZUlucHV0KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQucmVzZXQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZUpzRGF0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGRhdGUgPSB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHZhbHVlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoZGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZGF0ZSA9IGRheWpzKHZhbHVlLCB0aGlzLmxjLnRva2VuKFwiZ2V0U21hbGxEYXRlRm9ybWF0XCIpICsgXCIgSEg6bW06c3NcIik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSwgZXZlbnR1YWxtZW50ZSwgYWdnaXVzdGFyZSBpbCB2YWxvcmUgZGEgcHJvcGFnYXJlIGVkIGVtZXR0ZXJsb1xyXG4gICAgICogXHJcbiAgICAgKiBMJ2VtaXQgZGVsbGEgbW9kaWZpY2EgYWwgdmFsb3JlIHZpZW5lIGdlc3RpdG8gc3UgdW4gZXZlbnRvIGN1c3RvbSAoKippbnB1dENoYW5nZSoqKSBjb21lIHdvcmthcm91bmQgYWwgbWFsZnVuemlvbmFtZW50byBkZWxsJyoqbmdNb2RlbENoYW5nZSoqIG5hdGl2b1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdG9FbWl0IHZhbG9yZSBkYSBwcm9wYWdhcmUgYWxsJ2VzdGVybm9cclxuICAgICAqL1xyXG4gICAgb3V0cHV0VmFsdWUodG9FbWl0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0b0VtaXQudmFsdWU7XHJcbiAgICAgICAgbGV0IHByb3BhZ2F0ZVZhbHVlOiBhbnk7XHJcblxyXG4gICAgICAgIGlmICghdmFsdWUpXHJcbiAgICAgICAgICAgIHByb3BhZ2F0ZVZhbHVlID0gbnVsbDtcclxuICAgICAgICBlbHNlIGlmICghdGhpcy51c2VKc0RhdGVzKVxyXG4gICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZSA9IHZhbHVlLmZvcm1hdCh0aGlzLmxjLnRva2VuKFwiZ2V0U21hbGxEYXRlRm9ybWF0XCIpICsgXCIgSEg6bW06c3NcIik7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5pc1ZhbGlkKCkpXHJcbiAgICAgICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZSA9IHZhbHVlLnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHByb3BhZ2F0ZVZhbHVlKTtcclxuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQocHJvcGFnYXRlVmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlIFxyXG4gICAgICovXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZSBcclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcbn0iLCI8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cInt7RmllbGRBcHBlYXJlbmNlfX1cIiBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoIG1hdC1uby1ib3JkZXItdG9wIG1hdC1oZWlnaHQtZml4ZWRcIiBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhQeFwiPlxyXG4gICAgPG1hdC1sYWJlbCAqbmdJZj1cInBsYWNlaG9sZGVyICYmIEZsb2F0aW5nTGFiZWxcIj57e3BsYWNlaG9sZGVyfX08L21hdC1sYWJlbD5cclxuXHJcbiAgICA8aW5wdXQgbWF0SW5wdXQgXHJcbiAgICAgICAgICAgW25neE1hdERhdGV0aW1lUGlja2VyXT1cImRhdGVwaWNrZXJcIiBcclxuICAgICAgICAgICAjYmFzZUlucHV0PVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgI2h0bWxJbnB1dFxyXG4gICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICB0cmlnZ2Vycz1cIlwiXHJcbiAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcclxuICAgICAgICAgICBuYW1lPVwidmFsLWRhdGVcIlxyXG4gICAgICAgICAgIGlkPVwie3tpZH19XCJcclxuICAgICAgICAgICAoY2xpY2spPVwib25Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB7e2NsYXNzfX1cIlxyXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cInt7YXV0b2NvbXBsZXRlfX1cIlxyXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJGbG9hdGluZ0xhYmVsID8gdW5kZWZpbmVkIDogcGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVcIlxyXG4gICAgICAgICAgIFtjbGFzcy5jaGVja2luZy1maWVsZF09XCIhbm9WYWxpZGF0ZVwiXHJcbiAgICAgICAgICAgW3Rvb2x0aXBdPVwidG9sVGVtcGxhdGVcIlxyXG4gICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciA/ICcnIDogX2Zvcm1hdFwiXHJcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cIlJlYWRvbmx5IHx8IGRpc2FibGVkXCJcclxuICAgICAgICAgICBbaXNEaXNhYmxlZF09XCJSZWFkb25seSB8fCBkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwib3V0cHV0VmFsdWUoJGV2ZW50KTsgb25GaW5hbGl6ZSgpO1wiXHJcbiAgICAgICAgICAgKGtleXVwKT1cIigkZXZlbnQua2V5Q29kZSA9PSAxMyB8fCAkZXZlbnQua2V5Q29kZSA9PSAyNykgJiYgb25GaW5hbGl6ZSgpO1wiXHJcbiAgICAgICAgICAgKGJsdXIpPVwiY2xvc2VUb29sdGlwKCk7XCJcclxuICAgICAgICAgICAvPlxyXG5cclxuICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImRhdGVwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuXHJcbiAgPG5neC1tYXQtZGF0ZXRpbWUtcGlja2VyICNkYXRlcGlja2VyIFxyXG4gICAgICAgICAgICBbc2hvd1NwaW5uZXJzXT1cInNob3dTcGlubmVyc1wiIFxyXG4gICAgICAgICAgICBbc2hvd1NlY29uZHNdPVwic2hvd1NlY29uZHNcIiBcclxuICAgICAgICAgICAgW3N0ZXBIb3VyXT1cInN0ZXBIb3VyXCIgXHJcbiAgICAgICAgICAgIFtzdGVwTWludXRlXT1cInN0ZXBNaW51dGVcIiBcclxuICAgICAgICAgICAgW3N0ZXBTZWNvbmRdPVwic3RlcFNlY29uZFwiIFxyXG4gICAgICAgICAgICBbdG91Y2hVaV09XCJmYWxzZVwiIFxyXG4gICAgICAgICAgICBbY29sb3JdPVwiJ3ByaW1hcnknXCI+XHJcbiAgPC9uZ3gtbWF0LWRhdGV0aW1lLXBpY2tlcj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdG9sVGVtcGxhdGU+XHJcbiAgICA8ZGl2IChjbGljayk9XCJjbG9zZVRvb2x0aXAoKVwiPlxyXG4gICAgICAgIDxzcGFuPnt7dmFsaWRhdGlvbkZhaWxlZEJpbmR9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
1
|
+
// Angular
|
|
2
|
+
import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl } 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/common";
|
|
13
|
+
import * as i4 from "@angular/forms";
|
|
14
|
+
import * as i5 from "@angular/material/legacy-form-field";
|
|
15
|
+
import * as i6 from "@angular/material/legacy-input";
|
|
16
|
+
import * as i7 from "@angular/material/datepicker";
|
|
17
|
+
import * as i8 from "ngx-bootstrap/tooltip";
|
|
18
|
+
import * as i9 from "@angular-material-components/datetime-picker";
|
|
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(cdr);
|
|
28
|
+
this._validators = _validators;
|
|
29
|
+
this._asyncValidators = _asyncValidators;
|
|
30
|
+
this.injector = injector;
|
|
31
|
+
this.lc = lc;
|
|
32
|
+
this.dateExts = dateExts;
|
|
33
|
+
/**
|
|
34
|
+
* Proprietà dell'elemento di selezione dell'orario. Mostra o nasconde gli spinner
|
|
35
|
+
*
|
|
36
|
+
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
37
|
+
*/
|
|
38
|
+
this.showSpinners = true;
|
|
39
|
+
/**
|
|
40
|
+
* Proprietà dell'elemento di selezione dell'orario. Mostra o nasconde i secondi
|
|
41
|
+
*
|
|
42
|
+
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
43
|
+
*/
|
|
44
|
+
this.showSeconds = true;
|
|
45
|
+
/**
|
|
46
|
+
* Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per le ore
|
|
47
|
+
*
|
|
48
|
+
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
49
|
+
*/
|
|
50
|
+
this.stepHour = 1;
|
|
51
|
+
/**
|
|
52
|
+
* Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per i minuti
|
|
53
|
+
*
|
|
54
|
+
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
55
|
+
*/
|
|
56
|
+
this.stepMinute = 1;
|
|
57
|
+
/**
|
|
58
|
+
* Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per i secondi
|
|
59
|
+
*
|
|
60
|
+
* Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai
|
|
61
|
+
*/
|
|
62
|
+
this.stepSecond = 1;
|
|
63
|
+
/**
|
|
64
|
+
* Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs
|
|
65
|
+
*/
|
|
66
|
+
this.useJsDates = false;
|
|
67
|
+
/**
|
|
68
|
+
* @ignore
|
|
69
|
+
*/
|
|
70
|
+
this.onTouched = () => { };
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* @ignore
|
|
74
|
+
*/
|
|
75
|
+
ngOnInit() {
|
|
76
|
+
super.ngOnInit();
|
|
77
|
+
this.registerFocusRequest();
|
|
78
|
+
this.checkRequiredness(this._validators);
|
|
79
|
+
this._format = this.lc.token("getSmallDateDisplayFormat");
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* @ignore
|
|
83
|
+
*/
|
|
84
|
+
ngOnDestroy() {
|
|
85
|
+
super.ngOnDestroy();
|
|
86
|
+
this.deregisterFocusRequest();
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* @ignore
|
|
90
|
+
*/
|
|
91
|
+
ngAfterViewInit() {
|
|
92
|
+
this.postBinding();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato
|
|
96
|
+
* da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML
|
|
97
|
+
*/
|
|
98
|
+
postBinding() {
|
|
99
|
+
this.CheckValidity();
|
|
100
|
+
const ngControl = this.injector.get(NgControl, null);
|
|
101
|
+
if (ngControl) {
|
|
102
|
+
this.parentControl = ngControl.control;
|
|
103
|
+
// Se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti
|
|
104
|
+
if (this.noValidate) {
|
|
105
|
+
this.parentControl.clearValidators();
|
|
106
|
+
this.parentControl.clearAsyncValidators();
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.baseInput.control.setAsyncValidators(this._asyncValidators);
|
|
110
|
+
this.baseInput.control.setValidators(this._validators);
|
|
111
|
+
}
|
|
112
|
+
// Faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo
|
|
113
|
+
const origFunc = this.parentControl.reset;
|
|
114
|
+
this.parentControl.reset = () => {
|
|
115
|
+
origFunc.apply(this.parentControl);
|
|
116
|
+
this.baseInput.control.reset();
|
|
117
|
+
this.tooltip.hide();
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* @ignore
|
|
123
|
+
*/
|
|
124
|
+
writeValue(value) {
|
|
125
|
+
if (!value) {
|
|
126
|
+
this.value = null;
|
|
127
|
+
if (this.baseInput)
|
|
128
|
+
this.baseInput.reset();
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
var date = null;
|
|
132
|
+
if (this.useJsDates) {
|
|
133
|
+
date = this.dateExts.getDateConvertion(value);
|
|
134
|
+
this.propagateChange(date);
|
|
135
|
+
this.inputChange.emit(date);
|
|
136
|
+
}
|
|
137
|
+
else
|
|
138
|
+
date = dayjs(value, this.lc.token("getSmallDateFormat") + " HH:mm:ss");
|
|
139
|
+
this.value = date;
|
|
140
|
+
}
|
|
141
|
+
this.cdr.markForCheck();
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Metodo che si occupa di, eventualmente, aggiustare il valore da propagare ed emetterlo
|
|
145
|
+
*
|
|
146
|
+
* L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo
|
|
147
|
+
*
|
|
148
|
+
* @param {any} toEmit valore da propagare all'esterno
|
|
149
|
+
*/
|
|
150
|
+
outputValue(toEmit) {
|
|
151
|
+
let value = toEmit.value;
|
|
152
|
+
let propagateValue;
|
|
153
|
+
if (!value)
|
|
154
|
+
propagateValue = null;
|
|
155
|
+
else if (!this.useJsDates)
|
|
156
|
+
propagateValue = value.format(this.lc.token("getSmallDateFormat") + " HH:mm:ss");
|
|
157
|
+
else {
|
|
158
|
+
if (value && value.isValid())
|
|
159
|
+
propagateValue = value.toDate();
|
|
160
|
+
else
|
|
161
|
+
propagateValue = null;
|
|
162
|
+
}
|
|
163
|
+
this.propagateChange(propagateValue);
|
|
164
|
+
this.inputChange.emit(propagateValue);
|
|
165
|
+
this.onTouched();
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* @ignore
|
|
169
|
+
*/
|
|
170
|
+
registerOnChange(fn) {
|
|
171
|
+
this.propagateChange = fn;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* @ignore
|
|
175
|
+
*/
|
|
176
|
+
registerOnTouched(fn) {
|
|
177
|
+
this.onTouched = fn;
|
|
178
|
+
}
|
|
179
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", 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 }); }
|
|
180
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ValidationDateTimeComponent, selector: "val-datetime", inputs: { useJsDates: "useJsDates" }, providers: [
|
|
181
|
+
{ provide: LocalizationService, useClass: BaseValidationLoc },
|
|
182
|
+
{
|
|
183
|
+
provide: NG_VALUE_ACCESSOR,
|
|
184
|
+
useExisting: forwardRef(() => ValidationDateTimeComponent),
|
|
185
|
+
multi: true
|
|
186
|
+
}
|
|
187
|
+
], usesInheritance: true, ngImport: i0, template: "<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n\r\n <input matInput \r\n [ngxMatDatetimePicker]=\"datepicker\" \r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n name=\"val-date\"\r\n id=\"{{id}}\"\r\n (click)=\"onFocus($event)\"\r\n class=\"form-control {{class}}\"\r\n autocomplete=\"{{autocomplete}}\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\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); onFinalize();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip();\"\r\n />\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>{{validationFailedBind}}</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:0;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"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatLegacySuffix, selector: "[matSuffix]" }, { kind: "directive", type: i6.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i7.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i8.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: i9.NgxMatDatetimepicker, selector: "ngx-mat-datetime-picker", exportAs: ["ngxMatDatetimePicker"] }, { kind: "directive", type: i9.NgxMatDatepickerInput, selector: "input[ngxMatDatetimePicker]", inputs: ["ngxMatDatetimePicker", "min", "max", "matDatepickerFilter"], exportAs: ["ngxMatDatepickerInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
188
|
+
}
|
|
189
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValidationDateTimeComponent, decorators: [{
|
|
190
|
+
type: Component,
|
|
191
|
+
args: [{ selector: "val-datetime", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
192
|
+
{ provide: LocalizationService, useClass: BaseValidationLoc },
|
|
193
|
+
{
|
|
194
|
+
provide: NG_VALUE_ACCESSOR,
|
|
195
|
+
useExisting: forwardRef(() => ValidationDateTimeComponent),
|
|
196
|
+
multi: true
|
|
197
|
+
}
|
|
198
|
+
], template: "<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n\r\n <input matInput \r\n [ngxMatDatetimePicker]=\"datepicker\" \r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n name=\"val-date\"\r\n id=\"{{id}}\"\r\n (click)=\"onFocus($event)\"\r\n class=\"form-control {{class}}\"\r\n autocomplete=\"{{autocomplete}}\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\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); onFinalize();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip();\"\r\n />\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>{{validationFailedBind}}</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:0;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"] }]
|
|
199
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: Array, decorators: [{
|
|
200
|
+
type: Optional
|
|
201
|
+
}, {
|
|
202
|
+
type: Inject,
|
|
203
|
+
args: [NG_VALIDATORS]
|
|
204
|
+
}] }, { type: Array, decorators: [{
|
|
205
|
+
type: Optional
|
|
206
|
+
}, {
|
|
207
|
+
type: Inject,
|
|
208
|
+
args: [NG_ASYNC_VALIDATORS]
|
|
209
|
+
}] }, { type: i0.Injector }, { type: i1.LocalizationService }, { type: i2.DateService }], propDecorators: { useJsDates: [{
|
|
210
|
+
type: Input
|
|
211
|
+
}] } });
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1kYXRldGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi92YWxpZGF0aW9ucy92YWxpZGF0aW9uLWRhdGV0aW1lL3ZhbGlkYXRpb24tZGF0ZXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvdmFsaWRhdGlvbi1kYXRldGltZS92YWxpZGF0aW9uLWRhdGV0aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQTRDLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0osT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhKLGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxrQ0FBa0M7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFBOzs7Ozs7Ozs7OztBQVMxRDs7R0FFRztBQWdCSCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsY0FBYztJQXlEM0Q7O09BRUc7SUFDSCxZQUFZLEdBQXNCLEVBQTZDLFdBQXVCLEVBQW1ELGdCQUE0QixFQUFVLFFBQWtCLEVBQVksRUFBdUIsRUFBVSxRQUFxQjtRQUMvUSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFEZ0UsZ0JBQVcsR0FBWCxX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QWMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0EzTFEsMkJBQTJCLG1EQTREb0IsYUFBYSw2QkFBdUQsbUJBQW1CO21HQTVEdEksMkJBQTJCLDZFQVR6QjtZQUNQLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRTtZQUM3RDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO2dCQUMxRCxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osaURDbENMLDgwREE0Q2M7OzRGRFJELDJCQUEyQjtrQkFmdkMsU0FBUzsrQkFDSSxjQUFjLGlCQUVULGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFFcEM7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO3dCQUM3RDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQzs0QkFDMUQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0o7OzBCQThEb0MsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFBb0MsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7NEhBTC9ILFVBQVU7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2wsIE5HX0FTWU5DX1ZBTElEQVRPUlMsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ0NvbnRyb2wsIFJlcXVpcmVkVmFsaWRhdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT3B0aW9uYWwsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuXHJcbi8vIERpcmV0dGl2ZSwgQ29tcG9uZW50aSwgTGlicmVyaWVcclxuaW1wb3J0IHsgQmFzZVZhbGlkYXRpb24gfSBmcm9tIFwiLi4vYmFzZS12YWxpZGF0aW9uXCI7XHJcbmltcG9ydCB7IEJhc2VWYWxpZGF0aW9uTG9jIH0gZnJvbSBcIi4uL2Jhc2UtdmFsaWRhdGlvbi5sb2NcIlxyXG5pbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gJ0Blc2ZhZW56YS9leHRlbnNpb25zJztcclxuXHJcbi8qKlxyXG4gKiBEaWNoaWFyYXppb25lIGRlbGxhIHZhcmlhYmlsZSBnbG9iYWxlIGRheWpzLiBMJ29uZXJlIGRpIFwiY3JlYXJsYVwiIMOoIGFmZmlkYXRvIGFsbCdhcHBsaWNhemlvbmUgY2hlIHV0aWxpenphIHF1ZXN0YSBsaWJyZXJpYSwgXHJcbiAqIGNoZSBkb3Zyw6AgaW1wb3J0YXJlIGxvIHNjcmlwdCBnbG9iYWxlIGRpIGRheWpzIG5lbGxhIENMSVxyXG4gKi9cclxuZGVjbGFyZSB2YXIgZGF5anM6IGFueTtcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGRpIHZhbGlkYWl6b25lIHBlciBnbGkgaW5wdXQgZGkgdGlwbyBkYXRhLW9yYVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJ2YWwtZGF0ZXRpbWVcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcInZhbGlkYXRpb24tZGF0ZXRpbWUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0eWxlVXJsczogW1wiLi4vdmFsaWRhdGlvbi1zdHlsZS5zY3NzXCJdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCB1c2VDbGFzczogQmFzZVZhbGlkYXRpb25Mb2MgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBWYWxpZGF0aW9uRGF0ZVRpbWVDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25EYXRlVGltZUNvbXBvbmVudCBleHRlbmRzIEJhc2VWYWxpZGF0aW9uIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNhdG8gc29sbyBwZXIgc3RhbXBhcmUgaWwgcGxhY2Vob2xkZXIgcXVhbG9yYSBsJ0lucHV0ICoqcGxhY2Vob2xkZXIqKiBub24gZm9zc2UgdmFsb3JpenphdG9cclxuICAgICAqL1xyXG4gICAgcHVibGljIF9mb3JtYXQ6IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vZGVsbG8gY29sbGVnYXRvIGFsbCdpbnB1dFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdmFsdWU6IERhdGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250cm9sbG8gZXNwb3N0byBvdHRlbnV0byB0cmFtaXRlIGluamVjdG9yXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGFyZW50Q29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJvcHJpZXTDoCBkZWxsJ2VsZW1lbnRvIGRpIHNlbGV6aW9uZSBkZWxsJ29yYXJpby4gTW9zdHJhIG8gbmFzY29uZGUgZ2xpIHNwaW5uZXJcclxuICAgICAqIFxyXG4gICAgICogQXR0dWFsZW1udGUgbm9uIGJpbmRhdGEgZWQgdXRpbGl6emF0YSBzb2xvIGEgbGl2ZWxsbyBkaSBkZWZhdWx0IG1hIG5vbiBzaSBzYSBtYWlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dTcGlubmVycyA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wcmlldMOgIGRlbGwnZWxlbWVudG8gZGkgc2VsZXppb25lIGRlbGwnb3JhcmlvLiBNb3N0cmEgbyBuYXNjb25kZSBpIHNlY29uZGlcclxuICAgICAqIFxyXG4gICAgICogQXR0dWFsZW1udGUgbm9uIGJpbmRhdGEgZWQgdXRpbGl6emF0YSBzb2xvIGEgbGl2ZWxsbyBkaSBkZWZhdWx0IG1hIG5vbiBzaSBzYSBtYWlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3dTZWNvbmRzID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ByaWV0w6AgZGVsbCdlbGVtZW50byBkaSBzZWxlemlvbmUgZGVsbCdvcmFyaW8uIEltcG9zdGEgbCdpbmNyZW1lbnRvL2RlY3JlbWVudG8gbWluaW1vIHBlciBsZSBvcmVcclxuICAgICAqIFxyXG4gICAgICogQXR0dWFsZW1udGUgbm9uIGJpbmRhdGEgZWQgdXRpbGl6emF0YSBzb2xvIGEgbGl2ZWxsbyBkaSBkZWZhdWx0IG1hIG5vbiBzaSBzYSBtYWlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0ZXBIb3VyID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ByaWV0w6AgZGVsbCdlbGVtZW50byBkaSBzZWxlemlvbmUgZGVsbCdvcmFyaW8uIEltcG9zdGEgbCdpbmNyZW1lbnRvL2RlY3JlbWVudG8gbWluaW1vIHBlciBpIG1pbnV0aVxyXG4gICAgICogXHJcbiAgICAgKiBBdHR1YWxlbW50ZSBub24gYmluZGF0YSBlZCB1dGlsaXp6YXRhIHNvbG8gYSBsaXZlbGxvIGRpIGRlZmF1bHQgbWEgbm9uIHNpIHNhIG1haVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RlcE1pbnV0ZSA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wcmlldMOgIGRlbGwnZWxlbWVudG8gZGkgc2VsZXppb25lIGRlbGwnb3JhcmlvLiBJbXBvc3RhIGwnaW5jcmVtZW50by9kZWNyZW1lbnRvIG1pbmltbyBwZXIgaSBzZWNvbmRpXHJcbiAgICAgKiBcclxuICAgICAqIEF0dHVhbGVtbnRlIG5vbiBiaW5kYXRhIGVkIHV0aWxpenphdGEgc29sbyBhIGxpdmVsbG8gZGkgZGVmYXVsdCBtYSBub24gc2kgc2EgbWFpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGVwU2Vjb25kID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFV0aWxpenphIGlsIERhdGUgZGkgSmF2YXNjcmlwdCBjb21lIG1vZGVsbG8gaW4gdXNjaXRhLiBJbCBtb2RlbGxvIGluIGVudHJhdGEgdmVycsOgIGNvbXVucXVlIHJpY29uZG90dG8gYSB1biBEYXlKc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgdXNlSnNEYXRlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihjZHI6IENoYW5nZURldGVjdG9yUmVmLCBAT3B0aW9uYWwoKSBASW5qZWN0KE5HX1ZBTElEQVRPUlMpIHByaXZhdGUgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfQVNZTkNfVkFMSURBVE9SUykgcHJpdmF0ZSBfYXN5bmNWYWxpZGF0b3JzOiBBcnJheTxhbnk+LCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciwgcHJvdGVjdGVkIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBwcml2YXRlIGRhdGVFeHRzOiBEYXRlU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKGNkcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvY3VzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRuZXNzKHRoaXMuX3ZhbGlkYXRvcnMpO1xyXG5cclxuICAgICAgICB0aGlzLl9mb3JtYXQgPSB0aGlzLmxjLnRva2VuKFwiZ2V0U21hbGxEYXRlRGlzcGxheUZvcm1hdFwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgbmdPbkRlc3Ryb3koKXtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMuZGVyZWdpc3RlckZvY3VzUmVxdWVzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZVxyXG4gICAgICovXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5wb3N0QmluZGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBzaSBvY2N1cGEgZGkgY29sbGVnYXJlIGkgdmFsaWRhdG9yaSBlIGxhIGZ1bnppb25lIGRpIHJlc2V0IGRhbCAqKkNvbnRyb2xWYWx1ZUFjY2Vzc29yKiogcmFwcHJlc2VudGF0byBcclxuICAgICAqIGRhIHF1ZXN0byBjb21wb25lbnRlIGFsICoqQ29udHJvbFZhbHVlQWNjZXNzb3IqKiByYXBwcmVzZW50YXRvIGRhbGwnZWZmZXR0aXZvIGVsZW1lbnRvIGRpIElucHV0IHByZXNlbnRlIGxhdG8gSFRNTFxyXG4gICAgICovXHJcbiAgICBwb3N0QmluZGluZygpIHtcclxuICAgICAgICB0aGlzLkNoZWNrVmFsaWRpdHkoKTtcclxuICAgICAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XHJcbiAgICAgICAgaWYgKG5nQ29udHJvbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBsYSB2YXJpYWJpbGUgbm92YWxpZGF0ZSDDqCB0cnVlLCBlbGltaW5vIHR1dHRpIGkgdmFsaWRhdG9yaSBldmVudHVhbG1lbnRlIGluc2VyaXRpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm5vVmFsaWRhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbC5jbGVhckFzeW5jVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQuY29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy5fYXN5bmNWYWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gRmFjY2lvIGluIG1vZG8gY2hlIHNlIGNoaWFtbyBpbCByZXNldCBkZWwgY29udHJvbGxvIChvIGRlbGxhIGZvcm0pIGRhbGwnZXN0ZXJubyBzaSByZXNldHRpIGFuY2hlIGlsIGNvbnRyb2xsbyBuYXRpdm9cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ0Z1bmMgPSB0aGlzLnBhcmVudENvbnRyb2wucmVzZXQ7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbC5yZXNldCA9ICgpID0+IHsgXHJcbiAgICAgICAgICAgICAgICBvcmlnRnVuYy5hcHBseSh0aGlzLnBhcmVudENvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYXNlSW5wdXQuY29udHJvbC5yZXNldCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwLmhpZGUoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlIFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmUgXHJcbiAgICAgKi9cclxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJhc2VJbnB1dClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LnJlc2V0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGRhdGUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGhpcy51c2VKc0RhdGVzKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlID0gdGhpcy5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbih2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KGRhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGRhdGUgPSBkYXlqcyh2YWx1ZSwgdGhpcy5sYy50b2tlbihcImdldFNtYWxsRGF0ZUZvcm1hdFwiKSArIFwiIEhIOm1tOnNzXCIpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBzaSBvY2N1cGEgZGksIGV2ZW50dWFsbWVudGUsIGFnZ2l1c3RhcmUgaWwgdmFsb3JlIGRhIHByb3BhZ2FyZSBlZCBlbWV0dGVybG9cclxuICAgICAqIFxyXG4gICAgICogTCdlbWl0IGRlbGxhIG1vZGlmaWNhIGFsIHZhbG9yZSB2aWVuZSBnZXN0aXRvIHN1IHVuIGV2ZW50byBjdXN0b20gKCoqaW5wdXRDaGFuZ2UqKikgY29tZSB3b3JrYXJvdW5kIGFsIG1hbGZ1bnppb25hbWVudG8gZGVsbCcqKm5nTW9kZWxDaGFuZ2UqKiBuYXRpdm9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IHRvRW1pdCB2YWxvcmUgZGEgcHJvcGFnYXJlIGFsbCdlc3Rlcm5vXHJcbiAgICAgKi9cclxuICAgIG91dHB1dFZhbHVlKHRvRW1pdDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdG9FbWl0LnZhbHVlO1xyXG4gICAgICAgIGxldCBwcm9wYWdhdGVWYWx1ZTogYW55O1xyXG5cclxuICAgICAgICBpZiAoIXZhbHVlKVxyXG4gICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgZWxzZSBpZiAoIXRoaXMudXNlSnNEYXRlcylcclxuICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWUgPSB2YWx1ZS5mb3JtYXQodGhpcy5sYy50b2tlbihcImdldFNtYWxsRGF0ZUZvcm1hdFwiKSArIFwiIEhIOm1tOnNzXCIpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaXNWYWxpZCgpKVxyXG4gICAgICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWUgPSB2YWx1ZS50b0RhdGUoKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcHJvcGFnYXRlVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShwcm9wYWdhdGVWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHByb3BhZ2F0ZVZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGlnbm9yZSBcclxuICAgICAqL1xyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmUgXHJcbiAgICAgKi9cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG59IiwiPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJ7e0ZpZWxkQXBwZWFyZW5jZX19XCIgY2xhc3M9XCJtYXQtZnVsbC13aWR0aCBtYXQtbm8tYm9yZGVyLXRvcCBtYXQtaGVpZ2h0LWZpeGVkXCIgW3N0eWxlLndpZHRoLnB4XT1cIndpZHRoUHhcIj5cclxuICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJwbGFjZWhvbGRlciAmJiBGbG9hdGluZ0xhYmVsXCI+e3twbGFjZWhvbGRlcn19PC9tYXQtbGFiZWw+XHJcblxyXG4gICAgPGlucHV0IG1hdElucHV0IFxyXG4gICAgICAgICAgIFtuZ3hNYXREYXRldGltZVBpY2tlcl09XCJkYXRlcGlja2VyXCIgXHJcbiAgICAgICAgICAgI2Jhc2VJbnB1dD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICNodG1sSW5wdXRcclxuICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgdHJpZ2dlcnM9XCJcIlxyXG4gICAgICAgICAgIHBsYWNlbWVudD1cInRvcFwiXHJcbiAgICAgICAgICAgbmFtZT1cInZhbC1kYXRlXCJcclxuICAgICAgICAgICBpZD1cInt7aWR9fVwiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wge3tjbGFzc319XCJcclxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJ7e2F1dG9jb21wbGV0ZX19XCJcclxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiRmxvYXRpbmdMYWJlbCA/IHVuZGVmaW5lZCA6IHBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgICAgICAgICBbY2xhc3MuY2hlY2tpbmctZmllbGRdPVwiIW5vVmFsaWRhdGVcIlxyXG4gICAgICAgICAgIFt0b29sdGlwXT1cInRvbFRlbXBsYXRlXCJcclxuICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgPyAnJyA6IF9mb3JtYXRcIlxyXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJSZWFkb25seSB8fCBkaXNhYmxlZFwiXHJcbiAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiUmVhZG9ubHkgfHwgZGlzYWJsZWRcIlxyXG4gICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm91dHB1dFZhbHVlKCRldmVudCk7IG9uRmluYWxpemUoKTtcIlxyXG4gICAgICAgICAgIChrZXl1cCk9XCIoJGV2ZW50LmtleUNvZGUgPT0gMTMgfHwgJGV2ZW50LmtleUNvZGUgPT0gMjcpICYmIG9uRmluYWxpemUoKTtcIlxyXG4gICAgICAgICAgIChibHVyKT1cImNsb3NlVG9vbHRpcCgpO1wiXHJcbiAgICAgICAgICAgLz5cclxuXHJcbiAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJkYXRlcGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcblxyXG4gIDxuZ3gtbWF0LWRhdGV0aW1lLXBpY2tlciAjZGF0ZXBpY2tlciBcclxuICAgICAgICAgICAgW3Nob3dTcGlubmVyc109XCJzaG93U3Bpbm5lcnNcIiBcclxuICAgICAgICAgICAgW3Nob3dTZWNvbmRzXT1cInNob3dTZWNvbmRzXCIgXHJcbiAgICAgICAgICAgIFtzdGVwSG91cl09XCJzdGVwSG91clwiIFxyXG4gICAgICAgICAgICBbc3RlcE1pbnV0ZV09XCJzdGVwTWludXRlXCIgXHJcbiAgICAgICAgICAgIFtzdGVwU2Vjb25kXT1cInN0ZXBTZWNvbmRcIiBcclxuICAgICAgICAgICAgW3RvdWNoVWldPVwiZmFsc2VcIiBcclxuICAgICAgICAgICAgW2NvbG9yXT1cIidwcmltYXJ5J1wiPlxyXG4gIDwvbmd4LW1hdC1kYXRldGltZS1waWNrZXI+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG48bmctdGVtcGxhdGUgI3RvbFRlbXBsYXRlPlxyXG4gICAgPGRpdiAoY2xpY2spPVwiY2xvc2VUb29sdGlwKClcIj5cclxuICAgICAgICA8c3Bhbj57e3ZhbGlkYXRpb25GYWlsZWRCaW5kfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|