@esfaenza/forms-and-validations 19.2.58 → 19.2.59

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.
@@ -446,11 +446,11 @@ class InputSkeletonComponent {
446
446
  /** @ignore Costruttore */
447
447
  constructor() { }
448
448
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: InputSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
449
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: InputSkeletonComponent, isStandalone: true, selector: "input-skeleton", inputs: { For: "For", Control: "Control" }, ngImport: i0, template: "<ng-container *ngIf=\"!For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\">\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">\r\n <ng-container *ngIf=\"For.DisplayLayout == 'form'\">{{ For.EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"For.DisplayLayout == 'inline'\" class=\"app-inline\">{{ For.EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\" class=\"{{For.FormGroupClass + (For.Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (For.DisplayLayout == 'inline' && For.DisplayMode ? (' app-inline-block ' + (!For.Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : For.LabelColWidth) + (For.DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{For.Label}}{{For.required !==undefined && !For.DisplayMode ? '*' : ''}}{{For.Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"For.DisplayMode && For.DisplayLayout == 'inline' && For.InlineSeparator != ''\">{{For.InlineSeparator}}</span>\r\n <div class=\"col-md-{{For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-inline-block' : For.InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">{{ For.EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
449
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: InputSkeletonComponent, isStandalone: true, selector: "input-skeleton", inputs: { For: "For", Control: "Control" }, ngImport: i0, template: "<ng-container *ngIf=\"!For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\">\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">\r\n <ng-container *ngIf=\"For.DisplayLayout == 'form'\">{{ For.EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"For.DisplayLayout == 'inline'\" class=\"app-inline\">{{ For.EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\" class=\"{{For.FormGroupClass + (For.Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (For.DisplayLayout == 'inline' && For.DisplayMode ? (' app-inline-block ' + (!For.Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : For.LabelColWidth) + (For.DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{For.Label}}{{For.required !== undefined && For.required !== false && !For.DisplayMode ? '*' : ''}}{{For.Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"For.DisplayMode && For.DisplayLayout == 'inline' && For.InlineSeparator != ''\">{{For.InlineSeparator}}</span>\r\n <div class=\"col-md-{{For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-inline-block' : For.InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">{{ For.EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
450
450
  }
451
451
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: InputSkeletonComponent, decorators: [{
452
452
  type: Component,
453
- args: [{ selector: "input-skeleton", encapsulation: ViewEncapsulation.None, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-container *ngIf=\"!For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\">\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">\r\n <ng-container *ngIf=\"For.DisplayLayout == 'form'\">{{ For.EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"For.DisplayLayout == 'inline'\" class=\"app-inline\">{{ For.EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\" class=\"{{For.FormGroupClass + (For.Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (For.DisplayLayout == 'inline' && For.DisplayMode ? (' app-inline-block ' + (!For.Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : For.LabelColWidth) + (For.DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{For.Label}}{{For.required !==undefined && !For.DisplayMode ? '*' : ''}}{{For.Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"For.DisplayMode && For.DisplayLayout == 'inline' && For.InlineSeparator != ''\">{{For.InlineSeparator}}</span>\r\n <div class=\"col-md-{{For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-inline-block' : For.InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">{{ For.EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>" }]
453
+ args: [{ selector: "input-skeleton", encapsulation: ViewEncapsulation.None, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<ng-container *ngIf=\"!For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\">\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">\r\n <ng-container *ngIf=\"For.DisplayLayout == 'form'\">{{ For.EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"For.DisplayLayout == 'inline'\" class=\"app-inline\">{{ For.EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\" class=\"{{For.FormGroupClass + (For.Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (For.DisplayLayout == 'inline' && For.DisplayMode ? (' app-inline-block ' + (!For.Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : For.LabelColWidth) + (For.DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{For.Label}}{{For.required !== undefined && For.required !== false && !For.DisplayMode ? '*' : ''}}{{For.Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"For.DisplayMode && For.DisplayLayout == 'inline' && For.InlineSeparator != ''\">{{For.InlineSeparator}}</span>\r\n <div class=\"col-md-{{For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-inline-block' : For.InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">{{ For.EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>" }]
454
454
  }], ctorParameters: () => [], propDecorators: { For: [{
455
455
  type: Input
456
456
  }], Control: [{
@@ -819,8 +819,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImpo
819
819
  */
820
820
  class EsFormTemplateComponent {
821
821
  constructor() {
822
- /** Indica se l'input è obbligatorio o no */
823
- this.required = false;
824
822
  /** Mostra un testo a sinistra dell'input, **FormLayout** permettendo */
825
823
  this.Label = "";
826
824
  /** Eventuali classi extra da applicare alla Label, di default c'è solo un leggero margin top */
@@ -851,13 +849,14 @@ class EsFormTemplateComponent {
851
849
  this.InputColWidth = parseInt(ratio[1]);
852
850
  }
853
851
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: EsFormTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
854
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: EsFormTemplateComponent, isStandalone: true, selector: "form-template", inputs: { required: "required", Label: "Label", LabelClass: "LabelClass", FormLayout: "FormLayout", LabelColWidth: "LabelColWidth", InputColWidth: "InputColWidth", Last: "Last", FormGroupClass: "FormGroupClass", DisplayMode: "DisplayMode", DisplayModeTemplate: "DisplayModeTemplate", DisplayLayout: "DisplayLayout", DisplayCondition: "DisplayCondition", InlineSeparator: "InlineSeparator", LabelInputRatio: "LabelInputRatio" }, ngImport: i0, template: "<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<!-- Singola proiezione -->\r\n<ng-template #controlTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: InputSkeletonComponent, selector: "input-skeleton", inputs: ["For", "Control"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
852
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "19.2.15", type: EsFormTemplateComponent, isStandalone: true, selector: "form-template", inputs: { required: ["required", "required", booleanAttribute], Label: "Label", LabelClass: "LabelClass", FormLayout: "FormLayout", LabelColWidth: "LabelColWidth", InputColWidth: "InputColWidth", Last: "Last", FormGroupClass: "FormGroupClass", DisplayMode: "DisplayMode", DisplayModeTemplate: "DisplayModeTemplate", DisplayLayout: "DisplayLayout", DisplayCondition: "DisplayCondition", InlineSeparator: "InlineSeparator", LabelInputRatio: "LabelInputRatio" }, ngImport: i0, template: "<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<!-- Singola proiezione -->\r\n<ng-template #controlTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: InputSkeletonComponent, selector: "input-skeleton", inputs: ["For", "Control"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
855
853
  }
856
854
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: EsFormTemplateComponent, decorators: [{
857
855
  type: Component,
858
856
  args: [{ selector: "form-template", imports: [CommonModule, InputSkeletonComponent], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<!-- Singola proiezione -->\r\n<ng-template #controlTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>" }]
859
857
  }], propDecorators: { required: [{
860
- type: Input
858
+ type: Input,
859
+ args: [{ transform: booleanAttribute }]
861
860
  }], Label: [{
862
861
  type: Input
863
862
  }], LabelClass: [{
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-forms-and-validations.mjs","sources":["../../../projects/forms-and-validations/src/lib/models/AppFile.ts","../../../projects/forms-and-validations/src/lib/models/ChangeEvent.ts","../../../projects/forms-and-validations/src/lib/models/EsFormsModuleConfig.ts","../../../projects/forms-and-validations/src/lib/tokens.ts","../../../projects/forms-and-validations/src/lib/services/helper.ts","../../../projects/forms-and-validations/src/lib/forms/base/base-form-control.ts","../../../projects/forms-and-validations/src/lib/forms/base/skeleton/input-skeleton.component.ts","../../../projects/forms-and-validations/src/lib/forms/base/skeleton/input-skeleton.component.html","../../../projects/forms-and-validations/src/lib/forms/input/form-input.component.ts","../../../projects/forms-and-validations/src/lib/forms/input/form-input.component.html","../../../projects/forms-and-validations/src/lib/forms/select/form-select.component.ts","../../../projects/forms-and-validations/src/lib/forms/select/form-select.component.html","../../../projects/forms-and-validations/src/lib/forms/date/form-date.component.ts","../../../projects/forms-and-validations/src/lib/forms/date/form-date.component.html","../../../projects/forms-and-validations/src/lib/forms/datetime/form-datetime.component.ts","../../../projects/forms-and-validations/src/lib/forms/time/form-time.component.ts","../../../projects/forms-and-validations/src/lib/forms/checkbox/form-checkbox.component.ts","../../../projects/forms-and-validations/src/lib/forms/checkbox/form-checkbox.component.html","../../../projects/forms-and-validations/src/lib/forms/textarea/form-textarea.component.ts","../../../projects/forms-and-validations/src/lib/forms/textarea/form-textarea.component.html","../../../projects/forms-and-validations/src/lib/forms/error/form-error.component.ts","../../../projects/forms-and-validations/src/lib/forms/error/form-error.component.html","../../../projects/forms-and-validations/src/lib/forms/template/form-template.component.ts","../../../projects/forms-and-validations/src/lib/forms/template/form-template.component.html","../../../projects/forms-and-validations/src/lib/forms/info/form-info.component.ts","../../../projects/forms-and-validations/src/lib/forms/info/form-info.component.html","../../../projects/forms-and-validations/src/lib/forms/file/form-file.component.ts","../../../projects/forms-and-validations/src/lib/forms/file/form-file.component.html","../../../projects/forms-and-validations/src/lib/forms/multiselect/form-multiselect.component.ts","../../../projects/forms-and-validations/src/lib/forms/multiselect/form-multiselect.component.html","../../../projects/forms-and-validations/src/lib/forms/autocomplete/form-autocomplete.component.ts","../../../projects/forms-and-validations/src/lib/forms/autocomplete/form-autocomplete.component.html","../../../projects/forms-and-validations/src/lib/models/BaseFormConfiguration.ts","../../../projects/forms-and-validations/src/lib/forms/currency/form-currency.component.ts","../../../projects/forms-and-validations/src/lib/forms/currency/form-currency.component.html","../../../projects/forms-and-validations/src/lib/forms/adaptive/form-adaptive.component.ts","../../../projects/forms-and-validations/src/lib/forms/adaptive/form-adaptive.component.html","../../../projects/forms-and-validations/src/lib/forms.module.ts","../../../projects/forms-and-validations/src/public-api.ts","../../../projects/forms-and-validations/src/esfaenza-forms-and-validations.ts"],"sourcesContent":["\r\n/** Classe che identifica un file */\r\nexport class AppFile {\r\n\r\n /** @ignore */\r\n constructor(){\r\n this.filename = \"\";\r\n this.fileb64 = \"\";\r\n this.nativefiles = [];\r\n }\r\n\r\n /** Nome del file, Viene letto in Input e valorizzato in Output */\r\n public filename: string; //I-O\r\n /** B64 del file, Viene letto in Input ma non valorizzato in Output (non puà leggere dal filesystem) */\r\n public fileb64: string; //I\r\n /** Lista di file nativi collegati a questo input. Viene solo valorizzato in Output. Non è letto come Input */\r\n public nativefiles: File[]; //O\r\n}","\r\nexport class ChangeEvent {\r\n constructor(public internal: boolean, public value: any) { }\r\n}","/**\r\n * Classe di configurazione del modulo\r\n */\r\nexport class EsFormsModuleConfig {\r\n\r\n\r\n /** Abilita o meno la modalità di debug */\r\n debugMode?: boolean;\r\n\r\n}","import { InjectionToken } from '@angular/core';\r\n\r\n/** Token che indica la lingua da utilizzare, sono supportate \"it-IT\" ed \"en-US\" */\r\nexport const FRM_DEBUG_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('FAV_DEBUG_MODE');","import { Injectable, Injector } from \"@angular/core\";\r\nimport { NgControl, NgForm, NgModel } from \"@angular/forms\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class FormsHelper {\r\n\r\n public retrieveModelControlAndForm(inj: Injector, fieldName: string, explicitForm?: NgForm): { control: NgControl, model: NgModel, form: { natural: boolean, entity: NgForm } } {\r\n let ngModel = inj.get(NgModel, null);\r\n\r\n if (!ngModel)\r\n throw `[@esfaenza/forms] null NgModel for field '${fieldName}'`;\r\n\r\n let ngControl = inj.get(NgControl, null);\r\n if (!ngControl)\r\n throw `[@esfaenza/forms] null NgControl for field '${fieldName}'`;\r\n\r\n var naturalParent: NgForm = (<any>ngControl)._parent;\r\n var hasForm = !!explicitForm || !!naturalParent;\r\n\r\n return {\r\n control: ngControl,\r\n model: ngModel,\r\n form: { natural: hasForm ? !explicitForm : null, entity: hasForm ? (explicitForm ?? naturalParent) : null }\r\n };\r\n }\r\n}","// Angular\r\nimport { booleanAttribute, ChangeDetectorRef, computed, ContentChild, Directive, ElementRef, EventEmitter, Injector, Input, Output, signal, Signal, TemplateRef, ViewChild } from \"@angular/core\";\r\nimport { ControlValueAccessor, NgControl, NgForm, NgModel } from \"@angular/forms\";\r\n\r\n// Prime NG\r\nimport { Popover } from \"primeng/popover\";\r\nimport { deepEquals } from '@primeuix/utils';\r\n\r\n// Rxjs\r\nimport { distinctUntilChanged, takeUntil } from \"rxjs/operators\";\r\nimport { Observable, Subject } from \"rxjs\";\r\n\r\n// Esfaenza\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Lib\r\nimport { ChangeEvent } from \"../../models/ChangeEvent\";\r\nimport { BaseFormConfiguration } from \"../../models/BaseFormConfiguration\";\r\n\r\nimport { FRM_DEBUG_MODE } from \"../../tokens\";\r\nimport { FormsHelper } from \"../../services/helper\";\r\n\r\n/** \r\n * Componente base da cui tutti i componenti Form implementano \r\n * N.B: \r\n * innerInput è il componente interno\r\n * ngControl è il componente esterno (form-roba)\r\n */\r\n@Directive()\r\nexport abstract class BaseFormControl implements ControlValueAccessor {\r\n\r\n protected onChange = (_: any) => { };\r\n public onTouched = () => { };\r\n public registerOnChange(fn: any): void { this.onChange = fn; }\r\n public registerOnTouched(fn: any): void { this.onTouched = fn; }\r\n\r\n public value: any;\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del suffisso */\r\n @ContentChild(\"suffix\", { static: false }) suffix;\r\n /** Delegato per l'esecuzione di un'operazione al click del suffisso */\r\n @Output() onSuffixAction: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del prefisso */\r\n @ContentChild(\"prefix\", { static: false }) prefix;\r\n /** Delegato per l'esecuzione di un'operazione al click del prefisso */\r\n @Output() onPrefixAction: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @ViewChild('innerInput') public innerInput: NgModel;\r\n @ViewChild('innerElement') public innerElement?: ElementRef;\r\n @ViewChild('tooltip') private tooltip?: Popover;\r\n\r\n @Output() inputChange: EventEmitter<ChangeEvent> = new EventEmitter<ChangeEvent>();\r\n @Output() inputFocus: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() inputFinalized: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n @Input() DisplayCondition: boolean = true;\r\n @Input() DisplayMode: boolean = false;\r\n @Input() DisplayLayout: 'form' | 'inline' | 'hidden' = 'form';\r\n @Input() FormLayout: boolean = true;\r\n @Input() DisplayModeTemplate: TemplateRef<any>;\r\n public EvaluatedModel: string;\r\n public InlineSeparator: string = \", \";\r\n\r\n @Input() FailedValidationMessage: string = null;\r\n @Input() Label: string;\r\n @Input() Last: boolean;\r\n @Input() FormGroupClass: string = \"\";\r\n @Input() Placeholder: string;\r\n @Input() set LabelInputRatio(input: string) {\r\n if (!input) return;\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n get LabelInputRatio(){\r\n return `${this.LabelColWidth} ${this.InputColWidth}`\r\n }\r\n public LabelColWidth: number = 4;\r\n public InputColWidth: number = 8;\r\n\r\n\r\n @Input() Form: NgForm;\r\n @Input() name: string;\r\n @Input({ transform: booleanAttribute }) readonly: boolean | undefined;\r\n @Input({ transform: booleanAttribute }) disabled: boolean | undefined;\r\n @Input() pattern: string | undefined;\r\n @Input() Validation: boolean = true;\r\n @Input() SetValidationSubject: Subject<{ fieldName: string, error: string }>;\r\n public TooltipText: string = \"\";\r\n public InternalName: string = \"\";\r\n\r\n /*\r\n *** Valori assunti in base al binding:\r\n <input ... required /input> -> required === ''\r\n <input ... /input> -> required === undefined\r\n <input ... [required]=\"true\" /input> -> required === true\r\n */\r\n @Input({ transform: booleanAttribute }) required: boolean | '' | undefined;\r\n\r\n /**\r\n * Espressione simil-Angular per cambiare il testo dei componenti che scelgono il proprio modello da una **Source**\r\n * \r\n * Il funzionamento è identico al binder di angular, solo con una graffa invece che 2.\r\n * È inoltre possibile aggiungere pezzi di descrizione in maniera condizionale con la sintassi **:prop?(Prop vale {prop})**\r\n */\r\n @Input() Display: string = '{description}';\r\n @Input() IdField: string = \"id\";\r\n private BindCheckingGroups: { global: string, prop: string, whenexists: string }[] = []\r\n private BindProperties: { global: string, prop: string }[] = [];\r\n\r\n private _source = signal<any[] | undefined>(null);\r\n @Input() get Source(): any[] | undefined { return this._source(); }\r\n set Source(val: any[] | undefined) { if (!deepEquals(val, this._source())) this._source.set(val); }\r\n protected BoundSourceCache: { [id: string]: { description: string, source: any} } = {};\r\n\r\n public BoundSource: Signal<{ id: string, description: string }[]> = computed(() => {\r\n let source = this._source();\r\n\r\n // Cache locale per evitare di rifare dei regex.match ogni santa volta\r\n if ((source?.length || 0) == 0)\r\n return [];\r\n\r\n if (this.BindCheckingGroups.length == 0)\r\n this.evaluateBindCheckingGroups();\r\n\r\n if (this.BindProperties.length == 0)\r\n this.evaluateBindProperties();\r\n\r\n this.BoundSourceCache = {};\r\n let ret = source.map(s => this.transformSourceItem(s));\r\n\r\n // Post trybind se c'è un modello associato ricalcolo l'**EvaluatedModel**\r\n if (this.value !== null || this.value !== undefined)\r\n this.EvaluatedModel = ret.find(t => t.id == this.value)?.description;\r\n\r\n return ret;\r\n });\r\n\r\n protected helper: FormsHelper;\r\n protected utiExts: UtilityService;\r\n protected lc: LocalizationService;\r\n protected msgs: MessageService;\r\n protected ngControl: NgControl;\r\n protected ngModel: NgModel;\r\n protected FRM_DEBUG_MODE: boolean;\r\n protected cdr: ChangeDetectorRef;\r\n\r\n /**\r\n * Indica se l'input del componente dev'essere risparato fuori con le trasformazioni da *outValue*\r\n * \r\n * Il controllo potrebbe essere automatico ma rischia di diventare pesante per componenti particolari/pesanti\r\n */\r\n protected shouldReemitAdjustedInput: boolean = false;\r\n\r\n @Input() statusChangesObservable: Observable<any> = null;\r\n protected performFormLogic: boolean = true;\r\n\r\n protected destroyed$: Subject<void> = new Subject<void>();\r\n \r\n @Input() Configuration: BaseFormConfiguration;\r\n\r\n constructor(protected inj: Injector) {\r\n this.cdr = this.inj.get(ChangeDetectorRef);\r\n this.lc = this.inj.get(LocalizationService);\r\n this.msgs = this.inj.get(MessageService);\r\n this.utiExts = this.inj.get(UtilityService);\r\n this.helper = this.inj.get(FormsHelper);\r\n this.FRM_DEBUG_MODE = this.inj.get(FRM_DEBUG_MODE, null);\r\n }\r\n\r\n public ngOnDestroy() {\r\n this.hideTooltip();\r\n\r\n if (this.Form && this.ngModel && !!this.Form.getControl(this.ngModel) && this.performFormLogic)\r\n this.Form.removeControl(this.ngModel);\r\n\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n public ngOnInit() {\r\n if (!this.Configuration) return;\r\n\r\n let properties = Object.keys(this.Configuration);\r\n\r\n // Riempio tutte le proprietà non assegnate con il loro equivalente da configurazione se presente\r\n for (let i = 0; i < properties.length; i++) {\r\n let p = properties[i];\r\n // LabelInputRatio è sempre overridabile\r\n if ((this[p] === null || this[p] === undefined || p == \"LabelInputRatio\") && (this.Configuration[p] !== null && this.Configuration[p] !== undefined)) {\r\n this[p] = this.Configuration[p];\r\n }\r\n }\r\n }\r\n\r\n public ngAfterViewInit() {\r\n let helpRes = this.helper.retrieveModelControlAndForm(this.inj, this.name, this.Form);\r\n this.ngModel = helpRes.model\r\n this.ngControl = helpRes.control;\r\n this.InternalName = `${this.name}_internal`;\r\n this.Validation = this.Validation || !this.DisplayMode;\r\n\r\n // Se la logica dei form è effettuata da un compoente interno invece che dal componente attuale, come minimo devo assicurarmi di valorizzare il Form\r\n if (!this.performFormLogic) {\r\n this.Form = helpRes.form.entity;\r\n this.statusChangesObservable = this.ngControl.statusChanges;\r\n return;\r\n }\r\n\r\n if (helpRes.form.natural === false)\r\n this.Form.addControl(this.ngModel);\r\n\r\n if (!this.Validation) {\r\n // Forzatura a non validare questo componente passando dagli internals di Angular perché passando dai controlli interni non va :D\r\n (<any>this.innerInput)._rawValidators = (<any>this.ngControl)._rawValidators = [];\r\n (<any>this.innerInput)._composedValidatorFn = (<any>this.ngControl)._composedValidatorFn = null;\r\n }\r\n\r\n if(helpRes.form.entity !== null)\r\n helpRes.form.entity.ngSubmit.subscribe(_ => {\r\n this.innerInput.control.markAsDirty({ emitEvent: false });\r\n this.ngControl.control.markAsDirty({ emitEvent: false });\r\n\r\n if (this.ngControl.invalid) this.showTooltip();\r\n });\r\n\r\n (this.statusChangesObservable ?? this.ngControl.statusChanges).pipe(distinctUntilChanged(), takeUntil(this.destroyed$)).subscribe((status) => {\r\n // Tutti i cambi ad \"Invalido\" li ignoro se il controllo non è stato manco sfiorato. Vuol dire che è una fase di bootstrap con un valore invalido, che sia vuoto o errato da DB\r\n if(!this.ngControl.touched) return;\r\n this.log(`Control Status Changed - ${this.name} -> ${status}`);\r\n (status == \"INVALID\" ? this.showTooltip : this.hideTooltip).bind(this)()\r\n });\r\n\r\n if (this.SetValidationSubject) {\r\n this.SetValidationSubject.pipe(distinctUntilChanged(), takeUntil(this.destroyed$)).subscribe(v => {\r\n if (v.fieldName !== this.name) return;\r\n\r\n // Nessun errore, ripulisco\r\n if(!v.error)\r\n {\r\n this.innerInput.control.setErrors(null, { emitEvent: false });\r\n this.ngControl.control.setErrors(null, { emitEvent: false });\r\n return;\r\n }\r\n\r\n this.log(`Control Forced Invalid - ${this.name} error: ${v.error}`);\r\n\r\n this.innerInput.control.setErrors({ forcedtoinvalid: true }, { emitEvent: false });\r\n this.innerInput.control.markAsDirty({ emitEvent: false });\r\n\r\n this.ngControl.control.setErrors({ forcedtoinvalid: true }, { emitEvent: false });\r\n this.ngControl.control.markAsDirty({ emitEvent: false });\r\n\r\n requestAnimationFrame(() => { if (this.ngControl.invalid) this.showTooltip(v.error); });\r\n });\r\n }\r\n }\r\n\r\n private showTooltip(error?: string) {\r\n if(!this.tooltip)\r\n return;\r\n \r\n this.TooltipText = this.getTooltipText(error);\r\n this.tooltip.show(null, this.innerElement.nativeElement);\r\n }\r\n\r\n protected getTooltipText(error?: string){\r\n return error ?? this.FailedValidationMessage ?? (this.required !== undefined && this.isEmptyValue(this.value) ? \"È obbligatorio fornire un valore\" : \"Formato input errato\");\r\n }\r\n\r\n private hideTooltip() {\r\n if(!this.tooltip) return;\r\n\r\n this.tooltip.hide();\r\n }\r\n\r\n public log(message: string) {\r\n if (this.FRM_DEBUG_MODE)\r\n console.log(\"@forms-and-validations: \" + message)\r\n }\r\n\r\n public async writeValue(obj: any): Promise<void> {\r\n // Coercizione di tutti i valori \"vuoti\" all'unico \"null\"\r\n if (obj === null || obj === undefined) obj = null;\r\n\r\n this.value = await this.getValueIn(obj);\r\n\r\n if(!this.performFormLogic) return;\r\n\r\n this.EvaluatedModel = await this.getEvaluatedModel(this.value);\r\n\r\n if (this.shouldReemitAdjustedInput && !!this.value) {\r\n // Riallineamento esatto del valore. Può entrare qualsiasi valore, ma il modello del form e il binding potrebbe essere fatto sempre su un tipo diverso\r\n // Es: nei form date, entra un dayjs, viene letto come Date (getValueIn) e viene sparato fuori come \"dd/MM/yyyy\" (getValueOut)\r\n // this.value è valorizzato qui sopra\r\n this.onChange(await this.getValueOut(this.value));\r\n }\r\n }\r\n\r\n public async changed(value: any) {\r\n this.value = value;\r\n\r\n this.onChange(await this.getValueOut(this.value));\r\n\r\n if(!this.performFormLogic) return;\r\n\r\n this.EvaluatedModel = await this.getEvaluatedModel(value);\r\n\r\n this.inputChange.emit(new ChangeEvent(false, this.value));\r\n this.log(`Control Value Changed - ${this.name}, value: ${this.value}`);\r\n }\r\n\r\n // Leggero debounce sul finalize in quanto ci sono alcuni componenti che per attaccare tutti gli eventi \"finalizzanti\" potrebbero duplicare le chiamate.\r\n // vedi form-date i cui eventi finalizzanti sono sia l'onBlur che l'onSelect, ma in alcune situazioni vengono richiamati entrambi\r\n private finalizedDebounceInterval = null;\r\n public finalized(debounceTime = 50) {\r\n if (this.finalizedDebounceInterval)\r\n clearInterval(this.finalizedDebounceInterval);\r\n\r\n this.finalizedDebounceInterval = setInterval(() => {\r\n this.inputFinalized.emit(this.ngControl?.name?.toString());\r\n this.log(\"Control Value Finalized - \" + this.name + \" with value: \" + this.value);\r\n clearInterval(this.finalizedDebounceInterval);\r\n }, debounceTime);\r\n }\r\n\r\n public focused(event: any) {\r\n this.inputFocus.emit(event);\r\n this.log(\"Control Focused - \" + this.name);\r\n }\r\n\r\n /** Valuta il contenuto della variabile BindCheckingGroups */\r\n private evaluateBindCheckingGroups() {\r\n // Blocco per tirare fuori le condizioni scritte tipo --> :prop?(Roba con {prop})\r\n var iffedMatches = this.Display.match(/:([a-z]+)\\?\\(([^\\(\\)]+)\\)/g);\r\n if (!iffedMatches) return;\r\n\r\n this.BindCheckingGroups = iffedMatches.map(m => {\r\n let groups = m.match(/:([a-z]+)\\?\\(([^\\(\\)]+)\\)/i);\r\n return { global: m, prop: groups[1], whenexists: groups[2] };\r\n });\r\n }\r\n\r\n /** Valuta il contenuto della variabile BindProperties */\r\n private evaluateBindProperties() {\r\n // Blocco per tirare fuori le proprietà scritte tipo --> {prop}\r\n var matches = this.Display.match(/{[a-z]+}/gi);\r\n if (!matches) return;\r\n\r\n this.BindProperties = matches.map(m => { return { global: m, prop: m.substring(1, m.length - 1) } });\r\n }\r\n\r\n /**\r\n * Trasforma un oggetto della Source alla sua versione \"nuova\" basandosi sulle informazioni su gruppi e proprietà\r\n * \r\n * @param {any} item Oggetto da trasformare\r\n * \r\n * @returns {{id: string, description: string}} Oggetto finale trasformato\r\n */\r\n private transformSourceItem(s: any): {id: string, description: string} {\r\n // Parto sempre dalla variabile di Display, poi sostituisco pezzo per pezzo\r\n let desc = this.Display;\r\n\r\n // Taglio o mantengo le condizioni in base alla proprietà su cui fare check\r\n // Dopodiché scrivo tutte le proprietà\r\n for (let i = 0; i < this.BindCheckingGroups.length; i++) {\r\n let t = this.BindCheckingGroups[i];\r\n desc = desc.replace(t.global, (s[t.prop] !== null && s[t.prop] !== undefined && s[t.prop] !== \"\") ? t.whenexists : \"\");\r\n }\r\n\r\n for (let i = 0; i < this.BindProperties.length; i++) {\r\n let t = this.BindProperties[i];\r\n desc = desc.replace(t.global, s[t.prop]);\r\n }\r\n\r\n let ret = { id: \"\" + s[this.IdField], description: desc };\r\n this.BoundSourceCache[ret.id] = { description: ret.description, source: s};\r\n return ret;\r\n }\r\n\r\n // Overridabili per gestire In - Out diversi\r\n protected async getEvaluatedModel(valueAfterInTransform: any): Promise<string> { return valueAfterInTransform?.toString() || \"\"; }\r\n protected async getValueOut(value: any): Promise<any> { return value; }\r\n protected async getValueIn(value: any): Promise<any> { return value; }\r\n protected isEmptyValue(value: any): boolean { return !value; };\r\n}","// Angular\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { BaseFormControl } from \"../base-form-control\";\r\n\r\n\r\n/** Semplice componente di Input testuale, con eventuale prefisso/suffisso */\r\n@Component({\r\n selector: \"input-skeleton\",\r\n templateUrl: \"input-skeleton.component.html\",\r\n styleUrls: [\"./input-skeleton.component.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [CommonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true\r\n})\r\nexport class InputSkeletonComponent {\r\n\r\n @Input() For: BaseFormControl;\r\n @Input() Control: TemplateRef<any>;\r\n\r\n /** @ignore Costruttore */\r\n constructor() { }\r\n}","<ng-container *ngIf=\"!For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\">\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">\r\n <ng-container *ngIf=\"For.DisplayLayout == 'form'\">{{ For.EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"For.DisplayLayout == 'inline'\" class=\"app-inline\">{{ For.EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\" class=\"{{For.FormGroupClass + (For.Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (For.DisplayLayout == 'inline' && For.DisplayMode ? (' app-inline-block ' + (!For.Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : For.LabelColWidth) + (For.DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{For.Label}}{{For.required !==undefined && !For.DisplayMode ? '*' : ''}}{{For.Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"For.DisplayMode && For.DisplayLayout == 'inline' && For.InlineSeparator != ''\">{{For.InlineSeparator}}</span>\r\n <div class=\"col-md-{{For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-inline-block' : For.InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">{{ For.EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>","// Angular\r\nimport { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, forwardRef, Input, numberAttribute, Output, signal, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\"\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\"\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-input\",\r\n templateUrl: \"form-input.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [InputTextModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormInputComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormInputComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input({ transform: numberAttribute }) minlength: number | undefined;\r\n @Input({ transform: numberAttribute }) maxlength: number | undefined;\r\n @Input() pattern: string | undefined;\r\n\r\n @Input() Password: boolean = false;\r\n\r\n public passShown = signal(false);\r\n public Type = signal(\"text\");\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n\r\n if (this.Password)\r\n this.Type.set(\"password\");\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n\r\n <p-inputgroup>\r\n <p-inputgroup-addon *ngIf=\"!!prefix\">\r\n <span (click)=\"onPrefixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\r\n </span>\r\n </p-inputgroup-addon>\r\n\r\n <p-floatlabel variant=\"on\">\r\n <input \r\n pInputText \r\n pSize=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n autocomplete=\"off\"\r\n style=\"width: 100%;\"\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [attr.type]=\"Type\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readOnly]=\"readonly\"\r\n [minlength]=\"minlength\" \r\n [maxlength]=\"maxlength\" \r\n [pattern]=\"pattern\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (blur)=\"onTouched(); finalized()\"\r\n />\r\n \r\n <label>{{Placeholder}}</label>\r\n </p-floatlabel>\r\n\r\n <p-inputgroup-addon *ngIf=\"Password\">\r\n <a *ngIf=\"passShown()\" class=\"far fa-eye-slash app-fs-16 app-pointer\" (click)=\"Type.set('password'); passShown.set(false); $event.preventDefault()\"></a>\r\n <a *ngIf=\"!passShown()\" class=\"far fa-eye app-fs-16 app-pointer\" (click)=\"Type.set('text'); passShown.set(true); $event.preventDefault()\"></a>\r\n </p-inputgroup-addon>\r\n\r\n <p-inputgroup-addon *ngIf=\"!!suffix\">\r\n <span (click)=\"onSuffixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\r\n </span>\r\n </p-inputgroup-addon>\r\n </p-inputgroup>\r\n\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, TemplateRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { Select, SelectModule } from 'primeng/select';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\";\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-select\",\r\n templateUrl: \"form-select.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [SelectModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormSelectComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormSelectComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input() OptionsTemplate: TemplateRef<any>;\r\n\r\n public RequiredPlaceholder: string = \"\";\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n // Eh... checcedevofa\r\n this.innerElement = (<Select>(<any>this.innerElement)).el;\r\n\r\n if (!this.Placeholder && this.required) {\r\n this.RequiredPlaceholder = \"Seleziona un valore...\";\r\n this.Placeholder = \"\";\r\n }\r\n }\r\n\r\n protected override async getEvaluatedModel(value: any): Promise<string> {\r\n return this.BoundSource?.().find(t => t.id == value)?.description ?? \"\";\r\n }\r\n\r\n protected override async getValueIn(value: any): Promise<any> {\r\n return value !== null && value !== undefined && value !== \"\" ? value.toString() : null;\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n\r\n<ng-template #controlTemplate>\r\n\r\n <p-inputgroup>\r\n <p-inputgroup-addon *ngIf=\"!!prefix\">\r\n <span (click)=\"onPrefixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\r\n </span>\r\n </p-inputgroup-addon>\r\n\r\n <p-floatlabel variant=\"on\">\r\n\r\n <p-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [filter]=\"true\" \r\n filterBy=\"description\"\r\n [showClear]=\"true\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [options]=\"BoundSource()\"\r\n [placeholder]=\"RequiredPlaceholder\"\r\n optionLabel=\"description\"\r\n optionValue=\"id\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (onChange)=\"onTouched(); finalized()\">\r\n\r\n <ng-template *ngIf=\"OptionsTemplate\" let-selectedOption #selectedItem>\r\n <ng-container *ngTemplateOutlet=\"OptionsTemplate; context : { $implicit: BoundSourceCache[selectedOption.id].source}\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template *ngIf=\"OptionsTemplate\" let-itm #item>\r\n <ng-container *ngTemplateOutlet=\"OptionsTemplate; context : { $implicit: BoundSourceCache[itm.id].source}\"></ng-container>\r\n </ng-template>\r\n </p-select>\r\n \r\n <label>{{Placeholder}}</label>\r\n </p-floatlabel>\r\n\r\n <p-inputgroup-addon *ngIf=\"!!suffix\">\r\n <span (click)=\"onSuffixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\r\n </span>\r\n </p-inputgroup-addon>\r\n </p-inputgroup>\r\n\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, signal, ViewEncapsulation, WritableSignal } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { DatePickerModule, DatePicker } from 'primeng/datepicker';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\n\r\n// Esfaenza\r\nimport { DateService } from \"@esfaenza/extensions\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\ndeclare var dayjs: any;\r\n\r\n@Component({\r\n selector: \"form-date\",\r\n templateUrl: \"form-date.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [DatePickerModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormDateComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormDateComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /**\r\n * Indica il formato da utilizzare sia in Input che in Output\r\n * \r\n * 1. Se date vengono utilizzate le Date di Javascript\r\n * \r\n * 2. Se timestring vengono utilizzate stringhe del tipo '00:00:00'\r\n * \r\n * 3. Se dayjs viene utilizzato, appunto, dayjs\r\n */\r\n @Input() InOutFormat: 'date' | 'timestring' | 'dayjs' = 'timestring';\r\n\r\n /** Nel caso dei componenti data il Placeholder è il formato, mentre la label floattante, se esistente, dev'essere specificata */\r\n @Input() FloatingLabel: boolean = false;\r\n\r\n protected datesExts: DateService;\r\n\r\n protected mode: 'date' | 'datetime' | 'time' | 'month' | 'year' | 'daterange';\r\n\r\n public view: WritableSignal<'month' | 'year' | 'date'> = signal('date');\r\n public dateFormat: WritableSignal<string | undefined> = signal(undefined);\r\n public showTime: WritableSignal<boolean | undefined> = signal(undefined);\r\n public hourFormat: WritableSignal<number | undefined> = signal(undefined);\r\n public timeOnly: WritableSignal<boolean | undefined> = signal(undefined);\r\n public showButtonBar: WritableSignal<boolean | undefined> = signal(undefined);\r\n public selectionMode: WritableSignal<'single' | 'multiple' | 'range' | undefined> = signal(undefined);\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n this.setInputMode();\r\n this.adjustInputModeVisuals();\r\n\r\n this.datesExts = this.inj.get(DateService);\r\n this.shouldReemitAdjustedInput = true;\r\n\r\n // Eh... checcedevofa\r\n this.innerElement = (<DatePicker>(<any>this.innerElement)).el;\r\n }\r\n\r\n protected setInputMode() {\r\n this.mode = \"date\";\r\n }\r\n\r\n protected override async getEvaluatedModel(value: any): Promise<string> {\r\n let pieces = [];\r\n let formatted = this.datesExts.getFormatted(value, ![\"datetime\", \"time\"].includes(this.mode), false);\r\n\r\n switch (this.mode) {\r\n case \"date\":\r\n return formatted || \"\";\r\n case \"daterange\":\r\n\r\n break;\r\n case \"datetime\":\r\n return formatted || \"\";\r\n case \"time\":\r\n return formatted?.split(' ')?.[1] || \"\";\r\n case \"month\":\r\n pieces = formatted?.split('/');\r\n return formatted ? `${pieces[1]}/${pieces[2]}` : \"\";\r\n case \"year\":\r\n pieces = formatted?.split('/');\r\n return formatted ? `${pieces[2]}` : \"\";\r\n }\r\n }\r\n\r\n protected override async getValueOut(value: any) {\r\n let convertion = this.datesExts.getDateConvertion(value, false, this.InOutFormat, ![\"datetime\", \"time\"].includes(this.mode))\r\n\r\n switch (this.mode) {\r\n case \"date\":\r\n return convertion;\r\n case \"daterange\":\r\n\r\n break;\r\n case \"datetime\":\r\n return convertion;\r\n case \"time\":\r\n return convertion;\r\n case \"month\":\r\n\r\n break;\r\n case \"year\":\r\n\r\n break;\r\n }\r\n }\r\n\r\n protected override async getValueIn(obj: any) {\r\n if (!obj) return null;\r\n\r\n switch (this.mode) {\r\n case \"date\":\r\n return this.datesExts.getDateConvertion(obj, false, 'date');\r\n case \"daterange\":\r\n\r\n break;\r\n case \"datetime\":\r\n return this.datesExts.getDateConvertion(obj, false, 'date');\r\n case \"time\":\r\n if (this.InOutFormat == \"timestring\") {\r\n const [hours, minutes, seconds] = obj.split(\":\");\r\n obj = dayjs().hour(parseInt(hours ?? 0)).minute(parseInt(minutes ?? 0)).second(parseInt(seconds ?? 0));\r\n }\r\n\r\n return this.datesExts.getDateConvertion(obj, false, 'date');\r\n case \"month\":\r\n\r\n break;\r\n case \"year\":\r\n\r\n break;\r\n }\r\n }\r\n\r\n private adjustInputModeVisuals() {\r\n switch (this.mode) {\r\n case \"date\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"DD/MM/YYYY\";\r\n this.view.set(\"date\");\r\n this.dateFormat.set(\"dd/mm/yy\");\r\n this.selectionMode.set(\"single\");\r\n this.showTime.set(undefined);\r\n this.hourFormat.set(undefined);\r\n this.timeOnly.set(undefined);\r\n this.showButtonBar.set(true);\r\n break;\r\n case \"daterange\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"DD/MM/YYYY\";\r\n this.view.set(\"date\");\r\n this.dateFormat.set(\"dd/mm/yy\");\r\n this.selectionMode.set(\"range\");\r\n this.showTime.set(undefined);\r\n this.hourFormat.set(undefined);\r\n this.timeOnly.set(undefined);\r\n this.showButtonBar.set(true);\r\n break;\r\n case \"datetime\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"DD/MM/YYYY HH:mm:ss\";\r\n this.view.set(\"date\");\r\n this.dateFormat.set(\"dd/mm/yy\");\r\n this.selectionMode.set(\"single\");\r\n this.showTime.set(true);\r\n this.hourFormat.set(24);\r\n this.timeOnly.set(undefined);\r\n this.showButtonBar.set(true);\r\n break;\r\n case \"time\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"HH:mm\";\r\n this.view.set(\"date\");\r\n this.dateFormat.set(undefined);\r\n this.selectionMode.set(\"single\");\r\n this.showTime.set(undefined);\r\n this.hourFormat.set(24);\r\n this.timeOnly.set(true);\r\n this.showButtonBar.set(false);\r\n break;\r\n case \"month\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"MM/YYYY\";\r\n this.view.set(\"month\");\r\n this.dateFormat.set(\"mm/yy\");\r\n this.selectionMode.set(\"single\");\r\n this.showTime.set(undefined);\r\n this.hourFormat.set(undefined);\r\n this.timeOnly.set(undefined);\r\n this.showButtonBar.set(true);\r\n break;\r\n case \"year\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"YYYY\";\r\n this.view.set(\"year\");\r\n this.dateFormat.set(\"yy\");\r\n this.selectionMode.set(\"single\");\r\n this.showTime.set(undefined);\r\n this.hourFormat.set(undefined);\r\n this.timeOnly.set(undefined);\r\n this.showButtonBar.set(true);\r\n break;\r\n }\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <p-floatlabel variant=\"on\">\r\n <p-datepicker\r\n size=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n [placeholder]=\"FloatingLabel ? '' : Placeholder\"\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [view]=\"view()\" \r\n [dateFormat]=\"dateFormat()\"\r\n [showTime]=\"showTime()\"\r\n [hourFormat]=\"hourFormat()\"\r\n [timeOnly]=\"timeOnly()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [showIcon]=\"true\"\r\n [showButtonBar]=\"showButtonBar()\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readonlyInput]=\"readonly\"\r\n [baseZIndex]=\"99999999\"\r\n inputId=\"buttondisplay\"\r\n optionLabel=\"description\"\r\n optionValue=\"id\"\r\n filterBy=\"description\"\r\n appendTo=\"body\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event);\" \r\n (click)=\"focused($event);\"\r\n (onBlur)=\"onTouched(); finalized()\"\r\n (onSelect)=\"onTouched(); finalized()\"\r\n />\r\n\r\n <label>{{FloatingLabel ? Placeholder : null}}</label>\r\n </p-floatlabel>\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\n\r\n// Lib\r\nimport { EsFormDateComponent } from \"../date/form-date.component\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-datetime\",\r\n templateUrl: \"../date/form-date.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [DatePickerModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormDateTimeComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormDateTimeComponent extends EsFormDateComponent {\r\n\r\n override setInputMode(): void {\r\n this.mode = \"datetime\";\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\n\r\n// Lib\r\nimport { EsFormDateComponent } from \"../date/form-date.component\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-time\",\r\n templateUrl: \"../date/form-date.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [DatePickerModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormTimeComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormTimeComponent extends EsFormDateComponent {\r\n\r\n override setInputMode(): void {\r\n this.mode = \"time\";\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-checkbox\",\r\n templateUrl: \"form-checkbox.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [CheckboxModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputSkeletonComponent, ToggleSwitchModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormCheckboxComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormCheckboxComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input() SliderMode: boolean = undefined;\r\n\r\n ngOnInit(){\r\n super.ngOnInit();\r\n\r\n if(this.SliderMode == undefined)\r\n this.SliderMode = false;\r\n }\r\n\r\n protected override async getValueIn(value: any) {\r\n return value ? (value === true || value.toLowerCase() == \"true\") : false;\r\n }\r\n\r\n protected override async getEvaluatedModel(value: any): Promise<string> {\r\n return this.lc.loc(value ? 'Sì' : 'No');\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n \r\n <p-checkbox *ngIf=\"SliderMode === false\"\r\n size=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [disabled]=\"disabled\"\r\n [ngModel]=\"value\"\r\n [binary]=\"true\"\r\n (ngModelChange)=\"changed($event); finalized()\" \r\n (click)=\"focused($event);\"\r\n />\r\n\r\n <p-toggleswitch *ngIf=\"SliderMode === true\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [disabled]=\"disabled\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event); finalized()\" \r\n (click)=\"focused($event);\"\r\n />\r\n\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, numberAttribute, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { TextareaModule } from 'primeng/textarea';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\"\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\"\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-textarea\",\r\n templateUrl: \"form-textarea.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [TextareaModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormTextareaComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormTextareaComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input({ transform: numberAttribute }) rows: number | undefined = 2;\r\n @Input({ transform: numberAttribute }) minlength: number | undefined;\r\n @Input({ transform: numberAttribute }) maxlength: number | undefined;\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <p-floatlabel variant=\"on\">\r\n <textarea\r\n pTextarea \r\n pSize=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n autocomplete=\"off\"\r\n style=\"width: 100%;\"\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readOnly]=\"readonly\"\r\n [rows]=\"rows\"\r\n [minlength]=\"minlength\" \r\n [maxlength]=\"maxlength\" \r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (blur)=\"onTouched(); finalized()\"\r\n ></textarea>\r\n <label>{{Placeholder}}</label>\r\n </p-floatlabel>\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, Component, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Componente placeholder per la creazione dei form che rappresenta un blocchetto di erorre, \r\n * al posto del quale possono poi comparire dei componenti form senza incasinare la grafica\r\n */\r\n@Component({\r\n selector: \"form-error\",\r\n templateUrl: \"form-error.component.html\",\r\n imports: [CommonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true\r\n})\r\nexport class EsFormErrorComponent {\r\n\r\n /** col-md-X per la label (Che in questoc aso è vuota) */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /** col-md-X per l'input (che in questo caso contiene il messaggio d'errore proiettato nell'HTML) */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */\r\n @Input() Last: boolean = false;\r\n\r\n /** Classe extra per il form-group in cui viene wrappato l'input */\r\n @Input() FormGroupClass: string = \"\";\r\n\r\n /** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi \"X Y\" */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n}","<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>","// Angular\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, Component, Input, TemplateRef } from \"@angular/core\";\r\n\r\n// Lib\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n/**\r\n * Componente da utilizzare quando l'implementazione dell'input non è disponibile nella libreria, \r\n * fornisce la struttura standard di un form-component ma l'input vero e proprio viene proiettato dall'esterno\r\n */\r\n@Component({\r\n selector: \"form-template\",\r\n templateUrl: \"form-template.component.html\",\r\n imports: [CommonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true\r\n})\r\nexport class EsFormTemplateComponent {\r\n\r\n /** Indica se l'input è obbligatorio o no */\r\n @Input() required: boolean = false;\r\n\r\n /** Mostra un testo a sinistra dell'input, **FormLayout** permettendo */\r\n @Input() Label: string = \"\";\r\n\r\n /** Eventuali classi extra da applicare alla Label, di default c'è solo un leggero margin top */\r\n @Input() LabelClass: string = \"m-t-5\";\r\n\r\n /** Utilizza o meno il Layout di un form (Label con input di fianco), se false mostra solo l'input */\r\n @Input() FormLayout: boolean = true;\r\n\r\n /** col-md-X per la label */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /** col-md-X per l'input */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */\r\n @Input() Last: boolean = false;\r\n\r\n /** Classe extra per il form-group in cui viene wrappato l'input */\r\n @Input() FormGroupClass: string = \"\";\r\n\r\n /** Indica che la parte input del controllo dev'essere una label readonly e la parte label di titolo dev'essere in bold. Per utilizzare un solo componente sia per la modifica che per il dettaglio */\r\n @Input() DisplayMode: boolean = false;\r\n\r\n /** Template per visualizzare la modalità **DisplayMode** come vuole il programmatore frocio di turno */\r\n @Input() DisplayModeTemplate: TemplateRef<any>;\r\n\r\n /** Layout del Form quando è in modalità Display. Di default mantiene la formattazione a form */\r\n @Input() DisplayLayout: 'form' | 'inline' | 'hidden' = 'form';\r\n\r\n /** Indica la condizione per cui un elemento in Modalità Display può essere visibile in base a ulteriori controlli */\r\n @Input() DisplayCondition: boolean = true;\r\n\r\n /** Separatore da mettere in automatico fra un elemento Form e l'altro quando sono in **DisplayMode** con **DisplayLayout** inline */\r\n @Input() InlineSeparator: string = ' ';\r\n\r\n /** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi \"X Y\" */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<!-- Singola proiezione -->\r\n<ng-template #controlTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>","// Angular\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, Component, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Componente placeholder per la creazione dei form che rappresenta un blocchetto di informazioni, \r\n * al posto del quale possono poi comparire dei componenti form senza incasinare la grafica\r\n */\r\n@Component({\r\n selector: \"form-info\",\r\n templateUrl: \"form-info.component.html\",\r\n imports: [CommonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true\r\n})\r\nexport class EsFormInfoComponent {\r\n /** col-md-X per la label (Che in questoc aso è vuota) */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /** col-md-X per l'input (che in questo caso contiene il messaggio d'errore proiettato nell'HTML) */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */\r\n @Input() Last: boolean = false;\r\n\r\n /** Classe extra per il form-group in cui viene wrappato l'input */\r\n @Input() FormGroupClass: string = \"\";\r\n\r\n /** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi \"X Y\" */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n}","<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 col-md-{{InputColWidth}}\">\r\n <ng-content></ng-content>\r\n </span>\r\n <div class=\"clearfix\"></div>\r\n</div>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Injector, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Esfaenza\r\nimport { LocalizationModule } from \"@esfaenza/localizations\";\r\n\r\n// Prime NG\r\nimport { TextareaModule } from 'primeng/textarea';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\"\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\"\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n// Models\r\nimport { AppFile } from \"../../models/AppFile\";\r\n\r\n@Component({\r\n selector: \"form-file\",\r\n templateUrl: \"form-file.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\", \"./form-file.component.css\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [TextareaModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent, LocalizationModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormFileComponent), multi: true },\r\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => EsFormFileComponent), multi: true }\r\n ],\r\n standalone: true\r\n})\r\nexport class EsFormFileComponent extends BaseFormControl implements ControlValueAccessor, Validator {\r\n\r\n /** Permette di caricare file multipli */\r\n @Input() Multiple: boolean = false;\r\n\r\n /** Permette di scaricare l'eventuale file selezionato */\r\n @Input() AllowDownload: boolean = true;\r\n\r\n /** Controllo sulla dimensione di ogni singolo file in Byte. 0 -> nessun limite */\r\n @Input() MaxSize: number = 0;\r\n\r\n /** Sportivo */\r\n @Input() FancyMode: boolean = undefined;\r\n\r\n /** Legge sempre il contenuto del file e ne estrapola il base64 */\r\n @Input() ReadFile: boolean = false;\r\n \r\n /** @ignore Costruttore */\r\n constructor(inj: Injector) {\r\n super(inj);\r\n //Per questo componente non posso permettermi che il modello sia nullo\r\n this.value = new AppFile();\r\n\r\n this.shouldReemitAdjustedInput = true;\r\n }\r\n\r\n ngOnInit(){\r\n super.ngOnInit();\r\n \r\n if(this.FancyMode === undefined)\r\n this.FancyMode = false;\r\n }\r\n\r\n validate(_: AbstractControl): ValidationErrors {\r\n if (this.required && this.isEmptyValue(this.value))\r\n return { required: true }\r\n else return null;\r\n }\r\n\r\n protected override isEmptyValue(value: AppFile): boolean {\r\n return !value.filename || !value;\r\n }\r\n\r\n protected override async getValueIn(value: any) {\r\n return value == null ? new AppFile() : value;\r\n }\r\n\r\n protected override async getValueOut(value: any) {\r\n return value == null ? new AppFile() : value;\r\n }\r\n\r\n protected override async getEvaluatedModel(valueAfterInTransform: AppFile): Promise<string> {\r\n return valueAfterInTransform.filename;\r\n }\r\n\r\n /**\r\n * Helper per gestire la modifica del file attualmente bindato\r\n * \r\n * @param {boolean} clear Indica se bisogna svuotare l'input o meno \r\n */\r\n async fileChange(clear: boolean = false) {\r\n let files: File[] = [];\r\n let model = (<AppFile>this.value);\r\n let ne: HTMLInputElement = this.innerElement.nativeElement;\r\n\r\n if (clear) {\r\n model.filename = ne.value = model.fileb64 = \"\";\r\n model.nativefiles = [];\r\n }\r\n else {\r\n for (let i = 0; i < ne.files.length; i++) {\r\n let file = ne.files.item(i);\r\n if (this.MaxSize > 0 && file.size > this.MaxSize) {\r\n this.msgs.simpleError(`Il file ${file.name} eccede la dimensione massima ${this.MaxSize} B`)\r\n this.fileChange(true);\r\n return;\r\n }\r\n files.push(file);\r\n }\r\n\r\n model.fileb64 = null;\r\n\r\n // Modalità Upload Singolo File\r\n if (ne.files.length == 1) {\r\n let fileUploaded = ne.files[0];\r\n model.filename = fileUploaded.name;\r\n if (this.ReadFile)\r\n model.fileb64 = await this.loadFileB64(fileUploaded);\r\n }\r\n // Modalità Upload Multiple File\r\n else if (ne.files.length > 1)\r\n model.filename = ne.files.length + \" \" + this.lc.loc(\"File Selezionati\");\r\n\r\n model.nativefiles = files;\r\n }\r\n\r\n this.changed(model);\r\n }\r\n\r\n private loadFileB64(fileUploaded): Promise<string> {\r\n return new Promise<string>((res, _) => {\r\n let reader = new FileReader();\r\n reader.readAsDataURL(fileUploaded);\r\n reader.onload = () => {\r\n let fileSource = reader.result.toString();\r\n let fileSourceSegments = fileSource.split(',');\r\n\r\n res(fileSourceSegments[fileSourceSegments.length - 1]);\r\n };\r\n });\r\n }\r\n\r\n /** Permette di scaricare l'eventuale file selezionato */\r\n onDownloadFile() {\r\n let model = (<AppFile>this.value);\r\n this.utiExts.saveFile(model.fileb64, model.filename);\r\n }\r\n\r\n // FancyMode - Drag Over\r\n onFileDragOver(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n // FancyMode - File Dropped\r\n onFileDropped(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.innerElement.nativeElement.files = event.dataTransfer?.files;\r\n this.fileChange();\r\n }\r\n}","<input-skeleton *ngIf=\"FancyMode === false\" [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <div class=\"input-group file-upload\" style=\"padding: 0 !important;\">\r\n <input type=\"file\" (change)=\"fileChange()\" id=\"{{InternalName}}\" #innerElement class=\"file-upload-btn app-pointer\" style=\"height: 46px;\" [multiple]=\"Multiple ? true : null\" />\r\n <input type=\"text\" \r\n [class.frm-padding-left-22]=\"AllowDownload && value.filename && value.fileb64\" \r\n class=\"form-control checking-field\" \r\n style=\"border-top-left-radius: 5px; border-bottom-left-radius: 5px; height: 46px;\"\r\n [style.padding-left.px]=\"AllowDownload && value.filename && value.fileb64 ? 40 : 12\"\r\n placeholder=\"{{Placeholder || ('Seleziona un File' | localize : lc)}}...\" \r\n [(ngModel)]=\"value.filename\" name=\"dsfile_{{InternalName}}\" \r\n #innerInput=\"ngModel\" />\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" style=\"padding-left: 10px; padding-top: 5px; color: #666; z-index: 9999;\" *ngIf=\"AllowDownload && value.filename && value.fileb64\" (click)=\"onDownloadFile()\"></a>\r\n <i class=\"fa fa-times delete-file\" style=\"margin-right: 15px; margin-top: 7px; color: #666;\" (click)=\"fileChange(true)\" *ngIf=\"value.filename\"></i>\r\n \r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" style=\"height: 46px;\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n background: var(--p-surface-50) !important;\r\n border: 1px solid var(--p-surface-300) !important;\r\n color: #777;\" 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 === true\" (drop)=\"onFileDropped($event)\" (dragover)=\"onFileDragOver($event)\">\r\n <!--Drop-->\r\n <label for=\"{{InternalName}}\" class=\"drop-container\">\r\n <span class=\"drop-title\">{{Label}}</span>\r\n <div class=\"file-name-container\">{{value.filename || 'Nessun file selezionato'}}</div>\r\n <!--Hidden Forms-->\r\n <input hidden type=\"file\" (change)=\"fileChange()\" id=\"{{InternalName}}\" #innerElement class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input hidden type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && value.filename && value.fileb64\" class=\"form-control checking-field\" \r\n placeholder=\"{{Placeholder || ('Seleziona un File' | localize : lc)}}...\" [(ngModel)]=\"value.filename\" name=\"dsfile_{{InternalName}}\" #innerInput=\"ngModel\" />\r\n <!--Clean-->\r\n <i class=\"fa fa-times file-delete-btn\" (click)=\"fileChange(true); $event.stopPropagation(); false;\" *ngIf=\"value.filename\"></i>\r\n <!--Download-->\r\n <div *ngIf=\"AllowDownload && value.filename && value.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>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { MultiSelect, MultiSelectModule } from 'primeng/multiselect';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-multiselect\",\r\n templateUrl: \"form-multiselect.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [MultiSelectModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormMultiselectComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormMultiselectComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input() display: \"comma\" | \"chip\" = undefined;\r\n @Input() InOutFormat: 'KeyValues' | 'CommaSeparatedList' | 'JsonList' | 'List' = 'List';\r\n\r\n /** Nel caso dei componenti data il Placeholder è il formato, mentre la label floattante, se esistente, dev'essere specificata */\r\n @Input() FloatingLabel: boolean = true;\r\n\r\n @Input() MaxShownElements: number = 20;\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n\r\n if (this.display === undefined)\r\n this.setDisplayMode();\r\n }\r\n\r\n protected setDisplayMode() {\r\n this.display = \"comma\";\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n // Eh... checcedevofa\r\n this.innerElement = (<MultiSelect>(<any>this.innerElement)).el;\r\n\r\n if (!this.Placeholder && this.required)\r\n this.Placeholder = \"Seleziona uno o più valori...\";\r\n }\r\n\r\n protected override async getValueIn(value: any): Promise<any> {\r\n if(!value) return [];\r\n\r\n var ids = null;\r\n switch (this.InOutFormat) {\r\n case \"CommaSeparatedList\":\r\n if (typeof value === 'string' || value instanceof String)\r\n ids = (value as string).split(',')\r\n break;\r\n case \"JsonList\":\r\n if (typeof value === 'string' || value instanceof String)\r\n ids = JSON.parse(value as string);\r\n break;\r\n case \"List\":\r\n ids = value.map(t => t.toString());\r\n break;\r\n case \"KeyValues\":\r\n ids = value.map(t => t.id.toString());\r\n break;\r\n }\r\n\r\n return ids;\r\n }\r\n\r\n protected override async getValueOut(value: string[]): Promise<any> {\r\n if(!value) return [];\r\n\r\n switch (this.InOutFormat) {\r\n case \"CommaSeparatedList\":\r\n return value.join(',');\r\n case \"JsonList\":\r\n return JSON.stringify(value)\r\n case \"KeyValues\":\r\n return value.map(t => { return { id: t, description: this.BoundSourceCache[t].description } });\r\n case \"List\":\r\n return value.map(t => t); // Per staccare i riferimenti\r\n }\r\n }\r\n\r\n protected override async getEvaluatedModel(value: { id: string, description: string }[]): Promise<string> {\r\n if (!value) return \"\";\r\n\r\n return this.EvaluatedModel = value.map(t => t.description).join(', ');\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <p-floatlabel variant=\"on\">\r\n <p-multiselect \r\n style=\"width: 100%\"\r\n size=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [filter]=\"true\" \r\n filterBy=\"description\"\r\n [showClear]=\"true\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [maxSelectedLabels]=\"MaxShownElements\"\r\n [display]=\"display\"\r\n [options]=\"BoundSource()\"\r\n [placeholder]=\"FloatingLabel ? '' : Placeholder\"\r\n optionLabel=\"description\"\r\n optionValue=\"id\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (onBlur)=\"onTouched(); finalized()\"\r\n />\r\n\r\n <label>{{FloatingLabel ? Placeholder : null}}</label>\r\n </p-floatlabel>\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { booleanAttribute, ChangeDetectionStrategy, Component, forwardRef, input, Input, signal, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { AutoCompleteModule, AutoComplete, AutoCompleteCompleteEvent } from 'primeng/autocomplete';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\";\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\nimport { forkJoin, Observable, firstValueFrom } from \"rxjs\";\r\n\r\n/*\r\n * N.B: C'è un bug per cui passando un array insieme a optionValue genera chips vuote: https://github.com/primefaces/primeng/pull/18044\r\n * Quindi internamente il valore è sempre un oggetto o una lista di oggetti. \r\n * In ingresso faccio ricerche per id per valorizzare le suggestions iniziali, \r\n * mentre in uscita seleziono gli id per tenere il comportamento coerente alla versione precedente della libreria\r\n */\r\n@Component({\r\n selector: \"form-autocomplete\",\r\n templateUrl: \"form-autocomplete.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [AutoCompleteModule, AutoComplete, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormAutocompleteComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormAutocompleteComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n private _baseSource: any[] = null;\r\n private _availableSource: boolean;\r\n\r\n /** Numero minimo di caratteri per far partire la ricerca */\r\n public MinChars = input(3);\r\n\r\n /** Contesto per la funzione di ricerca */\r\n @Input() SearchFunctionContext: any;\r\n\r\n @Input() SearchFunction: (search: string, byid: boolean, context?: any) => Observable<{ id: string, description: string }[]> = null;\r\n\r\n /** Indica se usare la modalità multiselezione o no */\r\n @Input({ transform: booleanAttribute }) multiple: boolean | undefined;\r\n\r\n @Input({ transform: booleanAttribute }) forceSelection: boolean | undefined;\r\n\r\n public style = signal({ \"width\": \"100%\" })\r\n public typeahead = signal(true);\r\n\r\n public ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n // Se c'è una Source riempio un DB temporaneo coi valori. Le ricerche si baseranno su di lui\r\n this._baseSource = !!this.Source ? [...this.Source] : [];\r\n this.Source = [];\r\n\r\n // Il typeahead dev'essere fatto quando o c'è una source (filtro in memoria) o c'è una SearchFunction (filtro Code behind)\r\n // Lo metto anche se è un input singolo per generare gli eventi di change quando si scrive dato che input singolo, senza source, e senza forceselection\r\n // tira fuori un autocomplete in cui è impossibile scriverci qualcosa dentro\r\n this._availableSource = (this._baseSource?.length || 0) > 0 || !!this.SearchFunction;\r\n this.typeahead.set(this._availableSource);\r\n\r\n // La source potrebbe arrivare dopo....\r\n \r\n // if (!this._availableSource && !this.forceSelection && !this.multiple)\r\n // throw `Per il controllo ${this.name} non esiste una sorgente dati, la selezione di un valore non è obbligatoria, e non è un selettore multiplo stile chips. Fatti un esame di coscienza e cerca di capire che non è un autocomplete.`\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n // Eh... checcedevofa\r\n this.innerElement = (<AutoComplete>(<any>this.innerElement)).el;\r\n }\r\n\r\n search(event: AutoCompleteCompleteEvent) {\r\n\r\n if (this.SearchFunction) {\r\n this.SearchFunction(event.query, false, this.SearchFunctionContext).subscribe(t => {\r\n // la source è ottimizzata. Se fra una chiamata e l'altra non cambiano i valori non effettua refresh, ma questo vuol dire che se aggiungendo un carattere\r\n // i risultati sono gli stessi della chiamata precedente si inchioda, perché fa partire una chiamata che secondo la lib è inconcludente.\r\n // In realtà è concludente, solo che la lib non se ne accorge. In questo modo mi assicuro che si svegli\r\n this.Source = [];\r\n requestAnimationFrame(() => { this.Source = t; });\r\n });\r\n return;\r\n }\r\n\r\n this.Source = [];\r\n\r\n if ((this._baseSource?.length || 0) === 0)\r\n return;\r\n\r\n requestAnimationFrame(() => {\r\n let query = event.query.toLocaleLowerCase();\r\n this.Source = this._baseSource.filter(t => t.description.toLocaleLowerCase().includes(query));\r\n });\r\n }\r\n\r\n async changed(event){\r\n\r\n // Se c'è il typeahead, l'evento di change aggiunge correttamente l'oggetto dalla source in formato { id, description }\r\n if (this.typeahead() && this._availableSource) {\r\n super.changed(event);\r\n return;\r\n }\r\n\r\n // Senza typeahead invece emette delle stringhe con il valore scritto. \r\n // L'ultimo valore aggiunto (in caso di inserimento multiplo), o il valore attuale (in caso di inseirmento singolo)\r\n // devono essere trasformati da una string al formato { id: event, description: event } \r\n if (this.multiple) {\r\n let arr = (<Array<any>>event);\r\n let lastElement = arr.slice(-1)[0];\r\n if (typeof lastElement === \"string\")\r\n arr[arr.length - 1] = { id: lastElement, description: lastElement }\r\n }\r\n else if (typeof event === \"string\") {\r\n event = { id: event, description: event }\r\n }\r\n\r\n super.changed(event);\r\n }\r\n\r\n protected override async getValueOut(value: string | { id: string, description: string } | string[] | { id: string, description: string }[]) {\r\n if (typeof value === \"string\")\r\n return value;\r\n\r\n return Array.isArray(value) ? value.map((t: string | { id: string, description: string }) => typeof t === \"string\" ? t : t.id) : typeof value === \"string\" ? value : value.id;\r\n }\r\n\r\n protected override async getValueIn(value: string | string[]) {\r\n let vals = Array.isArray(value) ? value : [value];\r\n\r\n if (!value || (vals?.length || 0) == 0)\r\n return null;\r\n\r\n if (this.SearchFunction) {\r\n // Su nuovo valore ricarcio la source come unione di tutte le ricerche di tutti gli item presi per id\r\n let res = await firstValueFrom(forkJoin(vals.map(v => this.SearchFunction(v, true, this.SearchFunctionContext))));\r\n\r\n // Chiamo il flat 2 volte per tenere i riferimenti separati. Non ne voglio sapere niente.\r\n this.Source = res.flat();\r\n return this.multiple ? res.flat() : res.flat()[0];\r\n }\r\n\r\n if ((this._baseSource?.length || 0) === 0)\r\n return this.multiple ? vals.map(t => { return { id: t, description: t } }) : { id: vals[0], description: vals[0] };\r\n\r\n let items = this._baseSource.filter(t => vals.map(v => v.toString()).includes(t.id));\r\n return this.multiple ? items : items[0];\r\n }\r\n\r\n protected override async getEvaluatedModel(value: string | string[]): Promise<string> {\r\n return Array.isArray(value) ? value.map(id => this.BoundSourceCache[id]?.description ?? id).join(',') : this.BoundSourceCache[value]?.description ?? value;\r\n }\r\n}","<!-- Riga di debug -->\r\n<!-- <div><strong>Valore interno:</strong> {{value | json}}</div> -->\r\n\r\n<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <p-floatlabel variant=\"on\">\r\n <p-autocomplete \r\n size=\"small\" \r\n autocomplete=\"off\"\r\n #innerInput=\"ngModel\" \r\n #innerElement \r\n [style]=\"style()\"\r\n [attr.name]=\"InternalName\" \r\n [attr.id]=\"InternalName\" \r\n [multiple]=\"multiple\"\r\n [fluid]=\"multiple\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [suggestions]=\"BoundSource()\"\r\n [forceSelection]=\"forceSelection\"\r\n [typeahead]=\"typeahead()\"\r\n [virtualScroll]=\"true\"\r\n [virtualScrollItemSize]=\"44\"\r\n optionLabel=\"description\"\r\n (completeMethod)=\"search($event)\"\r\n [minLength]=\"MinChars()\"\r\n [ngModel]=\"value\" \r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (blur)=\"onTouched(); finalized()\">\r\n </p-autocomplete>\r\n\r\n <label>{{Placeholder}}</label>\r\n </p-floatlabel>\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","import { TemplateRef } from \"@angular/core\";\r\nimport { Observable, Subject } from \"rxjs\";\r\n\r\nexport class BaseFormConfiguration {\r\n DisplayCondition: boolean = true;\r\n DisplayMode: boolean = false;\r\n DisplayLayout: 'form' | 'inline' | 'hidden' = 'form';\r\n FormLayout: boolean = true;\r\n DisplayModeTemplate: TemplateRef<any> = null;\r\n Label: string = null;\r\n Last: boolean = false;\r\n FormGroupClass: string = null;\r\n Placeholder: string = null;\r\n LabelInputRatio: string = null;\r\n name: string = null;\r\n readonly: boolean | undefined = undefined;\r\n disabled: boolean | undefined = undefined;\r\n Validation: boolean = true;\r\n SetValidationSubject: Subject<{ fieldName: string, error: string }> = null;\r\n required: boolean | '' | undefined = undefined;\r\n Display: string = '{description}';\r\n IdField: string = \"id\";\r\n Source: any[] = null;\r\n statusChangesObservable: Observable<any> = null;\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { InputNumberModule, InputNumber } from 'primeng/inputnumber';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\"\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\"\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-currency\",\r\n templateUrl: \"form-currency.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [InputNumberModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormCurrencyComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormCurrencyComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input() mode: 'currency' | 'decimal' = 'decimal';\r\n \r\n @Input() Precision: number = 2;\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n // Eh... checcedevofa\r\n this.innerElement = (<InputNumber>(<any>this.innerElement)).el;\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <p-floatlabel variant=\"on\">\r\n\r\n <p-inputnumber \r\n size=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n autocomplete=\"off\"\r\n style=\"width: 100%;\"\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [pattern]=\"pattern\"\r\n [minFractionDigits]=\"Precision\"\r\n [maxFractionDigits]=\"Precision\"\r\n [mode]=\"mode\"\r\n [currency]=\"mode === 'currency' ? 'EUR' : undefined\"\r\n locale=\"it-IT\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (onBlur)=\"onTouched(); finalized()\"\r\n />\r\n\r\n <label>{{Placeholder}}</label>\r\n </p-floatlabel>\r\n\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, ContentChild, forwardRef, Injector, Input, signal, ViewEncapsulation, WritableSignal } from \"@angular/core\";\r\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, ValidatorFn } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\";\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\";\r\n\r\n// RxJs\r\nimport { Observable, Subject } from \"rxjs\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { EsFormDateComponent } from \"../date/form-date.component\";\r\nimport { EsFormInputComponent } from \"../input/form-input.component\";\r\nimport { BaseFormConfiguration } from \"../../models/BaseFormConfiguration\";\r\nimport { EsFormCheckboxComponent } from \"../checkbox/form-checkbox.component\";\r\nimport { EsFormSelectComponent } from \"../select/form-select.component\";\r\nimport { EsFormAutocompleteComponent } from \"../autocomplete/form-autocomplete.component\";\r\nimport { EsFormDateTimeComponent } from \"../datetime/form-datetime.component\";\r\nimport { EsFormTimeComponent } from \"../time/form-time.component\";\r\nimport { EsFormFileComponent } from \"../file/form-file.component\";\r\nimport { EsFormCurrencyComponent } from \"../currency/form-currency.component\";\r\n\r\n/*\r\nQuirk di questo componente:\r\n\r\n1: Se viene utilizzato lo stesso name per il <form-adaptive esterno e il <form-roba interno, angular mergia tutto in un unico ngControl, ma gli eventi sono sul riferimento originale (form-adaptive, non form-roba).\r\nPer poter collegare l'observable di cambio di stato per i tooltip (che devono essere collegati al form-roba), recupero al volo l'observable e lo riassegno internamente a **statusChangesObservable**. \r\nÈ un Input assolutamente da non utilizzare lato programmatore.\r\n\r\n^ PORCATA. abbastanza hackerosa, però estremamente funzionale\r\n\r\n2: con **performFormLogic** a false, mi assicuro di tenere l'implementazione standard del ControlValueAccessor mentre faccio gestire tutto il resto al componente interno.\r\nEsFormAdaptiveComponent deve SOLO fare da passacarte (TRANNE PER LE CASISTICHE FLOAT... VEDI SOTTO)\r\n\r\n*/\r\n@Component({\r\n selector: \"form-adaptive\",\r\n templateUrl: \"form-adaptive.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule,\r\n\r\n EsFormInputComponent,\r\n EsFormDateComponent,\r\n EsFormCheckboxComponent,\r\n EsFormSelectComponent,\r\n EsFormAutocompleteComponent,\r\n EsFormDateTimeComponent,\r\n EsFormTimeComponent,\r\n EsFormFileComponent,\r\n EsFormCurrencyComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormAdaptiveComponent), multi: true },\r\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => EsFormAdaptiveComponent), multi: true }\r\n ],\r\n standalone: true\r\n})\r\nexport class EsFormAdaptiveComponent extends BaseFormControl implements ControlValueAccessor, Validator {\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del suffisso */\r\n @ContentChild(\"suffix\", { static: false }) suffixAdaptive;\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del prefisso */\r\n @ContentChild(\"prefix\", { static: false }) prefixAdaptive;\r\n\r\n /** Tipologia che decide che componente mostrare */\r\n @Input() Type: 'string' | 'float' | 'date' | 'number' | 'int' | 'boolean' | 'enum' | 'autocomplete' | 'datetime' | 'time' | 'file' | 'currency';\r\n /** Messaggio per quando si binda un form-adaptive senza tipo */\r\n @Input() TypeMissingMessage: string;\r\n\r\n // Specifico autocomplete\r\n @Input() SearchFunction: (search: string, byid: boolean, context?: any) => Observable<{ id: string, description: string }[]> = null;\r\n\r\n // Specifico currency\r\n @Input() Precision: number = 2;\r\n\r\n @Input() TypePattern: string = \"\";\r\n \r\n public IntPattern = signal('^[0-9]\\\\d*$');\r\n public FloatPattern = signal('^([0-9]*[,])?[0-9]+$');\r\n public config: WritableSignal<BaseFormConfiguration> = signal(null);\r\n\r\n constructor(inj: Injector) { \r\n super(inj);\r\n this.performFormLogic = false;\r\n }\r\n\r\n public ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n this.handleFloatPatternSeparately();\r\n // TYPE PATTERN funziona solo con number e float\r\n }\r\n\r\n protected override async getValueIn(value: any): Promise<any> {\r\n if ((this.Type === \"float\" || this.Type === \"number\"))\r\n return value?.toString()?.replace?.(\".\", \",\");\r\n else\r\n return value;\r\n }\r\n\r\n protected override async getValueOut(value: any): Promise<any> {\r\n if ((this.Type === \"float\" || this.Type === \"number\")) {\r\n this.floatValuePreAdjustmente = value;\r\n return value?.replace?.(\".\", \"\")?.replace?.(\",\", \".\");\r\n }\r\n else\r\n return value;\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n let defaultConfig = new BaseFormConfiguration();\r\n let properties = Object.keys(defaultConfig);\r\n // Riempio la configurazione con tutte le proprietà definite in questa istanza. \r\n // Tutto per passarla al livello sotto\r\n for (let i = 0; i < properties.length; i++) {\r\n let p = properties[i];\r\n defaultConfig[p] = this[p];\r\n }\r\n this.config.set(defaultConfig);\r\n }\r\n\r\n /*\r\n ****************************************************************************************************************************\r\n ****************************************************************************************************************************\r\n ************************************* GESTIONE CUSTOM PER I NUMERI FLOATING POINT ****************************************\r\n ****************************************************************************************************************************\r\n ****************************************************************************************************************************\r\n */\r\n\r\n /*\r\n Per i numeri float, il valore che mostro è diverso dal valore sotto perché ci sono degli aggiustamenti di numeri, virgola e non.\r\n Il componente interno lavora con `value` che rappresenta il valore reale, number, mentre il componente esterno wrappa questo valore reale\r\n in una rappresentazione in stringa italiana per gli input. \r\n Dato che il valore da validare è quello esterno (scritto in italiano) lascio il componente interno senza pattern ed implemento il Validatore qui\r\n\r\n N.B: QUESTA IMPLEMENTAZIONE NON MI PIACE. BISOGNA CERCARE UNA VIA PIU BELLA QUANDO SI HA UN PO' DI TEMPO\r\n */\r\n\r\n /** Variabile interna che salva il valore degli input float prima dell'aggiustamento */\r\n private floatValuePreAdjustmente: string;\r\n\r\n registerOnValidatorChange?(_: () => void) { }\r\n \r\n handleFloatPatternSeparately() {\r\n if ((this.Type === \"float\" || this.Type === \"number\")) {\r\n this.pattern = this.TypePattern || this.FloatPattern();\r\n this.SetValidationSubject = this.SetValidationSubject || new Subject<{ fieldName: string, error: string }>();\r\n }\r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n var ret = [\"number\", \"float\"].includes(this.Type) ? this.customPatternValidator(this.pattern)(control) : null;\r\n this.SetValidationSubject?.next?.({ fieldName: this.name, error: ret?.pattern ? \"Formato input errato\" : \"\" });\r\n return ret;\r\n }\r\n\r\n /** Validatore originale angular, copiaincollato. Cambiata solo la riga dove c'è `this.floatValuePreAdjustmente` */\r\n customPatternValidator(pattern: string | RegExp): ValidatorFn {\r\n if (!pattern) return (_: AbstractControl) => null;\r\n let regex: RegExp;\r\n let regexStr: string;\r\n\r\n if (typeof pattern === 'string') {\r\n regexStr = '';\r\n if (pattern.charAt(0) !== '^') regexStr += '^';\r\n regexStr += pattern;\r\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\r\n regex = new RegExp(regexStr);\r\n }\r\n\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) return null;\r\n\r\n // Caricamento avvenuto adesso da modello\r\n if(control.value && !this.floatValuePreAdjustmente)\r\n this.floatValuePreAdjustmente = control.value.toString().replace(\".\", \",\");\r\n\r\n return regex.test(this.floatValuePreAdjustmente) ? null : { 'pattern': { 'requiredPattern': regexStr, 'actualValue': this.floatValuePreAdjustmente } };\r\n };\r\n }\r\n}","<!-- Riga di debug -->\r\n<!-- <div><strong>Valore interno:</strong> {{value | json}}</div> -->\r\n\r\n@if(!Type){\r\n <div class=\"app-margin-top-5\"><em>{{TypeMissingMessage}}</em></div>\r\n}\r\n\r\n@if(config()){\r\n @switch(Type){\r\n @case (\"currency\") {\r\n <form-currency [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\" [Precision]=\"Precision\"></form-currency>\r\n }\r\n @case (\"date\") {\r\n <form-date [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\"></form-date>\r\n }\r\n @case (\"boolean\") {\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\"></form-checkbox>\r\n }\r\n @case (\"enum\") {\r\n <form-select [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\" [Source]=\"BoundSource()\">\r\n @if(suffixAdaptive){\r\n <ng-template #suffix><ng-container *ngTemplateOutlet=\"suffixAdaptive\"></ng-container></ng-template>\r\n }\r\n @if(prefixAdaptive){\r\n <ng-template #prefix><ng-container *ngTemplateOutlet=\"prefixAdaptive\"></ng-container></ng-template>\r\n }\r\n </form-select>\r\n }\r\n @case (\"autocomplete\") {\r\n <form-autocomplete [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\" [SearchFunction]=\"SearchFunction\"></form-autocomplete>\r\n }\r\n @case (\"datetime\") {\r\n <form-datetime [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\"></form-datetime>\r\n }\r\n @case (\"time\") {\r\n <form-time [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\"></form-time>\r\n }\r\n @case (\"file\") {\r\n <form-file [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\"></form-file>\r\n }\r\n @case (\"string\") {\r\n <form-input [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\" [pattern]=\"pattern ?? ''\">\r\n @if(suffixAdaptive){\r\n <ng-template #suffix><ng-container *ngTemplateOutlet=\"suffixAdaptive\"></ng-container></ng-template>\r\n }\r\n @if(prefixAdaptive){\r\n <ng-template #prefix><ng-container *ngTemplateOutlet=\"prefixAdaptive\"></ng-container></ng-template>\r\n }\r\n </form-input>\r\n }\r\n @case (\"int\") {\r\n <form-input [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\" [pattern]=\"pattern ?? IntPattern()\">\r\n @if(suffixAdaptive){\r\n <ng-template #suffix><ng-container *ngTemplateOutlet=\"suffixAdaptive\"></ng-container></ng-template>\r\n }\r\n @if(prefixAdaptive){\r\n <ng-template #prefix><ng-container *ngTemplateOutlet=\"prefixAdaptive\"></ng-container></ng-template>\r\n }\r\n </form-input>\r\n }\r\n @default {\r\n <!-- float e number -->\r\n <form-input [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\">\r\n @if(suffixAdaptive){\r\n <ng-template #suffix><ng-container *ngTemplateOutlet=\"suffixAdaptive\"></ng-container></ng-template>\r\n }\r\n @if(prefixAdaptive){\r\n <ng-template #prefix><ng-container *ngTemplateOutlet=\"prefixAdaptive\"></ng-container></ng-template>\r\n }\r\n </form-input>\r\n }\r\n }\r\n}","// Angular\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n// Es\r\nimport { BaseLocalization, LocalizationModule } from \"@esfaenza/localizations\";\r\n\r\n// Modelli\r\nimport { FRM_DEBUG_MODE } from './tokens';\r\nimport { EsFormsModuleConfig } from './models/EsFormsModuleConfig';\r\n\r\n// Componenti\r\nimport { EsFormInputComponent } from './forms/input/form-input.component';\r\nimport { EsFormSelectComponent } from './forms/select/form-select.component';\r\nimport { EsFormDateComponent } from './forms/date/form-date.component';\r\nimport { EsFormDateTimeComponent } from './forms/datetime/form-datetime.component';\r\nimport { EsFormTimeComponent } from './forms/time/form-time.component';\r\nimport { EsFormCheckboxComponent } from './forms/checkbox/form-checkbox.component';\r\nimport { EsFormTextareaComponent } from './forms/textarea/form-textarea.component';\r\nimport { EsFormErrorComponent } from './forms/error/form-error.component';\r\nimport { EsFormTemplateComponent } from './forms/template/form-template.component';\r\nimport { EsFormInfoComponent } from './forms/info/form-info.component';\r\nimport { EsFormFileComponent } from './forms/file/form-file.component';\r\nimport { EsFormMultiselectComponent } from './forms/multiselect/form-multiselect.component';\r\nimport { EsFormAutocompleteComponent } from './forms/autocomplete/form-autocomplete.component';\r\nimport { EsFormAdaptiveComponent } from './forms/adaptive/form-adaptive.component';\r\nimport { EsFormCurrencyComponent } from './forms/currency/form-currency.component';\r\n\r\n/** Componenti Standalone reesportati come se fossero moduli */\r\nconst STANDALONE_COMPONENTS = [\r\n EsFormInputComponent,\r\n EsFormSelectComponent,\r\n EsFormDateComponent,\r\n EsFormDateTimeComponent,\r\n EsFormTimeComponent,\r\n EsFormCheckboxComponent,\r\n EsFormTextareaComponent,\r\n EsFormInfoComponent,\r\n EsFormErrorComponent,\r\n EsFormTemplateComponent,\r\n EsFormFileComponent,\r\n EsFormMultiselectComponent,\r\n EsFormAutocompleteComponent,\r\n EsFormAdaptiveComponent,\r\n EsFormCurrencyComponent\r\n];\r\n\r\n/** Moduli utilizzati solo dalla libreria */\r\nconst MODULES = [\r\n CommonModule,\r\n FormsModule,\r\n LocalizationModule\r\n];\r\n\r\n@NgModule({\r\n imports: [...MODULES, ...STANDALONE_COMPONENTS],\r\n exports: [...STANDALONE_COMPONENTS]\r\n})\r\nexport class FormsAndValidationsModule {\r\n\r\n static forRoot(config?: EsFormsModuleConfig): ModuleWithProviders<FormsAndValidationsModule> {\r\n return {\r\n ngModule: FormsAndValidationsModule,\r\n providers: [\r\n { provide: FRM_DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false }\r\n ]\r\n };\r\n }\r\n}","//models\r\nexport * from './lib/models/AppFile';\r\nexport * from './lib/models/ChangeEvent';\r\nexport * from './lib/models/EsFormsModuleConfig';\r\nexport * from './lib/tokens';\r\n\r\n //module\r\nexport * from './lib/forms.module';\r\n\r\n//forms\r\nexport * from './lib/forms/datetime/form-datetime.component';\r\nexport * from './lib/forms/adaptive/form-adaptive.component';\r\nexport * from './lib/forms/template/form-template.component';\r\nexport * from './lib/forms/error/form-error.component';\r\nexport * from './lib/forms/info/form-info.component';\r\nexport * from './lib/forms/checkbox/form-checkbox.component';\r\nexport * from './lib/forms/date/form-date.component';\r\nexport * from './lib/forms/input/form-input.component';\r\nexport * from './lib/forms/select/form-select.component';\r\nexport * from './lib/forms/textarea/form-textarea.component';\r\nexport * from './lib/forms/autocomplete/form-autocomplete.component';\r\nexport * from './lib/forms/file/form-file.component';\r\nexport * from './lib/forms/time/form-time.component';\r\nexport * from './lib/forms/multiselect/form-multiselect.component';\r\nexport * from './lib/forms/base/base-form-control';\r\nexport * from './lib/forms/currency/form-currency.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i5","i3","i2","i4"],"mappings":"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"}
1
+ {"version":3,"file":"esfaenza-forms-and-validations.mjs","sources":["../../../projects/forms-and-validations/src/lib/models/AppFile.ts","../../../projects/forms-and-validations/src/lib/models/ChangeEvent.ts","../../../projects/forms-and-validations/src/lib/models/EsFormsModuleConfig.ts","../../../projects/forms-and-validations/src/lib/tokens.ts","../../../projects/forms-and-validations/src/lib/services/helper.ts","../../../projects/forms-and-validations/src/lib/forms/base/base-form-control.ts","../../../projects/forms-and-validations/src/lib/forms/base/skeleton/input-skeleton.component.ts","../../../projects/forms-and-validations/src/lib/forms/base/skeleton/input-skeleton.component.html","../../../projects/forms-and-validations/src/lib/forms/input/form-input.component.ts","../../../projects/forms-and-validations/src/lib/forms/input/form-input.component.html","../../../projects/forms-and-validations/src/lib/forms/select/form-select.component.ts","../../../projects/forms-and-validations/src/lib/forms/select/form-select.component.html","../../../projects/forms-and-validations/src/lib/forms/date/form-date.component.ts","../../../projects/forms-and-validations/src/lib/forms/date/form-date.component.html","../../../projects/forms-and-validations/src/lib/forms/datetime/form-datetime.component.ts","../../../projects/forms-and-validations/src/lib/forms/time/form-time.component.ts","../../../projects/forms-and-validations/src/lib/forms/checkbox/form-checkbox.component.ts","../../../projects/forms-and-validations/src/lib/forms/checkbox/form-checkbox.component.html","../../../projects/forms-and-validations/src/lib/forms/textarea/form-textarea.component.ts","../../../projects/forms-and-validations/src/lib/forms/textarea/form-textarea.component.html","../../../projects/forms-and-validations/src/lib/forms/error/form-error.component.ts","../../../projects/forms-and-validations/src/lib/forms/error/form-error.component.html","../../../projects/forms-and-validations/src/lib/forms/template/form-template.component.ts","../../../projects/forms-and-validations/src/lib/forms/template/form-template.component.html","../../../projects/forms-and-validations/src/lib/forms/info/form-info.component.ts","../../../projects/forms-and-validations/src/lib/forms/info/form-info.component.html","../../../projects/forms-and-validations/src/lib/forms/file/form-file.component.ts","../../../projects/forms-and-validations/src/lib/forms/file/form-file.component.html","../../../projects/forms-and-validations/src/lib/forms/multiselect/form-multiselect.component.ts","../../../projects/forms-and-validations/src/lib/forms/multiselect/form-multiselect.component.html","../../../projects/forms-and-validations/src/lib/forms/autocomplete/form-autocomplete.component.ts","../../../projects/forms-and-validations/src/lib/forms/autocomplete/form-autocomplete.component.html","../../../projects/forms-and-validations/src/lib/models/BaseFormConfiguration.ts","../../../projects/forms-and-validations/src/lib/forms/currency/form-currency.component.ts","../../../projects/forms-and-validations/src/lib/forms/currency/form-currency.component.html","../../../projects/forms-and-validations/src/lib/forms/adaptive/form-adaptive.component.ts","../../../projects/forms-and-validations/src/lib/forms/adaptive/form-adaptive.component.html","../../../projects/forms-and-validations/src/lib/forms.module.ts","../../../projects/forms-and-validations/src/public-api.ts","../../../projects/forms-and-validations/src/esfaenza-forms-and-validations.ts"],"sourcesContent":["\r\n/** Classe che identifica un file */\r\nexport class AppFile {\r\n\r\n /** @ignore */\r\n constructor(){\r\n this.filename = \"\";\r\n this.fileb64 = \"\";\r\n this.nativefiles = [];\r\n }\r\n\r\n /** Nome del file, Viene letto in Input e valorizzato in Output */\r\n public filename: string; //I-O\r\n /** B64 del file, Viene letto in Input ma non valorizzato in Output (non puà leggere dal filesystem) */\r\n public fileb64: string; //I\r\n /** Lista di file nativi collegati a questo input. Viene solo valorizzato in Output. Non è letto come Input */\r\n public nativefiles: File[]; //O\r\n}","\r\nexport class ChangeEvent {\r\n constructor(public internal: boolean, public value: any) { }\r\n}","/**\r\n * Classe di configurazione del modulo\r\n */\r\nexport class EsFormsModuleConfig {\r\n\r\n\r\n /** Abilita o meno la modalità di debug */\r\n debugMode?: boolean;\r\n\r\n}","import { InjectionToken } from '@angular/core';\r\n\r\n/** Token che indica la lingua da utilizzare, sono supportate \"it-IT\" ed \"en-US\" */\r\nexport const FRM_DEBUG_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('FAV_DEBUG_MODE');","import { Injectable, Injector } from \"@angular/core\";\r\nimport { NgControl, NgForm, NgModel } from \"@angular/forms\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class FormsHelper {\r\n\r\n public retrieveModelControlAndForm(inj: Injector, fieldName: string, explicitForm?: NgForm): { control: NgControl, model: NgModel, form: { natural: boolean, entity: NgForm } } {\r\n let ngModel = inj.get(NgModel, null);\r\n\r\n if (!ngModel)\r\n throw `[@esfaenza/forms] null NgModel for field '${fieldName}'`;\r\n\r\n let ngControl = inj.get(NgControl, null);\r\n if (!ngControl)\r\n throw `[@esfaenza/forms] null NgControl for field '${fieldName}'`;\r\n\r\n var naturalParent: NgForm = (<any>ngControl)._parent;\r\n var hasForm = !!explicitForm || !!naturalParent;\r\n\r\n return {\r\n control: ngControl,\r\n model: ngModel,\r\n form: { natural: hasForm ? !explicitForm : null, entity: hasForm ? (explicitForm ?? naturalParent) : null }\r\n };\r\n }\r\n}","// Angular\r\nimport { booleanAttribute, ChangeDetectorRef, computed, ContentChild, Directive, ElementRef, EventEmitter, Injector, Input, Output, signal, Signal, TemplateRef, ViewChild } from \"@angular/core\";\r\nimport { ControlValueAccessor, NgControl, NgForm, NgModel } from \"@angular/forms\";\r\n\r\n// Prime NG\r\nimport { Popover } from \"primeng/popover\";\r\nimport { deepEquals } from '@primeuix/utils';\r\n\r\n// Rxjs\r\nimport { distinctUntilChanged, takeUntil } from \"rxjs/operators\";\r\nimport { Observable, Subject } from \"rxjs\";\r\n\r\n// Esfaenza\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Lib\r\nimport { ChangeEvent } from \"../../models/ChangeEvent\";\r\nimport { BaseFormConfiguration } from \"../../models/BaseFormConfiguration\";\r\n\r\nimport { FRM_DEBUG_MODE } from \"../../tokens\";\r\nimport { FormsHelper } from \"../../services/helper\";\r\n\r\n/** \r\n * Componente base da cui tutti i componenti Form implementano \r\n * N.B: \r\n * innerInput è il componente interno\r\n * ngControl è il componente esterno (form-roba)\r\n */\r\n@Directive()\r\nexport abstract class BaseFormControl implements ControlValueAccessor {\r\n\r\n protected onChange = (_: any) => { };\r\n public onTouched = () => { };\r\n public registerOnChange(fn: any): void { this.onChange = fn; }\r\n public registerOnTouched(fn: any): void { this.onTouched = fn; }\r\n\r\n public value: any;\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del suffisso */\r\n @ContentChild(\"suffix\", { static: false }) suffix;\r\n /** Delegato per l'esecuzione di un'operazione al click del suffisso */\r\n @Output() onSuffixAction: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del prefisso */\r\n @ContentChild(\"prefix\", { static: false }) prefix;\r\n /** Delegato per l'esecuzione di un'operazione al click del prefisso */\r\n @Output() onPrefixAction: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @ViewChild('innerInput') public innerInput: NgModel;\r\n @ViewChild('innerElement') public innerElement?: ElementRef;\r\n @ViewChild('tooltip') private tooltip?: Popover;\r\n\r\n @Output() inputChange: EventEmitter<ChangeEvent> = new EventEmitter<ChangeEvent>();\r\n @Output() inputFocus: EventEmitter<any> = new EventEmitter<any>();\r\n @Output() inputFinalized: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n @Input() DisplayCondition: boolean = true;\r\n @Input() DisplayMode: boolean = false;\r\n @Input() DisplayLayout: 'form' | 'inline' | 'hidden' = 'form';\r\n @Input() FormLayout: boolean = true;\r\n @Input() DisplayModeTemplate: TemplateRef<any>;\r\n public EvaluatedModel: string;\r\n public InlineSeparator: string = \", \";\r\n\r\n @Input() FailedValidationMessage: string = null;\r\n @Input() Label: string;\r\n @Input() Last: boolean;\r\n @Input() FormGroupClass: string = \"\";\r\n @Input() Placeholder: string;\r\n @Input() set LabelInputRatio(input: string) {\r\n if (!input) return;\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n get LabelInputRatio(){\r\n return `${this.LabelColWidth} ${this.InputColWidth}`\r\n }\r\n public LabelColWidth: number = 4;\r\n public InputColWidth: number = 8;\r\n\r\n\r\n @Input() Form: NgForm;\r\n @Input() name: string;\r\n @Input({ transform: booleanAttribute }) readonly: boolean | undefined;\r\n @Input({ transform: booleanAttribute }) disabled: boolean | undefined;\r\n @Input() pattern: string | undefined;\r\n @Input() Validation: boolean = true;\r\n @Input() SetValidationSubject: Subject<{ fieldName: string, error: string }>;\r\n public TooltipText: string = \"\";\r\n public InternalName: string = \"\";\r\n\r\n /*\r\n *** Valori assunti in base al binding:\r\n <input ... required /input> -> required === ''\r\n <input ... /input> -> required === undefined\r\n <input ... [required]=\"true\" /input> -> required === true\r\n */\r\n @Input({ transform: booleanAttribute }) required: boolean | '' | undefined;\r\n\r\n /**\r\n * Espressione simil-Angular per cambiare il testo dei componenti che scelgono il proprio modello da una **Source**\r\n * \r\n * Il funzionamento è identico al binder di angular, solo con una graffa invece che 2.\r\n * È inoltre possibile aggiungere pezzi di descrizione in maniera condizionale con la sintassi **:prop?(Prop vale {prop})**\r\n */\r\n @Input() Display: string = '{description}';\r\n @Input() IdField: string = \"id\";\r\n private BindCheckingGroups: { global: string, prop: string, whenexists: string }[] = []\r\n private BindProperties: { global: string, prop: string }[] = [];\r\n\r\n private _source = signal<any[] | undefined>(null);\r\n @Input() get Source(): any[] | undefined { return this._source(); }\r\n set Source(val: any[] | undefined) { if (!deepEquals(val, this._source())) this._source.set(val); }\r\n protected BoundSourceCache: { [id: string]: { description: string, source: any} } = {};\r\n\r\n public BoundSource: Signal<{ id: string, description: string }[]> = computed(() => {\r\n let source = this._source();\r\n\r\n // Cache locale per evitare di rifare dei regex.match ogni santa volta\r\n if ((source?.length || 0) == 0)\r\n return [];\r\n\r\n if (this.BindCheckingGroups.length == 0)\r\n this.evaluateBindCheckingGroups();\r\n\r\n if (this.BindProperties.length == 0)\r\n this.evaluateBindProperties();\r\n\r\n this.BoundSourceCache = {};\r\n let ret = source.map(s => this.transformSourceItem(s));\r\n\r\n // Post trybind se c'è un modello associato ricalcolo l'**EvaluatedModel**\r\n if (this.value !== null || this.value !== undefined)\r\n this.EvaluatedModel = ret.find(t => t.id == this.value)?.description;\r\n\r\n return ret;\r\n });\r\n\r\n protected helper: FormsHelper;\r\n protected utiExts: UtilityService;\r\n protected lc: LocalizationService;\r\n protected msgs: MessageService;\r\n protected ngControl: NgControl;\r\n protected ngModel: NgModel;\r\n protected FRM_DEBUG_MODE: boolean;\r\n protected cdr: ChangeDetectorRef;\r\n\r\n /**\r\n * Indica se l'input del componente dev'essere risparato fuori con le trasformazioni da *outValue*\r\n * \r\n * Il controllo potrebbe essere automatico ma rischia di diventare pesante per componenti particolari/pesanti\r\n */\r\n protected shouldReemitAdjustedInput: boolean = false;\r\n\r\n @Input() statusChangesObservable: Observable<any> = null;\r\n protected performFormLogic: boolean = true;\r\n\r\n protected destroyed$: Subject<void> = new Subject<void>();\r\n \r\n @Input() Configuration: BaseFormConfiguration;\r\n\r\n constructor(protected inj: Injector) {\r\n this.cdr = this.inj.get(ChangeDetectorRef);\r\n this.lc = this.inj.get(LocalizationService);\r\n this.msgs = this.inj.get(MessageService);\r\n this.utiExts = this.inj.get(UtilityService);\r\n this.helper = this.inj.get(FormsHelper);\r\n this.FRM_DEBUG_MODE = this.inj.get(FRM_DEBUG_MODE, null);\r\n }\r\n\r\n public ngOnDestroy() {\r\n this.hideTooltip();\r\n\r\n if (this.Form && this.ngModel && !!this.Form.getControl(this.ngModel) && this.performFormLogic)\r\n this.Form.removeControl(this.ngModel);\r\n\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n public ngOnInit() {\r\n if (!this.Configuration) return;\r\n\r\n let properties = Object.keys(this.Configuration);\r\n\r\n // Riempio tutte le proprietà non assegnate con il loro equivalente da configurazione se presente\r\n for (let i = 0; i < properties.length; i++) {\r\n let p = properties[i];\r\n // LabelInputRatio è sempre overridabile\r\n if ((this[p] === null || this[p] === undefined || p == \"LabelInputRatio\") && (this.Configuration[p] !== null && this.Configuration[p] !== undefined)) {\r\n this[p] = this.Configuration[p];\r\n }\r\n }\r\n }\r\n\r\n public ngAfterViewInit() {\r\n let helpRes = this.helper.retrieveModelControlAndForm(this.inj, this.name, this.Form);\r\n this.ngModel = helpRes.model\r\n this.ngControl = helpRes.control;\r\n this.InternalName = `${this.name}_internal`;\r\n this.Validation = this.Validation || !this.DisplayMode;\r\n\r\n // Se la logica dei form è effettuata da un compoente interno invece che dal componente attuale, come minimo devo assicurarmi di valorizzare il Form\r\n if (!this.performFormLogic) {\r\n this.Form = helpRes.form.entity;\r\n this.statusChangesObservable = this.ngControl.statusChanges;\r\n return;\r\n }\r\n\r\n if (helpRes.form.natural === false)\r\n this.Form.addControl(this.ngModel);\r\n\r\n if (!this.Validation) {\r\n // Forzatura a non validare questo componente passando dagli internals di Angular perché passando dai controlli interni non va :D\r\n (<any>this.innerInput)._rawValidators = (<any>this.ngControl)._rawValidators = [];\r\n (<any>this.innerInput)._composedValidatorFn = (<any>this.ngControl)._composedValidatorFn = null;\r\n }\r\n\r\n if(helpRes.form.entity !== null)\r\n helpRes.form.entity.ngSubmit.subscribe(_ => {\r\n this.innerInput.control.markAsDirty({ emitEvent: false });\r\n this.ngControl.control.markAsDirty({ emitEvent: false });\r\n\r\n if (this.ngControl.invalid) this.showTooltip();\r\n });\r\n\r\n (this.statusChangesObservable ?? this.ngControl.statusChanges).pipe(distinctUntilChanged(), takeUntil(this.destroyed$)).subscribe((status) => {\r\n // Tutti i cambi ad \"Invalido\" li ignoro se il controllo non è stato manco sfiorato. Vuol dire che è una fase di bootstrap con un valore invalido, che sia vuoto o errato da DB\r\n if(!this.ngControl.touched) return;\r\n this.log(`Control Status Changed - ${this.name} -> ${status}`);\r\n (status == \"INVALID\" ? this.showTooltip : this.hideTooltip).bind(this)()\r\n });\r\n\r\n if (this.SetValidationSubject) {\r\n this.SetValidationSubject.pipe(distinctUntilChanged(), takeUntil(this.destroyed$)).subscribe(v => {\r\n if (v.fieldName !== this.name) return;\r\n\r\n // Nessun errore, ripulisco\r\n if(!v.error)\r\n {\r\n this.innerInput.control.setErrors(null, { emitEvent: false });\r\n this.ngControl.control.setErrors(null, { emitEvent: false });\r\n return;\r\n }\r\n\r\n this.log(`Control Forced Invalid - ${this.name} error: ${v.error}`);\r\n\r\n this.innerInput.control.setErrors({ forcedtoinvalid: true }, { emitEvent: false });\r\n this.innerInput.control.markAsDirty({ emitEvent: false });\r\n\r\n this.ngControl.control.setErrors({ forcedtoinvalid: true }, { emitEvent: false });\r\n this.ngControl.control.markAsDirty({ emitEvent: false });\r\n\r\n requestAnimationFrame(() => { if (this.ngControl.invalid) this.showTooltip(v.error); });\r\n });\r\n }\r\n }\r\n\r\n private showTooltip(error?: string) {\r\n if(!this.tooltip)\r\n return;\r\n \r\n this.TooltipText = this.getTooltipText(error);\r\n this.tooltip.show(null, this.innerElement.nativeElement);\r\n }\r\n\r\n protected getTooltipText(error?: string){\r\n return error ?? this.FailedValidationMessage ?? (this.required !== undefined && this.isEmptyValue(this.value) ? \"È obbligatorio fornire un valore\" : \"Formato input errato\");\r\n }\r\n\r\n private hideTooltip() {\r\n if(!this.tooltip) return;\r\n\r\n this.tooltip.hide();\r\n }\r\n\r\n public log(message: string) {\r\n if (this.FRM_DEBUG_MODE)\r\n console.log(\"@forms-and-validations: \" + message)\r\n }\r\n\r\n public async writeValue(obj: any): Promise<void> {\r\n // Coercizione di tutti i valori \"vuoti\" all'unico \"null\"\r\n if (obj === null || obj === undefined) obj = null;\r\n\r\n this.value = await this.getValueIn(obj);\r\n\r\n if(!this.performFormLogic) return;\r\n\r\n this.EvaluatedModel = await this.getEvaluatedModel(this.value);\r\n\r\n if (this.shouldReemitAdjustedInput && !!this.value) {\r\n // Riallineamento esatto del valore. Può entrare qualsiasi valore, ma il modello del form e il binding potrebbe essere fatto sempre su un tipo diverso\r\n // Es: nei form date, entra un dayjs, viene letto come Date (getValueIn) e viene sparato fuori come \"dd/MM/yyyy\" (getValueOut)\r\n // this.value è valorizzato qui sopra\r\n this.onChange(await this.getValueOut(this.value));\r\n }\r\n }\r\n\r\n public async changed(value: any) {\r\n this.value = value;\r\n\r\n this.onChange(await this.getValueOut(this.value));\r\n\r\n if(!this.performFormLogic) return;\r\n\r\n this.EvaluatedModel = await this.getEvaluatedModel(value);\r\n\r\n this.inputChange.emit(new ChangeEvent(false, this.value));\r\n this.log(`Control Value Changed - ${this.name}, value: ${this.value}`);\r\n }\r\n\r\n // Leggero debounce sul finalize in quanto ci sono alcuni componenti che per attaccare tutti gli eventi \"finalizzanti\" potrebbero duplicare le chiamate.\r\n // vedi form-date i cui eventi finalizzanti sono sia l'onBlur che l'onSelect, ma in alcune situazioni vengono richiamati entrambi\r\n private finalizedDebounceInterval = null;\r\n public finalized(debounceTime = 50) {\r\n if (this.finalizedDebounceInterval)\r\n clearInterval(this.finalizedDebounceInterval);\r\n\r\n this.finalizedDebounceInterval = setInterval(() => {\r\n this.inputFinalized.emit(this.ngControl?.name?.toString());\r\n this.log(\"Control Value Finalized - \" + this.name + \" with value: \" + this.value);\r\n clearInterval(this.finalizedDebounceInterval);\r\n }, debounceTime);\r\n }\r\n\r\n public focused(event: any) {\r\n this.inputFocus.emit(event);\r\n this.log(\"Control Focused - \" + this.name);\r\n }\r\n\r\n /** Valuta il contenuto della variabile BindCheckingGroups */\r\n private evaluateBindCheckingGroups() {\r\n // Blocco per tirare fuori le condizioni scritte tipo --> :prop?(Roba con {prop})\r\n var iffedMatches = this.Display.match(/:([a-z]+)\\?\\(([^\\(\\)]+)\\)/g);\r\n if (!iffedMatches) return;\r\n\r\n this.BindCheckingGroups = iffedMatches.map(m => {\r\n let groups = m.match(/:([a-z]+)\\?\\(([^\\(\\)]+)\\)/i);\r\n return { global: m, prop: groups[1], whenexists: groups[2] };\r\n });\r\n }\r\n\r\n /** Valuta il contenuto della variabile BindProperties */\r\n private evaluateBindProperties() {\r\n // Blocco per tirare fuori le proprietà scritte tipo --> {prop}\r\n var matches = this.Display.match(/{[a-z]+}/gi);\r\n if (!matches) return;\r\n\r\n this.BindProperties = matches.map(m => { return { global: m, prop: m.substring(1, m.length - 1) } });\r\n }\r\n\r\n /**\r\n * Trasforma un oggetto della Source alla sua versione \"nuova\" basandosi sulle informazioni su gruppi e proprietà\r\n * \r\n * @param {any} item Oggetto da trasformare\r\n * \r\n * @returns {{id: string, description: string}} Oggetto finale trasformato\r\n */\r\n private transformSourceItem(s: any): {id: string, description: string} {\r\n // Parto sempre dalla variabile di Display, poi sostituisco pezzo per pezzo\r\n let desc = this.Display;\r\n\r\n // Taglio o mantengo le condizioni in base alla proprietà su cui fare check\r\n // Dopodiché scrivo tutte le proprietà\r\n for (let i = 0; i < this.BindCheckingGroups.length; i++) {\r\n let t = this.BindCheckingGroups[i];\r\n desc = desc.replace(t.global, (s[t.prop] !== null && s[t.prop] !== undefined && s[t.prop] !== \"\") ? t.whenexists : \"\");\r\n }\r\n\r\n for (let i = 0; i < this.BindProperties.length; i++) {\r\n let t = this.BindProperties[i];\r\n desc = desc.replace(t.global, s[t.prop]);\r\n }\r\n\r\n let ret = { id: \"\" + s[this.IdField], description: desc };\r\n this.BoundSourceCache[ret.id] = { description: ret.description, source: s};\r\n return ret;\r\n }\r\n\r\n // Overridabili per gestire In - Out diversi\r\n protected async getEvaluatedModel(valueAfterInTransform: any): Promise<string> { return valueAfterInTransform?.toString() || \"\"; }\r\n protected async getValueOut(value: any): Promise<any> { return value; }\r\n protected async getValueIn(value: any): Promise<any> { return value; }\r\n protected isEmptyValue(value: any): boolean { return !value; };\r\n}","// Angular\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { BaseFormControl } from \"../base-form-control\";\r\n\r\n\r\n/** Semplice componente di Input testuale, con eventuale prefisso/suffisso */\r\n@Component({\r\n selector: \"input-skeleton\",\r\n templateUrl: \"input-skeleton.component.html\",\r\n styleUrls: [\"./input-skeleton.component.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [CommonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true\r\n})\r\nexport class InputSkeletonComponent {\r\n\r\n @Input() For: BaseFormControl;\r\n @Input() Control: TemplateRef<any>;\r\n\r\n /** @ignore Costruttore */\r\n constructor() { }\r\n}","<ng-container *ngIf=\"!For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\">\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">\r\n <ng-container *ngIf=\"For.DisplayLayout == 'form'\">{{ For.EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"For.DisplayLayout == 'inline'\" class=\"app-inline\">{{ For.EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"For.FormLayout && (!For.DisplayMode || (For.DisplayLayout != 'hidden' && For.DisplayCondition))\" class=\"{{For.FormGroupClass + (For.Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (For.DisplayLayout == 'inline' && For.DisplayMode ? (' app-inline-block ' + (!For.Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : For.LabelColWidth) + (For.DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{For.Label}}{{For.required !== undefined && For.required !== false && !For.DisplayMode ? '*' : ''}}{{For.Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"For.DisplayMode && For.DisplayLayout == 'inline' && For.InlineSeparator != ''\">{{For.InlineSeparator}}</span>\r\n <div class=\"col-md-{{For.DisplayMode && For.DisplayLayout == 'inline' ? 'none app-inline-block' : For.InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"For.DisplayMode && !For.DisplayModeTemplate\">{{ For.EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"For.DisplayMode && For.DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"For.DisplayModeTemplate, context: { $implicit: For.EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"For.DisplayMode\"><ng-container *ngTemplateOutlet=\"Control\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>","// Angular\r\nimport { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, forwardRef, Input, numberAttribute, Output, signal, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { InputTextModule } from 'primeng/inputtext';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\"\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\"\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-input\",\r\n templateUrl: \"form-input.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [InputTextModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormInputComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormInputComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input({ transform: numberAttribute }) minlength: number | undefined;\r\n @Input({ transform: numberAttribute }) maxlength: number | undefined;\r\n @Input() pattern: string | undefined;\r\n\r\n @Input() Password: boolean = false;\r\n\r\n public passShown = signal(false);\r\n public Type = signal(\"text\");\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n\r\n if (this.Password)\r\n this.Type.set(\"password\");\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n\r\n <p-inputgroup>\r\n <p-inputgroup-addon *ngIf=\"!!prefix\">\r\n <span (click)=\"onPrefixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\r\n </span>\r\n </p-inputgroup-addon>\r\n\r\n <p-floatlabel variant=\"on\">\r\n <input \r\n pInputText \r\n pSize=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n autocomplete=\"off\"\r\n style=\"width: 100%;\"\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [attr.type]=\"Type\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readOnly]=\"readonly\"\r\n [minlength]=\"minlength\" \r\n [maxlength]=\"maxlength\" \r\n [pattern]=\"pattern\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (blur)=\"onTouched(); finalized()\"\r\n />\r\n \r\n <label>{{Placeholder}}</label>\r\n </p-floatlabel>\r\n\r\n <p-inputgroup-addon *ngIf=\"Password\">\r\n <a *ngIf=\"passShown()\" class=\"far fa-eye-slash app-fs-16 app-pointer\" (click)=\"Type.set('password'); passShown.set(false); $event.preventDefault()\"></a>\r\n <a *ngIf=\"!passShown()\" class=\"far fa-eye app-fs-16 app-pointer\" (click)=\"Type.set('text'); passShown.set(true); $event.preventDefault()\"></a>\r\n </p-inputgroup-addon>\r\n\r\n <p-inputgroup-addon *ngIf=\"!!suffix\">\r\n <span (click)=\"onSuffixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\r\n </span>\r\n </p-inputgroup-addon>\r\n </p-inputgroup>\r\n\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, TemplateRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { Select, SelectModule } from 'primeng/select';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\";\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-select\",\r\n templateUrl: \"form-select.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [SelectModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormSelectComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormSelectComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input() OptionsTemplate: TemplateRef<any>;\r\n\r\n public RequiredPlaceholder: string = \"\";\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n // Eh... checcedevofa\r\n this.innerElement = (<Select>(<any>this.innerElement)).el;\r\n\r\n if (!this.Placeholder && this.required) {\r\n this.RequiredPlaceholder = \"Seleziona un valore...\";\r\n this.Placeholder = \"\";\r\n }\r\n }\r\n\r\n protected override async getEvaluatedModel(value: any): Promise<string> {\r\n return this.BoundSource?.().find(t => t.id == value)?.description ?? \"\";\r\n }\r\n\r\n protected override async getValueIn(value: any): Promise<any> {\r\n return value !== null && value !== undefined && value !== \"\" ? value.toString() : null;\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n\r\n<ng-template #controlTemplate>\r\n\r\n <p-inputgroup>\r\n <p-inputgroup-addon *ngIf=\"!!prefix\">\r\n <span (click)=\"onPrefixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\r\n </span>\r\n </p-inputgroup-addon>\r\n\r\n <p-floatlabel variant=\"on\">\r\n\r\n <p-select\r\n style=\"width: 100%\"\r\n size=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [filter]=\"true\" \r\n filterBy=\"description\"\r\n [showClear]=\"true\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [options]=\"BoundSource()\"\r\n [placeholder]=\"RequiredPlaceholder\"\r\n optionLabel=\"description\"\r\n optionValue=\"id\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (onChange)=\"onTouched(); finalized()\">\r\n\r\n <ng-template *ngIf=\"OptionsTemplate\" let-selectedOption #selectedItem>\r\n <ng-container *ngTemplateOutlet=\"OptionsTemplate; context : { $implicit: BoundSourceCache[selectedOption.id].source}\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template *ngIf=\"OptionsTemplate\" let-itm #item>\r\n <ng-container *ngTemplateOutlet=\"OptionsTemplate; context : { $implicit: BoundSourceCache[itm.id].source}\"></ng-container>\r\n </ng-template>\r\n </p-select>\r\n \r\n <label>{{Placeholder}}</label>\r\n </p-floatlabel>\r\n\r\n <p-inputgroup-addon *ngIf=\"!!suffix\">\r\n <span (click)=\"onSuffixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\r\n </span>\r\n </p-inputgroup-addon>\r\n </p-inputgroup>\r\n\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, signal, ViewEncapsulation, WritableSignal } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { DatePickerModule, DatePicker } from 'primeng/datepicker';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\n\r\n// Esfaenza\r\nimport { DateService } from \"@esfaenza/extensions\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\ndeclare var dayjs: any;\r\n\r\n@Component({\r\n selector: \"form-date\",\r\n templateUrl: \"form-date.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [DatePickerModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormDateComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormDateComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /**\r\n * Indica il formato da utilizzare sia in Input che in Output\r\n * \r\n * 1. Se date vengono utilizzate le Date di Javascript\r\n * \r\n * 2. Se timestring vengono utilizzate stringhe del tipo '00:00:00'\r\n * \r\n * 3. Se dayjs viene utilizzato, appunto, dayjs\r\n */\r\n @Input() InOutFormat: 'date' | 'timestring' | 'dayjs' = 'timestring';\r\n\r\n /** Nel caso dei componenti data il Placeholder è il formato, mentre la label floattante, se esistente, dev'essere specificata */\r\n @Input() FloatingLabel: boolean = false;\r\n\r\n protected datesExts: DateService;\r\n\r\n protected mode: 'date' | 'datetime' | 'time' | 'month' | 'year' | 'daterange';\r\n\r\n public view: WritableSignal<'month' | 'year' | 'date'> = signal('date');\r\n public dateFormat: WritableSignal<string | undefined> = signal(undefined);\r\n public showTime: WritableSignal<boolean | undefined> = signal(undefined);\r\n public hourFormat: WritableSignal<number | undefined> = signal(undefined);\r\n public timeOnly: WritableSignal<boolean | undefined> = signal(undefined);\r\n public showButtonBar: WritableSignal<boolean | undefined> = signal(undefined);\r\n public selectionMode: WritableSignal<'single' | 'multiple' | 'range' | undefined> = signal(undefined);\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n this.setInputMode();\r\n this.adjustInputModeVisuals();\r\n\r\n this.datesExts = this.inj.get(DateService);\r\n this.shouldReemitAdjustedInput = true;\r\n\r\n // Eh... checcedevofa\r\n this.innerElement = (<DatePicker>(<any>this.innerElement)).el;\r\n }\r\n\r\n protected setInputMode() {\r\n this.mode = \"date\";\r\n }\r\n\r\n protected override async getEvaluatedModel(value: any): Promise<string> {\r\n let pieces = [];\r\n let formatted = this.datesExts.getFormatted(value, ![\"datetime\", \"time\"].includes(this.mode), false);\r\n\r\n switch (this.mode) {\r\n case \"date\":\r\n return formatted || \"\";\r\n case \"daterange\":\r\n\r\n break;\r\n case \"datetime\":\r\n return formatted || \"\";\r\n case \"time\":\r\n return formatted?.split(' ')?.[1] || \"\";\r\n case \"month\":\r\n pieces = formatted?.split('/');\r\n return formatted ? `${pieces[1]}/${pieces[2]}` : \"\";\r\n case \"year\":\r\n pieces = formatted?.split('/');\r\n return formatted ? `${pieces[2]}` : \"\";\r\n }\r\n }\r\n\r\n protected override async getValueOut(value: any) {\r\n let convertion = this.datesExts.getDateConvertion(value, false, this.InOutFormat, ![\"datetime\", \"time\"].includes(this.mode))\r\n\r\n switch (this.mode) {\r\n case \"date\":\r\n return convertion;\r\n case \"daterange\":\r\n\r\n break;\r\n case \"datetime\":\r\n return convertion;\r\n case \"time\":\r\n return convertion;\r\n case \"month\":\r\n\r\n break;\r\n case \"year\":\r\n\r\n break;\r\n }\r\n }\r\n\r\n protected override async getValueIn(obj: any) {\r\n if (!obj) return null;\r\n\r\n switch (this.mode) {\r\n case \"date\":\r\n return this.datesExts.getDateConvertion(obj, false, 'date');\r\n case \"daterange\":\r\n\r\n break;\r\n case \"datetime\":\r\n return this.datesExts.getDateConvertion(obj, false, 'date');\r\n case \"time\":\r\n if (this.InOutFormat == \"timestring\") {\r\n const [hours, minutes, seconds] = obj.split(\":\");\r\n obj = dayjs().hour(parseInt(hours ?? 0)).minute(parseInt(minutes ?? 0)).second(parseInt(seconds ?? 0));\r\n }\r\n\r\n return this.datesExts.getDateConvertion(obj, false, 'date');\r\n case \"month\":\r\n\r\n break;\r\n case \"year\":\r\n\r\n break;\r\n }\r\n }\r\n\r\n private adjustInputModeVisuals() {\r\n switch (this.mode) {\r\n case \"date\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"DD/MM/YYYY\";\r\n this.view.set(\"date\");\r\n this.dateFormat.set(\"dd/mm/yy\");\r\n this.selectionMode.set(\"single\");\r\n this.showTime.set(undefined);\r\n this.hourFormat.set(undefined);\r\n this.timeOnly.set(undefined);\r\n this.showButtonBar.set(true);\r\n break;\r\n case \"daterange\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"DD/MM/YYYY\";\r\n this.view.set(\"date\");\r\n this.dateFormat.set(\"dd/mm/yy\");\r\n this.selectionMode.set(\"range\");\r\n this.showTime.set(undefined);\r\n this.hourFormat.set(undefined);\r\n this.timeOnly.set(undefined);\r\n this.showButtonBar.set(true);\r\n break;\r\n case \"datetime\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"DD/MM/YYYY HH:mm:ss\";\r\n this.view.set(\"date\");\r\n this.dateFormat.set(\"dd/mm/yy\");\r\n this.selectionMode.set(\"single\");\r\n this.showTime.set(true);\r\n this.hourFormat.set(24);\r\n this.timeOnly.set(undefined);\r\n this.showButtonBar.set(true);\r\n break;\r\n case \"time\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"HH:mm\";\r\n this.view.set(\"date\");\r\n this.dateFormat.set(undefined);\r\n this.selectionMode.set(\"single\");\r\n this.showTime.set(undefined);\r\n this.hourFormat.set(24);\r\n this.timeOnly.set(true);\r\n this.showButtonBar.set(false);\r\n break;\r\n case \"month\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"MM/YYYY\";\r\n this.view.set(\"month\");\r\n this.dateFormat.set(\"mm/yy\");\r\n this.selectionMode.set(\"single\");\r\n this.showTime.set(undefined);\r\n this.hourFormat.set(undefined);\r\n this.timeOnly.set(undefined);\r\n this.showButtonBar.set(true);\r\n break;\r\n case \"year\":\r\n this.FloatingLabel = !!this.Placeholder;\r\n this.Placeholder = this.Placeholder ?? \"YYYY\";\r\n this.view.set(\"year\");\r\n this.dateFormat.set(\"yy\");\r\n this.selectionMode.set(\"single\");\r\n this.showTime.set(undefined);\r\n this.hourFormat.set(undefined);\r\n this.timeOnly.set(undefined);\r\n this.showButtonBar.set(true);\r\n break;\r\n }\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <p-floatlabel variant=\"on\">\r\n <p-datepicker\r\n size=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n [placeholder]=\"FloatingLabel ? '' : Placeholder\"\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [view]=\"view()\" \r\n [dateFormat]=\"dateFormat()\"\r\n [showTime]=\"showTime()\"\r\n [hourFormat]=\"hourFormat()\"\r\n [timeOnly]=\"timeOnly()\"\r\n [selectionMode]=\"selectionMode()\"\r\n [showIcon]=\"true\"\r\n [showButtonBar]=\"showButtonBar()\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readonlyInput]=\"readonly\"\r\n [baseZIndex]=\"99999999\"\r\n inputId=\"buttondisplay\"\r\n optionLabel=\"description\"\r\n optionValue=\"id\"\r\n filterBy=\"description\"\r\n appendTo=\"body\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event);\" \r\n (click)=\"focused($event);\"\r\n (onBlur)=\"onTouched(); finalized()\"\r\n (onSelect)=\"onTouched(); finalized()\"\r\n />\r\n\r\n <label>{{FloatingLabel ? Placeholder : null}}</label>\r\n </p-floatlabel>\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\n\r\n// Lib\r\nimport { EsFormDateComponent } from \"../date/form-date.component\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-datetime\",\r\n templateUrl: \"../date/form-date.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [DatePickerModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormDateTimeComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormDateTimeComponent extends EsFormDateComponent {\r\n\r\n override setInputMode(): void {\r\n this.mode = \"datetime\";\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, ViewEncapsulation } from \"@angular/core\";\r\nimport { FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { DatePickerModule } from 'primeng/datepicker';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\n\r\n// Lib\r\nimport { EsFormDateComponent } from \"../date/form-date.component\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-time\",\r\n templateUrl: \"../date/form-date.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [DatePickerModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormTimeComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormTimeComponent extends EsFormDateComponent {\r\n\r\n override setInputMode(): void {\r\n this.mode = \"time\";\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { CheckboxModule } from 'primeng/checkbox';\r\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-checkbox\",\r\n templateUrl: \"form-checkbox.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [CheckboxModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputSkeletonComponent, ToggleSwitchModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormCheckboxComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormCheckboxComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input() SliderMode: boolean = undefined;\r\n\r\n ngOnInit(){\r\n super.ngOnInit();\r\n\r\n if(this.SliderMode == undefined)\r\n this.SliderMode = false;\r\n }\r\n\r\n protected override async getValueIn(value: any) {\r\n return value ? (value === true || value.toLowerCase() == \"true\") : false;\r\n }\r\n\r\n protected override async getEvaluatedModel(value: any): Promise<string> {\r\n return this.lc.loc(value ? 'Sì' : 'No');\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n \r\n <p-checkbox *ngIf=\"SliderMode === false\"\r\n size=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [disabled]=\"disabled\"\r\n [ngModel]=\"value\"\r\n [binary]=\"true\"\r\n (ngModelChange)=\"changed($event); finalized()\" \r\n (click)=\"focused($event);\"\r\n />\r\n\r\n <p-toggleswitch *ngIf=\"SliderMode === true\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [disabled]=\"disabled\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event); finalized()\" \r\n (click)=\"focused($event);\"\r\n />\r\n\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, numberAttribute, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { TextareaModule } from 'primeng/textarea';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\"\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\"\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-textarea\",\r\n templateUrl: \"form-textarea.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [TextareaModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormTextareaComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormTextareaComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input({ transform: numberAttribute }) rows: number | undefined = 2;\r\n @Input({ transform: numberAttribute }) minlength: number | undefined;\r\n @Input({ transform: numberAttribute }) maxlength: number | undefined;\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <p-floatlabel variant=\"on\">\r\n <textarea\r\n pTextarea \r\n pSize=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n autocomplete=\"off\"\r\n style=\"width: 100%;\"\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readOnly]=\"readonly\"\r\n [rows]=\"rows\"\r\n [minlength]=\"minlength\" \r\n [maxlength]=\"maxlength\" \r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (blur)=\"onTouched(); finalized()\"\r\n ></textarea>\r\n <label>{{Placeholder}}</label>\r\n </p-floatlabel>\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, Component, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Componente placeholder per la creazione dei form che rappresenta un blocchetto di erorre, \r\n * al posto del quale possono poi comparire dei componenti form senza incasinare la grafica\r\n */\r\n@Component({\r\n selector: \"form-error\",\r\n templateUrl: \"form-error.component.html\",\r\n imports: [CommonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true\r\n})\r\nexport class EsFormErrorComponent {\r\n\r\n /** col-md-X per la label (Che in questoc aso è vuota) */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /** col-md-X per l'input (che in questo caso contiene il messaggio d'errore proiettato nell'HTML) */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */\r\n @Input() Last: boolean = false;\r\n\r\n /** Classe extra per il form-group in cui viene wrappato l'input */\r\n @Input() FormGroupClass: string = \"\";\r\n\r\n /** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi \"X Y\" */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n}","<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>","// Angular\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { booleanAttribute, ChangeDetectionStrategy, Component, Input, TemplateRef } from \"@angular/core\";\r\n\r\n// Lib\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n/**\r\n * Componente da utilizzare quando l'implementazione dell'input non è disponibile nella libreria, \r\n * fornisce la struttura standard di un form-component ma l'input vero e proprio viene proiettato dall'esterno\r\n */\r\n@Component({\r\n selector: \"form-template\",\r\n templateUrl: \"form-template.component.html\",\r\n imports: [CommonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true\r\n})\r\nexport class EsFormTemplateComponent {\r\n\r\n /** Indica se l'input è obbligatorio o no */\r\n @Input({ transform: booleanAttribute }) required: boolean | '' | undefined;\r\n\r\n /** Mostra un testo a sinistra dell'input, **FormLayout** permettendo */\r\n @Input() Label: string = \"\";\r\n\r\n /** Eventuali classi extra da applicare alla Label, di default c'è solo un leggero margin top */\r\n @Input() LabelClass: string = \"m-t-5\";\r\n\r\n /** Utilizza o meno il Layout di un form (Label con input di fianco), se false mostra solo l'input */\r\n @Input() FormLayout: boolean = true;\r\n\r\n /** col-md-X per la label */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /** col-md-X per l'input */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */\r\n @Input() Last: boolean = false;\r\n\r\n /** Classe extra per il form-group in cui viene wrappato l'input */\r\n @Input() FormGroupClass: string = \"\";\r\n\r\n /** Indica che la parte input del controllo dev'essere una label readonly e la parte label di titolo dev'essere in bold. Per utilizzare un solo componente sia per la modifica che per il dettaglio */\r\n @Input() DisplayMode: boolean = false;\r\n\r\n /** Template per visualizzare la modalità **DisplayMode** come vuole il programmatore frocio di turno */\r\n @Input() DisplayModeTemplate: TemplateRef<any>;\r\n\r\n /** Layout del Form quando è in modalità Display. Di default mantiene la formattazione a form */\r\n @Input() DisplayLayout: 'form' | 'inline' | 'hidden' = 'form';\r\n\r\n /** Indica la condizione per cui un elemento in Modalità Display può essere visibile in base a ulteriori controlli */\r\n @Input() DisplayCondition: boolean = true;\r\n\r\n /** Separatore da mettere in automatico fra un elemento Form e l'altro quando sono in **DisplayMode** con **DisplayLayout** inline */\r\n @Input() InlineSeparator: string = ' ';\r\n\r\n /** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi \"X Y\" */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<!-- Singola proiezione -->\r\n<ng-template #controlTemplate>\r\n <ng-content></ng-content>\r\n</ng-template>","// Angular\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, Component, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Componente placeholder per la creazione dei form che rappresenta un blocchetto di informazioni, \r\n * al posto del quale possono poi comparire dei componenti form senza incasinare la grafica\r\n */\r\n@Component({\r\n selector: \"form-info\",\r\n templateUrl: \"form-info.component.html\",\r\n imports: [CommonModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true\r\n})\r\nexport class EsFormInfoComponent {\r\n /** col-md-X per la label (Che in questoc aso è vuota) */\r\n @Input() LabelColWidth: number = 4;\r\n\r\n /** col-md-X per l'input (che in questo caso contiene il messaggio d'errore proiettato nell'HTML) */\r\n @Input() InputColWidth: number = 8;\r\n\r\n /** Indica se è l'ultimo componente di un form (serve per rimuovere il margine finale) */\r\n @Input() Last: boolean = false;\r\n\r\n /** Classe extra per il form-group in cui viene wrappato l'input */\r\n @Input() FormGroupClass: string = \"\";\r\n\r\n /** Permette di settare in una volta solo gli input LabelColWidth e InputColWidth, basta scriverlo con la sintassi \"X Y\" */\r\n @Input() set LabelInputRatio(input: string) {\r\n var ratio = input.split(/\\s/);\r\n this.LabelColWidth = parseInt(ratio[0]);\r\n this.InputColWidth = parseInt(ratio[1]);\r\n }\r\n}","<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 col-md-{{InputColWidth}}\">\r\n <ng-content></ng-content>\r\n </span>\r\n <div class=\"clearfix\"></div>\r\n</div>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Injector, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Esfaenza\r\nimport { LocalizationModule } from \"@esfaenza/localizations\";\r\n\r\n// Prime NG\r\nimport { TextareaModule } from 'primeng/textarea';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\"\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\"\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n// Models\r\nimport { AppFile } from \"../../models/AppFile\";\r\n\r\n@Component({\r\n selector: \"form-file\",\r\n templateUrl: \"form-file.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\", \"./form-file.component.css\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [TextareaModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent, LocalizationModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormFileComponent), multi: true },\r\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => EsFormFileComponent), multi: true }\r\n ],\r\n standalone: true\r\n})\r\nexport class EsFormFileComponent extends BaseFormControl implements ControlValueAccessor, Validator {\r\n\r\n /** Permette di caricare file multipli */\r\n @Input() Multiple: boolean = false;\r\n\r\n /** Permette di scaricare l'eventuale file selezionato */\r\n @Input() AllowDownload: boolean = true;\r\n\r\n /** Controllo sulla dimensione di ogni singolo file in Byte. 0 -> nessun limite */\r\n @Input() MaxSize: number = 0;\r\n\r\n /** Sportivo */\r\n @Input() FancyMode: boolean = undefined;\r\n\r\n /** Legge sempre il contenuto del file e ne estrapola il base64 */\r\n @Input() ReadFile: boolean = false;\r\n \r\n /** @ignore Costruttore */\r\n constructor(inj: Injector) {\r\n super(inj);\r\n //Per questo componente non posso permettermi che il modello sia nullo\r\n this.value = new AppFile();\r\n\r\n this.shouldReemitAdjustedInput = true;\r\n }\r\n\r\n ngOnInit(){\r\n super.ngOnInit();\r\n \r\n if(this.FancyMode === undefined)\r\n this.FancyMode = false;\r\n }\r\n\r\n validate(_: AbstractControl): ValidationErrors {\r\n if (this.required && this.isEmptyValue(this.value))\r\n return { required: true }\r\n else return null;\r\n }\r\n\r\n protected override isEmptyValue(value: AppFile): boolean {\r\n return !value.filename || !value;\r\n }\r\n\r\n protected override async getValueIn(value: any) {\r\n return value == null ? new AppFile() : value;\r\n }\r\n\r\n protected override async getValueOut(value: any) {\r\n return value == null ? new AppFile() : value;\r\n }\r\n\r\n protected override async getEvaluatedModel(valueAfterInTransform: AppFile): Promise<string> {\r\n return valueAfterInTransform.filename;\r\n }\r\n\r\n /**\r\n * Helper per gestire la modifica del file attualmente bindato\r\n * \r\n * @param {boolean} clear Indica se bisogna svuotare l'input o meno \r\n */\r\n async fileChange(clear: boolean = false) {\r\n let files: File[] = [];\r\n let model = (<AppFile>this.value);\r\n let ne: HTMLInputElement = this.innerElement.nativeElement;\r\n\r\n if (clear) {\r\n model.filename = ne.value = model.fileb64 = \"\";\r\n model.nativefiles = [];\r\n }\r\n else {\r\n for (let i = 0; i < ne.files.length; i++) {\r\n let file = ne.files.item(i);\r\n if (this.MaxSize > 0 && file.size > this.MaxSize) {\r\n this.msgs.simpleError(`Il file ${file.name} eccede la dimensione massima ${this.MaxSize} B`)\r\n this.fileChange(true);\r\n return;\r\n }\r\n files.push(file);\r\n }\r\n\r\n model.fileb64 = null;\r\n\r\n // Modalità Upload Singolo File\r\n if (ne.files.length == 1) {\r\n let fileUploaded = ne.files[0];\r\n model.filename = fileUploaded.name;\r\n if (this.ReadFile)\r\n model.fileb64 = await this.loadFileB64(fileUploaded);\r\n }\r\n // Modalità Upload Multiple File\r\n else if (ne.files.length > 1)\r\n model.filename = ne.files.length + \" \" + this.lc.loc(\"File Selezionati\");\r\n\r\n model.nativefiles = files;\r\n }\r\n\r\n this.changed(model);\r\n }\r\n\r\n private loadFileB64(fileUploaded): Promise<string> {\r\n return new Promise<string>((res, _) => {\r\n let reader = new FileReader();\r\n reader.readAsDataURL(fileUploaded);\r\n reader.onload = () => {\r\n let fileSource = reader.result.toString();\r\n let fileSourceSegments = fileSource.split(',');\r\n\r\n res(fileSourceSegments[fileSourceSegments.length - 1]);\r\n };\r\n });\r\n }\r\n\r\n /** Permette di scaricare l'eventuale file selezionato */\r\n onDownloadFile() {\r\n let model = (<AppFile>this.value);\r\n this.utiExts.saveFile(model.fileb64, model.filename);\r\n }\r\n\r\n // FancyMode - Drag Over\r\n onFileDragOver(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n // FancyMode - File Dropped\r\n onFileDropped(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.innerElement.nativeElement.files = event.dataTransfer?.files;\r\n this.fileChange();\r\n }\r\n}","<input-skeleton *ngIf=\"FancyMode === false\" [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <div class=\"input-group file-upload\" style=\"padding: 0 !important;\">\r\n <input type=\"file\" (change)=\"fileChange()\" id=\"{{InternalName}}\" #innerElement class=\"file-upload-btn app-pointer\" style=\"height: 46px;\" [multiple]=\"Multiple ? true : null\" />\r\n <input type=\"text\" \r\n [class.frm-padding-left-22]=\"AllowDownload && value.filename && value.fileb64\" \r\n class=\"form-control checking-field\" \r\n style=\"border-top-left-radius: 5px; border-bottom-left-radius: 5px; height: 46px;\"\r\n [style.padding-left.px]=\"AllowDownload && value.filename && value.fileb64 ? 40 : 12\"\r\n placeholder=\"{{Placeholder || ('Seleziona un File' | localize : lc)}}...\" \r\n [(ngModel)]=\"value.filename\" name=\"dsfile_{{InternalName}}\" \r\n #innerInput=\"ngModel\" />\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" style=\"padding-left: 10px; padding-top: 5px; color: #666; z-index: 9999;\" *ngIf=\"AllowDownload && value.filename && value.fileb64\" (click)=\"onDownloadFile()\"></a>\r\n <i class=\"fa fa-times delete-file\" style=\"margin-right: 15px; margin-top: 7px; color: #666;\" (click)=\"fileChange(true)\" *ngIf=\"value.filename\"></i>\r\n \r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" style=\"height: 46px;\r\n border-top-right-radius: 5px;\r\n border-bottom-right-radius: 5px;\r\n background: var(--p-surface-50) !important;\r\n border: 1px solid var(--p-surface-300) !important;\r\n color: #777;\" 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 === true\" (drop)=\"onFileDropped($event)\" (dragover)=\"onFileDragOver($event)\">\r\n <!--Drop-->\r\n <label for=\"{{InternalName}}\" class=\"drop-container\">\r\n <span class=\"drop-title\">{{Label}}</span>\r\n <div class=\"file-name-container\">{{value.filename || 'Nessun file selezionato'}}</div>\r\n <!--Hidden Forms-->\r\n <input hidden type=\"file\" (change)=\"fileChange()\" id=\"{{InternalName}}\" #innerElement class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input hidden type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && value.filename && value.fileb64\" class=\"form-control checking-field\" \r\n placeholder=\"{{Placeholder || ('Seleziona un File' | localize : lc)}}...\" [(ngModel)]=\"value.filename\" name=\"dsfile_{{InternalName}}\" #innerInput=\"ngModel\" />\r\n <!--Clean-->\r\n <i class=\"fa fa-times file-delete-btn\" (click)=\"fileChange(true); $event.stopPropagation(); false;\" *ngIf=\"value.filename\"></i>\r\n <!--Download-->\r\n <div *ngIf=\"AllowDownload && value.filename && value.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>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { MultiSelect, MultiSelectModule } from 'primeng/multiselect';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-multiselect\",\r\n templateUrl: \"form-multiselect.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [MultiSelectModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormMultiselectComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormMultiselectComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input() display: \"comma\" | \"chip\" = undefined;\r\n @Input() InOutFormat: 'KeyValues' | 'CommaSeparatedList' | 'JsonList' | 'List' = 'List';\r\n\r\n /** Nel caso dei componenti data il Placeholder è il formato, mentre la label floattante, se esistente, dev'essere specificata */\r\n @Input() FloatingLabel: boolean = true;\r\n\r\n @Input() MaxShownElements: number = 20;\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n\r\n if (this.display === undefined)\r\n this.setDisplayMode();\r\n }\r\n\r\n protected setDisplayMode() {\r\n this.display = \"comma\";\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n // Eh... checcedevofa\r\n this.innerElement = (<MultiSelect>(<any>this.innerElement)).el;\r\n\r\n if (!this.Placeholder && this.required)\r\n this.Placeholder = \"Seleziona uno o più valori...\";\r\n }\r\n\r\n protected override async getValueIn(value: any): Promise<any> {\r\n if(!value) return [];\r\n\r\n var ids = null;\r\n switch (this.InOutFormat) {\r\n case \"CommaSeparatedList\":\r\n if (typeof value === 'string' || value instanceof String)\r\n ids = (value as string).split(',')\r\n break;\r\n case \"JsonList\":\r\n if (typeof value === 'string' || value instanceof String)\r\n ids = JSON.parse(value as string);\r\n break;\r\n case \"List\":\r\n ids = value.map(t => t.toString());\r\n break;\r\n case \"KeyValues\":\r\n ids = value.map(t => t.id.toString());\r\n break;\r\n }\r\n\r\n return ids;\r\n }\r\n\r\n protected override async getValueOut(value: string[]): Promise<any> {\r\n if(!value) return [];\r\n\r\n switch (this.InOutFormat) {\r\n case \"CommaSeparatedList\":\r\n return value.join(',');\r\n case \"JsonList\":\r\n return JSON.stringify(value)\r\n case \"KeyValues\":\r\n return value.map(t => { return { id: t, description: this.BoundSourceCache[t].description } });\r\n case \"List\":\r\n return value.map(t => t); // Per staccare i riferimenti\r\n }\r\n }\r\n\r\n protected override async getEvaluatedModel(value: { id: string, description: string }[]): Promise<string> {\r\n if (!value) return \"\";\r\n\r\n return this.EvaluatedModel = value.map(t => t.description).join(', ');\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <p-floatlabel variant=\"on\">\r\n <p-multiselect \r\n style=\"width: 100%\"\r\n size=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [filter]=\"true\" \r\n filterBy=\"description\"\r\n [showClear]=\"true\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [maxSelectedLabels]=\"MaxShownElements\"\r\n [display]=\"display\"\r\n [options]=\"BoundSource()\"\r\n [placeholder]=\"FloatingLabel ? '' : Placeholder\"\r\n optionLabel=\"description\"\r\n optionValue=\"id\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (onBlur)=\"onTouched(); finalized()\"\r\n />\r\n\r\n <label>{{FloatingLabel ? Placeholder : null}}</label>\r\n </p-floatlabel>\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { booleanAttribute, ChangeDetectionStrategy, Component, forwardRef, input, Input, signal, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { AutoCompleteModule, AutoComplete, AutoCompleteCompleteEvent } from 'primeng/autocomplete';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\";\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\nimport { forkJoin, Observable, firstValueFrom } from \"rxjs\";\r\n\r\n/*\r\n * N.B: C'è un bug per cui passando un array insieme a optionValue genera chips vuote: https://github.com/primefaces/primeng/pull/18044\r\n * Quindi internamente il valore è sempre un oggetto o una lista di oggetti. \r\n * In ingresso faccio ricerche per id per valorizzare le suggestions iniziali, \r\n * mentre in uscita seleziono gli id per tenere il comportamento coerente alla versione precedente della libreria\r\n */\r\n@Component({\r\n selector: \"form-autocomplete\",\r\n templateUrl: \"form-autocomplete.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [AutoCompleteModule, AutoComplete, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormAutocompleteComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormAutocompleteComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n private _baseSource: any[] = null;\r\n private _availableSource: boolean;\r\n\r\n /** Numero minimo di caratteri per far partire la ricerca */\r\n public MinChars = input(3);\r\n\r\n /** Contesto per la funzione di ricerca */\r\n @Input() SearchFunctionContext: any;\r\n\r\n @Input() SearchFunction: (search: string, byid: boolean, context?: any) => Observable<{ id: string, description: string }[]> = null;\r\n\r\n /** Indica se usare la modalità multiselezione o no */\r\n @Input({ transform: booleanAttribute }) multiple: boolean | undefined;\r\n\r\n @Input({ transform: booleanAttribute }) forceSelection: boolean | undefined;\r\n\r\n public style = signal({ \"width\": \"100%\" })\r\n public typeahead = signal(true);\r\n\r\n public ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n // Se c'è una Source riempio un DB temporaneo coi valori. Le ricerche si baseranno su di lui\r\n this._baseSource = !!this.Source ? [...this.Source] : [];\r\n this.Source = [];\r\n\r\n // Il typeahead dev'essere fatto quando o c'è una source (filtro in memoria) o c'è una SearchFunction (filtro Code behind)\r\n // Lo metto anche se è un input singolo per generare gli eventi di change quando si scrive dato che input singolo, senza source, e senza forceselection\r\n // tira fuori un autocomplete in cui è impossibile scriverci qualcosa dentro\r\n this._availableSource = (this._baseSource?.length || 0) > 0 || !!this.SearchFunction;\r\n this.typeahead.set(this._availableSource);\r\n\r\n // La source potrebbe arrivare dopo....\r\n \r\n // if (!this._availableSource && !this.forceSelection && !this.multiple)\r\n // throw `Per il controllo ${this.name} non esiste una sorgente dati, la selezione di un valore non è obbligatoria, e non è un selettore multiplo stile chips. Fatti un esame di coscienza e cerca di capire che non è un autocomplete.`\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n // Eh... checcedevofa\r\n this.innerElement = (<AutoComplete>(<any>this.innerElement)).el;\r\n }\r\n\r\n search(event: AutoCompleteCompleteEvent) {\r\n\r\n if (this.SearchFunction) {\r\n this.SearchFunction(event.query, false, this.SearchFunctionContext).subscribe(t => {\r\n // la source è ottimizzata. Se fra una chiamata e l'altra non cambiano i valori non effettua refresh, ma questo vuol dire che se aggiungendo un carattere\r\n // i risultati sono gli stessi della chiamata precedente si inchioda, perché fa partire una chiamata che secondo la lib è inconcludente.\r\n // In realtà è concludente, solo che la lib non se ne accorge. In questo modo mi assicuro che si svegli\r\n this.Source = [];\r\n requestAnimationFrame(() => { this.Source = t; });\r\n });\r\n return;\r\n }\r\n\r\n this.Source = [];\r\n\r\n if ((this._baseSource?.length || 0) === 0)\r\n return;\r\n\r\n requestAnimationFrame(() => {\r\n let query = event.query.toLocaleLowerCase();\r\n this.Source = this._baseSource.filter(t => t.description.toLocaleLowerCase().includes(query));\r\n });\r\n }\r\n\r\n async changed(event){\r\n\r\n // Se c'è il typeahead, l'evento di change aggiunge correttamente l'oggetto dalla source in formato { id, description }\r\n if (this.typeahead() && this._availableSource) {\r\n super.changed(event);\r\n return;\r\n }\r\n\r\n // Senza typeahead invece emette delle stringhe con il valore scritto. \r\n // L'ultimo valore aggiunto (in caso di inserimento multiplo), o il valore attuale (in caso di inseirmento singolo)\r\n // devono essere trasformati da una string al formato { id: event, description: event } \r\n if (this.multiple) {\r\n let arr = (<Array<any>>event);\r\n let lastElement = arr.slice(-1)[0];\r\n if (typeof lastElement === \"string\")\r\n arr[arr.length - 1] = { id: lastElement, description: lastElement }\r\n }\r\n else if (typeof event === \"string\") {\r\n event = { id: event, description: event }\r\n }\r\n\r\n super.changed(event);\r\n }\r\n\r\n protected override async getValueOut(value: string | { id: string, description: string } | string[] | { id: string, description: string }[]) {\r\n if (typeof value === \"string\")\r\n return value;\r\n\r\n return Array.isArray(value) ? value.map((t: string | { id: string, description: string }) => typeof t === \"string\" ? t : t.id) : typeof value === \"string\" ? value : value.id;\r\n }\r\n\r\n protected override async getValueIn(value: string | string[]) {\r\n let vals = Array.isArray(value) ? value : [value];\r\n\r\n if (!value || (vals?.length || 0) == 0)\r\n return null;\r\n\r\n if (this.SearchFunction) {\r\n // Su nuovo valore ricarcio la source come unione di tutte le ricerche di tutti gli item presi per id\r\n let res = await firstValueFrom(forkJoin(vals.map(v => this.SearchFunction(v, true, this.SearchFunctionContext))));\r\n\r\n // Chiamo il flat 2 volte per tenere i riferimenti separati. Non ne voglio sapere niente.\r\n this.Source = res.flat();\r\n return this.multiple ? res.flat() : res.flat()[0];\r\n }\r\n\r\n if ((this._baseSource?.length || 0) === 0)\r\n return this.multiple ? vals.map(t => { return { id: t, description: t } }) : { id: vals[0], description: vals[0] };\r\n\r\n let items = this._baseSource.filter(t => vals.map(v => v.toString()).includes(t.id));\r\n return this.multiple ? items : items[0];\r\n }\r\n\r\n protected override async getEvaluatedModel(value: string | string[]): Promise<string> {\r\n return Array.isArray(value) ? value.map(id => this.BoundSourceCache[id]?.description ?? id).join(',') : this.BoundSourceCache[value]?.description ?? value;\r\n }\r\n}","<!-- Riga di debug -->\r\n<!-- <div><strong>Valore interno:</strong> {{value | json}}</div> -->\r\n\r\n<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <p-floatlabel variant=\"on\">\r\n <p-autocomplete \r\n size=\"small\" \r\n autocomplete=\"off\"\r\n #innerInput=\"ngModel\" \r\n #innerElement \r\n [style]=\"style()\"\r\n [attr.name]=\"InternalName\" \r\n [attr.id]=\"InternalName\" \r\n [multiple]=\"multiple\"\r\n [fluid]=\"multiple\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [suggestions]=\"BoundSource()\"\r\n [forceSelection]=\"forceSelection\"\r\n [typeahead]=\"typeahead()\"\r\n [virtualScroll]=\"true\"\r\n [virtualScrollItemSize]=\"44\"\r\n optionLabel=\"description\"\r\n (completeMethod)=\"search($event)\"\r\n [minLength]=\"MinChars()\"\r\n [ngModel]=\"value\" \r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (blur)=\"onTouched(); finalized()\">\r\n </p-autocomplete>\r\n\r\n <label>{{Placeholder}}</label>\r\n </p-floatlabel>\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","import { TemplateRef } from \"@angular/core\";\r\nimport { Observable, Subject } from \"rxjs\";\r\n\r\nexport class BaseFormConfiguration {\r\n DisplayCondition: boolean = true;\r\n DisplayMode: boolean = false;\r\n DisplayLayout: 'form' | 'inline' | 'hidden' = 'form';\r\n FormLayout: boolean = true;\r\n DisplayModeTemplate: TemplateRef<any> = null;\r\n Label: string = null;\r\n Last: boolean = false;\r\n FormGroupClass: string = null;\r\n Placeholder: string = null;\r\n LabelInputRatio: string = null;\r\n name: string = null;\r\n readonly: boolean | undefined = undefined;\r\n disabled: boolean | undefined = undefined;\r\n Validation: boolean = true;\r\n SetValidationSubject: Subject<{ fieldName: string, error: string }> = null;\r\n required: boolean | '' | undefined = undefined;\r\n Display: string = '{description}';\r\n IdField: string = \"id\";\r\n Source: any[] = null;\r\n statusChangesObservable: Observable<any> = null;\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, forwardRef, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { InputNumberModule, InputNumber } from 'primeng/inputnumber';\r\nimport { FloatLabelModule } from \"primeng/floatlabel\"\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\"\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\"\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { InputSkeletonComponent } from \"../base/skeleton/input-skeleton.component\";\r\n\r\n@Component({\r\n selector: \"form-currency\",\r\n templateUrl: \"form-currency.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [InputNumberModule, FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule, InputSkeletonComponent],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormCurrencyComponent), multi: true }],\r\n standalone: true\r\n})\r\nexport class EsFormCurrencyComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n @Input() mode: 'currency' | 'decimal' = 'decimal';\r\n \r\n @Input() Precision: number = 2;\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n // Eh... checcedevofa\r\n this.innerElement = (<InputNumber>(<any>this.innerElement)).el;\r\n }\r\n}","<input-skeleton [Control]=\"controlTemplate\" [For]=\"this\"></input-skeleton>\r\n\r\n<ng-template #controlTemplate>\r\n <p-floatlabel variant=\"on\">\r\n\r\n <p-inputnumber \r\n size=\"small\"\r\n #innerInput=\"ngModel\"\r\n #innerElement\r\n autocomplete=\"off\"\r\n style=\"width: 100%;\"\r\n [attr.name]=\"InternalName\"\r\n [attr.id]=\"InternalName\"\r\n [disabled]=\"disabled\" \r\n [required]=\"required\"\r\n [readonly]=\"readonly\"\r\n [pattern]=\"pattern\"\r\n [minFractionDigits]=\"Precision\"\r\n [maxFractionDigits]=\"Precision\"\r\n [mode]=\"mode\"\r\n [currency]=\"mode === 'currency' ? 'EUR' : undefined\"\r\n locale=\"it-IT\"\r\n [ngModel]=\"value\"\r\n (ngModelChange)=\"changed($event)\" \r\n (click)=\"focused($event);\"\r\n (onBlur)=\"onTouched(); finalized()\"\r\n />\r\n\r\n <label>{{Placeholder}}</label>\r\n </p-floatlabel>\r\n\r\n</ng-template>\r\n\r\n<p-popover styleClass='validation-tooltip' #tooltip>{{TooltipText}}</p-popover>","// Angular\r\nimport { ChangeDetectionStrategy, Component, ContentChild, forwardRef, Injector, Input, signal, ViewEncapsulation, WritableSignal } from \"@angular/core\";\r\nimport { AbstractControl, ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator, ValidatorFn } from \"@angular/forms\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\n// Prime NG\r\nimport { FloatLabelModule } from \"primeng/floatlabel\";\r\nimport { PopoverModule } from \"primeng/popover\";\r\nimport { InputGroupModule } from \"primeng/inputgroup\";\r\nimport { InputGroupAddonModule } from \"primeng/inputgroupaddon\";\r\n\r\n// RxJs\r\nimport { Observable, Subject } from \"rxjs\";\r\n\r\n// Lib\r\nimport { BaseFormControl } from \"../base/base-form-control\";\r\nimport { EsFormDateComponent } from \"../date/form-date.component\";\r\nimport { EsFormInputComponent } from \"../input/form-input.component\";\r\nimport { BaseFormConfiguration } from \"../../models/BaseFormConfiguration\";\r\nimport { EsFormCheckboxComponent } from \"../checkbox/form-checkbox.component\";\r\nimport { EsFormSelectComponent } from \"../select/form-select.component\";\r\nimport { EsFormAutocompleteComponent } from \"../autocomplete/form-autocomplete.component\";\r\nimport { EsFormDateTimeComponent } from \"../datetime/form-datetime.component\";\r\nimport { EsFormTimeComponent } from \"../time/form-time.component\";\r\nimport { EsFormFileComponent } from \"../file/form-file.component\";\r\nimport { EsFormCurrencyComponent } from \"../currency/form-currency.component\";\r\n\r\n/*\r\nQuirk di questo componente:\r\n\r\n1: Se viene utilizzato lo stesso name per il <form-adaptive esterno e il <form-roba interno, angular mergia tutto in un unico ngControl, ma gli eventi sono sul riferimento originale (form-adaptive, non form-roba).\r\nPer poter collegare l'observable di cambio di stato per i tooltip (che devono essere collegati al form-roba), recupero al volo l'observable e lo riassegno internamente a **statusChangesObservable**. \r\nÈ un Input assolutamente da non utilizzare lato programmatore.\r\n\r\n^ PORCATA. abbastanza hackerosa, però estremamente funzionale\r\n\r\n2: con **performFormLogic** a false, mi assicuro di tenere l'implementazione standard del ControlValueAccessor mentre faccio gestire tutto il resto al componente interno.\r\nEsFormAdaptiveComponent deve SOLO fare da passacarte (TRANNE PER LE CASISTICHE FLOAT... VEDI SOTTO)\r\n\r\n*/\r\n@Component({\r\n selector: \"form-adaptive\",\r\n templateUrl: \"form-adaptive.component.html\",\r\n styleUrls: [\"../base/base-form-control.scss\"],\r\n encapsulation: ViewEncapsulation.None,\r\n imports: [\r\n FormsModule, CommonModule, FloatLabelModule, PopoverModule, InputGroupModule, InputGroupAddonModule,\r\n\r\n EsFormInputComponent,\r\n EsFormDateComponent,\r\n EsFormCheckboxComponent,\r\n EsFormSelectComponent,\r\n EsFormAutocompleteComponent,\r\n EsFormDateTimeComponent,\r\n EsFormTimeComponent,\r\n EsFormFileComponent,\r\n EsFormCurrencyComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => EsFormAdaptiveComponent), multi: true },\r\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => EsFormAdaptiveComponent), multi: true }\r\n ],\r\n standalone: true\r\n})\r\nexport class EsFormAdaptiveComponent extends BaseFormControl implements ControlValueAccessor, Validator {\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del suffisso */\r\n @ContentChild(\"suffix\", { static: false }) suffixAdaptive;\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del prefisso */\r\n @ContentChild(\"prefix\", { static: false }) prefixAdaptive;\r\n\r\n /** Tipologia che decide che componente mostrare */\r\n @Input() Type: 'string' | 'float' | 'date' | 'number' | 'int' | 'boolean' | 'enum' | 'autocomplete' | 'datetime' | 'time' | 'file' | 'currency';\r\n /** Messaggio per quando si binda un form-adaptive senza tipo */\r\n @Input() TypeMissingMessage: string;\r\n\r\n // Specifico autocomplete\r\n @Input() SearchFunction: (search: string, byid: boolean, context?: any) => Observable<{ id: string, description: string }[]> = null;\r\n\r\n // Specifico currency\r\n @Input() Precision: number = 2;\r\n\r\n @Input() TypePattern: string = \"\";\r\n \r\n public IntPattern = signal('^[0-9]\\\\d*$');\r\n public FloatPattern = signal('^([0-9]*[,])?[0-9]+$');\r\n public config: WritableSignal<BaseFormConfiguration> = signal(null);\r\n\r\n constructor(inj: Injector) { \r\n super(inj);\r\n this.performFormLogic = false;\r\n }\r\n\r\n public ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n this.handleFloatPatternSeparately();\r\n // TYPE PATTERN funziona solo con number e float\r\n }\r\n\r\n protected override async getValueIn(value: any): Promise<any> {\r\n if ((this.Type === \"float\" || this.Type === \"number\"))\r\n return value?.toString()?.replace?.(\".\", \",\");\r\n else\r\n return value;\r\n }\r\n\r\n protected override async getValueOut(value: any): Promise<any> {\r\n if ((this.Type === \"float\" || this.Type === \"number\")) {\r\n this.floatValuePreAdjustmente = value;\r\n return value?.replace?.(\".\", \"\")?.replace?.(\",\", \".\");\r\n }\r\n else\r\n return value;\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n super.ngAfterViewInit();\r\n\r\n let defaultConfig = new BaseFormConfiguration();\r\n let properties = Object.keys(defaultConfig);\r\n // Riempio la configurazione con tutte le proprietà definite in questa istanza. \r\n // Tutto per passarla al livello sotto\r\n for (let i = 0; i < properties.length; i++) {\r\n let p = properties[i];\r\n defaultConfig[p] = this[p];\r\n }\r\n this.config.set(defaultConfig);\r\n }\r\n\r\n /*\r\n ****************************************************************************************************************************\r\n ****************************************************************************************************************************\r\n ************************************* GESTIONE CUSTOM PER I NUMERI FLOATING POINT ****************************************\r\n ****************************************************************************************************************************\r\n ****************************************************************************************************************************\r\n */\r\n\r\n /*\r\n Per i numeri float, il valore che mostro è diverso dal valore sotto perché ci sono degli aggiustamenti di numeri, virgola e non.\r\n Il componente interno lavora con `value` che rappresenta il valore reale, number, mentre il componente esterno wrappa questo valore reale\r\n in una rappresentazione in stringa italiana per gli input. \r\n Dato che il valore da validare è quello esterno (scritto in italiano) lascio il componente interno senza pattern ed implemento il Validatore qui\r\n\r\n N.B: QUESTA IMPLEMENTAZIONE NON MI PIACE. BISOGNA CERCARE UNA VIA PIU BELLA QUANDO SI HA UN PO' DI TEMPO\r\n */\r\n\r\n /** Variabile interna che salva il valore degli input float prima dell'aggiustamento */\r\n private floatValuePreAdjustmente: string;\r\n\r\n registerOnValidatorChange?(_: () => void) { }\r\n \r\n handleFloatPatternSeparately() {\r\n if ((this.Type === \"float\" || this.Type === \"number\")) {\r\n this.pattern = this.TypePattern || this.FloatPattern();\r\n this.SetValidationSubject = this.SetValidationSubject || new Subject<{ fieldName: string, error: string }>();\r\n }\r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors | null {\r\n var ret = [\"number\", \"float\"].includes(this.Type) ? this.customPatternValidator(this.pattern)(control) : null;\r\n this.SetValidationSubject?.next?.({ fieldName: this.name, error: ret?.pattern ? \"Formato input errato\" : \"\" });\r\n return ret;\r\n }\r\n\r\n /** Validatore originale angular, copiaincollato. Cambiata solo la riga dove c'è `this.floatValuePreAdjustmente` */\r\n customPatternValidator(pattern: string | RegExp): ValidatorFn {\r\n if (!pattern) return (_: AbstractControl) => null;\r\n let regex: RegExp;\r\n let regexStr: string;\r\n\r\n if (typeof pattern === 'string') {\r\n regexStr = '';\r\n if (pattern.charAt(0) !== '^') regexStr += '^';\r\n regexStr += pattern;\r\n if (pattern.charAt(pattern.length - 1) !== '$') regexStr += '$';\r\n regex = new RegExp(regexStr);\r\n }\r\n\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (!control.value) return null;\r\n\r\n // Caricamento avvenuto adesso da modello\r\n if(control.value && !this.floatValuePreAdjustmente)\r\n this.floatValuePreAdjustmente = control.value.toString().replace(\".\", \",\");\r\n\r\n return regex.test(this.floatValuePreAdjustmente) ? null : { 'pattern': { 'requiredPattern': regexStr, 'actualValue': this.floatValuePreAdjustmente } };\r\n };\r\n }\r\n}","<!-- Riga di debug -->\r\n<!-- <div><strong>Valore interno:</strong> {{value | json}}</div> -->\r\n\r\n@if(!Type){\r\n <div class=\"app-margin-top-5\"><em>{{TypeMissingMessage}}</em></div>\r\n}\r\n\r\n@if(config()){\r\n @switch(Type){\r\n @case (\"currency\") {\r\n <form-currency [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\" [Precision]=\"Precision\"></form-currency>\r\n }\r\n @case (\"date\") {\r\n <form-date [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\"></form-date>\r\n }\r\n @case (\"boolean\") {\r\n <form-checkbox [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\"></form-checkbox>\r\n }\r\n @case (\"enum\") {\r\n <form-select [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\" [Source]=\"BoundSource()\">\r\n @if(suffixAdaptive){\r\n <ng-template #suffix><ng-container *ngTemplateOutlet=\"suffixAdaptive\"></ng-container></ng-template>\r\n }\r\n @if(prefixAdaptive){\r\n <ng-template #prefix><ng-container *ngTemplateOutlet=\"prefixAdaptive\"></ng-container></ng-template>\r\n }\r\n </form-select>\r\n }\r\n @case (\"autocomplete\") {\r\n <form-autocomplete [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\" [SearchFunction]=\"SearchFunction\"></form-autocomplete>\r\n }\r\n @case (\"datetime\") {\r\n <form-datetime [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\"></form-datetime>\r\n }\r\n @case (\"time\") {\r\n <form-time [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\"></form-time>\r\n }\r\n @case (\"file\") {\r\n <form-file [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\"></form-file>\r\n }\r\n @case (\"string\") {\r\n <form-input [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\" [pattern]=\"pattern ?? ''\">\r\n @if(suffixAdaptive){\r\n <ng-template #suffix><ng-container *ngTemplateOutlet=\"suffixAdaptive\"></ng-container></ng-template>\r\n }\r\n @if(prefixAdaptive){\r\n <ng-template #prefix><ng-container *ngTemplateOutlet=\"prefixAdaptive\"></ng-container></ng-template>\r\n }\r\n </form-input>\r\n }\r\n @case (\"int\") {\r\n <form-input [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\" [pattern]=\"pattern ?? IntPattern()\">\r\n @if(suffixAdaptive){\r\n <ng-template #suffix><ng-container *ngTemplateOutlet=\"suffixAdaptive\"></ng-container></ng-template>\r\n }\r\n @if(prefixAdaptive){\r\n <ng-template #prefix><ng-container *ngTemplateOutlet=\"prefixAdaptive\"></ng-container></ng-template>\r\n }\r\n </form-input>\r\n }\r\n @default {\r\n <!-- float e number -->\r\n <form-input [Form]=\"Form\" [FormLayout]=\"FormLayout\" [ngModel]=\"value\" (ngModelChange)=\"changed($event)\" (inputChange)=\"inputChange.emit($event)\" (inputFinalized)=\"inputFinalized.emit($event)\" (inputFocus)=\"inputFocus.emit($event)\" [name]=\"name\" [disabled]=\"disabled\" [Configuration]=\"config()\">\r\n @if(suffixAdaptive){\r\n <ng-template #suffix><ng-container *ngTemplateOutlet=\"suffixAdaptive\"></ng-container></ng-template>\r\n }\r\n @if(prefixAdaptive){\r\n <ng-template #prefix><ng-container *ngTemplateOutlet=\"prefixAdaptive\"></ng-container></ng-template>\r\n }\r\n </form-input>\r\n }\r\n }\r\n}","// Angular\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n// Es\r\nimport { BaseLocalization, LocalizationModule } from \"@esfaenza/localizations\";\r\n\r\n// Modelli\r\nimport { FRM_DEBUG_MODE } from './tokens';\r\nimport { EsFormsModuleConfig } from './models/EsFormsModuleConfig';\r\n\r\n// Componenti\r\nimport { EsFormInputComponent } from './forms/input/form-input.component';\r\nimport { EsFormSelectComponent } from './forms/select/form-select.component';\r\nimport { EsFormDateComponent } from './forms/date/form-date.component';\r\nimport { EsFormDateTimeComponent } from './forms/datetime/form-datetime.component';\r\nimport { EsFormTimeComponent } from './forms/time/form-time.component';\r\nimport { EsFormCheckboxComponent } from './forms/checkbox/form-checkbox.component';\r\nimport { EsFormTextareaComponent } from './forms/textarea/form-textarea.component';\r\nimport { EsFormErrorComponent } from './forms/error/form-error.component';\r\nimport { EsFormTemplateComponent } from './forms/template/form-template.component';\r\nimport { EsFormInfoComponent } from './forms/info/form-info.component';\r\nimport { EsFormFileComponent } from './forms/file/form-file.component';\r\nimport { EsFormMultiselectComponent } from './forms/multiselect/form-multiselect.component';\r\nimport { EsFormAutocompleteComponent } from './forms/autocomplete/form-autocomplete.component';\r\nimport { EsFormAdaptiveComponent } from './forms/adaptive/form-adaptive.component';\r\nimport { EsFormCurrencyComponent } from './forms/currency/form-currency.component';\r\n\r\n/** Componenti Standalone reesportati come se fossero moduli */\r\nconst STANDALONE_COMPONENTS = [\r\n EsFormInputComponent,\r\n EsFormSelectComponent,\r\n EsFormDateComponent,\r\n EsFormDateTimeComponent,\r\n EsFormTimeComponent,\r\n EsFormCheckboxComponent,\r\n EsFormTextareaComponent,\r\n EsFormInfoComponent,\r\n EsFormErrorComponent,\r\n EsFormTemplateComponent,\r\n EsFormFileComponent,\r\n EsFormMultiselectComponent,\r\n EsFormAutocompleteComponent,\r\n EsFormAdaptiveComponent,\r\n EsFormCurrencyComponent\r\n];\r\n\r\n/** Moduli utilizzati solo dalla libreria */\r\nconst MODULES = [\r\n CommonModule,\r\n FormsModule,\r\n LocalizationModule\r\n];\r\n\r\n@NgModule({\r\n imports: [...MODULES, ...STANDALONE_COMPONENTS],\r\n exports: [...STANDALONE_COMPONENTS]\r\n})\r\nexport class FormsAndValidationsModule {\r\n\r\n static forRoot(config?: EsFormsModuleConfig): ModuleWithProviders<FormsAndValidationsModule> {\r\n return {\r\n ngModule: FormsAndValidationsModule,\r\n providers: [\r\n { provide: FRM_DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false }\r\n ]\r\n };\r\n }\r\n}","//models\r\nexport * from './lib/models/AppFile';\r\nexport * from './lib/models/ChangeEvent';\r\nexport * from './lib/models/EsFormsModuleConfig';\r\nexport * from './lib/tokens';\r\n\r\n //module\r\nexport * from './lib/forms.module';\r\n\r\n//forms\r\nexport * from './lib/forms/datetime/form-datetime.component';\r\nexport * from './lib/forms/adaptive/form-adaptive.component';\r\nexport * from './lib/forms/template/form-template.component';\r\nexport * from './lib/forms/error/form-error.component';\r\nexport * from './lib/forms/info/form-info.component';\r\nexport * from './lib/forms/checkbox/form-checkbox.component';\r\nexport * from './lib/forms/date/form-date.component';\r\nexport * from './lib/forms/input/form-input.component';\r\nexport * from './lib/forms/select/form-select.component';\r\nexport * from './lib/forms/textarea/form-textarea.component';\r\nexport * from './lib/forms/autocomplete/form-autocomplete.component';\r\nexport * from './lib/forms/file/form-file.component';\r\nexport * from './lib/forms/time/form-time.component';\r\nexport * from './lib/forms/multiselect/form-multiselect.component';\r\nexport * from './lib/forms/base/base-form-control';\r\nexport * from './lib/forms/currency/form-currency.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i5","i3","i2","i4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;MACa,OAAO,CAAA;;AAGhB,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;;AAS5B;;MChBY,WAAW,CAAA;IACpB,WAAmB,CAAA,QAAiB,EAAS,KAAU,EAAA;QAApC,IAAQ,CAAA,QAAA,GAAR,QAAQ;QAAkB,IAAK,CAAA,KAAA,GAAL,KAAK;;AACrD;;ACHD;;AAEG;MACU,mBAAmB,CAAA;AAM/B;;ACPD;MACa,cAAc,GAA4B,IAAI,cAAc,CAAU,gBAAgB;;MCCtF,WAAW,CAAA;AAEb,IAAA,2BAA2B,CAAC,GAAa,EAAE,SAAiB,EAAE,YAAqB,EAAA;QACtF,IAAI,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AAEpC,QAAA,IAAI,CAAC,OAAO;YACR,MAAM,CAAA,0CAAA,EAA6C,SAAS,CAAA,CAAA,CAAG;QAEnE,IAAI,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS;YACV,MAAM,CAAA,4CAAA,EAA+C,SAAS,CAAA,CAAA,CAAG;AAErE,QAAA,IAAI,aAAa,GAAiB,SAAU,CAAC,OAAO;QACpD,IAAI,OAAO,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,aAAa;QAE/C,OAAO;AACH,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,CAAC,YAAY,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,IAAI,YAAY,IAAI,aAAa,IAAI,IAAI;SAC5G;;+GAnBI,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA,CAAA;;4FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACHlC;AAuBA;;;;;AAKG;MAEmB,eAAe,CAAA;IAI1B,gBAAgB,CAAC,EAAO,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrD,iBAAiB,CAAC,EAAO,EAAA,EAAU,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAmC9D,IAAa,eAAe,CAAC,KAAa,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK;YAAE;QACZ,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAE3C,IAAA,IAAI,eAAe,GAAA;QACf,OAAO,CAAA,EAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAA,CAAE;;IAoCxD,IAAa,MAAM,KAAwB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;AACjE,IAAA,IAAI,MAAM,CAAC,GAAsB,EAAA,EAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAiDjG,IAAA,WAAA,CAAsB,GAAa,EAAA;QAAb,IAAG,CAAA,GAAA,GAAH,GAAG;AAnIf,QAAA,IAAA,CAAA,QAAQ,GAAG,CAAC,CAAM,KAAI,GAAI;AAC7B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAI;;AASlB,QAAA,IAAA,CAAA,cAAc,GAAuB,IAAI,YAAY,EAAQ;;AAK7D,QAAA,IAAA,CAAA,cAAc,GAAuB,IAAI,YAAY,EAAQ;AAM7D,QAAA,IAAA,CAAA,WAAW,GAA8B,IAAI,YAAY,EAAe;AACxE,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAO;AACvD,QAAA,IAAA,CAAA,cAAc,GAAyB,IAAI,YAAY,EAAU;QAElE,IAAgB,CAAA,gBAAA,GAAY,IAAI;QAChC,IAAW,CAAA,WAAA,GAAY,KAAK;QAC5B,IAAa,CAAA,aAAA,GAAiC,MAAM;QACpD,IAAU,CAAA,UAAA,GAAY,IAAI;QAG5B,IAAe,CAAA,eAAA,GAAW,IAAI;QAE5B,IAAuB,CAAA,uBAAA,GAAW,IAAI;QAGtC,IAAc,CAAA,cAAA,GAAW,EAAE;QAW7B,IAAa,CAAA,aAAA,GAAW,CAAC;QACzB,IAAa,CAAA,aAAA,GAAW,CAAC;QAQvB,IAAU,CAAA,UAAA,GAAY,IAAI;QAE5B,IAAW,CAAA,WAAA,GAAW,EAAE;QACxB,IAAY,CAAA,YAAA,GAAW,EAAE;AAUhC;;;;;AAKE;QACO,IAAO,CAAA,OAAA,GAAW,eAAe;QACjC,IAAO,CAAA,OAAA,GAAW,IAAI;QACvB,IAAkB,CAAA,kBAAA,GAA2D,EAAE;QAC/E,IAAc,CAAA,cAAA,GAAuC,EAAE;AAEvD,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAoB,IAAI,CAAC;QAGvC,IAAgB,CAAA,gBAAA,GAA0D,EAAE;AAE/E,QAAA,IAAA,CAAA,WAAW,GAAkD,QAAQ,CAAC,MAAK;AAC9E,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE;;YAG3B,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC;AAC1B,gBAAA,OAAO,EAAE;AAEb,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC;gBACnC,IAAI,CAAC,0BAA0B,EAAE;AAErC,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC;gBAC/B,IAAI,CAAC,sBAAsB,EAAE;AAEjC,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,YAAA,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;;YAGtD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;gBAC/C,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW;AAExE,YAAA,OAAO,GAAG;AACd,SAAC,CAAC;AAWF;;;;AAIG;QACO,IAAyB,CAAA,yBAAA,GAAY,KAAK;QAE3C,IAAuB,CAAA,uBAAA,GAAoB,IAAI;QAC9C,IAAgB,CAAA,gBAAA,GAAY,IAAI;AAEhC,QAAA,IAAA,CAAA,UAAU,GAAkB,IAAI,OAAO,EAAQ;;;QA6JjD,IAAyB,CAAA,yBAAA,GAAG,IAAI;QAxJpC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC1C,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC;;IAGrD,WAAW,GAAA;QACd,IAAI,CAAC,WAAW,EAAE;QAElB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,gBAAgB;YAC1F,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;AAEzC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;;IAGvB,QAAQ,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE;QAEzB,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;;AAGhD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;;AAErB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,iBAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE;gBAClJ,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;;;;IAKpC,eAAe,GAAA;QAClB,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;AACrF,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO;QAChC,IAAI,CAAC,YAAY,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,WAAW;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,WAAW;;AAGtD,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM;YAC/B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa;YAC3D;;AAGJ,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK;YAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAEtC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;;AAEZ,YAAA,IAAI,CAAC,UAAW,CAAC,cAAc,GAAS,IAAI,CAAC,SAAU,CAAC,cAAc,GAAG,EAAE;AAC3E,YAAA,IAAI,CAAC,UAAW,CAAC,oBAAoB,GAAS,IAAI,CAAC,SAAU,CAAC,oBAAoB,GAAG,IAAI;;AAGnG,QAAA,IAAG,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI;YAC3B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAG;AACvC,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACzD,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAExD,gBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO;oBAAE,IAAI,CAAC,WAAW,EAAE;AAClD,aAAC,CAAC;AAEN,QAAA,CAAC,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;;AAEzI,YAAA,IAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO;gBAAE;YAC5B,IAAI,CAAC,GAAG,CAAC,CAA4B,yBAAA,EAAA,IAAI,CAAC,IAAI,CAAO,IAAA,EAAA,MAAM,CAAE,CAAA,CAAC;YAC9D,CAAC,MAAM,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AAC5E,SAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AAC7F,gBAAA,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI;oBAAE;;AAG/B,gBAAA,IAAG,CAAC,CAAC,CAAC,KAAK,EACX;AACI,oBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC7D,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;oBAC5D;;AAGJ,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAA,yBAAA,EAA4B,IAAI,CAAC,IAAI,CAAA,QAAA,EAAW,CAAC,CAAC,KAAK,CAAA,CAAE,CAAC;AAEnE,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAClF,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAEzD,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACjF,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;gBAExD,qBAAqB,CAAC,MAAK,EAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO;oBAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAC3F,aAAC,CAAC;;;AAIF,IAAA,WAAW,CAAC,KAAc,EAAA;QAC9B,IAAG,CAAC,IAAI,CAAC,OAAO;YACZ;QAEJ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC7C,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;;AAGlD,IAAA,cAAc,CAAC,KAAc,EAAA;AACnC,QAAA,OAAO,KAAK,IAAI,IAAI,CAAC,uBAAuB,KAAK,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,kCAAkC,GAAG,sBAAsB,CAAC;;IAGxK,WAAW,GAAA;QACf,IAAG,CAAC,IAAI,CAAC,OAAO;YAAE;AAElB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;;AAGhB,IAAA,GAAG,CAAC,OAAe,EAAA;QACtB,IAAI,IAAI,CAAC,cAAc;AACnB,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,OAAO,CAAC;;IAGlD,MAAM,UAAU,CAAC,GAAQ,EAAA;;AAE5B,QAAA,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,GAAG,IAAI;QAEjD,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAEvC,IAAG,CAAC,IAAI,CAAC,gBAAgB;YAAE;AAE3B,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QAE9D,IAAI,IAAI,CAAC,yBAAyB,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;;;;AAIhD,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;;IAIlD,MAAM,OAAO,CAAC,KAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAElB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjD,IAAG,CAAC,IAAI,CAAC,gBAAgB;YAAE;QAE3B,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAEzD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,GAAG,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAAC,IAAI,CAAA,SAAA,EAAY,IAAI,CAAC,KAAK,CAAA,CAAE,CAAC;;IAMnE,SAAS,CAAC,YAAY,GAAG,EAAE,EAAA;QAC9B,IAAI,IAAI,CAAC,yBAAyB;AAC9B,YAAA,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAEjD,QAAA,IAAI,CAAC,yBAAyB,GAAG,WAAW,CAAC,MAAK;AAC9C,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC1D,YAAA,IAAI,CAAC,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC,IAAI,GAAG,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC;AACjF,YAAA,aAAa,CAAC,IAAI,CAAC,yBAAyB,CAAC;SAChD,EAAE,YAAY,CAAC;;AAGb,IAAA,OAAO,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,IAAI,CAAC;;;IAItC,0BAA0B,GAAA;;QAE9B,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC;AACnE,QAAA,IAAI,CAAC,YAAY;YAAE;QAEnB,IAAI,CAAC,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAG;YAC3C,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC;AAClD,YAAA,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;AAChE,SAAC,CAAC;;;IAIE,sBAAsB,GAAA;;QAE1B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;AAC9C,QAAA,IAAI,CAAC,OAAO;YAAE;AAEd,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAA,EAAE,CAAC;;AAGxG;;;;;;AAMG;AACK,IAAA,mBAAmB,CAAC,CAAM,EAAA;;AAE9B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO;;;AAIvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,IAAI,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAClC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC;;AAG1H,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;AAG5C,QAAA,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE;AACzD,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,EAAC;AAC1E,QAAA,OAAO,GAAG;;;AAIJ,IAAA,MAAM,iBAAiB,CAAC,qBAA0B,IAAqB,OAAO,qBAAqB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtH,MAAM,WAAW,CAAC,KAAU,IAAkB,OAAO,KAAK,CAAC;IAC3D,MAAM,UAAU,CAAC,KAAU,IAAkB,OAAO,KAAK,CAAC;IAC1D,YAAY,CAAC,KAAU,EAAa,EAAA,OAAO,CAAC,KAAK,CAAC;;+GApW1C,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAuDb,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAgB,CAChB,EAAA,QAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,gBAAgB,kIAahB,gBAAgB,CAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FArElB,eAAe,EAAA,UAAA,EAAA,CAAA;kBADpC;6EAW8C,MAAM,EAAA,CAAA;sBAAhD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAE/B,cAAc,EAAA,CAAA;sBAAvB;gBAG0C,MAAM,EAAA,CAAA;sBAAhD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAE/B,cAAc,EAAA,CAAA;sBAAvB;gBAE+B,UAAU,EAAA,CAAA;sBAAzC,SAAS;uBAAC,YAAY;gBACW,YAAY,EAAA,CAAA;sBAA7C,SAAS;uBAAC,cAAc;gBACK,OAAO,EAAA,CAAA;sBAApC,SAAS;uBAAC,SAAS;gBAEV,WAAW,EAAA,CAAA;sBAApB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBAEQ,gBAAgB,EAAA,CAAA;sBAAxB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAIQ,uBAAuB,EAAA,CAAA;sBAA/B;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACY,eAAe,EAAA,CAAA;sBAA3B;gBAaQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACuC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBACE,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAC7B,OAAO,EAAA,CAAA;sBAAf;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAUuC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAQ7B,OAAO,EAAA,CAAA;sBAAf;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBAKY,MAAM,EAAA,CAAA;sBAAlB;gBA2CQ,uBAAuB,EAAA,CAAA;sBAA/B;gBAKQ,aAAa,EAAA,CAAA;sBAArB;;;ACjKL;AAMA;MAUa,sBAAsB,CAAA;;AAM/B,IAAA,WAAA,GAAA;+GANS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBnC,6qEAmBM,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDPQ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAIb,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBATlC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGX,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA,CAAC,YAAY,CAAC,EACN,eAAA,EAAA,uBAAuB,CAAC,MAAM,cACnC,IAAI,EAAA,QAAA,EAAA,6qEAAA,EAAA;wDAIP,GAAG,EAAA,CAAA;sBAAX;gBACQ,OAAO,EAAA,CAAA;sBAAf;;;AEnBL;AA0BM,MAAO,oBAAqB,SAAQ,eAAe,CAAA;AAVzD,IAAA,WAAA,GAAA;;QAgBa,IAAQ,CAAA,QAAA,GAAY,KAAK;AAE3B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAQ/B;IANG,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,IAAI,CAAC,QAAQ;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;;+GAfxB,oBAAoB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,8FAET,eAAe,CAAA,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EACf,eAAe,CANxB,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,oBAAoB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBjH,0uEAmD+E,ED9BjE,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,eAAe,0IAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,4EAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,wJAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,qBAAqB,oKAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAK7I,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAVhC,SAAS;+BACI,YAAY,EAAA,aAAA,EAGP,iBAAiB,CAAC,IAAI,WAC5B,CAAC,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,EACtI,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,oBAAqB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,UAAA,EACjG,IAAI,EAAA,QAAA,EAAA,0uEAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;8BAIuB,SAAS,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBACE,SAAS,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBAC5B,OAAO,EAAA,CAAA;sBAAf;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;;;AEhCL;AA0BM,MAAO,qBAAsB,SAAQ,eAAe,CAAA;AAV1D,IAAA,WAAA,GAAA;;QAcW,IAAmB,CAAA,mBAAA,GAAW,EAAE;AAqB1C;IAnBU,eAAe,GAAA;QAClB,KAAK,CAAC,eAAe,EAAE;;QAGvB,IAAI,CAAC,YAAY,GAAkB,IAAI,CAAC,YAAc,CAAC,EAAE;QAEzD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE;AACpC,YAAA,IAAI,CAAC,mBAAmB,GAAG,wBAAwB;AACnD,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE;;;IAIV,MAAM,iBAAiB,CAAC,KAAU,EAAA;QACjD,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,WAAW,IAAI,EAAE;;IAGxD,MAAM,UAAU,CAAC,KAAU,EAAA;QAC1C,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI;;+GAvBjF,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,0GAHnB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,ECvBlH,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,y7EAyD+E,8nBDpCjE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,cAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,EAAA,cAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,wJAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,qBAAqB,oKAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAK1I,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,SAAS;+BACI,aAAa,EAAA,aAAA,EAGR,iBAAiB,CAAC,IAAI,WAC5B,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,EACnI,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,qBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,UAAA,EAClG,IAAI,EAAA,QAAA,EAAA,y7EAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;8BAIP,eAAe,EAAA,CAAA;sBAAvB;;;AE5BL;AA6BM,MAAO,mBAAoB,SAAQ,eAAe,CAAA;AAVxD,IAAA,WAAA,GAAA;;AAYI;;;;;;;;AAQG;QACM,IAAW,CAAA,WAAA,GAAoC,YAAY;;QAG3D,IAAa,CAAA,aAAA,GAAY,KAAK;AAMhC,QAAA,IAAA,CAAA,IAAI,GAA8C,MAAM,CAAC,MAAM,CAAC;AAChE,QAAA,IAAA,CAAA,UAAU,GAAuC,MAAM,CAAC,SAAS,CAAC;AAClE,QAAA,IAAA,CAAA,QAAQ,GAAwC,MAAM,CAAC,SAAS,CAAC;AACjE,QAAA,IAAA,CAAA,UAAU,GAAuC,MAAM,CAAC,SAAS,CAAC;AAClE,QAAA,IAAA,CAAA,QAAQ,GAAwC,MAAM,CAAC,SAAS,CAAC;AACjE,QAAA,IAAA,CAAA,aAAa,GAAwC,MAAM,CAAC,SAAS,CAAC;AACtE,QAAA,IAAA,CAAA,aAAa,GAAgE,MAAM,CAAC,SAAS,CAAC;AAiKxG;IA/JU,eAAe,GAAA;QAClB,KAAK,CAAC,eAAe,EAAE;QAEvB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,sBAAsB,EAAE;QAE7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC;AAC1C,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;;QAGrC,IAAI,CAAC,YAAY,GAAsB,IAAI,CAAC,YAAc,CAAC,EAAE;;IAGvD,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM;;IAGH,MAAM,iBAAiB,CAAC,KAAU,EAAA;QACjD,IAAI,MAAM,GAAG,EAAE;QACf,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;AAEpG,QAAA,QAAQ,IAAI,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;gBACP,OAAO,SAAS,IAAI,EAAE;AAC1B,YAAA,KAAK,WAAW;gBAEZ;AACJ,YAAA,KAAK,UAAU;gBACX,OAAO,SAAS,IAAI,EAAE;AAC1B,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAC3C,YAAA,KAAK,OAAO;AACR,gBAAA,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;AAC9B,gBAAA,OAAO,SAAS,GAAG,CAAG,EAAA,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA,CAAE,GAAG,EAAE;AACvD,YAAA,KAAK,MAAM;AACP,gBAAA,MAAM,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC;AAC9B,gBAAA,OAAO,SAAS,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAE,CAAA,GAAG,EAAE;;;IAI/B,MAAM,WAAW,CAAC,KAAU,EAAA;AAC3C,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE5H,QAAA,QAAQ,IAAI,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,UAAU;AACrB,YAAA,KAAK,WAAW;gBAEZ;AACJ,YAAA,KAAK,UAAU;AACX,gBAAA,OAAO,UAAU;AACrB,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,UAAU;AACrB,YAAA,KAAK,OAAO;gBAER;AACJ,YAAA,KAAK,MAAM;gBAEP;;;IAIO,MAAM,UAAU,CAAC,GAAQ,EAAA;AACxC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;AAErB,QAAA,QAAQ,IAAI,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC;AAC/D,YAAA,KAAK,WAAW;gBAEZ;AACJ,YAAA,KAAK,UAAU;AACX,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC;AAC/D,YAAA,KAAK,MAAM;AACP,gBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,YAAY,EAAE;AAClC,oBAAA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;AAChD,oBAAA,GAAG,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;;AAG1G,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC;AAC/D,YAAA,KAAK,OAAO;gBAER;AACJ,YAAA,KAAK,MAAM;gBAEP;;;IAIJ,sBAAsB,GAAA;AAC1B,QAAA,QAAQ,IAAI,CAAC,IAAI;AACb,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW;gBACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,YAAY;AACnD,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,WAAW;gBACZ,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW;gBACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,YAAY;AACnD,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,UAAU;gBACX,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW;gBACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,qBAAqB;AAC5D,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW;gBACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,OAAO;AAC9C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC7B;AACJ,YAAA,KAAK,OAAO;gBACR,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW;gBACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,SAAS;AAChD,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AACtB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5B;AACJ,YAAA,KAAK,MAAM;gBACP,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW;gBACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,MAAM;AAC7C,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;AAC9B,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC5B;;;+GAxLH,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAHjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EC1BhH,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+iDAuC+E,8nBDfjE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,wUAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAKrG,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,SAAS;+BACI,WAAW,EAAA,aAAA,EAGN,iBAAiB,CAAC,IAAI,WAC5B,CAAC,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,CAAC,EAAA,eAAA,EAC9F,uBAAuB,CAAC,MAAM,aACpC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAyB,mBAAA,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,cAChG,IAAI,EAAA,QAAA,EAAA,+iDAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;8BAaP,WAAW,EAAA,CAAA;sBAAnB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;;;AE3CL;AAwBM,MAAO,uBAAwB,SAAQ,mBAAmB,CAAA;IAEnD,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;;+GAHjB,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAHrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EDrBpH,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+iDAuC+E,8nBCpBjE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,wUAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAKrG,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;+BACI,eAAe,EAAA,aAAA,EAGV,iBAAiB,CAAC,IAAI,WAC5B,CAAC,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,CAAC,EAAA,eAAA,EAC9F,uBAAuB,CAAC,MAAM,aACpC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAA6B,uBAAA,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,cACpG,IAAI,EAAA,QAAA,EAAA,+iDAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;;;ACtBpB;AAwBM,MAAO,mBAAoB,SAAQ,mBAAmB,CAAA;IAE/C,YAAY,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM;;+GAHb,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAHjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EFrBhH,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+iDAuC+E,8nBEpBjE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,6BAAA,EAAA,WAAA,EAAA,UAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,eAAA,EAAA,WAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,WAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,wUAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAKrG,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,SAAS;+BACI,WAAW,EAAA,aAAA,EAGN,iBAAiB,CAAC,IAAI,WAC5B,CAAC,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,CAAC,EAAA,eAAA,EAC9F,uBAAuB,CAAC,MAAM,aACpC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAyB,mBAAA,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,cAChG,IAAI,EAAA,QAAA,EAAA,+iDAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;;;ACtBpB;AAyBM,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AAV5D,IAAA,WAAA,GAAA;;QAYa,IAAU,CAAA,UAAA,GAAY,SAAS;AAgB3C;IAdG,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,IAAG,IAAI,CAAC,UAAU,IAAI,SAAS;AAC3B,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;IAGZ,MAAM,UAAU,CAAC,KAAU,EAAA;QAC1C,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,MAAM,IAAI,KAAK;;IAGzD,MAAM,iBAAiB,CAAC,KAAU,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;;+GAhBlC,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,kGAHrB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtBpH,2gCA8B+E,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDVjE,cAAc,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,kIAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,sFAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAKvH,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;+BACI,eAAe,EAAA,aAAA,EAGV,iBAAiB,CAAC,IAAI,WAC5B,CAAC,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,EAAA,eAAA,EAChH,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,uBAAwB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,UAAA,EACpG,IAAI,EAAA,QAAA,EAAA,2gCAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;8BAIP,UAAU,EAAA,CAAA;sBAAlB;;;AE3BL;AA0BM,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AAV5D,IAAA,WAAA,GAAA;;QAY2C,IAAI,CAAA,IAAA,GAAuB,CAAC;AAGtE;+GALY,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAEZ,eAAe,CACf,EAAA,SAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,eAAe,yCACf,eAAe,CAAA,EAAA,EAAA,SAAA,EAPxB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,iDCvBpH,kjCA4B+E,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDPjE,cAAc,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,SAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,ipCAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,uUAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAK5I,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;+BACI,eAAe,EAAA,aAAA,EAGV,iBAAiB,CAAC,IAAI,WAC5B,CAAC,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,EACrI,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,uBAAwB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,UAAA,EACpG,IAAI,EAAA,QAAA,EAAA,kjCAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;8BAIuB,IAAI,EAAA,CAAA;sBAA1C,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBACE,SAAS,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;gBACE,SAAS,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE;;;AE9BzC;AAIA;;;AAGG;MAQU,oBAAoB,CAAA;AAPjC,IAAA,WAAA,GAAA;;QAUa,IAAa,CAAA,aAAA,GAAW,CAAC;;QAGzB,IAAa,CAAA,aAAA,GAAW,CAAC;;QAGzB,IAAI,CAAA,IAAA,GAAY,KAAK;;QAGrB,IAAc,CAAA,cAAA,GAAW,EAAE;AAQvC;;IALG,IAAa,eAAe,CAAC,KAAa,EAAA;QACtC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;+GAlBlC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfjC,oVAMM,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKQ,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIb,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;+BACI,YAAY,EAAA,OAAA,EAEb,CAAC,YAAY,CAAC,mBACN,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,oVAAA,EAAA;8BAKP,aAAa,EAAA,CAAA;sBAArB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,cAAc,EAAA,CAAA;sBAAtB;gBAGY,eAAe,EAAA,CAAA;sBAA3B;;;AE9BL;AAOA;;;AAGG;MAQU,uBAAuB,CAAA;AAPpC,IAAA,WAAA,GAAA;;QAaa,IAAK,CAAA,KAAA,GAAW,EAAE;;QAGlB,IAAU,CAAA,UAAA,GAAW,OAAO;;QAG5B,IAAU,CAAA,UAAA,GAAY,IAAI;;QAG1B,IAAa,CAAA,aAAA,GAAW,CAAC;;QAGzB,IAAa,CAAA,aAAA,GAAW,CAAC;;QAGzB,IAAI,CAAA,IAAA,GAAY,KAAK;;QAGrB,IAAc,CAAA,cAAA,GAAW,EAAE;;QAG3B,IAAW,CAAA,WAAA,GAAY,KAAK;;QAM5B,IAAa,CAAA,aAAA,GAAiC,MAAM;;QAGpD,IAAgB,CAAA,gBAAA,GAAY,IAAI;;QAGhC,IAAe,CAAA,eAAA,GAAW,GAAG;AAQzC;;IALG,IAAa,eAAe,CAAC,KAAa,EAAA;QACtC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;+GA7ClC,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,8FAGZ,gBAAgB,CAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBxC,wMAKc,EDSA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,+BAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIrC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAPnC,SAAS;+BACI,eAAe,EAAA,OAAA,EAEhB,CAAC,YAAY,EAAE,sBAAsB,CAAC,EAAA,eAAA,EAC9B,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,wMAAA,EAAA;8BAKwB,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAG7B,KAAK,EAAA,CAAA;sBAAb;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,cAAc,EAAA,CAAA;sBAAtB;gBAGQ,WAAW,EAAA,CAAA;sBAAnB;gBAGQ,mBAAmB,EAAA,CAAA;sBAA3B;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAGQ,eAAe,EAAA,CAAA;sBAAvB;gBAGY,eAAe,EAAA,CAAA;sBAA3B;;;AE5DL;AAIA;;;AAGG;MAQU,mBAAmB,CAAA;AAPhC,IAAA,WAAA,GAAA;;QASa,IAAa,CAAA,aAAA,GAAW,CAAC;;QAGzB,IAAa,CAAA,aAAA,GAAW,CAAC;;QAGzB,IAAI,CAAA,IAAA,GAAY,KAAK;;QAGrB,IAAc,CAAA,cAAA,GAAW,EAAE;AAQvC;;IALG,IAAa,eAAe,CAAC,KAAa,EAAA;QACtC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;+GAjBlC,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfhC,wUAMM,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDKQ,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FAIb,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACI,WAAW,EAAA,OAAA,EAEZ,CAAC,YAAY,CAAC,mBACN,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EAAA,QAAA,EAAA,wUAAA,EAAA;8BAIP,aAAa,EAAA,CAAA;sBAArB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,cAAc,EAAA,CAAA;sBAAtB;gBAGY,eAAe,EAAA,CAAA;sBAA3B;;;AE7BL;AAmCM,MAAO,mBAAoB,SAAQ,eAAe,CAAA;;AAkBpD,IAAA,WAAA,CAAY,GAAa,EAAA;QACrB,KAAK,CAAC,GAAG,CAAC;;QAhBL,IAAQ,CAAA,QAAA,GAAY,KAAK;;QAGzB,IAAa,CAAA,aAAA,GAAY,IAAI;;QAG7B,IAAO,CAAA,OAAA,GAAW,CAAC;;QAGnB,IAAS,CAAA,SAAA,GAAY,SAAS;;QAG9B,IAAQ,CAAA,QAAA,GAAY,KAAK;;AAM9B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,EAAE;AAE1B,QAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;;IAGzC,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,IAAG,IAAI,CAAC,SAAS,KAAK,SAAS;AAC3B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;;AAG9B,IAAA,QAAQ,CAAC,CAAkB,EAAA;QACvB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AAC9C,YAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;;AACxB,YAAA,OAAO,IAAI;;AAGD,IAAA,YAAY,CAAC,KAAc,EAAA;AAC1C,QAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK;;IAGjB,MAAM,UAAU,CAAC,KAAU,EAAA;AAC1C,QAAA,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG,KAAK;;IAG7B,MAAM,WAAW,CAAC,KAAU,EAAA;AAC3C,QAAA,OAAO,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG,KAAK;;IAG7B,MAAM,iBAAiB,CAAC,qBAA8B,EAAA;QACrE,OAAO,qBAAqB,CAAC,QAAQ;;AAGzC;;;;AAIG;AACH,IAAA,MAAM,UAAU,CAAC,KAAA,GAAiB,KAAK,EAAA;QACnC,IAAI,KAAK,GAAW,EAAE;AACtB,QAAA,IAAI,KAAK,GAAa,IAAI,CAAC,KAAM;AACjC,QAAA,IAAI,EAAE,GAAqB,IAAI,CAAC,YAAY,CAAC,aAAa;QAE1D,IAAI,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,GAAI,KAAK,CAAC,OAAO,GAAG,EAAE;AAC/C,YAAA,KAAK,CAAC,WAAW,GAAG,EAAE;;aAErB;AACD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,gBAAA,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9C,oBAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAW,QAAA,EAAA,IAAI,CAAC,IAAI,iCAAiC,IAAI,CAAC,OAAO,CAAA,EAAA,CAAI,CAAC;AAC5F,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBACrB;;AAEJ,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;;AAGpB,YAAA,KAAK,CAAC,OAAO,GAAG,IAAI;;YAGpB,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBACtB,IAAI,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9B,gBAAA,KAAK,CAAC,QAAQ,GAAG,YAAY,CAAC,IAAI;gBAClC,IAAI,IAAI,CAAC,QAAQ;oBACb,KAAK,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;;;AAGvD,iBAAA,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACxB,gBAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAE5E,YAAA,KAAK,CAAC,WAAW,GAAG,KAAK;;AAG7B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;;AAGf,IAAA,WAAW,CAAC,YAAY,EAAA;QAC5B,OAAO,IAAI,OAAO,CAAS,CAAC,GAAG,EAAE,CAAC,KAAI;AAClC,YAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;AAC7B,YAAA,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC;AAClC,YAAA,MAAM,CAAC,MAAM,GAAG,MAAK;gBACjB,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACzC,IAAI,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;gBAE9C,GAAG,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1D,aAAC;AACL,SAAC,CAAC;;;IAIN,cAAc,GAAA;AACV,QAAA,IAAI,KAAK,GAAa,IAAI,CAAC,KAAM;AACjC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;;;AAIxD,IAAA,cAAc,CAAC,KAAgB,EAAA;QAC3B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;;;AAI3B,IAAA,aAAa,CAAC,KAAgB,EAAA;QAC1B,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK;QACjE,IAAI,CAAC,UAAU,EAAE;;+GAjIZ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EANjB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/F,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI;AAC5F,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChCL,s5GA+C+E,EDpBjE,MAAA,EAAA,CAAA,ukBAAA,EAAA,ytCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,8BAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,uUAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,sBAAsB,sFAAE,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAQhK,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAGN,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA,CAAC,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,kBAAkB,CAAC,EACzJ,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/F,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI;AAC5F,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,s5GAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,EAAA,ytCAAA,CAAA,EAAA;6EAKP,QAAQ,EAAA,CAAA;sBAAhB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;;;AElDL;AAwBM,MAAO,0BAA2B,SAAQ,eAAe,CAAA;AAV/D,IAAA,WAAA,GAAA;;QAYa,IAAO,CAAA,OAAA,GAAqB,SAAS;QACrC,IAAW,CAAA,WAAA,GAA6D,MAAM;;QAG9E,IAAa,CAAA,aAAA,GAAY,IAAI;QAE7B,IAAgB,CAAA,gBAAA,GAAW,EAAE;AAmEzC;IAjEG,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE;AAEhB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAC1B,IAAI,CAAC,cAAc,EAAE;;IAGnB,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;IAGnB,eAAe,GAAA;QAClB,KAAK,CAAC,eAAe,EAAE;;QAGvB,IAAI,CAAC,YAAY,GAAuB,IAAI,CAAC,YAAc,CAAC,EAAE;AAE9D,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ;AAClC,YAAA,IAAI,CAAC,WAAW,GAAG,+BAA+B;;IAGvC,MAAM,UAAU,CAAC,KAAU,EAAA;AAC1C,QAAA,IAAG,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;QAEpB,IAAI,GAAG,GAAG,IAAI;AACd,QAAA,QAAQ,IAAI,CAAC,WAAW;AACpB,YAAA,KAAK,oBAAoB;AACrB,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM;AACpD,oBAAA,GAAG,GAAI,KAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;gBACtC;AACJ,YAAA,KAAK,UAAU;AACX,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM;AACpD,oBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC;gBACrC;AACJ,YAAA,KAAK,MAAM;AACP,gBAAA,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAClC;AACJ,YAAA,KAAK,WAAW;AACZ,gBAAA,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACrC;;AAGR,QAAA,OAAO,GAAG;;IAGK,MAAM,WAAW,CAAC,KAAe,EAAA;AAChD,QAAA,IAAG,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AAEpB,QAAA,QAAQ,IAAI,CAAC,WAAW;AACpB,YAAA,KAAK,oBAAoB;AACrB,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,YAAA,KAAK,UAAU;AACX,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAChC,YAAA,KAAK,WAAW;AACZ,gBAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAG,EAAG,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA,EAAE,CAAC;AAClG,YAAA,KAAK,MAAM;AACP,gBAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;;;IAIlB,MAAM,iBAAiB,CAAC,KAA4C,EAAA;AACnF,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;QAErB,OAAO,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;+GAzEhE,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAHxB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,0BAA0B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,ECrBvH,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,+xCAiC+E,8nBDdjE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAJ,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,cAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,aAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,cAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,YAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,UAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,aAAa,wUAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAKtG,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAVtC,SAAS;+BACI,kBAAkB,EAAA,aAAA,EAGb,iBAAiB,CAAC,IAAI,WAC5B,CAAC,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,sBAAsB,CAAC,EAAA,eAAA,EAC/F,uBAAuB,CAAC,MAAM,aACpC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAgC,0BAAA,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,cACvG,IAAI,EAAA,QAAA,EAAA,+xCAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;8BAIP,OAAO,EAAA,CAAA;sBAAf;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,gBAAgB,EAAA,CAAA;sBAAxB;;;AEhCL;AAiBA;;;;;AAKG;AAWG,MAAO,2BAA4B,SAAQ,eAAe,CAAA;AAVhE,IAAA,WAAA,GAAA;;QAYY,IAAW,CAAA,WAAA,GAAU,IAAI;;AAI1B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;QAKjB,IAAc,CAAA,cAAA,GAAwG,IAAI;QAO5H,IAAK,CAAA,KAAA,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;AA4GlC;IA1GU,QAAQ,GAAA;QACX,KAAK,CAAC,QAAQ,EAAE;;QAGhB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;AACxD,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;;;;QAKhB,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc;QACpF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;;;;;IAQtC,eAAe,GAAA;QAClB,KAAK,CAAC,eAAe,EAAE;;QAGvB,IAAI,CAAC,YAAY,GAAwB,IAAI,CAAC,YAAc,CAAC,EAAE;;AAGnE,IAAA,MAAM,CAAC,KAAgC,EAAA;AAEnC,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;;;;AAI9E,gBAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,gBAAA,qBAAqB,CAAC,MAAK,EAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;AACrD,aAAC,CAAC;YACF;;AAGJ,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;QAEhB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC;YACrC;QAEJ,qBAAqB,CAAC,MAAK;YACvB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjG,SAAC,CAAC;;IAGN,MAAM,OAAO,CAAC,KAAK,EAAA;;QAGf,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC3C,YAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACpB;;;;;AAMJ,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,GAAG,GAAgB,KAAM;AAC7B,YAAA,IAAI,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,OAAO,WAAW,KAAK,QAAQ;AAC/B,gBAAA,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE;;AAEtE,aAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAChC,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;;AAG7C,QAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;;IAGL,MAAM,WAAW,CAAC,KAAsG,EAAA;QACvI,IAAI,OAAO,KAAK,KAAK,QAAQ;AACzB,YAAA,OAAO,KAAK;QAEhB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAA+C,KAAK,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,EAAE;;IAG9J,MAAM,UAAU,CAAC,KAAwB,EAAA;AACxD,QAAA,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;QAEjD,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC;AAClC,YAAA,OAAO,IAAI;AAEf,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;;AAErB,YAAA,IAAI,GAAG,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;;AAGjH,YAAA,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE;YACxB,OAAO,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;;QAGrD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC;YACrC,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAA,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;AAEtH,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpF,QAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;;IAGxB,MAAM,iBAAiB,CAAC,KAAwB,EAAA;QAC/D,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,WAAW,IAAI,KAAK;;+GA7HrJ,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,unBAchB,gBAAgB,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAEhB,gBAAgB,EAnBzB,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BxH,i9CAsC+E,EDVjE,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,kBAAkB,swCAAgB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,wJAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,qBAAqB,+BAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAK9J,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAVvC,SAAS;+BACI,mBAAmB,EAAA,aAAA,EAGd,iBAAiB,CAAC,IAAI,WAC5B,CAAC,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,EAAA,eAAA,EACvJ,uBAAuB,CAAC,MAAM,aACpC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAiC,2BAAA,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,UAAA,EACxG,IAAI,EAAA,QAAA,EAAA,i9CAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;8BAWP,qBAAqB,EAAA,CAAA;sBAA7B;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAGuC,QAAQ,EAAA,CAAA;sBAA/C,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBAEE,cAAc,EAAA,CAAA;sBAArD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE;;;ME9C7B,qBAAqB,CAAA;AAAlC,IAAA,WAAA,GAAA;QACI,IAAgB,CAAA,gBAAA,GAAY,IAAI;QAChC,IAAW,CAAA,WAAA,GAAY,KAAK;QAC5B,IAAa,CAAA,aAAA,GAAiC,MAAM;QACpD,IAAU,CAAA,UAAA,GAAY,IAAI;QAC1B,IAAmB,CAAA,mBAAA,GAAqB,IAAI;QAC5C,IAAK,CAAA,KAAA,GAAW,IAAI;QACpB,IAAI,CAAA,IAAA,GAAY,KAAK;QACrB,IAAc,CAAA,cAAA,GAAW,IAAI;QAC7B,IAAW,CAAA,WAAA,GAAW,IAAI;QAC1B,IAAe,CAAA,eAAA,GAAW,IAAI;QAC9B,IAAI,CAAA,IAAA,GAAW,IAAI;QACnB,IAAQ,CAAA,QAAA,GAAwB,SAAS;QACzC,IAAQ,CAAA,QAAA,GAAwB,SAAS;QACzC,IAAU,CAAA,UAAA,GAAY,IAAI;QAC1B,IAAoB,CAAA,oBAAA,GAAkD,IAAI;QAC1E,IAAQ,CAAA,QAAA,GAA6B,SAAS;QAC9C,IAAO,CAAA,OAAA,GAAW,eAAe;QACjC,IAAO,CAAA,OAAA,GAAW,IAAI;QACtB,IAAM,CAAA,MAAA,GAAU,IAAI;QACpB,IAAuB,CAAA,uBAAA,GAAoB,IAAI;;AAClD;;ACxBD;AA0BM,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AAV5D,IAAA,WAAA,GAAA;;QAYa,IAAI,CAAA,IAAA,GAA2B,SAAS;QAExC,IAAS,CAAA,SAAA,GAAW,CAAC;AAQjC;IANU,eAAe,GAAA;QAClB,KAAK,CAAC,eAAe,EAAE;;QAGvB,IAAI,CAAC,YAAY,GAAuB,IAAI,CAAC,YAAc,CAAC,EAAE;;+GAVzD,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,8GAHrB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,ECvBpH,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,srCAiC+E,8nBDZjE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,WAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,cAAA,EAAA,SAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,MAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,KAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,MAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,gBAAgB,wJAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAE,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,qBAAqB,+BAAE,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAK/I,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAVnC,SAAS;+BACI,eAAe,EAAA,aAAA,EAGV,iBAAiB,CAAC,IAAI,WAC5B,CAAC,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,EACxI,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAK,uBAAwB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,UAAA,EACpG,IAAI,EAAA,QAAA,EAAA,srCAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;8BAIP,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;;;AE9BL;AA2BA;;;;;;;;;;;;AAYE;AA0BI,MAAO,uBAAwB,SAAQ,eAAe,CAAA;AAyBxD,IAAA,WAAA,CAAY,GAAa,EAAA;QACrB,KAAK,CAAC,GAAG,CAAC;;QAZL,IAAc,CAAA,cAAA,GAAwG,IAAI;;QAG1H,IAAS,CAAA,SAAA,GAAW,CAAC;QAErB,IAAW,CAAA,WAAA,GAAW,EAAE;AAE1B,QAAA,IAAA,CAAA,UAAU,GAAI,MAAM,CAAC,aAAa,CAAC;AACnC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAC7C,QAAA,IAAA,CAAA,MAAM,GAA0C,MAAM,CAAC,IAAI,CAAC;AAI/D,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;IAG1B,QAAQ,GAAA;QACX,KAAK,CAAC,QAAQ,EAAE;QAEhB,IAAI,CAAC,4BAA4B,EAAE;;;IAIpB,MAAM,UAAU,CAAC,KAAU,EAAA;AAC1C,QAAA,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;AAChD,YAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC;;AAE7C,YAAA,OAAO,KAAK;;IAGD,MAAM,WAAW,CAAC,KAAU,EAAA;AAC3C,QAAA,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG;AACnD,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK;AACrC,YAAA,OAAO,KAAK,EAAE,OAAO,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC;;;AAGrD,YAAA,OAAO,KAAK;;IAGb,eAAe,GAAA;QAClB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,aAAa,GAAG,IAAI,qBAAqB,EAAE;QAC/C,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;;;AAG3C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YACrB,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;;AAE9B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;;IAuBlC,yBAAyB,CAAE,CAAa,EAAA;IAExC,4BAA4B,GAAA;AACxB,QAAA,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG;YACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;YACtD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,IAAI,IAAI,OAAO,EAAwC;;;AAIpH,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC7B,QAAA,IAAI,GAAG,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;AAC7G,QAAA,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,GAAG,sBAAsB,GAAG,EAAE,EAAE,CAAC;AAC9G,QAAA,OAAO,GAAG;;;AAId,IAAA,sBAAsB,CAAC,OAAwB,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,CAAC,CAAkB,KAAK,IAAI;AACjD,QAAA,IAAI,KAAa;AACjB,QAAA,IAAI,QAAgB;AAEpB,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC7B,QAAQ,GAAG,EAAE;AACb,YAAA,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,QAAQ,IAAI,GAAG;YAC9C,QAAQ,IAAI,OAAO;YACnB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;gBAAE,QAAQ,IAAI,GAAG;AAC/D,YAAA,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC;;QAGhC,OAAO,CAAC,OAAwB,KAA6B;YACzD,IAAI,CAAC,OAAO,CAAC,KAAK;AAAE,gBAAA,OAAO,IAAI;;AAG/B,YAAA,IAAG,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,wBAAwB;AAC9C,gBAAA,IAAI,CAAC,wBAAwB,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;AAE9E,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,IAAI,GAAG,EAAE,SAAS,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,wBAAwB,EAAE,EAAE;AAC1J,SAAC;;+GA5HI,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EANrB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACnG,YAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC,EAAE,KAAK,EAAE,IAAI;AAChG,SAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9DL,0tMAwEC,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1BO,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,sEAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,qBAAqB,EAEnG,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,oBAAoB,EACpB,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,WAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,qBAAqB,EACrB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,2BAA2B,EAC3B,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,eAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EACnB,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,iIACnB,uBAAuB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FASlB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAzBnC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAGV,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAC5B,OAAA,EAAA;wBACL,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB;wBAEnG,oBAAoB;wBACpB,mBAAmB;wBACnB,uBAAuB;wBACvB,qBAAqB;wBACrB,2BAA2B;wBAC3B,uBAAuB;wBACvB,mBAAmB;wBACnB,mBAAmB;wBACnB;qBACH,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACnG,wBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC,EAAE,KAAK,EAAE,IAAI;AAChG,qBAAA,EAAA,UAAA,EACW,IAAI,EAAA,QAAA,EAAA,0tMAAA,EAAA,MAAA,EAAA,CAAA,ukBAAA,CAAA,EAAA;6EAK2B,cAAc,EAAA,CAAA;sBAAxD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAGE,cAAc,EAAA,CAAA;sBAAxD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAGhC,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,kBAAkB,EAAA,CAAA;sBAA1B;gBAGQ,cAAc,EAAA,CAAA;sBAAtB;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;;;AEpFL;AA6BA;AACA,MAAM,qBAAqB,GAAG;IAC5B,oBAAoB;IACpB,qBAAqB;IACrB,mBAAmB;IACnB,uBAAuB;IACvB,mBAAmB;IACnB,uBAAuB;IACvB,uBAAuB;IACvB,mBAAmB;IACnB,oBAAoB;IACpB,uBAAuB;IACvB,mBAAmB;IACnB,0BAA0B;IAC1B,2BAA2B;IAC3B,uBAAuB;IACvB;CACD;AAED;AACA,MAAM,OAAO,GAAG;IACd,YAAY;IACZ,WAAW;IACX;CACD;MAMY,yBAAyB,CAAA;IAEpC,OAAO,OAAO,CAAC,MAA4B,EAAA;QACzC,OAAO;AACL,YAAA,QAAQ,EAAE,yBAAyB;AACnC,YAAA,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,IAAI,IAAI,GAAG,MAAM,EAAE,SAAS,GAAG,KAAK;AAC3F;SACF;;+GARQ,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,YATpC,YAAY;YACZ,WAAW;AACX,YAAA,kBAAkB,EArBlB,oBAAoB;YACpB,qBAAqB;YACrB,mBAAmB;YACnB,uBAAuB;YACvB,mBAAmB;YACnB,uBAAuB;YACvB,uBAAuB;YACvB,mBAAmB;YACnB,oBAAoB;YACpB,uBAAuB;YACvB,mBAAmB;YACnB,0BAA0B;YAC1B,2BAA2B;YAC3B,uBAAuB;AACvB,YAAA,uBAAuB,aAdvB,oBAAoB;YACpB,qBAAqB;YACrB,mBAAmB;YACnB,uBAAuB;YACvB,mBAAmB;YACnB,uBAAuB;YACvB,uBAAuB;YACvB,mBAAmB;YACnB,oBAAoB;YACpB,uBAAuB;YACvB,mBAAmB;YACnB,0BAA0B;YAC1B,2BAA2B;YAC3B,uBAAuB;YACvB,uBAAuB,CAAA,EAAA,CAAA,CAAA;gHAcZ,yBAAyB,EAAA,OAAA,EAAA,CAHvB,OAAO,EAAK,qBAAqB,CAAA,EAAA,CAAA,CAAA;;4FAGnC,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,qBAAqB,CAAC;AAC/C,oBAAA,OAAO,EAAE,CAAC,GAAG,qBAAqB;AACnC,iBAAA;;;AC1DD;;ACAA;;AAEG;;;;"}
@@ -6,7 +6,7 @@ import * as i0 from "@angular/core";
6
6
  */
7
7
  export declare class EsFormTemplateComponent {
8
8
  /** Indica se l'input è obbligatorio o no */
9
- required: boolean;
9
+ required: boolean | '' | undefined;
10
10
  /** Mostra un testo a sinistra dell'input, **FormLayout** permettendo */
11
11
  Label: string;
12
12
  /** Eventuali classi extra da applicare alla Label, di default c'è solo un leggero margin top */
@@ -35,4 +35,5 @@ export declare class EsFormTemplateComponent {
35
35
  set LabelInputRatio(input: string);
36
36
  static ɵfac: i0.ɵɵFactoryDeclaration<EsFormTemplateComponent, never>;
37
37
  static ɵcmp: i0.ɵɵComponentDeclaration<EsFormTemplateComponent, "form-template", never, { "required": { "alias": "required"; "required": false; }; "Label": { "alias": "Label"; "required": false; }; "LabelClass": { "alias": "LabelClass"; "required": false; }; "FormLayout": { "alias": "FormLayout"; "required": false; }; "LabelColWidth": { "alias": "LabelColWidth"; "required": false; }; "InputColWidth": { "alias": "InputColWidth"; "required": false; }; "Last": { "alias": "Last"; "required": false; }; "FormGroupClass": { "alias": "FormGroupClass"; "required": false; }; "DisplayMode": { "alias": "DisplayMode"; "required": false; }; "DisplayModeTemplate": { "alias": "DisplayModeTemplate"; "required": false; }; "DisplayLayout": { "alias": "DisplayLayout"; "required": false; }; "DisplayCondition": { "alias": "DisplayCondition"; "required": false; }; "InlineSeparator": { "alias": "InlineSeparator"; "required": false; }; "LabelInputRatio": { "alias": "LabelInputRatio"; "required": false; }; }, {}, never, ["*"], true, never>;
38
+ static ngAcceptInputType_required: unknown;
38
39
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/forms-and-validations",
3
- "version": "19.2.58",
3
+ "version": "19.2.59",
4
4
  "private": false,
5
5
  "dependencies": {
6
6
  "tslib": "^2.0.0"