@esfaenza/forms-and-validations 18.2.2 → 19.2.3

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.
Files changed (100) hide show
  1. package/README.md +63 -1
  2. package/fesm2022/esfaenza-forms-and-validations.mjs +1099 -3972
  3. package/fesm2022/esfaenza-forms-and-validations.mjs.map +1 -1
  4. package/lib/forms/adaptive/form-adaptive.component.d.ts +23 -0
  5. package/lib/forms/autocomplete/form-autocomplete.component.d.ts +40 -0
  6. package/lib/forms/base/base-form-control.d.ts +132 -0
  7. package/lib/forms/base/skeleton/input-skeleton.component.d.ts +12 -0
  8. package/lib/forms/checkbox/form-checkbox.component.d.ts +11 -0
  9. package/lib/forms/currency/form-currency.component.d.ts +10 -0
  10. package/lib/forms/date/form-date.component.d.ts +36 -0
  11. package/lib/forms/datetime/form-datetime.component.d.ts +7 -0
  12. package/lib/forms/{form-info/form-info.component.d.ts → error/form-error.component.d.ts} +4 -4
  13. package/lib/forms/file/form-file.component.d.ts +38 -0
  14. package/lib/forms/{form-error/form-error.component.d.ts → info/form-info.component.d.ts} +4 -4
  15. package/lib/forms/input/form-input.component.d.ts +25 -0
  16. package/lib/forms/multiselect/form-multiselect.component.d.ts +20 -0
  17. package/lib/forms/select/form-select.component.d.ts +9 -0
  18. package/lib/forms/{form-template → template}/form-template.component.d.ts +3 -3
  19. package/lib/forms/textarea/form-textarea.component.d.ts +13 -0
  20. package/lib/forms/time/form-time.component.d.ts +7 -0
  21. package/lib/forms.module.d.ts +32 -0
  22. package/lib/models/AppFile.d.ts +5 -15
  23. package/lib/models/BaseFormConfiguration.d.ts +27 -0
  24. package/lib/models/EsFormsModuleConfig.d.ts +7 -0
  25. package/lib/services/helper.d.ts +15 -0
  26. package/lib/tokens.d.ts +1 -5
  27. package/package.json +10 -16
  28. package/public-api.d.ts +18 -28
  29. package/esm2022/esfaenza-forms-and-validations.mjs +0 -5
  30. package/esm2022/lib/forms/base-form-control.mjs +0 -558
  31. package/esm2022/lib/forms/form-adaptive/form-adaptive.component.loc.mjs +0 -22
  32. package/esm2022/lib/forms/form-adaptive/form-adaptive.component.mjs +0 -420
  33. package/esm2022/lib/forms/form-autocomplete/form-autocomplete.component.loc.mjs +0 -21
  34. package/esm2022/lib/forms/form-autocomplete/form-autocomplete.component.mjs +0 -289
  35. package/esm2022/lib/forms/form-checkbox/form-checkbox.component.mjs +0 -74
  36. package/esm2022/lib/forms/form-date/form-date.component.mjs +0 -69
  37. package/esm2022/lib/forms/form-datetime/form-datetime.component.mjs +0 -67
  38. package/esm2022/lib/forms/form-empty/form-empty.component.mjs +0 -30
  39. package/esm2022/lib/forms/form-error/form-error.component.mjs +0 -42
  40. package/esm2022/lib/forms/form-file/form-file.component.loc.mjs +0 -22
  41. package/esm2022/lib/forms/form-file/form-file.component.mjs +0 -175
  42. package/esm2022/lib/forms/form-info/form-info.component.mjs +0 -42
  43. package/esm2022/lib/forms/form-input/form-input.component.mjs +0 -83
  44. package/esm2022/lib/forms/form-multiselect/form-multiselect.component.loc.mjs +0 -23
  45. package/esm2022/lib/forms/form-multiselect/form-multiselect.component.mjs +0 -163
  46. package/esm2022/lib/forms/form-select/form-select.component.loc.mjs +0 -21
  47. package/esm2022/lib/forms/form-select/form-select.component.mjs +0 -165
  48. package/esm2022/lib/forms/form-template/form-template.component.mjs +0 -77
  49. package/esm2022/lib/forms/form-textarea/form-textarea.component.mjs +0 -57
  50. package/esm2022/lib/forms/form-time/form-time.component.mjs +0 -115
  51. package/esm2022/lib/forms-and-validations.module.mjs +0 -213
  52. package/esm2022/lib/models/AppFile.mjs +0 -14
  53. package/esm2022/lib/models/ChangeEvent.mjs +0 -7
  54. package/esm2022/lib/models/FormsAndValidationsModuleConfig.mjs +0 -6
  55. package/esm2022/lib/models/dayjs-adapter/dayjs-date-adapter.mjs +0 -89
  56. package/esm2022/lib/tokens.mjs +0 -8
  57. package/esm2022/lib/validations/base-validation.loc.mjs +0 -23
  58. package/esm2022/lib/validations/base-validation.mjs +0 -328
  59. package/esm2022/lib/validations/customValidators/CustomRequiredDirective.mjs +0 -41
  60. package/esm2022/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs +0 -147
  61. package/esm2022/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.mjs +0 -240
  62. package/esm2022/lib/validations/validation-currency/validation-currency.component.mjs +0 -75
  63. package/esm2022/lib/validations/validation-date/validation-date.component.mjs +0 -183
  64. package/esm2022/lib/validations/validation-datetime/validation-datetime.component.mjs +0 -212
  65. package/esm2022/lib/validations/validation-input/validation-input.component.mjs +0 -222
  66. package/esm2022/lib/validations/validation-select/validation-select.component.mjs +0 -183
  67. package/esm2022/lib/validations/validation-text-area/validation-text-area.component.mjs +0 -78
  68. package/esm2022/public-api.mjs +0 -40
  69. package/lib/forms/base-form-control.d.ts +0 -276
  70. package/lib/forms/form-adaptive/form-adaptive.component.d.ts +0 -126
  71. package/lib/forms/form-adaptive/form-adaptive.component.loc.d.ts +0 -14
  72. package/lib/forms/form-autocomplete/form-autocomplete.component.d.ts +0 -84
  73. package/lib/forms/form-autocomplete/form-autocomplete.component.loc.d.ts +0 -14
  74. package/lib/forms/form-checkbox/form-checkbox.component.d.ts +0 -23
  75. package/lib/forms/form-date/form-date.component.d.ts +0 -21
  76. package/lib/forms/form-datetime/form-datetime.component.d.ts +0 -23
  77. package/lib/forms/form-empty/form-empty.component.d.ts +0 -15
  78. package/lib/forms/form-file/form-file.component.d.ts +0 -46
  79. package/lib/forms/form-file/form-file.component.loc.d.ts +0 -14
  80. package/lib/forms/form-input/form-input.component.d.ts +0 -33
  81. package/lib/forms/form-multiselect/form-multiselect.component.d.ts +0 -67
  82. package/lib/forms/form-multiselect/form-multiselect.component.loc.d.ts +0 -14
  83. package/lib/forms/form-select/form-select.component.d.ts +0 -43
  84. package/lib/forms/form-select/form-select.component.loc.d.ts +0 -14
  85. package/lib/forms/form-textarea/form-textarea.component.d.ts +0 -18
  86. package/lib/forms/form-time/form-time.component.d.ts +0 -40
  87. package/lib/forms-and-validations.module.d.ts +0 -47
  88. package/lib/models/FormsAndValidationsModuleConfig.d.ts +0 -11
  89. package/lib/models/dayjs-adapter/dayjs-date-adapter.d.ts +0 -49
  90. package/lib/validations/base-validation.d.ts +0 -219
  91. package/lib/validations/base-validation.loc.d.ts +0 -14
  92. package/lib/validations/customValidators/CustomRequiredDirective.d.ts +0 -24
  93. package/lib/validations/validation-autocomplete/validation-autocomplete.component.d.ts +0 -58
  94. package/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.d.ts +0 -88
  95. package/lib/validations/validation-currency/validation-currency.component.d.ts +0 -28
  96. package/lib/validations/validation-date/validation-date.component.d.ts +0 -79
  97. package/lib/validations/validation-datetime/validation-datetime.component.d.ts +0 -109
  98. package/lib/validations/validation-input/validation-input.component.d.ts +0 -134
  99. package/lib/validations/validation-select/validation-select.component.d.ts +0 -95
  100. package/lib/validations/validation-text-area/validation-text-area.component.d.ts +0 -28
