@esfaenza/forms-and-validations 15.2.58 → 16.2.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/{esm2020 → esm2022}/lib/forms/base-form-control.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-adaptive/form-adaptive.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-adaptive/form-adaptive.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-autocomplete/form-autocomplete.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-autocomplete/form-autocomplete.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-checkbox/form-checkbox.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-date/form-date.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-datetime/form-datetime.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-empty/form-empty.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-error/form-error.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-file/form-file.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-file/form-file.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-info/form-info.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-input/form-input.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-multiselect/form-multiselect.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-multiselect/form-multiselect.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-select/form-select.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-select/form-select.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-template/form-template.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-textarea/form-textarea.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-time/form-time.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-and-validations.module.mjs +64 -64
- package/{esm2020 → esm2022}/lib/models/dayjs-adapter/dayjs-date-adapter.mjs +4 -4
- package/{esm2020 → esm2022}/lib/validations/base-validation.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/validations/base-validation.mjs +4 -4
- package/{esm2020 → esm2022}/lib/validations/customValidators/CustomRequiredDirective.mjs +4 -4
- package/esm2022/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs +147 -0
- package/esm2022/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.mjs +240 -0
- package/esm2022/lib/validations/validation-currency/validation-currency.component.mjs +75 -0
- package/esm2022/lib/validations/validation-date/validation-date.component.mjs +183 -0
- package/esm2022/lib/validations/validation-datetime/validation-datetime.component.mjs +212 -0
- package/esm2022/lib/validations/validation-input/validation-input.component.mjs +218 -0
- package/esm2022/lib/validations/validation-select/validation-select.component.mjs +183 -0
- package/esm2022/lib/validations/validation-text-area/validation-text-area.component.mjs +78 -0
- package/{fesm2020 → fesm2022}/esfaenza-forms-and-validations.mjs +218 -218
- package/{fesm2020 → fesm2022}/esfaenza-forms-and-validations.mjs.map +1 -1
- package/lib/forms/base-form-control.d.ts +1 -1
- package/lib/forms/form-adaptive/form-adaptive.component.d.ts +1 -1
- package/lib/forms/form-autocomplete/form-autocomplete.component.d.ts +1 -1
- package/lib/forms/form-checkbox/form-checkbox.component.d.ts +1 -1
- package/lib/forms/form-date/form-date.component.d.ts +1 -1
- package/lib/forms/form-datetime/form-datetime.component.d.ts +1 -1
- package/lib/forms/form-empty/form-empty.component.d.ts +1 -1
- package/lib/forms/form-error/form-error.component.d.ts +1 -1
- package/lib/forms/form-file/form-file.component.d.ts +1 -1
- package/lib/forms/form-info/form-info.component.d.ts +1 -1
- package/lib/forms/form-input/form-input.component.d.ts +1 -1
- package/lib/forms/form-multiselect/form-multiselect.component.d.ts +1 -1
- package/lib/forms/form-select/form-select.component.d.ts +1 -1
- package/lib/forms/form-template/form-template.component.d.ts +1 -1
- package/lib/forms/form-textarea/form-textarea.component.d.ts +1 -1
- package/lib/forms/form-time/form-time.component.d.ts +1 -1
- package/lib/validations/base-validation.d.ts +1 -1
- package/lib/validations/customValidators/CustomRequiredDirective.d.ts +1 -1
- package/lib/validations/validation-autocomplete/validation-autocomplete.component.d.ts +1 -1
- package/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.d.ts +1 -1
- package/lib/validations/validation-currency/validation-currency.component.d.ts +1 -1
- package/lib/validations/validation-date/validation-date.component.d.ts +1 -1
- package/lib/validations/validation-datetime/validation-datetime.component.d.ts +1 -1
- package/lib/validations/validation-input/validation-input.component.d.ts +1 -1
- package/lib/validations/validation-select/validation-select.component.d.ts +1 -1
- package/lib/validations/validation-text-area/validation-text-area.component.d.ts +1 -1
- package/package.json +20 -26
- package/esm2020/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs +0 -147
- package/esm2020/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.mjs +0 -240
- package/esm2020/lib/validations/validation-currency/validation-currency.component.mjs +0 -75
- package/esm2020/lib/validations/validation-date/validation-date.component.mjs +0 -183
- package/esm2020/lib/validations/validation-datetime/validation-datetime.component.mjs +0 -212
- package/esm2020/lib/validations/validation-input/validation-input.component.mjs +0 -218
- package/esm2020/lib/validations/validation-select/validation-select.component.mjs +0 -183
- package/esm2020/lib/validations/validation-text-area/validation-text-area.component.mjs +0 -78
- package/fesm2015/esfaenza-forms-and-validations.mjs +0 -4314
- package/fesm2015/esfaenza-forms-and-validations.mjs.map +0 -1
- /package/{esm2020 → esm2022}/esfaenza-forms-and-validations.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/AppFile.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/ChangeEvent.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/FormsAndValidationsModuleConfig.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -264,5 +264,5 @@ export declare abstract class BaseFormControl implements ControlValueAccessor {
|
|
|
264
264
|
/** @ignore */
|
|
265
265
|
abstract onNotNullValueSet(): void;
|
|
266
266
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaseFormControl, never>;
|
|
267
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseFormControl, never, never, { "FocusSubject": "FocusSubject"; "SetValidationSubject": "SetValidationSubject"; "FieldAppearence": "FieldAppearence"; "FormLayout": "FormLayout"; "EmitPendingChanges": "EmitPendingChanges"; "Validation": "Validation"; "Frozen": "Frozen"; "Placeholder": "Placeholder"; "FormGroupClass": "FormGroupClass"; "FailedValidationMessage": "FailedValidationMessage"; "ForcedError": "ForcedError"; "Label": "Label"; "LabelColWidth": "LabelColWidth"; "InputColWidth": "InputColWidth"; "Last": "Last"; "Form": "Form"; "Source": "Source"; "IdField": "IdField"; "FloatingLabel": "FloatingLabel"; "DisplayMode": "DisplayMode"; "DisplayCondition": "DisplayCondition"; "DisplayModeTemplate": "DisplayModeTemplate"; "DisplayLayout": "DisplayLayout"; "InlineSeparator": "InlineSeparator"; "Type": "Type"; "Display": "Display"; "Readonly": "Readonly"; "LabelInputRatio": "LabelInputRatio"; }, { "inputChange": "inputChange"; "inputFocus": "inputFocus"; "inputFinalized": "inputFinalized"; }, never, never, false, never>;
|
|
267
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseFormControl, never, never, { "FocusSubject": { "alias": "FocusSubject"; "required": false; }; "SetValidationSubject": { "alias": "SetValidationSubject"; "required": false; }; "FieldAppearence": { "alias": "FieldAppearence"; "required": false; }; "FormLayout": { "alias": "FormLayout"; "required": false; }; "EmitPendingChanges": { "alias": "EmitPendingChanges"; "required": false; }; "Validation": { "alias": "Validation"; "required": false; }; "Frozen": { "alias": "Frozen"; "required": false; }; "Placeholder": { "alias": "Placeholder"; "required": false; }; "FormGroupClass": { "alias": "FormGroupClass"; "required": false; }; "FailedValidationMessage": { "alias": "FailedValidationMessage"; "required": false; }; "ForcedError": { "alias": "ForcedError"; "required": false; }; "Label": { "alias": "Label"; "required": false; }; "LabelColWidth": { "alias": "LabelColWidth"; "required": false; }; "InputColWidth": { "alias": "InputColWidth"; "required": false; }; "Last": { "alias": "Last"; "required": false; }; "Form": { "alias": "Form"; "required": false; }; "Source": { "alias": "Source"; "required": false; }; "IdField": { "alias": "IdField"; "required": false; }; "FloatingLabel": { "alias": "FloatingLabel"; "required": false; }; "DisplayMode": { "alias": "DisplayMode"; "required": false; }; "DisplayCondition": { "alias": "DisplayCondition"; "required": false; }; "DisplayModeTemplate": { "alias": "DisplayModeTemplate"; "required": false; }; "DisplayLayout": { "alias": "DisplayLayout"; "required": false; }; "InlineSeparator": { "alias": "InlineSeparator"; "required": false; }; "Type": { "alias": "Type"; "required": false; }; "Display": { "alias": "Display"; "required": false; }; "Readonly": { "alias": "Readonly"; "required": false; }; "LabelInputRatio": { "alias": "LabelInputRatio"; "required": false; }; }, { "inputChange": "inputChange"; "inputFocus": "inputFocus"; "inputFinalized": "inputFinalized"; }, never, never, false, never>;
|
|
268
268
|
}
|
|
@@ -122,5 +122,5 @@ export declare class FormAdaptiveComponent extends BaseFormControl implements Co
|
|
|
122
122
|
/** @ignore */
|
|
123
123
|
private throttla;
|
|
124
124
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormAdaptiveComponent, [null, null, null, null, null, { optional: true; self: true; }, { optional: true; }, null, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
125
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormAdaptiveComponent, "form-adaptive", never, { "Type": "Type"; "TypeMissingMessage": "TypeMissingMessage"; "Pattern": "Pattern"; "AdjustNumber": "AdjustNumber"; "AllowDownload": "AllowDownload"; "Precision": "Precision"; "Alignment": "Alignment"; "SearchFunction": "SearchFunction"; "MinChars": "MinChars"; "CaseSensitive": "CaseSensitive"; "Options": "Options"; }, {}, never, never, false, never>;
|
|
125
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormAdaptiveComponent, "form-adaptive", never, { "Type": { "alias": "Type"; "required": false; }; "TypeMissingMessage": { "alias": "TypeMissingMessage"; "required": false; }; "Pattern": { "alias": "Pattern"; "required": false; }; "AdjustNumber": { "alias": "AdjustNumber"; "required": false; }; "AllowDownload": { "alias": "AllowDownload"; "required": false; }; "Precision": { "alias": "Precision"; "required": false; }; "Alignment": { "alias": "Alignment"; "required": false; }; "SearchFunction": { "alias": "SearchFunction"; "required": false; }; "MinChars": { "alias": "MinChars"; "required": false; }; "CaseSensitive": { "alias": "CaseSensitive"; "required": false; }; "Options": { "alias": "Options"; "required": false; }; }, {}, never, never, false, never>;
|
|
126
126
|
}
|
|
@@ -80,5 +80,5 @@ export declare class FormAutocompleteComponent extends BaseFormControl implement
|
|
|
80
80
|
/** @ignore */
|
|
81
81
|
private throttla;
|
|
82
82
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormAutocompleteComponent, [null, null, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
83
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormAutocompleteComponent, "form-autocomplete", never, { "SelectLabel": "SelectLabel"; "SearchFunctionContext": "SearchFunctionContext"; "SearchFunction": "SearchFunction"; "MinChars": "MinChars"; "HideChoicesOnSelection": "HideChoicesOnSelection"; "RequiredPlaceholder": "RequiredPlaceholder"; "CaseSensitive": "CaseSensitive"; "Multi": "Multi"; "MultiElementsThreshold": "MultiElementsThreshold"; "UnboundMode": "UnboundMode"; }, {}, never, never, false, never>;
|
|
83
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormAutocompleteComponent, "form-autocomplete", never, { "SelectLabel": { "alias": "SelectLabel"; "required": false; }; "SearchFunctionContext": { "alias": "SearchFunctionContext"; "required": false; }; "SearchFunction": { "alias": "SearchFunction"; "required": false; }; "MinChars": { "alias": "MinChars"; "required": false; }; "HideChoicesOnSelection": { "alias": "HideChoicesOnSelection"; "required": false; }; "RequiredPlaceholder": { "alias": "RequiredPlaceholder"; "required": false; }; "CaseSensitive": { "alias": "CaseSensitive"; "required": false; }; "Multi": { "alias": "Multi"; "required": false; }; "MultiElementsThreshold": { "alias": "MultiElementsThreshold"; "required": false; }; "UnboundMode": { "alias": "UnboundMode"; "required": false; }; }, {}, never, never, false, never>;
|
|
84
84
|
}
|
|
@@ -19,5 +19,5 @@ export declare class FormCheckboxComponent extends BaseFormControl implements Co
|
|
|
19
19
|
/** @ignore */
|
|
20
20
|
onNotNullValueSet(): void;
|
|
21
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormCheckboxComponent, [null, null, { optional: true; self: true; }, { optional: true; }, null, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
22
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormCheckboxComponent, "form-checkbox", never, { "SliderMode": "SliderMode"; }, {}, never, never, false, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormCheckboxComponent, "form-checkbox", never, { "SliderMode": { "alias": "SliderMode"; "required": false; }; }, {}, never, never, false, never>;
|
|
23
23
|
}
|
|
@@ -17,5 +17,5 @@ export declare class FormDateComponent extends BaseFormControl implements Contro
|
|
|
17
17
|
/** @ignore */
|
|
18
18
|
onNotNullValueSet(): void;
|
|
19
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormDateComponent, [null, null, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
20
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormDateComponent, "form-date", never, { "JsDates": "JsDates"; }, {}, never, never, false, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormDateComponent, "form-date", never, { "JsDates": { "alias": "JsDates"; "required": false; }; }, {}, never, never, false, never>;
|
|
21
21
|
}
|
|
@@ -19,5 +19,5 @@ export declare class FormDateTimeComponent extends BaseFormControl implements Co
|
|
|
19
19
|
/** @ignore */
|
|
20
20
|
onNotNullValueSet(): void;
|
|
21
21
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormDateTimeComponent, [null, null, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
22
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormDateTimeComponent, "form-datetime", never, { "JsDates": "JsDates"; }, {}, never, never, false, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormDateTimeComponent, "form-datetime", never, { "JsDates": { "alias": "JsDates"; "required": false; }; }, {}, never, never, false, never>;
|
|
23
23
|
}
|
|
@@ -11,5 +11,5 @@ export declare class FormEmptyComponent {
|
|
|
11
11
|
/** Valore placeholder da mostrare */
|
|
12
12
|
PlaceholderModel: string;
|
|
13
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormEmptyComponent, never>;
|
|
14
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormEmptyComponent, "form-empty", never, { "Last": "Last"; "FormGroupClass": "FormGroupClass"; }, {}, never, never, false, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormEmptyComponent, "form-empty", never, { "Last": { "alias": "Last"; "required": false; }; "FormGroupClass": { "alias": "FormGroupClass"; "required": false; }; }, {}, never, never, false, never>;
|
|
15
15
|
}
|
|
@@ -15,5 +15,5 @@ export declare class FormErrorComponent {
|
|
|
15
15
|
/** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi "X Y" */
|
|
16
16
|
set LabelInputRatio(input: string);
|
|
17
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormErrorComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormErrorComponent, "form-error", never, { "LabelColWidth": "LabelColWidth"; "InputColWidth": "InputColWidth"; "Last": "Last"; "FormGroupClass": "FormGroupClass"; "LabelInputRatio": "LabelInputRatio"; }, {}, never, ["*"], false, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormErrorComponent, "form-error", never, { "LabelColWidth": { "alias": "LabelColWidth"; "required": false; }; "InputColWidth": { "alias": "InputColWidth"; "required": false; }; "Last": { "alias": "Last"; "required": false; }; "FormGroupClass": { "alias": "FormGroupClass"; "required": false; }; "LabelInputRatio": { "alias": "LabelInputRatio"; "required": false; }; }, {}, never, ["*"], false, never>;
|
|
19
19
|
}
|
|
@@ -42,5 +42,5 @@ export declare class FormFileComponent extends BaseFormControl implements Contro
|
|
|
42
42
|
onFileDragOver(event: DragEvent): void;
|
|
43
43
|
onFileDropped(event: DragEvent): void;
|
|
44
44
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormFileComponent, [null, null, null, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, null, { optional: true; }]>;
|
|
45
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormFileComponent, "form-file", never, { "Multiple": "Multiple"; "AllowDownload": "AllowDownload"; "MaxSize": "MaxSize"; "FancyMode": "FancyMode"; "ReadFile": "ReadFile"; }, {}, never, never, false, never>;
|
|
45
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormFileComponent, "form-file", never, { "Multiple": { "alias": "Multiple"; "required": false; }; "AllowDownload": { "alias": "AllowDownload"; "required": false; }; "MaxSize": { "alias": "MaxSize"; "required": false; }; "FancyMode": { "alias": "FancyMode"; "required": false; }; "ReadFile": { "alias": "ReadFile"; "required": false; }; }, {}, never, never, false, never>;
|
|
46
46
|
}
|
|
@@ -15,5 +15,5 @@ export declare class FormInfoComponent {
|
|
|
15
15
|
/** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi "X Y" */
|
|
16
16
|
set LabelInputRatio(input: string);
|
|
17
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormInfoComponent, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormInfoComponent, "form-info", never, { "LabelColWidth": "LabelColWidth"; "InputColWidth": "InputColWidth"; "Last": "Last"; "FormGroupClass": "FormGroupClass"; "LabelInputRatio": "LabelInputRatio"; }, {}, never, ["*"], false, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormInfoComponent, "form-info", never, { "LabelColWidth": { "alias": "LabelColWidth"; "required": false; }; "InputColWidth": { "alias": "InputColWidth"; "required": false; }; "Last": { "alias": "Last"; "required": false; }; "FormGroupClass": { "alias": "FormGroupClass"; "required": false; }; "LabelInputRatio": { "alias": "LabelInputRatio"; "required": false; }; }, {}, never, ["*"], false, never>;
|
|
19
19
|
}
|
|
@@ -29,5 +29,5 @@ export declare class FormInputComponent extends BaseFormControl implements Contr
|
|
|
29
29
|
/** @ignore */
|
|
30
30
|
onNotNullValueSet(): void;
|
|
31
31
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormInputComponent, [null, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
32
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormInputComponent, "form-input", never, { "Password": "Password"; }, { "onSuffixAction": "onSuffixAction"; "onPrefixAction": "onPrefixAction"; }, ["suffix", "prefix"], never, false, never>;
|
|
32
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormInputComponent, "form-input", never, { "Password": { "alias": "Password"; "required": false; }; }, { "onSuffixAction": "onSuffixAction"; "onPrefixAction": "onPrefixAction"; }, ["suffix", "prefix"], never, false, never>;
|
|
33
33
|
}
|
|
@@ -63,5 +63,5 @@ export declare class FormMultiSelectComponent extends BaseFormControl implements
|
|
|
63
63
|
/** @ignore Override per gestire input in uscita */
|
|
64
64
|
changed(): void;
|
|
65
65
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormMultiSelectComponent, [null, null, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
66
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormMultiSelectComponent, "form-multiselect", never, { "SelectLabel": "SelectLabel"; "UseKeyValues": "UseKeyValues"; "UseCommaSeparatedList": "UseCommaSeparatedList"; "UseJsonList": "UseJsonList"; }, {}, never, never, false, never>;
|
|
66
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormMultiSelectComponent, "form-multiselect", never, { "SelectLabel": { "alias": "SelectLabel"; "required": false; }; "UseKeyValues": { "alias": "UseKeyValues"; "required": false; }; "UseCommaSeparatedList": { "alias": "UseCommaSeparatedList"; "required": false; }; "UseJsonList": { "alias": "UseJsonList"; "required": false; }; }, {}, never, never, false, never>;
|
|
67
67
|
}
|
|
@@ -39,5 +39,5 @@ export declare class FormSelectComponent extends BaseFormControl implements Cont
|
|
|
39
39
|
/** @ignore */
|
|
40
40
|
onNotNullValueSet(): void;
|
|
41
41
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormSelectComponent, [null, null, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
42
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormSelectComponent, "form-select", never, { "SelectLabel": "SelectLabel"; "PlaceholderValue": "PlaceholderValue"; "RequiredPlaceholder": "RequiredPlaceholder"; "EmptyFieldValue": "EmptyFieldValue"; "ShowValidationSymbol": "ShowValidationSymbol"; "OptionTemplate": "OptionTemplate"; }, {}, never, never, false, never>;
|
|
42
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormSelectComponent, "form-select", never, { "SelectLabel": { "alias": "SelectLabel"; "required": false; }; "PlaceholderValue": { "alias": "PlaceholderValue"; "required": false; }; "RequiredPlaceholder": { "alias": "RequiredPlaceholder"; "required": false; }; "EmptyFieldValue": { "alias": "EmptyFieldValue"; "required": false; }; "ShowValidationSymbol": { "alias": "ShowValidationSymbol"; "required": false; }; "OptionTemplate": { "alias": "OptionTemplate"; "required": false; }; }, {}, never, never, false, never>;
|
|
43
43
|
}
|
|
@@ -34,5 +34,5 @@ export declare class FormTemplateComponent {
|
|
|
34
34
|
/** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi "X Y" */
|
|
35
35
|
set LabelInputRatio(input: string);
|
|
36
36
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormTemplateComponent, never>;
|
|
37
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormTemplateComponent, "form-template", never, { "Required": "Required"; "Label": "Label"; "LabelClass": "LabelClass"; "FormLayout": "FormLayout"; "LabelColWidth": "LabelColWidth"; "InputColWidth": "InputColWidth"; "Last": "Last"; "FormGroupClass": "FormGroupClass"; "DisplayMode": "DisplayMode"; "DisplayModeTemplate": "DisplayModeTemplate"; "DisplayLayout": "DisplayLayout"; "DisplayCondition": "DisplayCondition"; "InlineSeparator": "InlineSeparator"; "LabelInputRatio": "LabelInputRatio"; }, {}, never, ["*"], false, never>;
|
|
37
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormTemplateComponent, "form-template", never, { "Required": { "alias": "Required"; "required": false; }; "Label": { "alias": "Label"; "required": false; }; "LabelClass": { "alias": "LabelClass"; "required": false; }; "FormLayout": { "alias": "FormLayout"; "required": false; }; "LabelColWidth": { "alias": "LabelColWidth"; "required": false; }; "InputColWidth": { "alias": "InputColWidth"; "required": false; }; "Last": { "alias": "Last"; "required": false; }; "FormGroupClass": { "alias": "FormGroupClass"; "required": false; }; "DisplayMode": { "alias": "DisplayMode"; "required": false; }; "DisplayModeTemplate": { "alias": "DisplayModeTemplate"; "required": false; }; "DisplayLayout": { "alias": "DisplayLayout"; "required": false; }; "DisplayCondition": { "alias": "DisplayCondition"; "required": false; }; "InlineSeparator": { "alias": "InlineSeparator"; "required": false; }; "LabelInputRatio": { "alias": "LabelInputRatio"; "required": false; }; }, {}, never, ["*"], false, never>;
|
|
38
38
|
}
|
|
@@ -14,5 +14,5 @@ export declare class FormTextareaComponent extends BaseFormControl implements Co
|
|
|
14
14
|
/** @ignore */
|
|
15
15
|
onNotNullValueSet(): void;
|
|
16
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormTextareaComponent, [null, { optional: true; self: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }, { optional: true; }]>;
|
|
17
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormTextareaComponent, "form-textarea", never, { "Rows": "Rows"; }, {}, never, never, false, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormTextareaComponent, "form-textarea", never, { "Rows": { "alias": "Rows"; "required": false; }; }, {}, never, never, false, never>;
|
|
18
18
|
}
|
|
@@ -36,5 +36,5 @@ export declare class FormTimeComponent extends BaseFormControl implements Contro
|
|
|
36
36
|
/** @ignore */
|
|
37
37
|
onNotNullValueSet(): void;
|
|
38
38
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormTimeComponent, [null, null, { optional: true; self: true; }, { optional: true; }, null, { optional: true; }, { optional: true; }]>;
|
|
39
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FormTimeComponent, "form-time", never, { "ShowSpinners": "ShowSpinners"; "StepHour": "StepHour"; "StepMinute": "StepMinute"; "StepSecond": "StepSecond"; "ShowSeconds": "ShowSeconds"; "InOutFormat": "InOutFormat"; }, {}, never, never, false, never>;
|
|
39
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FormTimeComponent, "form-time", never, { "ShowSpinners": { "alias": "ShowSpinners"; "required": false; }; "StepHour": { "alias": "StepHour"; "required": false; }; "StepMinute": { "alias": "StepMinute"; "required": false; }; "StepSecond": { "alias": "StepSecond"; "required": false; }; "ShowSeconds": { "alias": "ShowSeconds"; "required": false; }; "InOutFormat": { "alias": "InOutFormat"; "required": false; }; }, {}, never, never, false, never>;
|
|
40
40
|
}
|
|
@@ -215,5 +215,5 @@ export declare abstract class BaseValidation {
|
|
|
215
215
|
*/
|
|
216
216
|
deregisterFocusRequest(): void;
|
|
217
217
|
static ɵfac: i0.ɵɵFactoryDeclaration<BaseValidation, never>;
|
|
218
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseValidation, never, never, { "FocusSubject": "FocusSubject"; "SetValidationSubject": "SetValidationSubject"; "InferErrorMessages": "InferErrorMessages"; "FieldAppearence": "FieldAppearence"; "FloatingLabel": "FloatingLabel"; "validationFailed": "validationFailed"; "Readonly": "Readonly"; "widthPx": "widthPx"; "disabled": "disabled"; "placeholder": "placeholder"; "class": "class"; "style": "style"; "pattern": "pattern"; "noValidate": "noValidate"; "autocomplete": "autocomplete"; "id": "id"; "submitted": "submitted"; "forceInvalid": "forceInvalid"; }, { "inputChange": "inputChange"; "inputFocus": "inputFocus"; "inputFinalized": "inputFinalized"; }, never, never, false, never>;
|
|
218
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BaseValidation, never, never, { "FocusSubject": { "alias": "FocusSubject"; "required": false; }; "SetValidationSubject": { "alias": "SetValidationSubject"; "required": false; }; "InferErrorMessages": { "alias": "InferErrorMessages"; "required": false; }; "FieldAppearence": { "alias": "FieldAppearence"; "required": false; }; "FloatingLabel": { "alias": "FloatingLabel"; "required": false; }; "validationFailed": { "alias": "validationFailed"; "required": false; }; "Readonly": { "alias": "Readonly"; "required": false; }; "widthPx": { "alias": "widthPx"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "class": { "alias": "class"; "required": false; }; "style": { "alias": "style"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "noValidate": { "alias": "noValidate"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "id": { "alias": "id"; "required": false; }; "submitted": { "alias": "submitted"; "required": false; }; "forceInvalid": { "alias": "forceInvalid"; "required": false; }; }, { "inputChange": "inputChange"; "inputFocus": "inputFocus"; "inputFinalized": "inputFinalized"; }, never, never, false, never>;
|
|
219
219
|
}
|
|
@@ -20,5 +20,5 @@ export declare class CustomRequiredDirective implements Validator {
|
|
|
20
20
|
[key: string]: any;
|
|
21
21
|
};
|
|
22
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<CustomRequiredDirective, never>;
|
|
23
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CustomRequiredDirective, "[customRequired]", never, { "NullValues": "CustomNullValues"; "customRequired": "customRequired"; }, {}, never, never, false, never>;
|
|
23
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CustomRequiredDirective, "[customRequired]", never, { "NullValues": { "alias": "CustomNullValues"; "required": false; }; "customRequired": { "alias": "customRequired"; "required": false; }; }, {}, never, never, false, never>;
|
|
24
24
|
}
|
|
@@ -54,5 +54,5 @@ export declare class ValidationAutocompleteComponent extends BaseValidation impl
|
|
|
54
54
|
/** @ignore */
|
|
55
55
|
registerOnTouched(fn: any): void;
|
|
56
56
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidationAutocompleteComponent, [null, { optional: true; }, { optional: true; }, null, null]>;
|
|
57
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationAutocompleteComponent, "val-autocomplete", never, { "FilteredSource": "FilteredSource"; "value": "value"; "label": "label"; }, { "optionChange": "optionChange"; }, never, never, false, never>;
|
|
57
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationAutocompleteComponent, "val-autocomplete", never, { "FilteredSource": { "alias": "FilteredSource"; "required": false; }; "value": { "alias": "value"; "required": false; }; "label": { "alias": "label"; "required": false; }; }, { "optionChange": "optionChange"; }, never, never, false, never>;
|
|
58
58
|
}
|
package/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.d.ts
CHANGED
|
@@ -84,5 +84,5 @@ export declare class ValidationAutocompleteMultiComponent extends BaseValidation
|
|
|
84
84
|
description: string;
|
|
85
85
|
}): void;
|
|
86
86
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidationAutocompleteMultiComponent, [null, { optional: true; }, { optional: true; }, null, null]>;
|
|
87
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationAutocompleteMultiComponent, "val-autocomplete-multi", never, { "ChipThreshold": "ChipThreshold"; "FilteredSource": "FilteredSource"; "UnboundMode": "UnboundMode"; "value": "value"; "label": "label"; "HideChoicesOnSelection": "HideChoicesOnSelection"; }, { "optionChange": "optionChange"; }, never, never, false, never>;
|
|
87
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationAutocompleteMultiComponent, "val-autocomplete-multi", never, { "ChipThreshold": { "alias": "ChipThreshold"; "required": false; }; "FilteredSource": { "alias": "FilteredSource"; "required": false; }; "UnboundMode": { "alias": "UnboundMode"; "required": false; }; "value": { "alias": "value"; "required": false; }; "label": { "alias": "label"; "required": false; }; "HideChoicesOnSelection": { "alias": "HideChoicesOnSelection"; "required": false; }; }, { "optionChange": "optionChange"; }, never, never, false, never>;
|
|
88
88
|
}
|
|
@@ -24,5 +24,5 @@ export declare class ValidationCurrencyComponent extends ValidationInputComponen
|
|
|
24
24
|
*/
|
|
25
25
|
ngOnDestroy(): void;
|
|
26
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidationCurrencyComponent, [null, { optional: true; }, { optional: true; }, null, null]>;
|
|
27
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationCurrencyComponent, "val-currency", never, { "CurrencyOptions": "CurrencyOptions"; }, {}, never, never, false, never>;
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationCurrencyComponent, "val-currency", never, { "CurrencyOptions": { "alias": "CurrencyOptions"; "required": false; }; }, {}, never, never, false, never>;
|
|
28
28
|
}
|
|
@@ -75,5 +75,5 @@ export declare class ValidationDateComponent extends BaseValidation implements C
|
|
|
75
75
|
*/
|
|
76
76
|
registerOnTouched(fn: any): void;
|
|
77
77
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidationDateComponent, [null, { optional: true; }, { optional: true; }, null, null, null]>;
|
|
78
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationDateComponent, "val-date", never, { "useJsDates": "useJsDates"; }, {}, never, never, false, never>;
|
|
78
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationDateComponent, "val-date", never, { "useJsDates": { "alias": "useJsDates"; "required": false; }; }, {}, never, never, false, never>;
|
|
79
79
|
}
|
|
@@ -105,5 +105,5 @@ export declare class ValidationDateTimeComponent extends BaseValidation implemen
|
|
|
105
105
|
*/
|
|
106
106
|
registerOnTouched(fn: any): void;
|
|
107
107
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidationDateTimeComponent, [null, { optional: true; }, { optional: true; }, null, null, null]>;
|
|
108
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationDateTimeComponent, "val-datetime", never, { "useJsDates": "useJsDates"; }, {}, never, never, false, never>;
|
|
108
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationDateTimeComponent, "val-datetime", never, { "useJsDates": { "alias": "useJsDates"; "required": false; }; }, {}, never, never, false, never>;
|
|
109
109
|
}
|
|
@@ -122,5 +122,5 @@ export declare class ValidationInputComponent extends BaseValidation implements
|
|
|
122
122
|
*/
|
|
123
123
|
registerOnTouched(fn: any): void;
|
|
124
124
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidationInputComponent, [null, { optional: true; }, { optional: true; }, null, null]>;
|
|
125
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationInputComponent, "val-input", never, { "Frozen": "Frozen"; "Password": "Password"; "showWarning": "showWarning"; "warningTitle": "warningTitle"; "warningClass": "warningClass"; "value": "value"; "Type": "Type"; }, {}, ["suffix_internal", "prefix_internal"], never, false, never>;
|
|
125
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationInputComponent, "val-input", never, { "Frozen": { "alias": "Frozen"; "required": false; }; "Password": { "alias": "Password"; "required": false; }; "showWarning": { "alias": "showWarning"; "required": false; }; "warningTitle": { "alias": "warningTitle"; "required": false; }; "warningClass": { "alias": "warningClass"; "required": false; }; "value": { "alias": "value"; "required": false; }; "Type": { "alias": "Type"; "required": false; }; }, {}, ["suffix_internal", "prefix_internal"], never, false, never>;
|
|
126
126
|
}
|
|
@@ -91,5 +91,5 @@ export declare class ValidationSelectComponent extends BaseValidation implements
|
|
|
91
91
|
*/
|
|
92
92
|
registerOnTouched(fn: any): void;
|
|
93
93
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidationSelectComponent, [{ optional: true; }, { optional: true; }, null, null, null]>;
|
|
94
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationSelectComponent, "val-select", never, { "emptyFieldValue": "emptyFieldValue"; "placeHolderValue": "placeHolderValue"; "emptyValue": "emptyValue"; "showValidationSymbol": "showValidationSymbol"; "label": "label"; }, { "onBlur": "onBlur"; }, never, ["*"], false, never>;
|
|
94
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationSelectComponent, "val-select", never, { "emptyFieldValue": { "alias": "emptyFieldValue"; "required": false; }; "placeHolderValue": { "alias": "placeHolderValue"; "required": false; }; "emptyValue": { "alias": "emptyValue"; "required": false; }; "showValidationSymbol": { "alias": "showValidationSymbol"; "required": false; }; "label": { "alias": "label"; "required": false; }; }, { "onBlur": "onBlur"; }, never, ["*"], false, never>;
|
|
95
95
|
}
|
|
@@ -24,5 +24,5 @@ export declare class ValidationTextAreaComponent extends ValidationInputComponen
|
|
|
24
24
|
*/
|
|
25
25
|
ngOnDestroy(): void;
|
|
26
26
|
static ɵfac: i0.ɵɵFactoryDeclaration<ValidationTextAreaComponent, [null, { optional: true; }, { optional: true; }, null, null]>;
|
|
27
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationTextAreaComponent, "val-textarea", never, { "rows": "rows"; }, {}, never, never, false, never>;
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ValidationTextAreaComponent, "val-textarea", never, { "rows": { "alias": "rows"; "required": false; }; }, {}, never, never, false, never>;
|
|
28
28
|
}
|
package/package.json
CHANGED
|
@@ -1,32 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@esfaenza/forms-and-validations",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "16.2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"tslib": "^2.0.0"
|
|
7
7
|
},
|
|
8
8
|
"peerDependencies": {
|
|
9
|
-
"@angular/common": "^
|
|
10
|
-
"@angular/core": "^
|
|
11
|
-
"@angular/forms": "^
|
|
12
|
-
"@angular/material": "
|
|
13
|
-
"@esfaenza/extensions": "^
|
|
14
|
-
"@esfaenza/localizations": "^
|
|
15
|
-
"@esfaenza/access-control": "^
|
|
16
|
-
"@esfaenza/material-dayjs-adapter": "^
|
|
17
|
-
"@esfaenza/ngx-currency-mask": "^
|
|
18
|
-
"angular2-multiselect-dropdown": "
|
|
19
|
-
"@angular-material-components/datetime-picker": "
|
|
20
|
-
"ngx-toastr": "
|
|
21
|
-
"ngx-bootstrap": "
|
|
22
|
-
"dayjs": "1.11.
|
|
23
|
-
"sweetalert2": "11.
|
|
9
|
+
"@angular/common": "^16.2.12",
|
|
10
|
+
"@angular/core": "^16.2.12",
|
|
11
|
+
"@angular/forms": "^16.2.12",
|
|
12
|
+
"@angular/material": "16.2.14",
|
|
13
|
+
"@esfaenza/extensions": "^16.2.0",
|
|
14
|
+
"@esfaenza/localizations": "^16.2.0",
|
|
15
|
+
"@esfaenza/access-control": "^16.2.0",
|
|
16
|
+
"@esfaenza/material-dayjs-adapter": "^16.2.0",
|
|
17
|
+
"@esfaenza/ngx-currency-mask": "^16.2.0",
|
|
18
|
+
"angular2-multiselect-dropdown": "10.0.0",
|
|
19
|
+
"@angular-material-components/datetime-picker": "^7.0.1",
|
|
20
|
+
"ngx-toastr": "19.0.0",
|
|
21
|
+
"ngx-bootstrap": "18.1.3",
|
|
22
|
+
"dayjs": "1.11.13",
|
|
23
|
+
"sweetalert2": "11.17.2"
|
|
24
24
|
},
|
|
25
|
-
"module": "
|
|
26
|
-
"es2020": "fesm2020/esfaenza-forms-and-validations.mjs",
|
|
27
|
-
"esm2020": "esm2020/esfaenza-forms-and-validations.mjs",
|
|
28
|
-
"fesm2020": "fesm2020/esfaenza-forms-and-validations.mjs",
|
|
29
|
-
"fesm2015": "fesm2015/esfaenza-forms-and-validations.mjs",
|
|
25
|
+
"module": "fesm2022/esfaenza-forms-and-validations.mjs",
|
|
30
26
|
"typings": "index.d.ts",
|
|
31
27
|
"exports": {
|
|
32
28
|
"./package.json": {
|
|
@@ -34,11 +30,9 @@
|
|
|
34
30
|
},
|
|
35
31
|
".": {
|
|
36
32
|
"types": "./index.d.ts",
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"node": "./fesm2015/esfaenza-forms-and-validations.mjs",
|
|
41
|
-
"default": "./fesm2020/esfaenza-forms-and-validations.mjs"
|
|
33
|
+
"esm2022": "./esm2022/esfaenza-forms-and-validations.mjs",
|
|
34
|
+
"esm": "./esm2022/esfaenza-forms-and-validations.mjs",
|
|
35
|
+
"default": "./fesm2022/esfaenza-forms-and-validations.mjs"
|
|
42
36
|
}
|
|
43
37
|
},
|
|
44
38
|
"sideEffects": false
|
package/esm2020/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl } from "@angular/forms";
|
|
3
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Inject, Input, Optional, Output, 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/common";
|
|
12
|
-
import * as i3 from "@angular/forms";
|
|
13
|
-
import * as i4 from "@angular/material/legacy-form-field";
|
|
14
|
-
import * as i5 from "@angular/material/legacy-input";
|
|
15
|
-
import * as i6 from "ngx-bootstrap/tooltip";
|
|
16
|
-
import * as i7 from "@angular/material/legacy-autocomplete";
|
|
17
|
-
import * as i8 from "@angular/material/legacy-core";
|
|
18
|
-
/**
|
|
19
|
-
* Componente di validaizone per gli input di Autocompletamento
|
|
20
|
-
*/
|
|
21
|
-
export class ValidationAutocompleteComponent extends BaseValidation {
|
|
22
|
-
/** @ignore */
|
|
23
|
-
constructor(cdr, _validators, _asyncValidators, injector, lc) {
|
|
24
|
-
super(cdr);
|
|
25
|
-
this._validators = _validators;
|
|
26
|
-
this._asyncValidators = _asyncValidators;
|
|
27
|
-
this.injector = injector;
|
|
28
|
-
this.lc = lc;
|
|
29
|
-
/** Sorgente da cui scegliere valori filtrata in base a quello che ha scritto l'utente */
|
|
30
|
-
this.FilteredSource = [];
|
|
31
|
-
/** Contenuto della label Floattante Material-Style */
|
|
32
|
-
this.label = "";
|
|
33
|
-
/** Evento che indica l'opzione selezionata dal componente. Il valore finale della selezione dovrà essere questo */
|
|
34
|
-
this.optionChange = new EventEmitter();
|
|
35
|
-
/** @ignore */
|
|
36
|
-
this.onTouched = () => { }; //placeholder on touched function
|
|
37
|
-
}
|
|
38
|
-
/** @ignore */
|
|
39
|
-
ngOnInit() {
|
|
40
|
-
super.ngOnInit();
|
|
41
|
-
this.registerFocusRequest();
|
|
42
|
-
this.checkRequiredness(this._validators);
|
|
43
|
-
}
|
|
44
|
-
/** @ignore */
|
|
45
|
-
ngOnDestroy() {
|
|
46
|
-
super.ngOnDestroy();
|
|
47
|
-
this.deregisterFocusRequest();
|
|
48
|
-
if (this.tooltipSubscription)
|
|
49
|
-
this.tooltipSubscription.unsubscribe();
|
|
50
|
-
}
|
|
51
|
-
/** @ignore */
|
|
52
|
-
ngAfterViewInit() {
|
|
53
|
-
this.postBinding();
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato
|
|
57
|
-
* da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML
|
|
58
|
-
*/
|
|
59
|
-
postBinding() {
|
|
60
|
-
this.CheckValidity();
|
|
61
|
-
const ngControl = this.injector.get(NgControl, null);
|
|
62
|
-
if (ngControl) {
|
|
63
|
-
this.parentControl = ngControl.control;
|
|
64
|
-
//se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti
|
|
65
|
-
if (this.noValidate) {
|
|
66
|
-
this.parentControl.clearValidators();
|
|
67
|
-
this.parentControl.clearAsyncValidators();
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
this.baseInput.control.setAsyncValidators(this._asyncValidators);
|
|
71
|
-
this.baseInput.control.setValidators(this._validators);
|
|
72
|
-
}
|
|
73
|
-
//faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo
|
|
74
|
-
const origFunc = this.parentControl.reset;
|
|
75
|
-
this.parentControl.reset = () => {
|
|
76
|
-
origFunc.apply(this.parentControl);
|
|
77
|
-
this.baseInput.control.reset();
|
|
78
|
-
this.tooltip.hide();
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/** @ignore */
|
|
83
|
-
writeValue(value) {
|
|
84
|
-
var val = value && this.FilteredSource ? this.FilteredSource.find(t => t.id == value) : null;
|
|
85
|
-
if (val)
|
|
86
|
-
this.optionChange.emit(val.id);
|
|
87
|
-
this.propagateChange(val ? val.id : value);
|
|
88
|
-
this.value = val ? val.description : value;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo
|
|
92
|
-
*
|
|
93
|
-
* @param {any} toEmit valore da propagare all'esterno
|
|
94
|
-
*/
|
|
95
|
-
onModelChange(toEmit) {
|
|
96
|
-
this.writeValue(toEmit);
|
|
97
|
-
this.inputChange.emit(toEmit);
|
|
98
|
-
this.onTouched();
|
|
99
|
-
}
|
|
100
|
-
/** @ignore */
|
|
101
|
-
registerOnChange(fn) {
|
|
102
|
-
this.propagateChange = fn;
|
|
103
|
-
}
|
|
104
|
-
/** @ignore */
|
|
105
|
-
registerOnTouched(fn) {
|
|
106
|
-
this.onTouched = fn;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
ValidationAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ValidationAutocompleteComponent, 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 });
|
|
110
|
-
ValidationAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ValidationAutocompleteComponent, selector: "val-autocomplete", inputs: { FilteredSource: "FilteredSource", value: "value", label: "label" }, outputs: { optionChange: "optionChange" }, providers: [
|
|
111
|
-
{ provide: LocalizationService, useClass: BaseValidationLoc },
|
|
112
|
-
{
|
|
113
|
-
provide: NG_VALUE_ACCESSOR,
|
|
114
|
-
useExisting: forwardRef(() => ValidationAutocompleteComponent),
|
|
115
|
-
multi: true
|
|
116
|
-
}
|
|
117
|
-
], usesInheritance: true, ngImport: i0, template: "<!-- Val-Model: {{value}} -->\r\n<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=\"label\">{{label}}</mat-label>\r\n <input matInput\r\n #htmlInput\r\n #baseInput='ngModel'\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n placeholder=\"{{placeholder}}\"\r\n [matAutocomplete]=\"auto\"\r\n name=\"val-input\"\r\n id=\"{{id}}\"\r\n class=\"form-control {{class}}\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate\"\r\n [tooltip]=\"tolTemplate\"\r\n [disabled]=\"Readonly || disabled\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip(); onFinalize();\">\r\n\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of FilteredSource\" [value]=\"option.id\">\r\n {{option.description}}\r\n </mat-option>\r\n </mat-autocomplete>\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: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLegacyLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "directive", type: i6.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: i7.MatLegacyAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i7.MatLegacyAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i8.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ValidationAutocompleteComponent, decorators: [{
|
|
119
|
-
type: Component,
|
|
120
|
-
args: [{ selector: "val-autocomplete", changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
121
|
-
{ provide: LocalizationService, useClass: BaseValidationLoc },
|
|
122
|
-
{
|
|
123
|
-
provide: NG_VALUE_ACCESSOR,
|
|
124
|
-
useExisting: forwardRef(() => ValidationAutocompleteComponent),
|
|
125
|
-
multi: true
|
|
126
|
-
}
|
|
127
|
-
], encapsulation: ViewEncapsulation.None, template: "<!-- Val-Model: {{value}} -->\r\n<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=\"label\">{{label}}</mat-label>\r\n <input matInput\r\n #htmlInput\r\n #baseInput='ngModel'\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n placeholder=\"{{placeholder}}\"\r\n [matAutocomplete]=\"auto\"\r\n name=\"val-input\"\r\n id=\"{{id}}\"\r\n class=\"form-control {{class}}\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate\"\r\n [tooltip]=\"tolTemplate\"\r\n [disabled]=\"Readonly || disabled\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip(); onFinalize();\">\r\n\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of FilteredSource\" [value]=\"option.id\">\r\n {{option.description}}\r\n </mat-option>\r\n </mat-autocomplete>\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"] }]
|
|
128
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: Array, decorators: [{
|
|
129
|
-
type: Optional
|
|
130
|
-
}, {
|
|
131
|
-
type: Inject,
|
|
132
|
-
args: [NG_VALIDATORS]
|
|
133
|
-
}] }, { type: Array, decorators: [{
|
|
134
|
-
type: Optional
|
|
135
|
-
}, {
|
|
136
|
-
type: Inject,
|
|
137
|
-
args: [NG_ASYNC_VALIDATORS]
|
|
138
|
-
}] }, { type: i0.Injector }, { type: i1.LocalizationService }]; }, propDecorators: { FilteredSource: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], value: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], label: [{
|
|
143
|
-
type: Input
|
|
144
|
-
}], optionChange: [{
|
|
145
|
-
type: Output
|
|
146
|
-
}] } });
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvdmFsaWRhdGlvbnMvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUvdmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBNEMsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvSixPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxTCxpQkFBaUI7QUFDakIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFOUQsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQUczRDs7R0FFRztBQWdCSCxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsY0FBYztJQXFCL0QsY0FBYztJQUNkLFlBQVksR0FBc0IsRUFBNkMsV0FBdUIsRUFBbUQsZ0JBQTRCLEVBQVUsUUFBa0IsRUFBWSxFQUF1QjtRQUNoUCxLQUFLLENBQUMsR0FBRyxD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Q0FBQzs0QkFDOUQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0osaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTs7MEJBeUJBLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQW9DLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1CO3FHQWxCdEksY0FBYztzQkFBdEIsS0FBSztnQkFHVSxLQUFLO3NCQUFwQixLQUFLO2dCQUdVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBR0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFVudHlwZWRGb3JtQ29udHJvbCwgTkdfQVNZTkNfVkFMSURBVE9SUywgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCwgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbmplY3RvciwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5cclxuLy8gRGlyZXR0aXZlLCBDb21wb25lbnRpLCBMaWJyZXJpZVxyXG5pbXBvcnQgeyBCYXNlVmFsaWRhdGlvbiB9IGZyb20gXCIuLi9iYXNlLXZhbGlkYXRpb25cIjtcclxuaW1wb3J0IHsgQmFzZVZhbGlkYXRpb25Mb2MgfSBmcm9tICcuLi9iYXNlLXZhbGlkYXRpb24ubG9jJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGRpIHZhbGlkYWl6b25lIHBlciBnbGkgaW5wdXQgZGkgQXV0b2NvbXBsZXRhbWVudG9cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwidmFsLWF1dG9jb21wbGV0ZVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwidmFsaWRhdGlvbi1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCB1c2VDbGFzczogQmFzZVZhbGlkYXRpb25Mb2MgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBWYWxpZGF0aW9uQXV0b2NvbXBsZXRlQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICAgIHN0eWxlVXJsczogW1wiLi4vdmFsaWRhdGlvbi1zdHlsZS5zY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uQXV0b2NvbXBsZXRlQ29tcG9uZW50IGV4dGVuZHMgQmFzZVZhbGlkYXRpb24gaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG5cclxuICAgIC8qKiBTb3JnZW50ZSBkYSBjdWkgc2NlZ2xpZXJlIHZhbG9yaSBmaWx0cmF0YSBpbiBiYXNlIGEgcXVlbGxvIGNoZSBoYSBzY3JpdHRvIGwndXRlbnRlICovXHJcbiAgICBASW5wdXQoKSBGaWx0ZXJlZFNvdXJjZTogeyBpZDogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nIH1bXSA9IFtdO1xyXG5cclxuICAgIC8qKiBWYWxvcmUgZGVsIG1vZGVsbG8gKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZTogYW55O1xyXG5cclxuICAgIC8qKiBDb250ZW51dG8gZGVsbGEgbGFiZWwgRmxvYXR0YW50ZSBNYXRlcmlhbC1TdHlsZSAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGxhYmVsOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBFdmVudG8gY2hlIGluZGljYSBsJ29wemlvbmUgc2VsZXppb25hdGEgZGFsIGNvbXBvbmVudGUuIElsIHZhbG9yZSBmaW5hbGUgZGVsbGEgc2VsZXppb25lIGRvdnLDoCBlc3NlcmUgcXVlc3RvICovXHJcbiAgICBAT3V0cHV0KCkgb3B0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICAgIC8qKiBTdWJzY3JpcHRpb24gZGVsIHRvb3RsdGlwIGRhIHJpcHVsaXJlIGFsbGEgZGlzdHJ1emlvbmUgZGVsIGNvbXBvbmVudGUgKi9cclxuICAgIHByaXZhdGUgdG9vbHRpcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIC8qKiBDb250cm9sbG8gZXNwb3N0byBvdHRlbnV0byB0cmFtaXRlIGluamVjdG9yICovXHJcbiAgICBwcml2YXRlIHBhcmVudENvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgY29uc3RydWN0b3IoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgQE9wdGlvbmFsKCkgQEluamVjdChOR19WQUxJREFUT1JTKSBwcml2YXRlIF92YWxpZGF0b3JzOiBBcnJheTxhbnk+LCBAT3B0aW9uYWwoKSBASW5qZWN0KE5HX0FTWU5DX1ZBTElEQVRPUlMpIHByaXZhdGUgX2FzeW5jVmFsaWRhdG9yczogQXJyYXk8YW55PiwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsIHByb3RlY3RlZCBsYzogTG9jYWxpemF0aW9uU2VydmljZSkge1xyXG4gICAgICAgIHN1cGVyKGNkcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckZvY3VzUmVxdWVzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRuZXNzKHRoaXMuX3ZhbGlkYXRvcnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIHRoaXMuZGVyZWdpc3RlckZvY3VzUmVxdWVzdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24pIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5wb3N0QmluZGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBzaSBvY2N1cGEgZGkgY29sbGVnYXJlIGkgdmFsaWRhdG9yaSBlIGxhIGZ1bnppb25lIGRpIHJlc2V0IGRhbCAqKkNvbnRyb2xWYWx1ZUFjY2Vzc29yKiogcmFwcHJlc2VudGF0byBcclxuICAgICAqIGRhIHF1ZXN0byBjb21wb25lbnRlIGFsICoqQ29udHJvbFZhbHVlQWNjZXNzb3IqKiByYXBwcmVzZW50YXRvIGRhbGwnZWZmZXR0aXZvIGVsZW1lbnRvIGRpIElucHV0IHByZXNlbnRlIGxhdG8gSFRNTFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBvc3RCaW5kaW5nKCkge1xyXG4gICAgICAgIHRoaXMuQ2hlY2tWYWxpZGl0eSgpO1xyXG4gICAgICAgIGNvbnN0IG5nQ29udHJvbDogTmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgICAgICBpZiAobmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbCA9IG5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuXHJcbiAgICAgICAgICAgIC8vc2UgbGEgdmFyaWFiaWxlIG5vdmFsaWRhdGUgw6ggdHJ1ZSwgZWxpbWlubyB0dXR0aSBpIHZhbGlkYXRvcmkgZXZlbnR1YWxtZW50ZSBpbnNlcml0aVxyXG4gICAgICAgICAgICBpZiAodGhpcy5ub1ZhbGlkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2wuY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKHRoaXMuX2FzeW5jVmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VJbnB1dC5jb250cm9sLnNldFZhbGlkYXRvcnModGhpcy5fdmFsaWRhdG9ycyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vZmFjY2lvIGluIG1vZG8gY2hlIHNlIGNoaWFtbyBpbCByZXNldCBkZWwgY29udHJvbGxvIChvIGRlbGxhIGZvcm0pIGRhbGwnZXN0ZXJubyBzaSByZXNldHRpIGFuY2hlIGlsIGNvbnRyb2xsbyBuYXRpdm9cclxuICAgICAgICAgICAgY29uc3Qgb3JpZ0Z1bmMgPSB0aGlzLnBhcmVudENvbnRyb2wucmVzZXQ7XHJcbiAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbC5yZXNldCA9ICgpID0+IHsgLy9mYWNjaW8gaW4gbW9kbyBjaGUgc2UgY2hpYW1vIGlsIHJlc2V0IGRlbCBjb250cm9sbG8gKG8gZGVsbGEgZm9ybSkgZGFsbCdlc3Rlcm5vIHNpIHJlc2V0dGkgYW5jaGUgaWwgY29udHJvbGxvIG5hdGl2b1xyXG4gICAgICAgICAgICAgICAgb3JpZ0Z1bmMuYXBwbHkodGhpcy5wYXJlbnRDb250cm9sKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUlucHV0LmNvbnRyb2wucmVzZXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHsgfTsgLy9wbGFjZWhvbGRlciBvbiB0b3VjaGVkIGZ1bmN0aW9uXHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHZhciB2YWwgPSB2YWx1ZSAmJiB0aGlzLkZpbHRlcmVkU291cmNlID8gdGhpcy5GaWx0ZXJlZFNvdXJjZS5maW5kKHQgPT4gdC5pZCA9PSB2YWx1ZSkgOiBudWxsO1xyXG4gICAgICAgIGlmKHZhbCkgdGhpcy5vcHRpb25DaGFuZ2UuZW1pdCh2YWwuaWQpO1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbCA/IHZhbC5pZCA6IHZhbHVlKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsID8gdmFsLmRlc2NyaXB0aW9uIDogdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMJ2VtaXQgZGVsbGEgbW9kaWZpY2EgYWwgdmFsb3JlIHZpZW5lIGdlc3RpdG8gc3UgdW4gZXZlbnRvIGN1c3RvbSAoKippbnB1dENoYW5nZSoqKSBjb21lIHdvcmthcm91bmQgYWwgbWFsZnVuemlvbmFtZW50byBkZWxsJyoqbmdNb2RlbENoYW5nZSoqIG5hdGl2b1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdG9FbWl0IHZhbG9yZSBkYSBwcm9wYWdhcmUgYWxsJ2VzdGVybm9cclxuICAgICAqL1xyXG4gICAgb25Nb2RlbENoYW5nZSh0b0VtaXQpIHtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodG9FbWl0KTtcclxuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQodG9FbWl0KTtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxufSIsIjwhLS0gVmFsLU1vZGVsOiB7e3ZhbHVlfX0gLS0+XHJcbjxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwie3tGaWVsZEFwcGVhcmVuY2V9fVwiIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGggbWF0LW5vLWJvcmRlci10b3AgbWF0LWhlaWdodC1maXhlZFwiIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aFB4XCI+XHJcbiAgICA8bWF0LWxhYmVsICpuZ0lmPVwibGFiZWxcIj57e2xhYmVsfX08L21hdC1sYWJlbD5cclxuICAgIDxpbnB1dCBtYXRJbnB1dFxyXG4gICAgICAgICAgICNodG1sSW5wdXRcclxuICAgICAgICAgICAjYmFzZUlucHV0PSduZ01vZGVsJ1xyXG4gICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICB0cmlnZ2Vycz1cIlwiXHJcbiAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcclxuICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7cGxhY2Vob2xkZXJ9fVwiXHJcbiAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcclxuICAgICAgICAgICBuYW1lPVwidmFsLWlucHV0XCJcclxuICAgICAgICAgICBpZD1cInt7aWR9fVwiXHJcbiAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wge3tjbGFzc319XCJcclxuICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgICAgICAgICBbY2xhc3MuY2hlY2tpbmctZmllbGRdPVwiIW5vVmFsaWRhdGVcIlxyXG4gICAgICAgICAgIFt0b29sdGlwXT1cInRvbFRlbXBsYXRlXCJcclxuICAgICAgICAgICBbZGlzYWJsZWRdPVwiUmVhZG9ubHkgfHwgZGlzYWJsZWRcIlxyXG4gICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgKGZvY3VzKT1cImNoZWNrVG9vbHRpcCgpO1wiXHJcbiAgICAgICAgICAgKGtleXVwKT1cIigkZXZlbnQua2V5Q29kZSA9PSAxMyB8fCAkZXZlbnQua2V5Q29kZSA9PSAyNykgJiYgb25GaW5hbGl6ZSgpO1wiXHJcbiAgICAgICAgICAgKGJsdXIpPVwiY2xvc2VUb29sdGlwKCk7IG9uRmluYWxpemUoKTtcIj5cclxuXHJcbiAgICA8bWF0LWF1dG9jb21wbGV0ZSBhdXRvQWN0aXZlRmlyc3RPcHRpb24gI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIEZpbHRlcmVkU291cmNlXCIgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiPlxyXG4gICAgICAgICAgICB7e29wdGlvbi5kZXNjcmlwdGlvbn19XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0b2xUZW1wbGF0ZT5cclxuICAgIDxkaXYgKGNsaWNrKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgPHNwYW4+e3t2YWxpZGF0aW9uRmFpbGVkQmluZH19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|