@@ -1,69 +0,0 @@
1
- // Angular
2
- import { NG_VALIDATORS } from "@angular/forms";
3
- import { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self } from "@angular/core";
4
- import { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';
5
- // Applicazione
6
- import { BaseFormControl } from "../base-form-control";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@esfaenza/extensions";
9
- import * as i2 from "@angular/forms";
10
- import * as i3 from "@esfaenza/access-control";
11
- import * as i4 from "@angular/common";
12
- import * as i5 from "../../validations/validation-date/validation-date.component";
13
- /** Componente che dà all'utente la possibilità di selezionare una data */
14
- export class FormDateComponent extends BaseFormControl {
15
- /** @ignore Costruttore */
16
- constructor(datesExts, cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE) {
17
- super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);
18
- this.datesExts = datesExts;
19
- /** Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs */
20
- this.JsDates = false;
21
- }
22
- /** @ignore */
23
- writeValue(obj) {
24
- this.EvaluatedModel = this.datesExts.getFormatted(obj, true, false);
25
- super.writeValue(obj);
26
- }
27
- changed() {
28
- let newlyEvaluatedModel = this.Model ? this.datesExts.getFormatted(this.Model, true, false) : '';
29
- // Evito che l'inputChange lato html mi faccia sparare fuori dai changed finti. L'input cambia solo quando cambia il modello presentato
30
- if (newlyEvaluatedModel != this.EvaluatedModel) {
31
- this.EvaluatedModel = newlyEvaluatedModel;
32
- super.changed(null, false, true);
33
- }
34
- }
35
- /** @ignore */
36
- onNotNullValueSet() { }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDateComponent, deps: [{ token: i1.DateService }, { token: i0.ChangeDetectorRef }, { token: i2.NgControl, optional: true, self: true }, { token: NG_VALIDATORS, optional: true }, { token: i3.AccessControlService, optional: true }, { token: i3.ComponentContext, optional: true }, { token: ACO_CUSTOMKEY, optional: true }, { token: FAV_DEBUG_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormDateComponent, selector: "form-date", inputs: { JsDates: "JsDates" }, usesInheritance: true, ngImport: i0, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-date [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [id]=\"GeneratedName\"\r\n [Readonly]=\"Readonly\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-date>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ValidationDateComponent, selector: "val-date", inputs: ["useJsDates"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39
- }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDateComponent, decorators: [{
41
- type: Component,
42
- args: [{ selector: "form-date", changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-date [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [id]=\"GeneratedName\"\r\n [Readonly]=\"Readonly\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-date>\r\n</ng-template>" }]
43
- }], ctorParameters: () => [{ type: i1.DateService }, { type: i0.ChangeDetectorRef }, { type: i2.NgControl, decorators: [{
44
- type: Optional
45
- }, {
46
- type: Self
47
- }] }, { type: Array, decorators: [{
48
- type: Optional
49
- }, {
50
- type: Inject,
51
- args: [NG_VALIDATORS]
52
- }] }, { type: i3.AccessControlService, decorators: [{
53
- type: Optional
54
- }] }, { type: i3.ComponentContext, decorators: [{
55
- type: Optional
56
- }] }, { type: undefined, decorators: [{
57
- type: Optional
58
- }, {
59
- type: Inject,
60
- args: [ACO_CUSTOMKEY]
61
- }] }, { type: undefined, decorators: [{
62
- type: Optional
63
- }, {
64
- type: Inject,
65
- args: [FAV_DEBUG_MODE]
66
- }] }], propDecorators: { JsDates: [{
67
- type: Input
68
- }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm1zLWFuZC12YWxpZGF0aW9ucy9zcmMvbGliL2Zvcm1zL2Zvcm0tZGF0ZS9mb3JtLWRhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1kYXRlL2Zvcm0tZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUF3QixhQUFhLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFRLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUt4RyxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3RCxlQUFlO0FBQ2YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7O0FBR3ZELDBFQUEwRTtBQU0xRSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsZUFBZTtJQUtsRCwyQkFBMkI7SUFDM0IsWUFBb0IsU0FBc0IsRUFBRSxHQUFzQixFQUFzQixTQUFvQixFQUFxQyxXQUF1QixFQUFjLEVBQXdCLEVBQWMsVUFBNEIsRUFBcUMsYUFBcUIsRUFBc0MsY0FBdUI7UUFDM1csS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRGxFLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFKMUMsd0hBQXdIO1FBQy9HLFlBQU8sR0FBWSxLQUFLLENBQUM7SUFLbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxVQUFVLENBQUMsR0FBUTtRQUNmLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRWpHLHVJQUF1STtRQUN2SSxJQUFJLG1CQUFtQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsY0FBYyxHQUFHLG1CQUFtQixDQUFBO1lBQ3pDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxpQkFBaUIsS0FBVyxDQUFDOytHQTNCcEIsaUJBQWlCLG1JQU13RyxhQUFhLGlJQUErSCxhQUFhLDZCQUE2QyxjQUFjO21HQU43VSxpQkFBaUIsd0dDbkI5Qixzb0dBMENjOzs0RkR2QkQsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNJLFdBQVcsbUJBRUosdUJBQXVCLENBQUMsTUFBTTs7MEJBUXNCLFFBQVE7OzBCQUFJLElBQUk7OzBCQUEwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUE0QixRQUFROzswQkFBOEIsUUFBUTs7MEJBQWtDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQTBCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzt5Q0FIN1UsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMSURBVE9SUywgTmdDb250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3QsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBTZWxmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBDb21wb25lbnRDb250ZXh0IH0gZnJvbSAnQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sJztcclxuaW1wb3J0IHsgRGF0ZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuaW1wb3J0IHsgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xyXG5cclxuLy8gQXBwbGljYXppb25lXHJcbmltcG9ydCB7IEJhc2VGb3JtQ29udHJvbCB9IGZyb20gXCIuLi9iYXNlLWZvcm0tY29udHJvbFwiO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBjaGUgZMOgIGFsbCd1dGVudGUgbGEgcG9zc2liaWxpdMOgIGRpIHNlbGV6aW9uYXJlIHVuYSBkYXRhICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1kYXRlXCIsXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJmb3JtLWRhdGUuY29tcG9uZW50Lmh0bWxcIixcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtRGF0ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgICAvKiogVXRpbGl6emEgaWwgRGF0ZSBkaSBKYXZhc2NyaXB0IGNvbWUgbW9kZWxsbyBpbiB1c2NpdGEuIElsIG1vZGVsbG8gaW4gZW50cmF0YSB2ZXJyw6AgY29tdW5xdWUgcmljb25kb3R0byBhIHVuIERheUpzICovXHJcbiAgICBASW5wdXQoKSBKc0RhdGVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgQ29zdHJ1dHRvcmUgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVzRXh0czogRGF0ZVNlcnZpY2UsIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfVkFMSURBVE9SUykgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIEBPcHRpb25hbCgpIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQE9wdGlvbmFsKCkgQXBwQ29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgQE9wdGlvbmFsKCkgQEluamVjdChBQ09fQ1VTVE9NS0VZKSBBQ09fQ1VTVE9NS0VZOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoRkFWX0RFQlVHX01PREUpIEZBVl9ERUJVR19NT0RFOiBib29sZWFuKSB7XHJcbiAgICAgICAgc3VwZXIoY2RyLCBuZ0NvbnRyb2wsIF92YWxpZGF0b3JzLCBhYywgQXBwQ29udGV4dCwgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZChvYmosIHRydWUsIGZhbHNlKTtcclxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgbmV3bHlFdmFsdWF0ZWRNb2RlbCA9IHRoaXMuTW9kZWwgPyB0aGlzLmRhdGVzRXh0cy5nZXRGb3JtYXR0ZWQodGhpcy5Nb2RlbCwgdHJ1ZSwgZmFsc2UpIDogJyc7XHJcblxyXG4gICAgICAgIC8vIEV2aXRvIGNoZSBsJ2lucHV0Q2hhbmdlIGxhdG8gaHRtbCBtaSBmYWNjaWEgc3BhcmFyZSBmdW9yaSBkYWkgY2hhbmdlZCBmaW50aS4gTCdpbnB1dCBjYW1iaWEgc29sbyBxdWFuZG8gY2FtYmlhIGlsIG1vZGVsbG8gcHJlc2VudGF0b1xyXG4gICAgICAgIGlmIChuZXdseUV2YWx1YXRlZE1vZGVsICE9IHRoaXMuRXZhbHVhdGVkTW9kZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IG5ld2x5RXZhbHVhdGVkTW9kZWxcclxuICAgICAgICAgICAgc3VwZXIuY2hhbmdlZChudWxsLCBmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBvbk5vdE51bGxWYWx1ZVNldCgpOiB2b2lkIHsgfVxyXG59IiwiPCEtLSBVZ3VhbGUgaW4gdHV0dGkgaSBjb21wb25lbnRpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFGb3JtTGF5b3V0ICYmICghRGlzcGxheU1vZGUgfHwgKERpc3BsYXlMYXlvdXQgIT0gJ2hpZGRlbicgJiYgRGlzcGxheUNvbmRpdGlvbikpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgIURpc3BsYXlNb2RlVGVtcGxhdGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheUxheW91dCA9PSAnZm9ybSdcIj57eyBFdmFsdWF0ZWRNb2RlbCB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnXCIgY2xhc3M9XCJhcHAtaW5saW5lXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiRm9ybUxheW91dCAmJiAoIURpc3BsYXlNb2RlIHx8IChEaXNwbGF5TGF5b3V0ICE9ICdoaWRkZW4nICYmIERpc3BsYXlDb25kaXRpb24pKVwiIGNsYXNzPVwie3tGb3JtR3JvdXBDbGFzcyArIChMYXN0ID8gJyBhcHAtbWFyZ2luLWJvdHRvbS0wIGFwcC1tYXJnaW4tcmlnaHQtMCAnIDogJycpICsgKERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgJiYgRGlzcGxheU1vZGUgPyAoJyBhcHAtaW5saW5lLWJsb2NrICcgKyAoIUxhc3QgPyAnYXBwLW1hcmdpbi1yaWdodC0xMCcgOiAnJykpIDogJyBmb3JtLWdyb3VwIHJvdycpfX1cIj5cclxuXHJcbiAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQte3soRGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyA/ICdub25lIGFwcC1ib2xkIGFwcC1tYXJnaW4tYm90dG9tLTAnIDogTGFiZWxDb2xXaWR0aCkgKyAoRGlzcGxheU1vZGUgPyAnIGFwcC1ib2xkJyA6ICcgbS10LTUnKSB9fVwiPnt7TGFiZWx9fXt7UmVxdWlyZWQgJiYgIURpc3BsYXlNb2RlID8gJyonIDogJyd9fXt7TGFiZWwgPyBcIjpcIiA6IFwiXCJ9fTwvbGFiZWw+XHJcbiAgICA8c3BhbiAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgJiYgSW5saW5lU2VwYXJhdG9yICE9ICcnXCI+e3tJbmxpbmVTZXBhcmF0b3J9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnID8gJ25vbmUgYXBwLWlubGluZS1ibG9jaycgOiBJbnB1dENvbFdpZHRofX1cIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XHJcbiAgICA8dmFsLWRhdGUgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCJcclxuICAgICAgICAgICAgICBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiXHJcbiAgICAgICAgICAgICAgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFxyXG4gICAgICAgICAgICAgIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIlxyXG4gICAgICAgICAgICAgIFtpZF09XCJHZW5lcmF0ZWROYW1lXCJcclxuICAgICAgICAgICAgICBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgIFtjbGFzc109XCJSZWFkb25seSA/ICdhcHAtYmctbGlnaHRncmV5JyA6ICcnXCJcclxuICAgICAgICAgICAgICBbdXNlSnNEYXRlc109XCJKc0RhdGVzXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIk1vZGVsXCJcclxuICAgICAgICAgICAgICBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIlxyXG4gICAgICAgICAgICAgICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCJcclxuICAgICAgICAgICAgICAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCJcclxuICAgICAgICAgICAgICAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRpb25GYWlsZWRdPVwiRmFpbGVkVmFsaWRhdGlvbk1lc3NhZ2VcIj5cclxuICAgIDwvdmFsLWRhdGU+XHJcbjwvbmctdGVtcGxhdGU+Il19
@@ -1,67 +0,0 @@
1
- // Angular
2
- import { NG_VALIDATORS } from "@angular/forms";
3
- import { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self } from "@angular/core";
4
- import { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';
5
- // Applicazione
6
- import { BaseFormControl } from "../base-form-control";
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@esfaenza/extensions";
9
- import * as i2 from "@angular/forms";
10
- import * as i3 from "@esfaenza/access-control";
11
- import * as i4 from "@angular/common";
12
- import * as i5 from "../../validations/validation-datetime/validation-datetime.component";
13
- /**
14
- * Componente che dà all'utente la possibilità di selezionare una data insieme ad un orario
15
- */
16
- export class FormDateTimeComponent extends BaseFormControl {
17
- /** @ignore Costruttore */
18
- constructor(datesExts, cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE) {
19
- super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);
20
- this.datesExts = datesExts;
21
- /** Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs */
22
- this.JsDates = false;
23
- }
24
- /** @ignore */
25
- writeValue(obj) {
26
- this.EvaluatedModel = this.datesExts.getFormatted(obj, false, true);
27
- super.writeValue(obj);
28
- }
29
- changed() {
30
- this.EvaluatedModel = this.Model ? this.datesExts.getFormatted(this.Model, false, true) : '';
31
- super.changed(null, false, true);
32
- }
33
- /** @ignore */
34
- onNotNullValueSet() { }
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDateTimeComponent, deps: [{ token: i1.DateService }, { token: i0.ChangeDetectorRef }, { token: i2.NgControl, optional: true, self: true }, { token: NG_VALIDATORS, optional: true }, { token: i3.AccessControlService, optional: true }, { token: i3.ComponentContext, optional: true }, { token: ACO_CUSTOMKEY, optional: true }, { token: FAV_DEBUG_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
36
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormDateTimeComponent, selector: "form-datetime", inputs: { JsDates: "JsDates" }, usesInheritance: true, ngImport: i0, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-datetime [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [Readonly]=\"Readonly\"\r\n [id]=\"GeneratedName\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-datetime>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ValidationDateTimeComponent, selector: "val-datetime", inputs: ["useJsDates"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37
- }
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDateTimeComponent, decorators: [{
39
- type: Component,
40
- args: [{ selector: "form-datetime", changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-datetime [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [Readonly]=\"Readonly\"\r\n [id]=\"GeneratedName\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-datetime>\r\n</ng-template>" }]
41
- }], ctorParameters: () => [{ type: i1.DateService }, { type: i0.ChangeDetectorRef }, { type: i2.NgControl, decorators: [{
42
- type: Optional
43
- }, {
44
- type: Self
45
- }] }, { type: Array, decorators: [{
46
- type: Optional
47
- }, {
48
- type: Inject,
49
- args: [NG_VALIDATORS]
50
- }] }, { type: i3.AccessControlService, decorators: [{
51
- type: Optional
52
- }] }, { type: i3.ComponentContext, decorators: [{
53
- type: Optional
54
- }] }, { type: undefined, decorators: [{
55
- type: Optional
56
- }, {
57
- type: Inject,
58
- args: [ACO_CUSTOMKEY]
59
- }] }, { type: undefined, decorators: [{
60
- type: Optional
61
- }, {
62
- type: Inject,
63
- args: [FAV_DEBUG_MODE]
64
- }] }], propDecorators: { JsDates: [{
65
- type: Input
66
- }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kYXRldGltZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWRhdGV0aW1lL2Zvcm0tZGF0ZXRpbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1kYXRldGltZS9mb3JtLWRhdGV0aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQXdCLGFBQWEsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQVEsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBS3hHLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdELGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7QUFHdkQ7O0dBRUc7QUFNSCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsZUFBZTtJQUt0RCwyQkFBMkI7SUFDM0IsWUFBb0IsU0FBc0IsRUFBRSxHQUFzQixFQUFzQixTQUFvQixFQUFxQyxXQUF1QixFQUFjLEVBQXdCLEVBQWMsVUFBNEIsRUFBcUMsYUFBc0IsRUFBc0MsY0FBd0I7UUFDN1csS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRGxFLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFKMUMsd0hBQXdIO1FBQy9HLFlBQU8sR0FBWSxLQUFLLENBQUM7SUFLbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxVQUFVLENBQUMsR0FBUTtRQUNmLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdGLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsY0FBYztJQUNkLGlCQUFpQixLQUFXLENBQUM7K0dBdEJwQixxQkFBcUIsbUlBTW9HLGFBQWEsaUlBQStILGFBQWEsNkJBQThDLGNBQWM7bUdBTjlVLHFCQUFxQiw0R0NyQmxDLDB0R0EwQ2M7OzRGRHJCRCxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0ksZUFBZSxtQkFFUix1QkFBdUIsQ0FBQyxNQUFNOzswQkFRc0IsUUFBUTs7MEJBQUksSUFBSTs7MEJBQTBCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQTRCLFFBQVE7OzBCQUE4QixRQUFROzswQkFBa0MsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFBMkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjO3lDQUg5VSxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOZ0NvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdCwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIFNlbGYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UsIENvbXBvbmVudENvbnRleHQgfSBmcm9tICdAZXNmYWVuemEvYWNjZXNzLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQmFzZUZvcm1Db250cm9sIH0gZnJvbSBcIi4uL2Jhc2UtZm9ybS1jb250cm9sXCI7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIGNoZSBkw6AgYWxsJ3V0ZW50ZSBsYSBwb3NzaWJpbGl0w6AgZGkgc2VsZXppb25hcmUgdW5hIGRhdGEgaW5zaWVtZSBhZCB1biBvcmFyaW9cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1kYXRldGltZVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiZm9ybS1kYXRldGltZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1EYXRlVGltZUNvbXBvbmVudCBleHRlbmRzIEJhc2VGb3JtQ29udHJvbCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIFxyXG4gICAgLyoqIFV0aWxpenphIGlsIERhdGUgZGkgSmF2YXNjcmlwdCBjb21lIG1vZGVsbG8gaW4gdXNjaXRhLiBJbCBtb2RlbGxvIGluIGVudHJhdGEgdmVycsOgIGNvbXVucXVlIHJpY29uZG90dG8gYSB1biBEYXlKcyAqL1xyXG4gICAgQElucHV0KCkgSnNEYXRlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlc0V4dHM6IERhdGVTZXJ2aWNlLCBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBAT3B0aW9uYWwoKSBAU2VsZigpIG5nQ29udHJvbDogTmdDb250cm9sLCBAT3B0aW9uYWwoKSBASW5qZWN0KE5HX1ZBTElEQVRPUlMpIF92YWxpZGF0b3JzOiBBcnJheTxhbnk+LCBAT3B0aW9uYWwoKSBhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UsIEBPcHRpb25hbCgpIEFwcENvbnRleHQ6IENvbXBvbmVudENvbnRleHQsIEBPcHRpb25hbCgpIEBJbmplY3QoQUNPX0NVU1RPTUtFWSkgQUNPX0NVU1RPTUtFWSA6IHN0cmluZywgQE9wdGlvbmFsKCkgQEluamVjdChGQVZfREVCVUdfTU9ERSkgRkFWX0RFQlVHX01PREUgOiBib29sZWFuKSB7XHJcbiAgICAgICAgc3VwZXIoY2RyLCBuZ0NvbnRyb2wsIF92YWxpZGF0b3JzLCBhYywgQXBwQ29udGV4dCwgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZChvYmosIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Nb2RlbCA/IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZCh0aGlzLk1vZGVsLCBmYWxzZSwgdHJ1ZSkgOiAnJztcclxuICAgICAgICBzdXBlci5jaGFuZ2VkKG51bGwsIGZhbHNlLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgb25Ob3ROdWxsVmFsdWVTZXQoKTogdm9pZCB7IH1cclxufSIsIjwhLS0gVWd1YWxlIGluIHR1dHRpIGkgY29tcG9uZW50aSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhRm9ybUxheW91dCAmJiAoIURpc3BsYXlNb2RlIHx8IChEaXNwbGF5TGF5b3V0ICE9ICdoaWRkZW4nICYmIERpc3BsYXlDb25kaXRpb24pKVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlMYXlvdXQgPT0gJ2Zvcm0nXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiRGlzcGxheUxheW91dCA9PSAnaW5saW5lJ1wiIGNsYXNzPVwiYXBwLWlubGluZVwiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TW9kZVRlbXBsYXRlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkRpc3BsYXlNb2RlVGVtcGxhdGUsIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBFdmFsdWF0ZWRNb2RlbCB9XCI+PC9uZy1jb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8ZGl2IFtoaWRkZW5dPVwiRGlzcGxheU1vZGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGRpdiAqbmdJZj1cIkZvcm1MYXlvdXQgJiYgKCFEaXNwbGF5TW9kZSB8fCAoRGlzcGxheUxheW91dCAhPSAnaGlkZGVuJyAmJiBEaXNwbGF5Q29uZGl0aW9uKSlcIiBjbGFzcz1cInt7Rm9ybUdyb3VwQ2xhc3MgKyAoTGFzdCA/ICcgYXBwLW1hcmdpbi1ib3R0b20tMCBhcHAtbWFyZ2luLXJpZ2h0LTAgJyA6ICcnKSArIChEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnICYmIERpc3BsYXlNb2RlID8gKCcgYXBwLWlubGluZS1ibG9jayAnICsgKCFMYXN0ID8gJ2FwcC1tYXJnaW4tcmlnaHQtMTAnIDogJycpKSA6ICcgZm9ybS1ncm91cCByb3cnKX19XCI+XHJcblxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLXt7KERpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgPyAnbm9uZSBhcHAtYm9sZCBhcHAtbWFyZ2luLWJvdHRvbS0wJyA6IExhYmVsQ29sV2lkdGgpICsgKERpc3BsYXlNb2RlID8gJyBhcHAtYm9sZCcgOiAnIG0tdC01JykgfX1cIj57e0xhYmVsfX17e1JlcXVpcmVkICYmICFEaXNwbGF5TW9kZSA/ICcqJyA6ICcnfX17e0xhYmVsID8gXCI6XCIgOiBcIlwifX08L2xhYmVsPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnICYmIElubGluZVNlcGFyYXRvciAhPSAnJ1wiPnt7SW5saW5lU2VwYXJhdG9yfX08L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7RGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyA/ICdub25lIGFwcC1pbmxpbmUtYmxvY2snIDogSW5wdXRDb2xXaWR0aH19XCI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiAhRGlzcGxheU1vZGVUZW1wbGF0ZVwiPnt7IEV2YWx1YXRlZE1vZGVsIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IFtoaWRkZW5dPVwiRGlzcGxheU1vZGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlPlxyXG4gICAgPHZhbC1kYXRldGltZSAgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCJcclxuICAgICAgICAgICAgICAgICAgIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBcclxuICAgICAgICAgICAgICAgICAgIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgIFtpZF09XCJHZW5lcmF0ZWROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJSZWFkb25seSA/ICdhcHAtYmctbGlnaHRncmV5JyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgIFt1c2VKc0RhdGVzXT1cIkpzRGF0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCJcclxuICAgICAgICAgICAgICAgICAgIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgW3ZhbGlkYXRpb25GYWlsZWRdPVwiRmFpbGVkVmFsaWRhdGlvbk1lc3NhZ2VcIj5cclxuICAgIDwvdmFsLWRhdGV0aW1lPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -1,30 +0,0 @@
1
- // Angular
2
- import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/forms";
5
- import * as i2 from "../../validations/validation-input/validation-input.component";
6
- /**
7
- * Componente placeholder per la creazione dei form che rappresenta un blocchetto vuoto,
8
- * al posto del quale possono poi comparire dei componenti form senza incasinare la grafica
9
- */
10
- export class FormEmptyComponent {
11
- constructor() {
12
- /** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */
13
- this.Last = false;
14
- /** Classe extra per il form-group in cui viene wrappato l'input finto */
15
- this.FormGroupClass = "";
16
- /** Valore placeholder da mostrare */
17
- this.PlaceholderModel = "Placeholder";
18
- }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormEmptyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormEmptyComponent, selector: "form-empty", inputs: { Last: "Last", FormGroupClass: "FormGroupClass" }, ngImport: i0, template: "<div class=\"form-group row app-hidden-view {{FormGroupClass}}\" [class.app-margin-bottom-0]=\"Last\">\r\n <label class=\"col-md-4 m-t-5\">Placeholder:</label>\r\n <div class=\"col-md-8\">\r\n <val-input type=\"text\" [(ngModel)]=\"PlaceholderModel\" [ngModelOptions]=\"{standalone: true}\"></val-input>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>", dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.ValidationInputComponent, selector: "val-input", inputs: ["Frozen", "Password", "showWarning", "warningTitle", "warningClass", "value", "Type", "maxlength", "minlength"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
21
- }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormEmptyComponent, decorators: [{
23
- type: Component,
24
- args: [{ selector: "form-empty", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group row app-hidden-view {{FormGroupClass}}\" [class.app-margin-bottom-0]=\"Last\">\r\n <label class=\"col-md-4 m-t-5\">Placeholder:</label>\r\n <div class=\"col-md-8\">\r\n <val-input type=\"text\" [(ngModel)]=\"PlaceholderModel\" [ngModelOptions]=\"{standalone: true}\"></val-input>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>" }]
25
- }], propDecorators: { Last: [{
26
- type: Input
27
- }], FormGroupClass: [{
28
- type: Input
29
- }] } });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbXB0eS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWVtcHR5L2Zvcm0tZW1wdHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1lbXB0eS9mb3JtLWVtcHR5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQUUxRTs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sa0JBQWtCO0lBTC9CO1FBT0kseUZBQXlGO1FBQ2hGLFNBQUksR0FBWSxLQUFLLENBQUM7UUFFL0IseUVBQXlFO1FBQ2hFLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBRXJDLHFDQUFxQztRQUM5QixxQkFBZ0IsR0FBVyxhQUFhLENBQUM7S0FDbkQ7K0dBVlksa0JBQWtCO21HQUFsQixrQkFBa0IsOEdDWi9CLDRYQU1NOzs0RkRNTyxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0ksWUFBWSxtQkFFTCx1QkFBdUIsQ0FBQyxNQUFNOzhCQUt0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgcGxhY2Vob2xkZXIgcGVyIGxhIGNyZWF6aW9uZSBkZWkgZm9ybSBjaGUgcmFwcHJlc2VudGEgdW4gYmxvY2NoZXR0byB2dW90bywgXHJcbiAqIGFsIHBvc3RvIGRlbCBxdWFsZSBwb3Nzb25vIHBvaSBjb21wYXJpcmUgZGVpIGNvbXBvbmVudGkgZm9ybSBzZW56YSBpbmNhc2luYXJlIGxhIGdyYWZpY2FcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1lbXB0eVwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiZm9ybS1lbXB0eS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1FbXB0eUNvbXBvbmVudCB7XHJcblxyXG4gICAgLyoqIEluZGljYSBzZSDDqCBsJ3VsdGltbyBjb21wb25lbnRlIGRpIHVuIGZvcm0gKHNlcnZlIHBlciByaW11b3ZlcmUgaWwgbWFyZ2luZSBmaW5hbGUpICovXHJcbiAgICBASW5wdXQoKSBMYXN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIENsYXNzZSBleHRyYSBwZXIgaWwgZm9ybS1ncm91cCBpbiBjdWkgdmllbmUgd3JhcHBhdG8gbCdpbnB1dCBmaW50byAqL1xyXG4gICAgQElucHV0KCkgRm9ybUdyb3VwQ2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgLyoqIFZhbG9yZSBwbGFjZWhvbGRlciBkYSBtb3N0cmFyZSAqL1xyXG4gICAgcHVibGljIFBsYWNlaG9sZGVyTW9kZWw6IHN0cmluZyA9IFwiUGxhY2Vob2xkZXJcIjtcclxufSIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBhcHAtaGlkZGVuLXZpZXcge3tGb3JtR3JvdXBDbGFzc319XCIgW2NsYXNzLmFwcC1tYXJnaW4tYm90dG9tLTBdPVwiTGFzdFwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTQgbS10LTVcIj5QbGFjZWhvbGRlcjo8L2xhYmVsPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgPHZhbC1pbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiUGxhY2Vob2xkZXJNb2RlbFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj48L3ZhbC1pbnB1dD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbjwvZGl2PiJdfQ==
@@ -1,42 +0,0 @@
1
- // Angular
2
- import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Componente placeholder per la creazione dei form che rappresenta un blocchetto di erorre,
6
- * al posto del quale possono poi comparire dei componenti form senza incasinare la grafica
7
- */
8
- export class FormErrorComponent {
9
- constructor() {
10
- /** col-md-X per la label (Che in questoc aso è vuota) */
11
- this.LabelColWidth = 4;
12
- /** col-md-X per l'input (che in questo caso contiene il messaggio d'errore proiettato nell'HTML) */
13
- this.InputColWidth = 8;
14
- /** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */
15
- this.Last = false;
16
- /** Classe extra per il form-group in cui viene wrappato l'input */
17
- this.FormGroupClass = "";
18
- }
19
- /** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi "X Y" */
20
- set LabelInputRatio(input) {
21
- var ratio = input.split(/\s/);
22
- this.LabelColWidth = parseInt(ratio[0]);
23
- this.InputColWidth = parseInt(ratio[1]);
24
- }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormErrorComponent, selector: "form-error", inputs: { LabelColWidth: "LabelColWidth", InputColWidth: "InputColWidth", Last: "Last", FormGroupClass: "FormGroupClass", LabelInputRatio: "LabelInputRatio" }, ngImport: i0, template: "<div class=\"form-group row {{FormGroupClass}}\" [class.app-margin-bottom-0]=\"Last\">\r\n <label class=\"app-hidden-view col-md-{{LabelColWidth}} m-t-5\"></label>\r\n <span class=\"help-block text-danger col-md-{{InputColWidth}}\">\r\n <ng-content></ng-content>\r\n </span>\r\n <div class=\"clearfix\"></div>\r\n</div>", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27
- }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormErrorComponent, decorators: [{
29
- type: Component,
30
- args: [{ selector: "form-error", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"form-group row {{FormGroupClass}}\" [class.app-margin-bottom-0]=\"Last\">\r\n <label class=\"app-hidden-view col-md-{{LabelColWidth}} m-t-5\"></label>\r\n <span class=\"help-block text-danger col-md-{{InputColWidth}}\">\r\n <ng-content></ng-content>\r\n </span>\r\n <div class=\"clearfix\"></div>\r\n</div>" }]
31
- }], propDecorators: { LabelColWidth: [{
32
- type: Input
33
- }], InputColWidth: [{
34
- type: Input
35
- }], Last: [{
36
- type: Input
37
- }], FormGroupClass: [{
38
- type: Input
39
- }], LabelInputRatio: [{
40
- type: Input
41
- }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWVycm9yL2Zvcm0tZXJyb3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1lcnJvci9mb3JtLWVycm9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFMUU7OztHQUdHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQUwvQjtRQU9JLHlEQUF5RDtRQUNoRCxrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUVuQyxvR0FBb0c7UUFDM0Ysa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFFbkMseUZBQXlGO1FBQ2hGLFNBQUksR0FBWSxLQUFLLENBQUM7UUFFL0IsbUVBQW1FO1FBQzFELG1CQUFjLEdBQVcsRUFBRSxDQUFDO0tBUXhDO0lBTkcsMkhBQTJIO0lBQzNILElBQWEsZUFBZSxDQUFDLEtBQWE7UUFDdEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDOytHQW5CUSxrQkFBa0I7bUdBQWxCLGtCQUFrQixrTkNaL0Isb1ZBTU07OzRGRE1PLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZLG1CQUVMLHVCQUF1QixDQUFDLE1BQU07OEJBS3RDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHTyxlQUFlO3NCQUEzQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKipcclxuICogQ29tcG9uZW50ZSBwbGFjZWhvbGRlciBwZXIgbGEgY3JlYXppb25lIGRlaSBmb3JtIGNoZSByYXBwcmVzZW50YSB1biBibG9jY2hldHRvIGRpIGVyb3JyZSwgXHJcbiAqIGFsIHBvc3RvIGRlbCBxdWFsZSBwb3Nzb25vIHBvaSBjb21wYXJpcmUgZGVpIGNvbXBvbmVudGkgZm9ybSBzZW56YSBpbmNhc2luYXJlIGxhIGdyYWZpY2FcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiZm9ybS1lcnJvclwiLFxyXG4gICAgdGVtcGxhdGVVcmw6IFwiZm9ybS1lcnJvci5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1FcnJvckNvbXBvbmVudCB7XHJcblxyXG4gICAgLyoqIGNvbC1tZC1YIHBlciBsYSBsYWJlbCAoQ2hlIGluIHF1ZXN0b2MgYXNvIMOoIHZ1b3RhKSAqL1xyXG4gICAgQElucHV0KCkgTGFiZWxDb2xXaWR0aDogbnVtYmVyID0gNDtcclxuXHJcbiAgICAvKiogY29sLW1kLVggcGVyIGwnaW5wdXQgKGNoZSBpbiBxdWVzdG8gY2FzbyBjb250aWVuZSBpbCBtZXNzYWdnaW8gZCdlcnJvcmUgcHJvaWV0dGF0byBuZWxsJ0hUTUwpICovXHJcbiAgICBASW5wdXQoKSBJbnB1dENvbFdpZHRoOiBudW1iZXIgPSA4O1xyXG5cclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggbCd1bHRpbW8gY29tcG9uZW50ZSBkaSB1biBmb3JtIChzZXJ2ZSBwZXIgcmltdW92ZXJlIGlsIG1hcmdpbmUgZmluYWxlKSAqL1xyXG4gICAgQElucHV0KCkgTGFzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBDbGFzc2UgZXh0cmEgcGVyIGlsIGZvcm0tZ3JvdXAgaW4gY3VpIHZpZW5lIHdyYXBwYXRvIGwnaW5wdXQgKi9cclxuICAgIEBJbnB1dCgpIEZvcm1Hcm91cENsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBzZXR0YXJlIGluIHVuYSB2b2x0YSBzb2xvIGdsaSBpbnB1dCBMYWJlbENvbFdpZHRoIGUgSW5wdXRDb2xXaWR0aCwgYmFzdGEgc2NyaXZlcmxvIGNvbiBsYSBzaW50YXNzaSBcIlggWVwiICovXHJcbiAgICBASW5wdXQoKSBzZXQgTGFiZWxJbnB1dFJhdGlvKGlucHV0OiBzdHJpbmcpIHtcclxuICAgICAgICB2YXIgcmF0aW8gPSBpbnB1dC5zcGxpdCgvXFxzLyk7XHJcbiAgICAgICAgdGhpcy5MYWJlbENvbFdpZHRoID0gcGFyc2VJbnQocmF0aW9bMF0pO1xyXG4gICAgICAgIHRoaXMuSW5wdXRDb2xXaWR0aCA9IHBhcnNlSW50KHJhdGlvWzFdKTtcclxuICAgIH1cclxufSIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyB7e0Zvcm1Hcm91cENsYXNzfX1cIiBbY2xhc3MuYXBwLW1hcmdpbi1ib3R0b20tMF09XCJMYXN0XCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJhcHAtaGlkZGVuLXZpZXcgY29sLW1kLXt7TGFiZWxDb2xXaWR0aH19IG0tdC01XCI+PC9sYWJlbD5cclxuICAgIDxzcGFuIGNsYXNzPVwiaGVscC1ibG9jayB0ZXh0LWRhbmdlciBjb2wtbWQte3tJbnB1dENvbFdpZHRofX1cIj5cclxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuPC9kaXY+Il19
@@ -1,22 +0,0 @@
1
- import { Injectable } from "@angular/core";
2
- import { LocalizationService } from "@esfaenza/localizations";
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Classe di localizzazione per il componente **FormFileComponent**
6
- */
7
- export class FormFileComponentLoc extends LocalizationService {
8
- /**
9
- * @ignore
10
- */
11
- constructor(injector) {
12
- super(injector);
13
- super.set("en->it", "Select a file", ["Seleziona un file"]);
14
- super.set("en->it", "Files Selected", ["File Selezionati"]);
15
- }
16
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFileComponentLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
17
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFileComponentLoc }); }
18
- }
19
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFileComponentLoc, decorators: [{
20
- type: Injectable
21
- }], ctorParameters: () => [{ type: i0.Injector }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWxlLmNvbXBvbmVudC5sb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWZpbGUvZm9ybS1maWxlLmNvbXBvbmVudC5sb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFOUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsbUJBQW1CO0lBRXpEOztPQUVHO0lBQ0gsWUFBWSxRQUFrQjtRQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQzVELEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7K0dBVlEsb0JBQW9CO21IQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuXHJcbi8qKlxyXG4gKiBDbGFzc2UgZGkgbG9jYWxpenphemlvbmUgcGVyIGlsIGNvbXBvbmVudGUgKipGb3JtRmlsZUNvbXBvbmVudCoqXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBGb3JtRmlsZUNvbXBvbmVudExvYyBleHRlbmRzIExvY2FsaXphdGlvblNlcnZpY2Uge1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBpZ25vcmVcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xyXG5cclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJTZWxlY3QgYSBmaWxlXCIsIFtcIlNlbGV6aW9uYSB1biBmaWxlXCJdKTtcclxuICAgICAgICBzdXBlci5zZXQoXCJlbi0+aXRcIiwgXCJGaWxlcyBTZWxlY3RlZFwiLCBbXCJGaWxlIFNlbGV6aW9uYXRpXCJdKTtcclxuICAgIH1cclxufSJdfQ==
@@ -1,175 +0,0 @@
1
- // Angular
2
- import { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self, ViewChild } from "@angular/core";
3
- import { NG_VALIDATORS } from "@angular/forms";
4
- import { LocalizationService } from "@esfaenza/localizations";
5
- // Applicazione
6
- import { BaseFormControl } from "../base-form-control";
7
- // Modelli
8
- import { AppFile } from "../../models/AppFile";
9
- // Configurazioni
10
- import { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';
11
- import { FormFileComponentLoc } from "./form-file.component.loc";
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@esfaenza/extensions";
14
- import * as i2 from "@angular/forms";
15
- import * as i3 from "@esfaenza/access-control";
16
- import * as i4 from "@esfaenza/localizations";
17
- import * as i5 from "@angular/common";
18
- /** Componente che permette all'utente di caricare/scaricare un file all'interno di un campo Input */
19
- export class FormFileComponent extends BaseFormControl {
20
- /** @ignore Costruttore */
21
- constructor(msgs, cdr, utiExts, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, lc, FAV_DEBUG_MODE) {
22
- super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);
23
- this.msgs = msgs;
24
- this.utiExts = utiExts;
25
- this.lc = lc;
26
- /** Permette di caricare file multipli */
27
- this.Multiple = false;
28
- /** Permette di scaricare l'eventuale file selezionato */
29
- this.AllowDownload = true;
30
- /** Controllo sulla dimensione di ogni singolo file in Byte. 0 -> nessun limite */
31
- this.MaxSize = 0;
32
- /** Sportivo */
33
- this.FancyMode = false;
34
- /** Legge sempre il contenuto del file e ne estrapola il base64 */
35
- this.ReadFile = false;
36
- //Per questo componente non posso permettermi che il modello sia nullo
37
- this.Model = new AppFile();
38
- }
39
- ngOnInit() {
40
- super.ngOnInit();
41
- ;
42
- if (this._validators) {
43
- this._validators.push(this);
44
- this.ngControl.control.setValidators(this._validators);
45
- this.ngControl.control.updateValueAndValidity();
46
- }
47
- if (this.ReadFile && this.Multiple)
48
- throw new Error("Impossibile utilizzare ReadFile e Multiple nello stesso form-file.");
49
- }
50
- validate(control) {
51
- if (this.Required && !this.Model.filename)
52
- return { required: true };
53
- else
54
- return null;
55
- }
56
- /** @ignore */
57
- writeValue(obj) {
58
- var model = obj == null ? new AppFile() : obj;
59
- this.EvaluatedModel = model.filename;
60
- super.writeValue(model);
61
- if (obj == null)
62
- this.changed();
63
- }
64
- /**
65
- * Helper per gestire la modifica del file attualmente bindato
66
- *
67
- * @param {boolean} clear Indica se bisogna svuotare l'input o meno
68
- */
69
- fileChange(clear = false) {
70
- let files = [];
71
- let model = this.Model;
72
- let ne = this.inputEl.nativeElement;
73
- if (clear) {
74
- model.filename = "";
75
- ne.value = "";
76
- model.fileb64 = "";
77
- model.nativefiles = [];
78
- }
79
- else {
80
- for (let i = 0; i < ne.files.length; i++) {
81
- let file = ne.files.item(i);
82
- if (this.MaxSize > 0 && file.size > this.MaxSize) {
83
- this.msgs.simpleError(`Il file ${file.name} eccede la dimensione massima ${this.MaxSize} B`);
84
- this.fileChange(true);
85
- return;
86
- }
87
- files.push(file);
88
- }
89
- // Modalità Upload Singolo File
90
- if (ne.files.length == 1) {
91
- let fileUploaded = ne.files[0];
92
- model.filename = fileUploaded.name;
93
- if (this.ReadFile) {
94
- let reader = new FileReader();
95
- reader.readAsDataURL(fileUploaded);
96
- reader.onload = () => {
97
- let fileSource = reader.result.toString();
98
- let fileSourceSegments = fileSource.split(',');
99
- model.fileb64 = fileSourceSegments[fileSourceSegments.length - 1];
100
- };
101
- }
102
- }
103
- // Modalità Upload Multiple File
104
- if (ne.files.length > 1)
105
- model.filename = ne.files.length + " " + this.lc.loc("Files Selected");
106
- model.nativefiles = files;
107
- model.fileb64 = null;
108
- }
109
- this.EvaluatedModel = model.filename;
110
- this.changed(null, true, true);
111
- }
112
- /** Permette di scaricare l'eventuale file selezionato */
113
- onDownloadFile() {
114
- let model = this.Model;
115
- this.utiExts.saveFile(model.fileb64, model.filename);
116
- }
117
- /** @ignore */
118
- onNotNullValueSet() { }
119
- // FancyMode - Drag Over
120
- onFileDragOver(event) {
121
- event.preventDefault();
122
- event.stopPropagation();
123
- }
124
- // FancyMode - File Dropped
125
- onFileDropped(event) {
126
- event.preventDefault();
127
- event.stopPropagation();
128
- let ne = this.inputEl.nativeElement;
129
- ne.files = event.dataTransfer?.files;
130
- this.fileChange();
131
- }
132
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFileComponent, deps: [{ token: i1.MessageService }, { token: i0.ChangeDetectorRef }, { token: i1.UtilityService }, { token: i2.NgControl, optional: true, self: true }, { token: NG_VALIDATORS, optional: true }, { token: i3.AccessControlService, optional: true }, { token: i3.ComponentContext, optional: true }, { token: ACO_CUSTOMKEY, optional: true }, { token: i4.LocalizationService }, { token: FAV_DEBUG_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
133
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFileComponent, selector: "form-file", inputs: { Multiple: "Multiple", AllowDownload: "AllowDownload", MaxSize: "MaxSize", FancyMode: "FancyMode", ReadFile: "ReadFile" }, providers: [{ provide: LocalizationService, useClass: FormFileComponentLoc }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!--Per la DisplayMode, a differenza di TUTTI gli altri forms, ho dovuto inserire \"Model?.filename\", in quanto \r\nEvaluatedModel \u00E8 una stringa valorizzata col modello AppFile, e non posso farci ragionamenti sopra a causa del compilatore-->\r\n\r\n<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FancyMode && !FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"!FancyMode && FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" (click)=\"onDownloadFile()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"Model.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Fancy Mode-->\r\n<div *ngIf=\"FancyMode\" (drop)=\"onFileDropped($event)\" (dragover)=\"onFileDragOver($event)\">\r\n <!--Drop-->\r\n <label for=\"{{GeneratedName}}\" class=\"drop-container\">\r\n <span class=\"drop-title\">{{Label}}</span>\r\n <div class=\"file-name-container\">{{Model.filename || 'Nessun file selezionato'}}</div>\r\n <!--Hidden Forms-->\r\n <input hidden type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input hidden type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" \r\n placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n <!--Clean-->\r\n <i class=\"fa fa-times file-delete-btn\" (click)=\"fileChange(true); $event.stopPropagation(); false;\" *ngIf=\"Model.filename\"></i>\r\n <!--Download-->\r\n <div *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" class=\"app-pointer file-download-btn\" (click)=\"onDownloadFile(); $event.stopPropagation(); false;\">\r\n <span class=\"file-download-btn-text\">Download <i class=\"fa fa-download\"></i></span>\r\n </div>\r\n </label>\r\n</div>", styles: [".frm-padding-left-22{padding-left:22px}.drop-container{position:relative;display:flex;gap:10px;flex-direction:column;justify-content:center;align-items:center;height:200px;padding:20px;border-radius:10px;border:2px dashed #0d45a5;color:#444;cursor:pointer;transition:background .2s ease-in-out,border .2s ease-in-out}.drop-container:hover{background:#eee;border-color:#111}.drop-container:hover .drop-title{color:#222}.drop-title{color:#444;font-size:20px;font-weight:700;text-align:center;transition:color .2s ease-in-out}input[type=file]{width:350px;max-width:100%;color:#444;padding:5px;background:#fff;border-radius:10px;border:1px solid #555}input[type=file]::file-selector-button{margin-right:20px;border:none;background:#084cdf;padding:10px 20px;border-radius:10px;color:#fff;cursor:pointer;transition:background .2s ease-in-out}input[type=file]::file-selector-button:hover{background:#0d45a5}.file-download-btn{border-radius:5px;padding:5px 10px;background-color:#0d45a5}.file-download-btn:hover{background-color:#084cdf}.file-download-btn-text{color:#fff}.file-delete-btn{color:red;position:absolute;right:10px;top:10px}.file-name-container{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow-y:clip;text-align:center}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i4.LocalizePipe, name: "localize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
134
- }
135
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFileComponent, decorators: [{
136
- type: Component,
137
- args: [{ selector: "form-file", providers: [{ provide: LocalizationService, useClass: FormFileComponentLoc }], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--Per la DisplayMode, a differenza di TUTTI gli altri forms, ho dovuto inserire \"Model?.filename\", in quanto \r\nEvaluatedModel \u00E8 una stringa valorizzata col modello AppFile, e non posso farci ragionamenti sopra a causa del compilatore-->\r\n\r\n<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FancyMode && !FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"!FancyMode && FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" (click)=\"onDownloadFile()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"Model.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Fancy Mode-->\r\n<div *ngIf=\"FancyMode\" (drop)=\"onFileDropped($event)\" (dragover)=\"onFileDragOver($event)\">\r\n <!--Drop-->\r\n <label for=\"{{GeneratedName}}\" class=\"drop-container\">\r\n <span class=\"drop-title\">{{Label}}</span>\r\n <div class=\"file-name-container\">{{Model.filename || 'Nessun file selezionato'}}</div>\r\n <!--Hidden Forms-->\r\n <input hidden type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input hidden type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" \r\n placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n <!--Clean-->\r\n <i class=\"fa fa-times file-delete-btn\" (click)=\"fileChange(true); $event.stopPropagation(); false;\" *ngIf=\"Model.filename\"></i>\r\n <!--Download-->\r\n <div *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" class=\"app-pointer file-download-btn\" (click)=\"onDownloadFile(); $event.stopPropagation(); false;\">\r\n <span class=\"file-download-btn-text\">Download <i class=\"fa fa-download\"></i></span>\r\n </div>\r\n </label>\r\n</div>", styles: [".frm-padding-left-22{padding-left:22px}.drop-container{position:relative;display:flex;gap:10px;flex-direction:column;justify-content:center;align-items:center;height:200px;padding:20px;border-radius:10px;border:2px dashed #0d45a5;color:#444;cursor:pointer;transition:background .2s ease-in-out,border .2s ease-in-out}.drop-container:hover{background:#eee;border-color:#111}.drop-container:hover .drop-title{color:#222}.drop-title{color:#444;font-size:20px;font-weight:700;text-align:center;transition:color .2s ease-in-out}input[type=file]{width:350px;max-width:100%;color:#444;padding:5px;background:#fff;border-radius:10px;border:1px solid #555}input[type=file]::file-selector-button{margin-right:20px;border:none;background:#084cdf;padding:10px 20px;border-radius:10px;color:#fff;cursor:pointer;transition:background .2s ease-in-out}input[type=file]::file-selector-button:hover{background:#0d45a5}.file-download-btn{border-radius:5px;padding:5px 10px;background-color:#0d45a5}.file-download-btn:hover{background-color:#084cdf}.file-download-btn-text{color:#fff}.file-delete-btn{color:red;position:absolute;right:10px;top:10px}.file-name-container{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow-y:clip;text-align:center}\n"] }]
138
- }], ctorParameters: () => [{ type: i1.MessageService }, { type: i0.ChangeDetectorRef }, { type: i1.UtilityService }, { type: i2.NgControl, decorators: [{
139
- type: Optional
140
- }, {
141
- type: Self
142
- }] }, { type: Array, decorators: [{
143
- type: Optional
144
- }, {
145
- type: Inject,
146
- args: [NG_VALIDATORS]
147
- }] }, { type: i3.AccessControlService, decorators: [{
148
- type: Optional
149
- }] }, { type: i3.ComponentContext, decorators: [{
150
- type: Optional
151
- }] }, { type: undefined, decorators: [{
152
- type: Optional
153
- }, {
154
- type: Inject,
155
- args: [ACO_CUSTOMKEY]
156
- }] }, { type: i4.LocalizationService }, { type: undefined, decorators: [{
157
- type: Optional
158
- }, {
159
- type: Inject,
160
- args: [FAV_DEBUG_MODE]
161
- }] }], propDecorators: { Multiple: [{
162
- type: Input
163
- }], AllowDownload: [{
164
- type: Input
165
- }], MaxSize: [{
166
- type: Input
167
- }], FancyMode: [{
168
- type: Input
169
- }], ReadFile: [{
170
- type: Input
171
- }], inputEl: [{
172
- type: ViewChild,
173
- args: ["fileInput", { static: false }]
174
- }] } });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm1zLWFuZC12YWxpZGF0aW9ucy9zcmMvbGliL2Zvcm1zL2Zvcm0tZmlsZS9mb3JtLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1maWxlL2Zvcm0tZmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBaUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNsSixPQUFPLEVBQXdCLGFBQWEsRUFBMkQsTUFBTSxnQkFBZ0IsQ0FBQztBQUk5SCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc5RCxlQUFlO0FBQ2YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXZELFVBQVU7QUFDVixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0MsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7O0FBRWpFLHFHQUFxRztBQVFyRyxNQUFNLE9BQU8saUJBQWtCLFNBQVEsZUFBZTtJQW9CbEQsMkJBQTJCO0lBQzNCLFlBQW9CLElBQW9CLEVBQUUsR0FBc0IsRUFBVSxPQUF1QixFQUFzQixTQUFvQixFQUFxQyxXQUF1QixFQUFjLEVBQXdCLEVBQWMsVUFBNEIsRUFBcUMsYUFBcUIsRUFBUyxFQUF1QixFQUFzQyxjQUF3QjtR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QUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLHVKQ3RCakYsMGdMQWdFTTs7NEZEckNPLGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDSSxXQUFXLGFBQ1YsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxtQkFHNUQsdUJBQXVCLENBQUMsTUFBTTs7MEJBdUJxRCxRQUFROzswQkFBSSxJQUFJOzswQkFBMEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFBNEIsUUFBUTs7MEJBQThCLFFBQVE7OzBCQUFrQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7OzBCQUEwRCxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWM7eUNBbEI1WSxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHcUMsT0FBTztzQkFBakQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIFNlbGYsIFZpZXdDaGlsZCwgSG9zdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxJREFUT1JTLCBOZ0NvbnRyb2wsIFZhbGlkYXRvciwgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG4vLyBFc2ZhZW56YVxyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sU2VydmljZSwgQ29tcG9uZW50Q29udGV4dCB9IGZyb20gJ0Blc2ZhZW56YS9hY2Nlc3MtY29udHJvbCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2xvY2FsaXphdGlvbnNcIjtcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9leHRlbnNpb25zXCI7XHJcblxyXG4vLyBBcHBsaWNhemlvbmVcclxuaW1wb3J0IHsgQmFzZUZvcm1Db250cm9sIH0gZnJvbSBcIi4uL2Jhc2UtZm9ybS1jb250cm9sXCI7XHJcblxyXG4vLyBNb2RlbGxpXHJcbmltcG9ydCB7IEFwcEZpbGUgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL0FwcEZpbGVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IEFDT19DVVNUT01LRVksIEZBVl9ERUJVR19NT0RFIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcclxuaW1wb3J0IHsgRm9ybUZpbGVDb21wb25lbnRMb2MgfSBmcm9tIFwiLi9mb3JtLWZpbGUuY29tcG9uZW50LmxvY1wiO1xyXG5cclxuLyoqIENvbXBvbmVudGUgY2hlIHBlcm1ldHRlIGFsbCd1dGVudGUgZGkgY2FyaWNhcmUvc2NhcmljYXJlIHVuIGZpbGUgYWxsJ2ludGVybm8gZGkgdW4gY2FtcG8gSW5wdXQgKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJmb3JtLWZpbGVcIixcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTG9jYWxpemF0aW9uU2VydmljZSwgdXNlQ2xhc3M6IEZvcm1GaWxlQ29tcG9uZW50TG9jIH1dLFxyXG4gICAgc3R5bGVVcmxzOiBbXCJmb3JtLWZpbGUuY29tcG9uZW50LmNzc1wiXSxcclxuICAgIHRlbXBsYXRlVXJsOiBcImZvcm0tZmlsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1GaWxlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZvcm1Db250cm9sIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB7XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIGNhcmljYXJlIGZpbGUgbXVsdGlwbGkgKi9cclxuICAgIEBJbnB1dCgpIE11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHNjYXJpY2FyZSBsJ2V2ZW50dWFsZSBmaWxlIHNlbGV6aW9uYXRvICovXHJcbiAgICBASW5wdXQoKSBBbGxvd0Rvd25sb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQ29udHJvbGxvIHN1bGxhIGRpbWVuc2lvbmUgZGkgb2duaSBzaW5nb2xvIGZpbGUgaW4gQnl0ZS4gMCAtPiBuZXNzdW4gbGltaXRlICovXHJcbiAgICBASW5wdXQoKSBNYXhTaXplOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIC8qKiBTcG9ydGl2byAqL1xyXG4gICAgQElucHV0KCkgRmFuY3lNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIExlZ2dlIHNlbXByZSBpbCBjb250ZW51dG8gZGVsIGZpbGUgZSBuZSBlc3RyYXBvbGEgaWwgYmFzZTY0ICovXHJcbiAgICBASW5wdXQoKSBSZWFkRmlsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBSaWZlcmltZW50byBhbGwnZWxlbWVudG8gaW5wdXQgZGkgdGlwbyBmaWxlICovXHJcbiAgICBAVmlld0NoaWxkKFwiZmlsZUlucHV0XCIsIHsgc3RhdGljOiBmYWxzZSB9KSBpbnB1dEVsOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtc2dzOiBNZXNzYWdlU2VydmljZSwgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgQE9wdGlvbmFsKCkgQFNlbGYoKSBuZ0NvbnRyb2w6IE5nQ29udHJvbCwgQE9wdGlvbmFsKCkgQEluamVjdChOR19WQUxJREFUT1JTKSBfdmFsaWRhdG9yczogQXJyYXk8YW55PiwgQE9wdGlvbmFsKCkgYWM6IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlLCBAT3B0aW9uYWwoKSBBcHBDb250ZXh0OiBDb21wb25lbnRDb250ZXh0LCBAT3B0aW9uYWwoKSBASW5qZWN0KEFDT19DVVNUT01LRVkpIEFDT19DVVNUT01LRVk6IHN0cmluZywgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLCBAT3B0aW9uYWwoKSBASW5qZWN0KEZBVl9ERUJVR19NT0RFKSBGQVZfREVCVUdfTU9ERSA6IGJvb2xlYW4pIHtcclxuICAgICAgICBzdXBlcihjZHIsIG5nQ29udHJvbCwgX3ZhbGlkYXRvcnMsIGFjLCBBcHBDb250ZXh0LCBBQ09fQ1VTVE9NS0VZLCBGQVZfREVCVUdfTU9ERSk7XHJcblxyXG4gICAgICAgIC8vUGVyIHF1ZXN0byBjb21wb25lbnRlIG5vbiBwb3NzbyBwZXJtZXR0ZXJtaSBjaGUgaWwgbW9kZWxsbyBzaWEgbnVsbG9cclxuICAgICAgICB0aGlzLk1vZGVsID0gbmV3IEFwcEZpbGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpOztcclxuICAgICAgICBpZiAodGhpcy5fdmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICB0aGlzLl92YWxpZGF0b3JzLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLl92YWxpZGF0b3JzKTtcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLlJlYWRGaWxlICYmIHRoaXMuTXVsdGlwbGUpXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkltcG9zc2liaWxlIHV0aWxpenphcmUgUmVhZEZpbGUgZSBNdWx0aXBsZSBuZWxsbyBzdGVzc28gZm9ybS1maWxlLlwiKTsgXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB7XHJcbiAgICAgICAgaWYgKHRoaXMuUmVxdWlyZWQgJiYgISg8QXBwRmlsZT50aGlzLk1vZGVsKS5maWxlbmFtZSlcclxuICAgICAgICAgICAgcmV0dXJuIHsgcmVxdWlyZWQ6IHRydWUgfVxyXG4gICAgICAgIGVsc2UgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHdyaXRlVmFsdWUob2JqOiBBcHBGaWxlKTogdm9pZCB7XHJcbiAgICAgICAgdmFyIG1vZGVsID0gb2JqID09IG51bGwgPyBuZXcgQXBwRmlsZSgpIDogb2JqO1xyXG4gICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBtb2RlbC5maWxlbmFtZTtcclxuICAgICAgICBzdXBlci53cml0ZVZhbHVlKG1vZGVsKTtcclxuXHJcbiAgICAgICAgaWYob2JqID09IG51bGwpXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBnZXN0aXJlIGxhIG1vZGlmaWNhIGRlbCBmaWxlIGF0dHVhbG1lbnRlIGJpbmRhdG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBjbGVhciBJbmRpY2Egc2UgYmlzb2duYSBzdnVvdGFyZSBsJ2lucHV0IG8gbWVubyBcclxuICAgICAqL1xyXG4gICAgZmlsZUNoYW5nZShjbGVhcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IGZpbGVzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICBsZXQgbW9kZWwgPSAoPEFwcEZpbGU+dGhpcy5Nb2RlbCk7XHJcbiAgICAgICAgbGV0IG5lOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmIChjbGVhcikge1xyXG4gICAgICAgICAgICBtb2RlbC5maWxlbmFtZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIG5lLnZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgbW9kZWwuZmlsZWI2NCA9IFwiXCI7XHJcbiAgICAgICAgICAgIG1vZGVsLm5hdGl2ZWZpbGVzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5lLmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmlsZSA9IG5lLmZpbGVzLml0ZW0oaSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5NYXhTaXplID4gMCAmJiBmaWxlLnNpemUgPiB0aGlzLk1heFNpemUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ3Muc2ltcGxlRXJyb3IoYElsIGZpbGUgJHtmaWxlLm5hbWV9IGVjY2VkZSBsYSBkaW1lbnNpb25lIG1hc3NpbWEgJHt0aGlzLk1heFNpemV9IEJgKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUNoYW5nZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBNb2RhbGl0w6AgVXBsb2FkIFNpbmdvbG8gRmlsZVxyXG4gICAgICAgICAgICBpZiAobmUuZmlsZXMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgIGxldCBmaWxlVXBsb2FkZWQgPSBuZS5maWxlc1swXTtcclxuICAgICAgICAgICAgICAgIG1vZGVsLmZpbGVuYW1lID0gZmlsZVVwbG9hZGVkLm5hbWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5SZWFkRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGVVcGxvYWRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVTb3VyY2UgPSByZWFkZXIucmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlU291cmNlU2VnbWVudHMgPSBmaWxlU291cmNlLnNwbGl0KCcsJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbC5maWxlYjY0ID0gZmlsZVNvdXJjZVNlZ21lbnRzW2ZpbGVTb3VyY2VTZWdtZW50cy5sZW5ndGggLTFdO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIE1vZGFsaXTDoCBVcGxvYWQgTXVsdGlwbGUgRmlsZVxyXG4gICAgICAgICAgICBpZiAobmUuZmlsZXMubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgIG1vZGVsLmZpbGVuYW1lID0gbmUuZmlsZXMubGVuZ3RoICsgXCIgXCIgKyB0aGlzLmxjLmxvYyhcIkZpbGVzIFNlbGVjdGVkXCIpO1xyXG5cclxuICAgICAgICAgICAgbW9kZWwubmF0aXZlZmlsZXMgPSBmaWxlcztcclxuICAgICAgICAgICAgbW9kZWwuZmlsZWI2NCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gbW9kZWwuZmlsZW5hbWU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkKG51bGwsIHRydWUsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBzY2FyaWNhcmUgbCdldmVudHVhbGUgZmlsZSBzZWxlemlvbmF0byAqL1xyXG4gICAgb25Eb3dubG9hZEZpbGUoKSB7XHJcbiAgICAgICAgbGV0IG1vZGVsID0gKDxBcHBGaWxlPnRoaXMuTW9kZWwpO1xyXG4gICAgICAgIHRoaXMudXRpRXh0cy5zYXZlRmlsZShtb2RlbC5maWxlYjY0LCBtb2RlbC5maWxlbmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIG9uTm90TnVsbFZhbHVlU2V0KCk6IHZvaWQgeyB9XHJcblxyXG4gICAgLy8gRmFuY3lNb2RlIC0gRHJhZyBPdmVyXHJcbiAgICBvbkZpbGVEcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGYW5jeU1vZGUgLSBGaWxlIERyb3BwZWRcclxuICAgIG9uRmlsZURyb3BwZWQoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgbGV0IG5lOiBIVE1MSW5wdXRFbGVtZW50ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgbmUuZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xyXG4gICAgICAgIHRoaXMuZmlsZUNoYW5nZSgpO1xyXG4gICAgfVxyXG59IiwiPCEtLVBlciBsYSBEaXNwbGF5TW9kZSwgYSBkaWZmZXJlbnphIGRpIFRVVFRJIGdsaSBhbHRyaSBmb3JtcywgaG8gZG92dXRvIGluc2VyaXJlIFwiTW9kZWw/LmZpbGVuYW1lXCIsIGluIHF1YW50byBcclxuRXZhbHVhdGVkTW9kZWwgw6ggdW5hIHN0cmluZ2EgdmFsb3JpenphdGEgY29sIG1vZGVsbG8gQXBwRmlsZSwgZSBub24gcG9zc28gZmFyY2kgcmFnaW9uYW1lbnRpIHNvcHJhIGEgY2F1c2EgZGVsIGNvbXBpbGF0b3JlLS0+XHJcblxyXG48IS0tIFVndWFsZSBpbiB0dXR0aSBpIGNvbXBvbmVudGkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIUZhbmN5TW9kZSAmJiAhRm9ybUxheW91dCAmJiAoIURpc3BsYXlNb2RlIHx8IChEaXNwbGF5TGF5b3V0ICE9ICdoaWRkZW4nICYmIERpc3BsYXlDb25kaXRpb24pKVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlMYXlvdXQgPT0gJ2Zvcm0nXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLWxpbmtcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZTtcIiAqbmdJZj1cIk1vZGVsPy5maWxlbmFtZVwiIChjbGljayk9XCJvbkRvd25sb2FkRmlsZSgpXCI+e3sgTW9kZWw/LmZpbGVuYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFNb2RlbD8uZmlsZW5hbWVcIj5OL0E8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIkRpc3BsYXlMYXlvdXQgPT0gJ2lubGluZSdcIiBjbGFzcz1cImFwcC1pbmxpbmVcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtbGlua1wiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lO1wiICpuZ0lmPVwiTW9kZWw/LmZpbGVuYW1lXCIgKGNsaWNrKT1cIm9uRG93bmxvYWRGaWxlKClcIj57eyBNb2RlbD8uZmlsZW5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIU1vZGVsPy5maWxlbmFtZVwiPk4vQTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIUZhbmN5TW9kZSAmJiBGb3JtTGF5b3V0ICYmICghRGlzcGxheU1vZGUgfHwgKERpc3BsYXlMYXlvdXQgIT0gJ2hpZGRlbicgJiYgRGlzcGxheUNvbmRpdGlvbikpXCIgY2xhc3M9XCJ7e0Zvcm1Hcm91cENsYXNzICsgKExhc3QgPyAnIGFwcC1tYXJnaW4tYm90dG9tLTAgYXBwLW1hcmdpbi1yaWdodC0wICcgOiAnJykgKyAoRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyAmJiBEaXNwbGF5TW9kZSA/ICgnIGFwcC1pbmxpbmUtYmxvY2sgJyArICghTGFzdCA/ICdhcHAtbWFyZ2luLXJpZ2h0LTEwJyA6ICcnKSkgOiAnIGZvcm0tZ3JvdXAgcm93Jyl9fVwiPlxyXG4gICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLXt7KERpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgPyAnbm9uZSBhcHAtYm9sZCBhcHAtbWFyZ2luLWJvdHRvbS0wJyA6IExhYmVsQ29sV2lkdGgpICsgKERpc3BsYXlNb2RlID8gJyBhcHAtYm9sZCcgOiAnIG0tdC01JykgfX1cIj57e0xhYmVsfX17e1JlcXVpcmVkICYmICFEaXNwbGF5TW9kZSA/ICcqJyA6ICcnfX17e0xhYmVsID8gXCI6XCIgOiBcIlwifX08L2xhYmVsPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnICYmIElubGluZVNlcGFyYXRvciAhPSAnJ1wiPnt7SW5saW5lU2VwYXJhdG9yfX08L3NwYW4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLXt7RGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyA/ICdub25lIGFwcC1pbmxpbmUtYmxvY2snIDogSW5wdXRDb2xXaWR0aH19XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXBwLWxpbmtcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZTtcIiAqbmdJZj1cIk1vZGVsPy5maWxlbmFtZVwiIChjbGljayk9XCJvbkRvd25sb2FkRmlsZSgpXCI+e3sgTW9kZWw/LmZpbGVuYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFNb2RlbD8uZmlsZW5hbWVcIj5OL0E8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IFtoaWRkZW5dPVwiRGlzcGxheU1vZGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGZpbGUtdXBsb2FkXCI+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlKClcIiBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgI2ZpbGVJbnB1dCBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0biBhcHAtcG9pbnRlclwiIFttdWx0aXBsZV09XCJNdWx0aXBsZSA/IHRydWUgOiBudWxsXCIgLz5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbY2xhc3MuZnJtLXBhZGRpbmctbGVmdC0yMl09XCJBbGxvd0Rvd25sb2FkICYmIE1vZGVsLmZpbGVuYW1lICYmIE1vZGVsLmZpbGViNjRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjaGVja2luZy1maWVsZFwiIHBsYWNlaG9sZGVyPVwie3tQbGFjZWhvbGRlciB8fCAoJ1NlbGVjdCBhIGZpbGUnIHwgbG9jYWxpemUgOiBsYyl9fS4uLlwiIFsobmdNb2RlbCldPVwiTW9kZWwuZmlsZW5hbWVcIiBuYW1lPVwiZHNmaWxlX3t7R2VuZXJhdGVkTmFtZX19XCIgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIC8+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGEgY2xhc3M9XCJmYSBmYS1kb3dubG9hZCBhcHAtcG9pbnRlciBhcHAtaW5wdXQtaWNvblwiICpuZ0lmPVwiQWxsb3dEb3dubG9hZCAmJiBNb2RlbC5maWxlbmFtZSAmJiBNb2RlbC5maWxlYjY0XCIgKGNsaWNrKT1cIm9uRG93bmxvYWRGaWxlKClcIj48L2E+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aW1lcyBkZWxldGUtZmlsZVwiIChjbGljayk9XCJmaWxlQ2hhbmdlKHRydWUpXCIgKm5nSWY9XCJNb2RlbC5maWxlbmFtZVwiPjwvaT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1maWxlLXVwbG9hZFwiIHR5cGU9XCJidXR0b25cIj48aSBjbGFzcz1cImZhIGZhLXVwbG9hZFwiPjwvaT48L2J1dHRvbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS1GYW5jeSBNb2RlLS0+XHJcbjxkaXYgKm5nSWY9XCJGYW5jeU1vZGVcIiAoZHJvcCk9XCJvbkZpbGVEcm9wcGVkKCRldmVudClcIiAoZHJhZ292ZXIpPVwib25GaWxlRHJhZ092ZXIoJGV2ZW50KVwiPlxyXG4gICAgPCEtLURyb3AtLT5cclxuICAgIDxsYWJlbCBmb3I9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGNsYXNzPVwiZHJvcC1jb250YWluZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3AtdGl0bGVcIj57e0xhYmVsfX08L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtbmFtZS1jb250YWluZXJcIj57e01vZGVsLmZpbGVuYW1lIHx8ICdOZXNzdW4gZmlsZSBzZWxlemlvbmF0byd9fTwvZGl2PlxyXG4gICAgICAgIDwhLS1IaWRkZW4gRm9ybXMtLT5cclxuICAgICAgICA8aW5wdXQgaGlkZGVuIHR5cGU9XCJmaWxlXCIgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlKClcIiBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgI2ZpbGVJbnB1dCBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0biBhcHAtcG9pbnRlclwiIFttdWx0aXBsZV09XCJNdWx0aXBsZSA/IHRydWUgOiBudWxsXCIgLz5cclxuICAgICAgICA8aW5wdXQgaGlkZGVuIHR5cGU9XCJ0ZXh0XCIgW2NsYXNzLmZybS1wYWRkaW5nLWxlZnQtMjJdPVwiQWxsb3dEb3dubG9hZCAmJiBNb2RlbC5maWxlbmFtZSAmJiBNb2RlbC5maWxlYjY0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgY2hlY2tpbmctZmllbGRcIiBcclxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1BsYWNlaG9sZGVyIHx8ICgnU2VsZWN0IGEgZmlsZScgfCBsb2NhbGl6ZSA6IGxjKX19Li4uXCIgWyhuZ01vZGVsKV09XCJNb2RlbC5maWxlbmFtZVwiIG5hbWU9XCJkc2ZpbGVfe3tHZW5lcmF0ZWROYW1lfX1cIiAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgLz5cclxuICAgICAgICA8IS0tQ2xlYW4tLT5cclxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGZpbGUtZGVsZXRlLWJ0blwiIChjbGljayk9XCJmaWxlQ2hhbmdlKHRydWUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGZhbHNlO1wiICpuZ0lmPVwiTW9kZWwuZmlsZW5hbWVcIj48L2k+XHJcbiAgICAgICAgPCEtLURvd25sb2FkLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIkFsbG93RG93bmxvYWQgJiYgTW9kZWwuZmlsZW5hbWUgJiYgTW9kZWwuZmlsZWI2NFwiIGNsYXNzPVwiYXBwLXBvaW50ZXIgZmlsZS1kb3dubG9hZC1idG5cIiAoY2xpY2spPVwib25Eb3dubG9hZEZpbGUoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBmYWxzZTtcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxlLWRvd25sb2FkLWJ0bi10ZXh0XCI+RG93bmxvYWQgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2xhYmVsPlxyXG48L2Rpdj4iXX0=