@esfaenza/forms-and-validations 15.2.46 → 15.2.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/forms/form-file/form-file.component.mjs +27 -13
- package/fesm2015/esfaenza-forms-and-validations.mjs +26 -12
- package/fesm2015/esfaenza-forms-and-validations.mjs.map +1 -1
- package/fesm2020/esfaenza-forms-and-validations.mjs +26 -12
- package/fesm2020/esfaenza-forms-and-validations.mjs.map +1 -1
- package/lib/forms/form-file/form-file.component.d.ts +4 -2
- package/package.json +1 -1
|
@@ -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/FormsAndValidationsModuleConfig.ts","../../../projects/forms-and-validations/src/lib/models/dayjs-adapter/dayjs-date-adapter.ts","../../../projects/forms-and-validations/src/lib/tokens.ts","../../../projects/forms-and-validations/src/lib/validations/customValidators/CustomRequiredDirective.ts","../../../projects/forms-and-validations/src/lib/validations/base-validation.ts","../../../projects/forms-and-validations/src/lib/validations/base-validation.loc.ts","../../../projects/forms-and-validations/src/lib/validations/validation-select/validation-select.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-select/validation-select.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-date/validation-date.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-date/validation-date.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-input/validation-input.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-input/validation-input.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-currency/validation-currency.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-currency/validation-currency.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-text-area/validation-text-area.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-text-area/validation-text-area.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-datetime/validation-datetime.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-datetime/validation-datetime.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-autocomplete/validation-autocomplete.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-autocomplete/validation-autocomplete.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.html","../../../projects/forms-and-validations/src/lib/forms/base-form-control.ts","../../../projects/forms-and-validations/src/lib/forms/form-file/form-file.component.loc.ts","../../../projects/forms-and-validations/src/lib/forms/form-file/form-file.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-file/form-file.component.html","../../../projects/forms-and-validations/src/lib/forms/form-datetime/form-datetime.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-datetime/form-datetime.component.html","../../../projects/forms-and-validations/src/lib/forms/form-adaptive/form-adaptive.component.loc.ts","../../../projects/forms-and-validations/src/lib/forms/form-adaptive/form-adaptive.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-adaptive/form-adaptive.component.html","../../../projects/forms-and-validations/src/lib/forms/form-empty/form-empty.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-empty/form-empty.component.html","../../../projects/forms-and-validations/src/lib/forms/form-template/form-template.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-template/form-template.component.html","../../../projects/forms-and-validations/src/lib/forms/form-error/form-error.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-error/form-error.component.html","../../../projects/forms-and-validations/src/lib/forms/form-info/form-info.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-info/form-info.component.html","../../../projects/forms-and-validations/src/lib/forms/form-checkbox/form-checkbox.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-checkbox/form-checkbox.component.html","../../../projects/forms-and-validations/src/lib/forms/form-date/form-date.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-date/form-date.component.html","../../../projects/forms-and-validations/src/lib/forms/form-input/form-input.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-input/form-input.component.html","../../../projects/forms-and-validations/src/lib/forms/form-select/form-select.component.loc.ts","../../../projects/forms-and-validations/src/lib/forms/form-select/form-select.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-select/form-select.component.html","../../../projects/forms-and-validations/src/lib/forms/form-multiselect/form-multiselect.component.loc.ts","../../../projects/forms-and-validations/src/lib/forms/form-multiselect/form-multiselect.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-multiselect/form-multiselect.component.html","../../../projects/forms-and-validations/src/lib/forms/form-textarea/form-textarea.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-textarea/form-textarea.component.html","../../../projects/forms-and-validations/src/lib/forms/form-autocomplete/form-autocomplete.component.loc.ts","../../../projects/forms-and-validations/src/lib/forms/form-autocomplete/form-autocomplete.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-autocomplete/form-autocomplete.component.html","../../../projects/forms-and-validations/src/lib/forms/form-time/form-time.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-time/form-time.component.html","../../../projects/forms-and-validations/src/lib/forms-and-validations.module.ts","../../../projects/forms-and-validations/src/public-api.ts","../../../projects/forms-and-validations/src/esfaenza-forms-and-validations.ts"],"sourcesContent":["\r\n/**\r\n * Classe che identifica un file\r\n */\r\nexport class AppFile {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(){\r\n this.filename = \"\";\r\n this.fileb64 = \"\";\r\n this.nativefiles = [];\r\n }\r\n\r\n /**\r\n * Nome del file, Viene letto in Input e valorizzato in Output\r\n */\r\n filename: string; //I-O\r\n\r\n /**\r\n * B64 del file, Viene letto in Input ma non valorizzato in Output (non puà leggere dal filesystem)\r\n */\r\n fileb64: string; //I\r\n\r\n /**\r\n * Lista di file nativi collegati a questo input. Viene solo valorizzato in Output. Non è letto come Input\r\n */\r\n nativefiles: File[]; //O\r\n}","export 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 FormsAndValidationsModuleConfig {\r\n\r\n /** Chiave dei permessi Custom in cui ci sono le informazioni di Ownership */\r\n acocustom?: string;\r\n\r\n /** Abilita o meno la modalità di debug */\r\n debugMode?: boolean;\r\n\r\n /** Abilita o meno la modalità slider delle checkbox */\r\n sliderMode?: boolean;\r\n}","//Angular\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { MAT_DATE_LOCALE } from \"@angular/material/core\";\r\n\r\n//Libreria\r\n// Questa non è più usata, la tengo qui per crosscheck in caso di updates\r\n//import { NgxMatDateAdapter } from \"@angular-material-components/datetime-picker\";\r\nimport { DayJsDateAdapter } from \"@esfaenza/material-dayjs-adapter\";\r\nimport { Dayjs } from \"dayjs\";\r\n\r\n/**\r\n * Espansione dell'adapter di default di DayJs già utilizzato per i bind base su Material.\r\n * \r\n * Questa versione serve unicamente per i controlli **datetime-picker**, ma dato che io l'adapter già lo avevo lato **esfaenza/material-dayjs-adapter** \r\n * qui devo semplicemente aggiungere le funzioni non presenti nella mia implementazione che servono al **datetime-picker**\r\n */\r\n@Injectable()\r\nexport class NgxExpandedDayJsDateAdapter extends DayJsDateAdapter {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(@Inject(MAT_DATE_LOCALE) dateLocale: string) {\r\n super(dateLocale);\r\n }\r\n\r\n // Espando il mio DayJsDateAdapter con i metodi extra del NgxMatDateAdapter che servono per il material timepicker\r\n // Non potendo fare \"extends\" da due classi mi tocca tenerlo così senza type safety.... \r\n\r\n /**\r\n * Identifica se due date hanno lo stesso orario\r\n * \r\n * @param {DayJs} a Primo elemento del controllo\r\n * @param {DayJs} b Secondo elemento del controllo\r\n * @returns **true** se hanno lo stess orario, **false** altrimenti\r\n */\r\n isSameTime(a: Dayjs, b: Dayjs): boolean {\r\n if (a == null || b == null) return true;\r\n return this.getHour(a) === this.getHour(b)\r\n && this.getMinute(a) === this.getMinute(b)\r\n && this.getSecond(a) === this.getSecond(b);\r\n }\r\n\r\n /**\r\n * Copia dell'orario da una data all'altra, Modifica direttamente l'oggetto **toDate**\r\n * \r\n * @param {DayJs} toDate Data in cui copiare l'orario\r\n * @param {DayJs} fromDate Data da cui copiare l'orario\r\n */\r\n copyTime(toDate: Dayjs, fromDate: Dayjs) {\r\n this.setHour(toDate, this.getHour(fromDate));\r\n this.setMinute(toDate, this.getMinute(fromDate));\r\n this.setSecond(toDate, this.getSecond(fromDate));\r\n }\r\n\r\n /**\r\n * Mette a confronto due date\r\n * @param {Dayjs} first Prima data da confrontare\r\n * @param {Dayjs} second Seconda data da confrontare\r\n * @param {boolean} showSeconds Indica se considerare anche i secondi, di default no\r\n * @returns {number} 0 se le due date sono uguali, un numero minore di 0 se la prima data è precedente alla seconda e un numero maggiore di 0 altrimenti\r\n */\r\n compareDateWithTime(first: Dayjs, second: Dayjs, showSeconds?: boolean): number {\r\n let res = super.compareDate(first, second) ||\r\n this.getHour(first) - this.getHour(second) ||\r\n this.getMinute(first) - this.getMinute(second);\r\n\r\n if (showSeconds)\r\n res = res || this.getSecond(first) - this.getSecond(second);\r\n \r\n return res;\r\n }\r\n\r\n /**\r\n * Assegna a una data i valori di ore, minuti e secondi di default. \r\n * \r\n * Se non specificati vengono assegnati degli '0'\r\n * \r\n * @param {DayJs} date Data a cui assegnare i valori di default\r\n * @param {number[]} defaultTime Valori di default per ore, minuti e secondi, considerati 0 se non presenti\r\n */\r\n setTimeByDefaultValues(date: Dayjs, defaultTime: number[]) {\r\n if (!Array.isArray(defaultTime)) {\r\n throw Error('@Input DefaultTime should be an array');\r\n }\r\n this.setHour(date, defaultTime[0] || 0);\r\n this.setMinute(date, defaultTime[1] || 0);\r\n this.setSecond(date, defaultTime[2] || 0);\r\n }\r\n}","import { InjectionToken } from '@angular/core';\r\n\r\n/** Chiave che indica il prefisso dei Contesti Applicativi per permettere l'abilitazione/disabilitazione di input in maniera contestuale */\r\nexport const ACO_CUSTOMKEY: InjectionToken<string> = new InjectionToken<string>('ACO_CUSTOMKEY');\r\n\r\n/** Token che indica la lingua da utilizzare, sono supportate \"it-IT\" ed \"en-US\" */\r\nexport const FAV_DEBUG_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('FAV_DEBUG_MODE');\r\n\r\n/** Token che indica se far apparire l'input delle checkbox come slider o come input nativi */\r\nexport const FAV_SLIDER_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('FAV_SLIDER_MODE');","// Angular\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from \"@angular/forms\";\r\nimport { Directive, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Direttiva utilizzata per validazioni \"required\" custom, in modo da poter dire che anche se c'è un valore selezionato, ma quel valore lo considero null \r\n * allora la validazione fallisce. Attualmente usato nell'unico punto sensato: validation-select\r\n */\r\n@Directive({\r\n selector: '[customRequired]',\r\n providers: [{ provide: NG_VALIDATORS, useExisting: CustomRequiredDirective, multi: true }]\r\n})\r\nexport class CustomRequiredDirective implements Validator {\r\n\r\n /**\r\n * Lista di valori che vengono considerati \"vuoti\" seppur presenti\r\n */\r\n @Input(\"CustomNullValues\") NullValues: string[] = [];\r\n\r\n /**\r\n * booleano in modalità stringa (\"true\" o \"false\") che indica se applicare la validazione di obbligatorietà o meno\r\n */\r\n @Input('customRequired') public customRequired: boolean;\r\n\r\n /**\r\n * @ignore\r\n */\r\n validate(c: AbstractControl): { [key: string]: any; } {\r\n // Controllo solo per custom required a true, altrimenti qualsiasi valore mi va bene\r\n if (!this.customRequired)\r\n return null;\r\n\r\n return !c.value || this.NullValues.includes(c.value) ? { required: true } : null;\r\n }\r\n}","// Angular\r\nimport { EventEmitter, Input, Output, ViewChild, Directive, ElementRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { NgModel, RequiredValidator, Validator } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { TooltipDirective } from \"ngx-bootstrap/tooltip\";\r\nimport { Subject } from \"rxjs\";\r\nimport { ChangeEvent } from \"../models/ChangeEvent\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n/**\r\n * Classe astratta base che contiene le logiche / proprietà in comune a tutti i validatori\r\n * \r\n * Nota bene: I tooltip rallentano tantissimo la pagina perché il tizio che ha fatto ngx bootstrap non è capace\r\n */\r\n@Directive()\r\nexport abstract class BaseValidation {\r\n\r\n /** @ignore Constructor */\r\n constructor(protected cdr: ChangeDetectorRef) { }\r\n\r\n /**\r\n * Per non sovrascrivere l'originale con errori che spuntano da BE\r\n */\r\n public validationFailedBind: string;\r\n\r\n /**\r\n * Per gestire il cambio di messaggi di errore\r\n */\r\n private valueOnLastValidation: string;\r\n\r\n /**\r\n * Servizio di localizzazione del Componente\r\n */\r\n protected lc: LocalizationService;\r\n\r\n /**\r\n * Variabile per tenere in memoria lo stato di submit di questo componente\r\n */\r\n protected _submitted: boolean;\r\n\r\n /**\r\n * Variabile per tenere in memoria il fatto che il componente è forzato a invalido o no\r\n */\r\n protected _forceInvalid: boolean = false;\r\n\r\n /**\r\n * Indica se il valore è obbligatorio o opzionale\r\n */\r\n public required: boolean = false;\r\n\r\n /**\r\n * Query che raccoglie il tooltip in maniera statica (solo all'inizio)\r\n */\r\n @ViewChild(TooltipDirective, { static: false }) protected tooltip: TooltipDirective;\r\n\r\n /**\r\n * Query che raccoglie il tooltip in maniera dinamica (ad ogni change detection)\r\n * \r\n * @param {TooltipDirective} comp Elemento HTML a cui è applicata la direttiva del tooltip\r\n */\r\n @ViewChild(TooltipDirective, { static: true }) set tooltip_static(comp: TooltipDirective) {\r\n if (comp) { this.tooltip = comp; }\r\n };\r\n\r\n /**\r\n * Elemento HTML rappresentante l'Input\r\n */\r\n @ViewChild('htmlInput', { static: false }) htmlInput: ElementRef;\r\n\r\n /**\r\n * Query che raccoglie l'input o direttiva che contiene il valore in maniera statica (solo all'inizio)\r\n */\r\n @ViewChild(\"baseInput\", { static: false }) baseInput: NgModel;\r\n\r\n /**\r\n * Query che raccoglie l'input o direttiva che contiene il valore in maniera dinamica (ad ogni change detection)\r\n * \r\n * @param {NgModel} comp Elemento HTML associato al ngModel del componente\r\n */\r\n @ViewChild(\"baseInput\", { static: true }) set baseInput_static(comp: NgModel) {\r\n if (comp) { this.baseInput = comp; }\r\n };\r\n\r\n /**\r\n * Subject a cui l'oggetto interno si collega per effettuare il focus dell'elemento input sottostante\r\n */\r\n @Input() FocusSubject: Subject<void>;\r\n\r\n /**\r\n * @EXPERIMENTAL\r\n */\r\n @Input() SetValidationSubject: Subject<{ fieldName: string, error: string }>;\r\n\r\n /**\r\n * Indica se di default deve valutare il messaggio di errore in base al validatore che fallisce.\r\n * \r\n * Se fallisce il required validator scriverà che l'input è obbligatorio, se invece fallisce \r\n * un eventuale pattern validator scriverà che il formato dell'input è invalido\r\n */\r\n @Input() InferErrorMessages: boolean = true;\r\n\r\n /**\r\n * Modalità in cui viene mostrato il campo, 1-1 rispetto alle definizioni di Angular Material \r\n */\r\n @Input() FieldAppearence: \"legacy\" | \"standard\" | \"fill\" | \"outline\" = \"outline\";\r\n\r\n /**\r\n * Indica se il **Placeholder** dev'essere usato come una floating label di material o solo come un placeholder standard \r\n * \r\n * Ignorata lato autocomplete, autocomplete-multi e select in quanto hanno gestioni particolari di placeholder ecc...\r\n */\r\n @Input() FloatingLabel: boolean = true;\r\n\r\n /**\r\n * Messaggio da mostrare se la validazione fallisce. \r\n * \r\n * Se questo è valorizzato, il messaggio non viene valutato in automatico nonstante **InferErrorMessages** sia **true**\r\n */\r\n @Input() validationFailed: string = \"\";\r\n\r\n /**\r\n * Indica se il componente è in sola lettura\r\n */\r\n @Input() Readonly: boolean = false;\r\n\r\n /**\r\n * Indica le dimensioni del componente\r\n */\r\n @Input() widthPx: number = null;\r\n\r\n /**\r\n * Indica se il componente è disabilitato o no (più o meno stesso concetto del readonly)\r\n */\r\n @Input() disabled: boolean = false;\r\n\r\n /**\r\n * Eventuale placeholder da mostrare al posto del valore quando il valore è nullo / vuoto\r\n */\r\n @Input() placeholder: string = \"\";\r\n\r\n /**\r\n * Classi da applicare al componente\r\n */\r\n @Input() class: string = \"\";\r\n\r\n /**\r\n * Stili da applicare al componente\r\n */\r\n @Input() style: string = \"\";\r\n\r\n /**\r\n * Pattern di validazione dell'input\r\n */\r\n @Input() pattern: string = \"\";\r\n\r\n /**\r\n * Indica di non validare il componente\r\n */\r\n @Input() noValidate: boolean = false;\r\n\r\n /**\r\n * Indica se abilitare o meno l'autocompletamento di default del browser\r\n */\r\n @Input() autocomplete: string = \"off\";\r\n\r\n /**\r\n * Id dell'input. È importante impostarlo soprattutto se l'interfaccia generata dev'essere testata\r\n */\r\n @Input() id: string = \"\";\r\n\r\n /**\r\n * Evento che sostituisce l'ngModelChange facendolo funzionare in maniera un po' più consistente\r\n */\r\n @Output() inputChange: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /**\r\n * Evento che indica il focus avvenuto su un controllo\r\n */\r\n @Output() inputFocus: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /**\r\n * Evento che indica la finalizzazione del valore avvenuta su un controllo\r\n */\r\n @Output() inputFinalized: EventEmitter<any> = new EventEmitter<any>();\r\n \r\n /**\r\n * Imposta il componente come \"submitted\" scatenandone le validazioni ed eventualmente la visualizzazione del tooltip di errore\r\n * \r\n * @param {boolean} val **true** se si vuole impostare questo controllo come submitted, **false** altrimenti\r\n */\r\n @Input(\"submitted\") set submitted(val: boolean) {\r\n this._submitted = val;\r\n if (!this.baseInput)\r\n return;\r\n\r\n if (val)\r\n this.baseInput.control.markAsTouched();\r\n\r\n if (this.baseInput.control.status === \"INVALID\" && val)\r\n this.showTooltipWithMessage();\r\n else\r\n this.tooltip.hide();\r\n }\r\n\r\n /**\r\n * Imposta il componente come \"invalid\" a prescindere dai validatori\r\n */\r\n @Input() set forceInvalid(val: boolean) {\r\n this._forceInvalid = val;\r\n\r\n if (val)\r\n setTimeout(() => {\r\n this.baseInput.control.setErrors({ forcedtoinvalid: true });\r\n this.baseInput.control.markAsTouched();\r\n this.baseInput.control.markAsDirty();\r\n this.cdr.detectChanges();\r\n });\r\n else\r\n setTimeout(() => {\r\n this.baseInput.control.setErrors({ forcedtoinvalid: null });\r\n this.baseInput.control.updateValueAndValidity();\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (this.SetValidationSubject) {\r\n this.SetValidationSubject.pipe(takeUntil(this.destroyed$)).subscribe(v => {\r\n if (v.fieldName + \"_internal\" == this.id) {\r\n this.forceInvalid = true;\r\n this.showTooltipWithMessage(v.error);\r\n }\r\n })\r\n } \r\n }\r\n\r\n protected checkRequiredness(_validators: Validator[]) {\r\n if (_validators && _validators.some(elem => elem instanceof RequiredValidator && (elem.required === true || (!elem.required && elem.required !== false))))\r\n this.required = true;\r\n }\r\n\r\n destroyed$: Subject<void> = new Subject<void>();\r\n ngOnDestroy(){\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n /**\r\n * Helper che controlla se il tooltip deve essere mostrato o meno, \r\n * richiamato direttamente dall'HTML dei componenti\r\n */\r\n public checkTooltip() {\r\n if ((this.baseInput.invalid && this.baseInput.touched))\r\n this.showTooltipWithMessage();\r\n }\r\n\r\n /**\r\n * Helper che calcola il messaggio da mostrare nel tooltip che andrà ad aprire\r\n */\r\n private showTooltipWithMessage(messageOverride: string = null) {\r\n\r\n // Aggiorno il messaggio di validazione solo se il valore è diverso dall'ultimo valore ricevuto\r\n if (this.valueOnLastValidation != this.baseInput.value) {\r\n this.validationFailedBind = messageOverride || this.validationFailed || (this.InferErrorMessages ? this.inferMessage() : \"\");\r\n this.valueOnLastValidation = this.baseInput.value;\r\n }\r\n\r\n if (this.validationFailedBind)\r\n this.tooltip.show();\r\n }\r\n\r\n /**\r\n * Calcola il messaggio da mostrare in base al valore.\r\n * \r\n * Entrare in questa funzione significa che lo stato di validazione è fallito, per questo si comporta semplicemente in maniera esclusiva, e cioè:\r\n * \r\n * 1) Se ero required e sono senza valore --> Input richiesto\r\n * \r\n * 2) Altrimenti se ho un valore --> Di sicuro il formato è errato\r\n */\r\n private inferMessage(): string {\r\n if (this.required && !this.baseInput.value)\r\n return this.lc.loc(\"Required Input\")\r\n\r\n if (this.baseInput.value)\r\n return this.lc.loc(\"Invalid Input Format\")\r\n }\r\n\r\n /**\r\n * Forza la chiusura del tooltip\r\n */\r\n closeTooltip() {\r\n this.tooltip.hide();\r\n }\r\n\r\n /**\r\n * Controlla se il controllo è valido e in caso lo sia chiude il tooltip\r\n */\r\n protected CheckValidity() {\r\n if (!this.baseInput.statusChanges)\r\n return;\r\n\r\n this.baseInput.statusChanges.subscribe(event => {\r\n if (event === \"VALID\")\r\n this.tooltip.hide();\r\n });\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n protected propagateChange = (_: any) => { };\r\n\r\n /**\r\n * L'emit del focus dell'elemento\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n onFocus(toEmit) {\r\n this.inputFocus.emit(toEmit);\r\n }\r\n\r\n /**\r\n * Finalizzazione Input\r\n */\r\n onFinalize() {\r\n this.inputFinalized.emit();\r\n }\r\n\r\n /**\r\n * Subscription alle richieste di focus\r\n */\r\n observable: any;\r\n\r\n /**\r\n * Registra il Subject per ricevere le richieste di Focus dall'esterno\r\n */\r\n registerFocusRequest(): any {\r\n if(!this.FocusSubject)\r\n return;\r\n this.observable = this.FocusSubject.subscribe(t => {\r\n this.htmlInput.nativeElement.focus();\r\n });\r\n }\r\n\r\n /**\r\n * Deregistra il Subject delle richieste di focus\r\n */\r\n deregisterFocusRequest() {\r\n if (this.observable)\r\n this.observable.unsubscribe();\r\n }\r\n}","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione in comune con tutti i Componenti di validazione\r\n */\r\n@Injectable()\r\nexport class BaseValidationLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n super.set(\"en->it\", \"Required Input\", [\"Input Richiesto\"]);\r\n super.set(\"en->it\", \"Invalid Input Format\", [\"Formato Input Invalido\"]);\r\n super.set(\"en->it\", \"Elements selected\", [\"Elementi selezionati\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Inject, Injector, Input, Optional, Output, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport {BaseValidation} from '../base-validation';\r\nimport {BaseValidationLoc} from '../base-validation.loc';\r\n\r\nimport { Subscription } from \"rxjs\";\r\n\r\n/**\r\n * Componente di validaizone per gli input a selezione singola\r\n */\r\n@Component({\r\n selector: \"val-select\",\r\n templateUrl: \"validation-select.component.html\",\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationSelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class ValidationSelectComponent extends BaseValidation implements ControlValueAccessor {\r\n \r\n /**\r\n * valore del campo vuoto della select\r\n */\r\n @Input() public emptyFieldValue = \"-2000\";\r\n \r\n /**\r\n * Valore del placeholder\r\n */\r\n @Input() public placeHolderValue = \"-1000\";\r\n \r\n /**\r\n * Per i componenti non obbligatori indica se fornire un \"valore vuoto\"\r\n */\r\n @Input() public emptyValue = true;\r\n\r\n /**\r\n * Indica se mostrare o nascondere il simboletto di validazione (Tic verde o Croce rossa)\r\n */\r\n @Input() public showValidationSymbol: boolean = true;\r\n\r\n /**\r\n * Contenuto della label Floattante Material-Style\r\n */\r\n @Input() public label: string = \"\";\r\n\r\n /**\r\n * Evento richiamato quando si perde il focus sull'input di inserimento\r\n */\r\n @Output() public onBlur: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n /**\r\n * Controllo esposto ottenuto tramite injector\r\n */\r\n public parentControl: UntypedFormControl;\r\n\r\n /**\r\n * Valore del modello rappresentato dal componente\r\n */\r\n public value: string;\r\n\r\n /**\r\n * Subscription del tootltip da ripulire alla distruzione del componente\r\n */\r\n private tooltipSubscription: Subscription;\r\n\r\n /**\r\n * @ignore \r\n */\r\n constructor(@Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, cdr: ChangeDetectorRef, protected lc: LocalizationService) {\r\n super(cdr);\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n this.deregisterFocusRequest();\r\n if (this.tooltipSubscription) this.tooltipSubscription.unsubscribe();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngAfterViewInit() {\r\n this.postBinding();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n postBinding() {\r\n // Eredito i validatori\r\n if (!this.noValidate) {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n // se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n\r\n // faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => {\r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n private onTouched = () => { }; //placeholder on touched function\r\n\r\n /**\r\n * @ignore \r\n */\r\n writeValue(value: any): void {\r\n this.value = value;\r\n this.propagateChange(value);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n onModelChange(toEmit) {\r\n this.writeValue(toEmit);\r\n this.inputChange.emit(toEmit);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\r\n <select matNativeControl\r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n name=\"val-select\"\r\n class=\"form-control\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n id=\"{{id}}\"\r\n [customRequired]=\"required\"\r\n [CustomNullValues]=\"[placeHolderValue, emptyFieldValue]\"\r\n [(ngModel)]=\"value\"\r\n [tooltip]=\"tolTemplate\"\r\n [class.checking-combo]=\"!noValidate\"\r\n [class.app-option-placeholder]=\"baseInput.value === placeHolderValue\"\r\n [class.no-bg-img]=\"!showValidationSymbol\"\r\n [disabled]=\"Readonly\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (blur)=\"closeTooltip(); onBlur.emit(true);\"\r\n (ngModelChange)=\"onModelChange($event); onFinalize()\">\r\n\r\n <option *ngIf=\"placeholder\" [value]=\"placeHolderValue\" disabled selected hidden>{{placeholder}}</option>\r\n <option *ngIf=\"required == false && emptyValue\" [value]=\"emptyFieldValue\"></option>\r\n <ng-content></ng-content>\r\n </select>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Inject, Injector, Input, Optional, ViewEncapsulation} from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidation } from \"../base-validation\";\r\nimport { BaseValidationLoc } from \"../base-validation.loc\"\r\nimport { DateService } from '@esfaenza/extensions';\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\ndeclare var dayjs: any;\r\n\r\n/**\r\n * Componente di validaizone per gli input di tipo data\r\n */\r\n@Component({\r\n selector: \"val-date\",\r\n templateUrl: \"validation-date.component.html\",\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: [\"../validation-style.scss\"],\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationDateComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class ValidationDateComponent extends BaseValidation implements ControlValueAccessor {\r\n \r\n /**\r\n * Usato solo per stampare il placeholder qualora l'Input **placeholder** non fosse valorizzato\r\n */\r\n public _format: string;\r\n\r\n /**\r\n * Modello collegato all'input\r\n */\r\n public value: Date;\r\n\r\n /**\r\n * Controllo esposto ottenuto tramite injector\r\n */\r\n private parentControl: UntypedFormControl;\r\n\r\n /**\r\n * Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs\r\n */\r\n @Input() public useJsDates: boolean = false;\r\n\r\n /**\r\n * @ignore \r\n */\r\n constructor(cdr : ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, protected lc: LocalizationService, private dateExts: DateService) {\r\n super(cdr);\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n\r\n this._format = this.lc.token(\"getSmallDateDisplayFormat\");\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this.deregisterFocusRequest();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngAfterViewInit() {\r\n this.postBinding();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n postBinding() {\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n else {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n // //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => { //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n private onTouched = () => { };\r\n\r\n /**\r\n * @ignore \r\n */\r\n writeValue(value: any): void {\r\n if (!value) {\r\n this.value = null;\r\n if (this.baseInput)\r\n this.baseInput.reset();\r\n } else {\r\n var date = null;\r\n if (this.useJsDates) {\r\n date = this.dateExts.getDateConvertion(value);\r\n if (date) {\r\n this.propagateChange(date.toDate());\r\n this.inputChange.emit(date.toDate());\r\n }\r\n }\r\n else\r\n date = dayjs(value, this.lc.token(\"getSmallDateFormat\"));\r\n\r\n this.value = date;\r\n }\r\n\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di, eventualmente, aggiustare il valore da propagare ed emetterlo\r\n * \r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n outputValue(toEmit: any): void {\r\n let value = toEmit.value;\r\n let propagateValue: any;\r\n\r\n if (!value)\r\n propagateValue = null;\r\n else if (!this.useJsDates)\r\n propagateValue = value.format(this.lc.token(\"getSmallDateFormat\"));\r\n else {\r\n if (value && value.isValid())\r\n propagateValue = value.hour(0).minute(0).second(0).toDate();\r\n else\r\n propagateValue = null;\r\n }\r\n this.propagateChange(propagateValue);\r\n this.inputChange.emit(propagateValue);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n <input matInput\r\n [matDatepicker]=\"datepicker\"\r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n name=\"val-date\"\r\n class=\"form-control {{class}}\"\r\n autocomplete=\"{{autocomplete}}\"\r\n id=\"{{id}}\"\r\n (click)=\"onFocus($event)\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate\"\r\n [tooltip]=\"tolTemplate\"\r\n [placeholder]=\"placeholder ? (FloatingLabel ? undefined : placeholder) : _format\"\r\n [disabled]=\"Readonly || disabled\"\r\n [isDisabled]=\"Readonly || disabled\"\r\n (dateChange)=\"outputValue($event); onFinalize();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip();\"\r\n />\r\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #datepicker></mat-datepicker>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, forwardRef, Inject, Injector, Input, Optional, SimpleChanges, ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidation } from \"../base-validation\";\r\nimport { BaseValidationLoc } from '../base-validation.loc';\r\nimport { Subscription } from \"rxjs\";\r\n\r\n/**\r\n * Componente di validaizone per gli input a semplice casella di testo\r\n */\r\n@Component({\r\n selector: \"val-input\",\r\n templateUrl: \"validation-input.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationInputComponent),\r\n multi: true\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\"]\r\n})\r\nexport class ValidationInputComponent extends BaseValidation implements ControlValueAccessor {\r\n\r\n /** \r\n * Permette di scrivere o meno nel campo di Input. Si differenzia dal Readonly in quanto fisicamente l'Input è scrivibile e vengono mantenuti i temi della validazione\r\n * ma interagire direttamente con la casella di Input per l'utente non è possibile\r\n */\r\n @Input() Frozen: boolean = false;\r\n\r\n /**\r\n * Indica se questo Comopnente deve rappresentare un oggetto di Input di tipo \"Password\"\r\n */\r\n @Input() public Password: boolean = false;\r\n\r\n /**\r\n * Indica se deve mostrare un indicazione di warning nel suffisso\r\n */\r\n @Input() public showWarning: boolean = false;\r\n\r\n /**\r\n * Titolo del Warning da impostare se **showWarning** è impostato a **true**\r\n */\r\n @Input() public warningTitle: string;\r\n\r\n /**\r\n * Classe del warning eventualmente modificabile. \r\n * \r\n * Default: \"fa fa-warning\"\r\n */\r\n @Input() public warningClass: string = \"fa fa-warning\";\r\n\r\n /**\r\n * Valore del modello rappresentato da questo input\r\n */\r\n @Input(\"value\") public value: any;\r\n\r\n /**\r\n * Contiene la proiezione del suffisso qualora fosse fornita\r\n */\r\n @ContentChild(\"suffix_internal\", { static: false }) suffix_internal;\r\n\r\n /**\r\n * Contiene la proiezione del prefisso qualora fosse fornita\r\n */\r\n @ContentChild(\"prefix_internal\", { static: false }) prefix_internal;\r\n\r\n /**\r\n * Subscription del tooltip da ripulire al destroy del componente\r\n */\r\n private tooltipSubscription: Subscription;\r\n\r\n /**\r\n * Controllo esposto ottenuto tramite injector\r\n */\r\n private parentControl: UntypedFormControl;\r\n\r\n /**\r\n * Identifica se il testo di un componente di tipo \"password\" dev'essere visualizzato o meno\r\n */\r\n public passShown: boolean = false;\r\n\r\n /**\r\n * Tipo del componente, può essere \"text\" o \"password\" e viene impostato automaticamente dall'Input **Password**\r\n */\r\n public type: string = \"text\";\r\n\r\n /**\r\n * Indicazione se il componente ha o meno un suffisso. \r\n * \r\n * Valorizzato a **true** solo se viene trovata una proiezione su **suffix_internal** o se l'Input **showWarning** viene impostato a **true**\r\n */\r\n public HasSuffix: boolean = false;\r\n\r\n /**\r\n * Indicazione se il componente ha o meno un prefisso. \r\n * \r\n * Valorizzato a **true** solo se viene trovata una proiezione su **prefix_internal**\r\n */\r\n public HasPrefix: boolean = false;\r\n\r\n /**\r\n * @ignore \r\n */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, protected lc: LocalizationService) {\r\n super(cdr);\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n\r\n if (this.Password)\r\n this.type = \"password\";\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n this.deregisterFocusRequest();\r\n if (this.tooltipSubscription) this.tooltipSubscription.unsubscribe();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngAfterViewInit() {\r\n this.HasSuffix = !!this.suffix_internal || this.showWarning;\r\n this.HasPrefix = !!this.prefix_internal;\r\n\r\n this.postBinding();\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n const newShowWarnings = changes[\"showWarning\"];\r\n if (newShowWarnings)\r\n this.HasSuffix = !!this.suffix_internal || this.showWarning;\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n postBinding() {\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n // Se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n else {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n // Faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => {\r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n private onTouched = () => { };\r\n\r\n /**\r\n * @ignore \r\n */\r\n writeValue(value: any): void {\r\n this.value = value;\r\n this.propagateChange(value);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n onModelChange(toEmit) {\r\n this.writeValue(toEmit);\r\n this.inputChange.emit(toEmit);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n}","<mat-form-field floatLabel=\"never\" appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label [class.app-margin-left-25]=\"HasPrefix\" *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n <ng-container *ngIf=\"HasPrefix\">\r\n <ng-container *ngTemplateOutlet=\"prefix_internal\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Bisogna fixare un po' l'uso di readonly, disabled, frozen cazzi e mazzi -->\r\n <input matInput\r\n #baseInput='ngModel'\r\n #htmlInput\r\n type=\"{{type}}\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n autocomplete=\"{{autocomplete}}\"\r\n name=\"{{id}}\"\r\n class=\"form-control {{class}}\"\r\n id=\"{{id}}\"\r\n [class.app-margin-left-25]=\"HasPrefix\"\r\n [class.mat-input-with-suffix]=\"HasSuffix || Password || showWarning\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate && !showWarning\"\r\n [tooltip]=\"tolTemplate\"\r\n [readonly]=\"Frozen\"\r\n [disabled]=\"Readonly || disabled || Frozen\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip(); onFinalize();\"\r\n >\r\n <ng-container *ngIf=\"HasSuffix || Password || showWarning\">\r\n <ng-container *ngIf=\"!Password && !showWarning\">\r\n <ng-container *ngTemplateOutlet=\"suffix_internal\"></ng-container>\r\n </ng-container>\r\n\r\n <span class=\"form-input-suffix\" *ngIf=\"Password || showWarning\">\r\n <ng-container *ngIf=\"Password\" matSuffix>\r\n <a *ngIf=\"passShown\" class=\"fa fa-eye-slash app-fs-16 app-pointer\" (click)=\"type = 'password'; passShown = !passShown; $event.preventDefault()\"></a>\r\n <a *ngIf=\"!passShown\" class=\"fa fa-eye app-fs-16 app-pointer\" (click)=\"type = 'text'; passShown = !passShown; $event.preventDefault()\"></a>\r\n </ng-container>\r\n <ng-container *ngIf=\"showWarning\" matSuffix>\r\n <span title=\"{{warningTitle}}\" class=\"{{warningClass}} text-warning app-fs-16\"></span>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n</mat-form-field>\r\n\r\n<!-- Questo compoennte nascosto serve solamente per assicurarsi che angular carichi gli stili dei mat-button che altrimenti non caricherebbe... dunno why -->\r\n<div hidden><mat-datepicker-toggle></mat-datepicker-toggle></div>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Inject, Injector, Input, Optional, ViewEncapsulation } from \"@angular/core\";\r\nimport { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport {BaseValidationLoc} from '../base-validation.loc';\r\nimport {ValidationInputComponent} from '../validation-input/validation-input.component';\r\n\r\n/**\r\n * Componente di validaizone per gli input con maschera di inserimento numerica\r\n */\r\n@Component({\r\n selector: \"val-currency\",\r\n templateUrl: \"validation-currency.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationCurrencyComponent),\r\n multi: true\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\", \"validation-currency.component.scss\"]\r\n})\r\nexport class ValidationCurrencyComponent extends ValidationInputComponent {\r\n\r\n /**\r\n * Opzioni direttamente bindate alla direttiva **currencyMask**\r\n */\r\n @Input() CurrencyOptions: any;\r\n\r\n /**\r\n * @ignore \r\n */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<any>, injector: Injector, protected lc: LocalizationService) {\r\n super(cdr, validators, asyncValidators, injector, lc);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n this.registerFocusRequest();\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.deregisterFocusRequest();\r\n }\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n <input #baseInput='ngModel'\r\n #htmlInput\r\n currencyMask\r\n matInput\r\n [readonly]=\"Readonly\"\r\n [options]='CurrencyOptions'\r\n [(ngModel)]=\"value\"\r\n name=\"val-input\"\r\n id=\"{{id}}\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip(); onFinalize();\"\r\n class=\"form-control {{class}}\"\r\n [class.checking-field]=\"!noValidate\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n type=\"{{type}}\"\r\n [tooltip]=\"tolTemplate\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n autocomplete=\"{{autocomplete}}\" />\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div>\r\n <span class=\"close-button pull-right\" (click)=\"closeTooltip()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </span>\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Inject, Injector, Input, Optional, ViewEncapsulation } from \"@angular/core\";\r\nimport { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidationLoc } from \"../base-validation.loc\";\r\nimport { ValidationInputComponent } from \"../validation-input/validation-input.component\";\r\n\r\n/**\r\n * Componente di validaizone per gli input ad area di testo\r\n */\r\n@Component({\r\n selector: \"val-textarea\",\r\n templateUrl: \"validation-text-area.component.html\",\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationTextAreaComponent),\r\n multi: true\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ValidationTextAreaComponent extends ValidationInputComponent {\r\n\r\n /**\r\n * Righe da mostrare di default per l'area di inserimento\r\n */\r\n @Input() rows: number = 2;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<any>, injector: Injector, protected lc: LocalizationService) {\r\n super(cdr, validators, asyncValidators, injector, lc);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n this.registerFocusRequest();\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n \r\n this.deregisterFocusRequest();\r\n }\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-full-height mat-no-border-top mat-height-auto\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n <textarea matInput\r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n [(ngModel)]=\"value\"\r\n name=\"val-textarea\"\r\n triggers=\"\"\r\n class=\"app-no-resize form-control {{class}}\"\r\n id=\"{{id}}\"\r\n [class.checking-field]=\"!noValidate\"\r\n rows=\"{{rows}}\"\r\n [tooltip]=\"tolTemplate\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\r\n placement=\"top\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip(); onFinalize();\"\r\n (ngModelChange)=\"onModelChange($event)\">\r\n </textarea>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Inject, Injector, Input, Optional, ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidation } from \"../base-validation\";\r\nimport { BaseValidationLoc } from \"../base-validation.loc\"\r\nimport { DateService } from '@esfaenza/extensions';\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\ndeclare var dayjs: any;\r\n\r\n/**\r\n * Componente di validaizone per gli input di tipo data-ora\r\n */\r\n@Component({\r\n selector: \"val-datetime\",\r\n templateUrl: \"validation-datetime.component.html\",\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: [\"../validation-style.scss\"],\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationDateTimeComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class ValidationDateTimeComponent extends BaseValidation implements ControlValueAccessor {\r\n\r\n /**\r\n * Usato solo per stampare il placeholder qualora l'Input **placeholder** non fosse valorizzato\r\n */\r\n public _format: string;\r\n\r\n /**\r\n * Modello collegato all'input\r\n */\r\n public value: Date;\r\n\r\n /**\r\n * Controllo esposto ottenuto tramite injector\r\n */\r\n private parentControl: UntypedFormControl;\r\n\r\n /**\r\n * Proprietà dell'elemento di selezione dell'orario. Mostra o nasconde gli spinner\r\n * \r\n * Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai\r\n */\r\n public showSpinners = true;\r\n\r\n /**\r\n * Proprietà dell'elemento di selezione dell'orario. Mostra o nasconde i secondi\r\n * \r\n * Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai\r\n */\r\n public showSeconds = true;\r\n\r\n /**\r\n * Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per le ore\r\n * \r\n * Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai\r\n */\r\n public stepHour = 1;\r\n\r\n /**\r\n * Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per i minuti\r\n * \r\n * Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai\r\n */\r\n public stepMinute = 1;\r\n\r\n /**\r\n * Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per i secondi\r\n * \r\n * Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai\r\n */\r\n public stepSecond = 1;\r\n\r\n /**\r\n * Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs\r\n */\r\n @Input() public useJsDates: boolean = false;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, protected lc: LocalizationService, private dateExts: DateService) {\r\n super(cdr);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n\r\n this._format = this.lc.token(\"getSmallDateDisplayFormat\");\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnDestroy(){\r\n super.ngOnDestroy();\r\n this.deregisterFocusRequest();\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngAfterViewInit() {\r\n this.postBinding();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n postBinding() {\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n // Se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n else {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n // Faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => { \r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n private onTouched = () => { };\r\n\r\n /**\r\n * @ignore \r\n */\r\n writeValue(value: any): void {\r\n if (!value) {\r\n this.value = null;\r\n if (this.baseInput)\r\n this.baseInput.reset();\r\n } else {\r\n var date = null;\r\n if (this.useJsDates) {\r\n date = this.dateExts.getDateConvertion(value)\r\n this.propagateChange(date);\r\n this.inputChange.emit(date);\r\n }\r\n else\r\n date = dayjs(value, this.lc.token(\"getSmallDateFormat\") + \" HH:mm:ss\");\r\n\r\n this.value = date;\r\n }\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di, eventualmente, aggiustare il valore da propagare ed emetterlo\r\n * \r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n outputValue(toEmit: any): void {\r\n let value = toEmit.value;\r\n let propagateValue: any;\r\n\r\n if (!value)\r\n propagateValue = null;\r\n else if (!this.useJsDates)\r\n propagateValue = value.format(this.lc.token(\"getSmallDateFormat\") + \" HH:mm:ss\");\r\n else {\r\n if (value && value.isValid())\r\n propagateValue = value.toDate();\r\n else\r\n propagateValue = null;\r\n }\r\n this.propagateChange(propagateValue);\r\n this.inputChange.emit(propagateValue);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n\r\n <input matInput \r\n [ngxMatDatetimePicker]=\"datepicker\" \r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n name=\"val-date\"\r\n id=\"{{id}}\"\r\n (click)=\"onFocus($event)\"\r\n class=\"form-control {{class}}\"\r\n autocomplete=\"{{autocomplete}}\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate\"\r\n [tooltip]=\"tolTemplate\"\r\n [placeholder]=\"placeholder ? '' : _format\"\r\n [disabled]=\"Readonly || disabled\"\r\n [isDisabled]=\"Readonly || disabled\"\r\n (dateChange)=\"outputValue($event); onFinalize();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip();\"\r\n />\r\n\r\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n\r\n <ngx-mat-datetime-picker #datepicker \r\n [showSpinners]=\"showSpinners\" \r\n [showSeconds]=\"showSeconds\" \r\n [stepHour]=\"stepHour\" \r\n [stepMinute]=\"stepMinute\" \r\n [stepSecond]=\"stepSecond\" \r\n [touchUi]=\"false\" \r\n [color]=\"'primary'\">\r\n </ngx-mat-datetime-picker>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Inject, Injector, Input, Optional, Output, ViewEncapsulation } from \"@angular/core\";\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidation } from \"../base-validation\";\r\nimport { BaseValidationLoc } from '../base-validation.loc';\r\nimport { Subscription } from \"rxjs\";\r\n\r\n/**\r\n * Componente di validaizone per gli input di Autocompletamento\r\n */\r\n@Component({\r\n selector: \"val-autocomplete\",\r\n templateUrl: \"validation-autocomplete.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationAutocompleteComponent),\r\n multi: true\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\"]\r\n})\r\nexport class ValidationAutocompleteComponent extends BaseValidation implements ControlValueAccessor {\r\n\r\n\r\n /** Sorgente da cui scegliere valori filtrata in base a quello che ha scritto l'utente */\r\n @Input() FilteredSource: { id: string, description: string }[] = [];\r\n\r\n /** Valore del modello */\r\n @Input() public value: any;\r\n\r\n /** Contenuto della label Floattante Material-Style */\r\n @Input() public label: string = \"\";\r\n\r\n /** Evento che indica l'opzione selezionata dal componente. Il valore finale della selezione dovrà essere questo */\r\n @Output() optionChange: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /** Subscription del tootltip da ripulire alla distruzione del componente */\r\n private tooltipSubscription: Subscription;\r\n\r\n /** Controllo esposto ottenuto tramite injector */\r\n private parentControl: UntypedFormControl;\r\n\r\n /** @ignore */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, protected lc: LocalizationService) {\r\n super(cdr);\r\n }\r\n\r\n /** @ignore */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n }\r\n\r\n /** @ignore */\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this.deregisterFocusRequest();\r\n if (this.tooltipSubscription) this.tooltipSubscription.unsubscribe();\r\n }\r\n\r\n /** @ignore */\r\n ngAfterViewInit() {\r\n this.postBinding();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n private postBinding() {\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n //se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n else {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => { //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private onTouched = () => { }; //placeholder on touched function\r\n\r\n /** @ignore */\r\n writeValue(value: any): void {\r\n var val = value && this.FilteredSource ? this.FilteredSource.find(t => t.id == value) : null;\r\n if(val) this.optionChange.emit(val.id);\r\n this.propagateChange(val ? val.id : value);\r\n this.value = val ? val.description : value;\r\n }\r\n\r\n /**\r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n onModelChange(toEmit) {\r\n this.writeValue(toEmit);\r\n this.inputChange.emit(toEmit);\r\n this.onTouched();\r\n }\r\n\r\n /** @ignore */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /** @ignore */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n}","<!-- Val-Model: {{value}} -->\r\n<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\r\n <input matInput\r\n #htmlInput\r\n #baseInput='ngModel'\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n placeholder=\"{{placeholder}}\"\r\n [matAutocomplete]=\"auto\"\r\n name=\"val-input\"\r\n id=\"{{id}}\"\r\n class=\"form-control {{class}}\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate\"\r\n [tooltip]=\"tolTemplate\"\r\n [disabled]=\"Readonly || disabled\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip(); onFinalize();\">\r\n\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of FilteredSource\" [value]=\"option.id\">\r\n {{option.description}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, Inject, Injector, Input, Optional, Output, SimpleChanges, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\nimport { MatLegacyAutocompleteTrigger as MatAutocompleteTrigger } from \"@angular/material/legacy-autocomplete\";\r\nimport { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidation } from \"../base-validation\";\r\nimport { BaseValidationLoc } from '../base-validation.loc';\r\nimport { Subscription } from \"rxjs\";\r\n\r\n/** Componente di validaizone per gli input di Autocompletamento */\r\n@Component({\r\n selector: \"val-autocomplete-multi\",\r\n templateUrl: \"validation-autocomplete-multi.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationAutocompleteMultiComponent),\r\n multi: true\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\", \"./validation-autocomplete-multi.component.scss\"]\r\n})\r\nexport class ValidationAutocompleteMultiComponent extends BaseValidation implements ControlValueAccessor {\r\n\r\n public displayFn = (): string => '';\r\n\r\n /** Numero massimo di chip visualizzate */\r\n @Input() ChipThreshold: number = 10;\r\n\r\n /** Sorgente da cui scegliere valori filtrata in base a quello che ha scritto l'utente */\r\n @Input() FilteredSource: { id: string, description: string }[] = [];\r\n\r\n /** Indica il fatto che non c'è una Source da cui scegliere */\r\n @Input() public UnboundMode: boolean;\r\n\r\n /** Valore del modello */\r\n @Input() public value: any;\r\n\r\n /** Contenuto della label Floattante Material-Style */\r\n @Input() public label: string = \"\";\r\n\r\n /** Definisce che ad ogni selezione deve chiudere la tendina */\r\n @Input() public HideChoicesOnSelection: boolean = false;\r\n\r\n /** Evento che indica l'opzione selezionata dal componente. Il valore finale della selezione dovrà essere questo */\r\n @Output() optionChange: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /** Trigger dell'autocomplete per tenerlo aperto */\r\n @ViewChild(MatAutocompleteTrigger) autoTrigger: MatAutocompleteTrigger;\r\n \r\n /** Subscription del tootltip da ripulire alla distruzione del componente */\r\n private tooltipSubscription: Subscription;\r\n\r\n /** Controllo esposto ottenuto tramite injector */\r\n private parentControl: UntypedFormControl;\r\n\r\n /** Chiavi su cui dividere gli input del mat chip */\r\n public separatorKeysCodes: number[];\r\n\r\n /** Aggiunge una chip o meno su blur */\r\n public addOnBlur: boolean;\r\n\r\n /** Elementi selezionati */\r\n public selectData: { id: string, description: string }[] = [];\r\n\r\n /** @ignore */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, public lc: LocalizationService) {\r\n super(cdr);\r\n }\r\n\r\n /** @ignore */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n\r\n if (this.UnboundMode) {\r\n this.separatorKeysCodes = [ENTER, COMMA];\r\n this.addOnBlur = true;\r\n }\r\n else {\r\n this.separatorKeysCodes = [ENTER];\r\n this.addOnBlur = false;\r\n }\r\n }\r\n\r\n /** @ignore */\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this.deregisterFocusRequest();\r\n if (this.tooltipSubscription) this.tooltipSubscription.unsubscribe();\r\n }\r\n\r\n /** @ignore */\r\n ngAfterViewInit() {\r\n this.postBinding();\r\n }\r\n\r\n /** In caso arrivi una nuova sorgente devo reimpostare lo stato di selezione con quello attuale */\r\n public ngOnChanges(changes: SimpleChanges) {\r\n let newSource = changes[\"FilteredSource\"];\r\n if (!newSource || newSource.firstChange)\r\n return;\r\n\r\n for (let i = 0; i < this.FilteredSource.length; i++) {\r\n let item = this.FilteredSource[i];\r\n (<any>item).selected = this.selectData.find(t => t.id == item.id)\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n private postBinding() {\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n //se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n else {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => { //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private onTouched = () => { }; //placeholder on touched function\r\n\r\n /** @ignore */\r\n writeValue(value: any, finalValue: boolean = false): void {\r\n var val = value && this.FilteredSource ? this.FilteredSource.find(t => t.id == value) : null;\r\n if(finalValue) this.optionChange.emit(value);\r\n this.propagateChange(val ? val.id : value);\r\n this.value = val ? val.description : value;\r\n }\r\n\r\n /**\r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n onModelChange(toEmit, finalValue: boolean = false) {\r\n this.writeValue(toEmit, finalValue);\r\n if(!finalValue)\r\n this.inputChange.emit(toEmit);\r\n this.onTouched();\r\n }\r\n\r\n /** @ignore */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /** @ignore */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n addWhenUnbound(event: any) {\r\n let input = event.input;\r\n let toAdd = event.value;\r\n\r\n if (!this.value) this.value = [];\r\n\r\n if ((toAdd || '').trim()) {\r\n let array = toAdd.split(/[\\s,;]+/).filter(f => f != null && f != \"\" && f != undefined);\r\n array = array.map(item => item.replace(',', '').replace(';', '').trim());\r\n\r\n array.forEach(a => {\r\n this.toggleSelection({id: a, description: a});\r\n })\r\n\r\n this.value = [...this.value, ...array];\r\n this.propagateChange(this.value);\r\n }\r\n if (input) { input.value = ''; }\r\n }\r\n\r\n /** Rimuove un elemento selezionato */\r\n public removeChip(data: { id: string, description: string }): void {\r\n if (!data) {\r\n this.selectData = [];\r\n if(this.FilteredSource)\r\n this.FilteredSource.forEach(data => (<any>data).selected = false);\r\n this.onModelChange(\"\", true);\r\n this.onFinalize();\r\n }\r\n else\r\n this.toggleSelection(data);\r\n };\r\n\r\n /** Seleziona o deseleziona un oggetto */\r\n public toggleSelection(data: { id: string, description: string }): void {\r\n (<any>data).selected = !(<any>data).selected;\r\n\r\n if ((<any>data).selected === true) {\r\n this.selectData.push(data);\r\n } else {\r\n const i = this.selectData.findIndex(value => value.id === data.id);\r\n this.selectData.splice(i, 1);\r\n }\r\n this.onModelChange(this.selectData.map(t => t.id).join(','), true);\r\n if (this.HideChoicesOnSelection)\r\n this.htmlInput.nativeElement.value = \"\";\r\n else {\r\n if (!this.UnboundMode) {\r\n this.autoTrigger.closePanel();\r\n requestAnimationFrame(() => {\r\n this.autoTrigger.openPanel();\r\n });\r\n }\r\n }\r\n this.onFinalize();\r\n };\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\r\n <mat-chip-list #chipList>\r\n <ng-container *ngIf=\"selectData.length < ChipThreshold\" >\r\n <mat-chip *ngFor=\"let select of selectData\" class=\"cardinal-colors\" (click)=\"!(Readonly || disabled) && removeChip(select)\">\r\n {{ select.description }}\r\n <mat-icon class=\"mat-chip-remove\">cancel</mat-icon>\r\n </mat-chip>\r\n </ng-container>\r\n\r\n <mat-chip *ngIf=\"selectData.length >= ChipThreshold\" class=\"cardinal-colors\" (click)=\"!(Readonly || disabled) && removeChip(null)\">\r\n {{ selectData.length }} {{ 'Elements selected' | localize: lc }}\r\n <mat-icon class=\"mat-chip-remove\">cancel</mat-icon>\r\n </mat-chip>\r\n\r\n <input matInput\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n #htmlInput\r\n #baseInput='ngModel'\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n [placeholder]=\"placeholder\"\r\n [matAutocomplete]=\"auto\"\r\n name=\"val-input\"\r\n id=\"{{id}}\"\r\n [(ngModel)]=\"value\"\r\n [tooltip]=\"tolTemplate\"\r\n [disabled]=\"Readonly || disabled\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (matChipInputTokenEnd)=\"addWhenUnbound($event)\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (blur)=\"closeTooltip();\">\r\n </mat-chip-list>\r\n\r\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let data of FilteredSource\">\r\n <div (click)=\"toggleSelection(data); !HideChoicesOnSelection && $event.stopPropagation()\">\r\n <mat-checkbox [checked]=\"data.selected\" (change)=\"toggleSelection(data);\" (click)=\"!HideChoicesOnSelection && $event.stopPropagation()\">\r\n {{ data.description }}\r\n </mat-checkbox>\r\n </div>\r\n </mat-option>\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, NgControl, NgForm, NgModel, RequiredValidator } from \"@angular/forms\";\r\nimport { EventEmitter, Input, Output, ViewChild, Optional, Inject, Directive, ChangeDetectorRef } from \"@angular/core\";\r\n\r\n// // Configurazioni\r\nimport { AccessControlService, ComponentContext } from \"@esfaenza/access-control\";\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../tokens';\r\nimport { Subject } from \"rxjs\";\r\nimport { TemplateRef } from \"@angular/core\";\r\nimport { ChangeEvent } from \"../models/ChangeEvent\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n/** Componente base da cui tutti i componenti Form implementano */\r\n@Directive()\r\nexport abstract class BaseFormControl implements ControlValueAccessor {\r\n\r\n /**\r\n * https://github.com/angular/angular/issues/14988\r\n * TL:DR; Il primo valore passato al writeValue è nullo perché quando i cagnacci fanno new FormControl()\r\n * scrivono un writeValue nullo... quindi al primo binding salto l'inizializzazione se ho la coppia null-firstBind\r\n * poi mettendo firstBind a false di lì in poi funziono come devo. Vista la casistica evito essenzialmente metà detectChanges\r\n */\r\n private firstBind: boolean = true;\r\n\r\n /**\r\n * Indica di utilizzare i validatori che l'utente piazza sul componente. \r\n * Da non usare nel caso di form-adaptive dato che i validatori vengono valutati in base al tipo ecc\r\n */\r\n protected UseUserValidators:boolean = true;\r\n\r\n /** Indica se il campo è obbligatorio i opzionale */\r\n public Required: boolean = false;\r\n\r\n /** Modello rappresentato da questo campo */\r\n public Model: any;\r\n\r\n /** Valore del Modello */\r\n public EvaluatedModel: string;\r\n\r\n /** Nome generato per il controllo interno. Di default è il nome del controllo esterno con l'aggiunta di \"_internal\". Serve per evitare cross-bind */\r\n public GeneratedName: string;\r\n\r\n /** Indica se il Form che contiene questo campo è già stato registrato */\r\n protected formHasBennBound: boolean = false;\r\n\r\n /**\r\n * Indica se questo campo è staccato dal Form, ad esempio nel caso sia in un ng-template proiettato nel form.\r\n * \r\n * In quel caso la variabile **Form** del componente dev'essere valorizzata\r\n */\r\n protected detatchedFromform: boolean = false;\r\n\r\n /** @ignore */\r\n protected propagateChange = (_: any) => { };\r\n\r\n /** @ignore */\r\n protected onTouched = () => { };\r\n\r\n /** @ignore Vedi getter e setter */\r\n public _readonly: boolean = false;\r\n\r\n /**\r\n * Qualora ci fosse un contesto collegato questa variabile identifica se Sono l'Owner o meno.\r\n * \r\n * Se non lo sono, il campo risulterà in sola lettura \r\n */\r\n private AppContextOwnership: boolean = true;\r\n\r\n /** Subject a cui l'oggetto interno si collega per effettuare il focus dell'elemento input sottostante */\r\n @Input() FocusSubject: Subject<void>;\r\n /**\r\n * @EXPERIMENTAL\r\n */\r\n @Input() SetValidationSubject: Subject<{ fieldName: string, error: string }>;\r\n\r\n /** Modalità in cui viene mostrato il campo, 1-1 rispetto alle definizioni di Angular Material */\r\n @Input() FieldAppearence: \"legacy\" | \"standard\" | \"fill\" | \"outline\" = \"outline\";\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 /** Definisce se richiamare l'EventEmitter **inputChange** in maniera classica (true) o solo per la change considerate definitive come tasto invio / blur / ecc... (false) */\r\n @Input() EmitPendingChanges: boolean = true;\r\n\r\n /** Attiva o disattiva la validazione per questo componente */\r\n @Input() Validation: boolean = true;\r\n\r\n /** \r\n * Permette di scrivere o meno nel campo di Input. Si differenzia dal Readonly in quanto fisicamente l'Input è scrivibile e vengono mantenuti i temi della validazione\r\n * ma interagire direttamente con la casella di Input per l'utente non è possibile\r\n */\r\n @Input() Frozen: boolean = false;\r\n\r\n /** Placeholder per quando l'input è vuoto */\r\n @Input() Placeholder: string = \"\";\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 /** Messaggio da mostrare quando la validazione fallisce per questo componente. Di default viene proposta dalla libreria */\r\n @Input() FailedValidationMessage: string = \"\";\r\n\r\n /** Input che forza l'invalidità del componente */\r\n @Input() ForcedError: boolean = false;\r\n\r\n /** Mostra un testo a sinistra dell'input (FormLayout permettendo) */\r\n @Input() Label: string = \"\";\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 /** Associa il componente Form a questo input */\r\n @Input() Form: NgForm = null;\r\n\r\n /** Sorgente da cui scegliere valori per i componenti Form che lo consentono */\r\n @Input() Source: any[];\r\n\r\n /** Nome della proprietà che contiene l'Id degli oggetti bindati nella **Source** */\r\n @Input() IdField: string = 'id';\r\n\r\n /**\r\n * Indica se il **Placeholder** dev'essere usato come una floating label di material o solo come un placeholder standard \r\n * \r\n * Ignorata lato autocomplete, autocomplete-multi e select in quanto hanno gestioni particolari di placeholder ecc...\r\n */\r\n @Input() FloatingLabel: boolean = true;\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 /** 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 /** 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 /** 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 /**\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\r\n /** Risultato dell'unione fra le informazioni degli oggetti in **Source** e le impostazioni specificate nell'Input **Display** */\r\n public BoundSource: { id: string, description: string }[] = [];\r\n\r\n /** Indica se è il primo Bind della Source */\r\n protected SourceFirstBind: boolean = true;\r\n\r\n /**\r\n * Ottiene il valore della variabile **_readonly**\r\n * \r\n * @returns {boolean} **true** se sola lettura, **false** altrimenti\r\n */\r\n get Readonly(): boolean { \r\n return this._readonly;\r\n }\r\n\r\n /**\r\n * Imposta il valore della variabile **_readonly** gestendo anche il Contesto applicativo\r\n * \r\n * @param {boolean} value Valore da impostare\r\n */\r\n @Input() set Readonly(value: boolean) {\r\n if (this.AppContextOwnership) \r\n this._readonly = value;\r\n }\r\n\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 * \r\n * @param {string} input Input nel formato \"X Y\"\r\n */\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\r\n /** val-qualcosa che fa effettivamente da input, o eventualmente il singolo input in casi particolari (es checkbox) */\r\n protected validationControl: NgModel;\r\n\r\n /**\r\n * Query sull'elemento 'validationControl' che funziona in ambiente statico\r\n * \r\n * @param {NgModel} comp Elemento HTML marcato con \"#validationControl\"\r\n */\r\n @ViewChild(\"validationControl\", { static: false }) set _validationControl(comp: NgModel) { this.registerValComp(comp); }\r\n\r\n /**\r\n * Query sull'elemento 'validationControl' che funziona in ambiente dinamico\r\n * \r\n * @param {NgModel} comp Elemento HTML marcato con \"#validationControl\"\r\n */\r\n @ViewChild(\"validationControl\", { static: true }) set validationControl_static(comp: NgModel) { this.registerValComp(comp); };\r\n\r\n /** Evento chiamato alla modifica del valore collegato a questo campo */\r\n @Output() inputChange: EventEmitter<ChangeEvent> = new EventEmitter<ChangeEvent>();\r\n\r\n /** Evento chiamato al focus del campo di testo/combo/quelcheè, riemitta l'evento originale Javascript */\r\n @Output() inputFocus: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /** Evento chiamato al finalize del campo di testo/combo/quelcheè */\r\n @Output() inputFinalized: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /** Cache delle condizioni scritte tipo :prop?(Roba con {prop}) */\r\n private BindCheckingGroups: { global: string, prop: string, whenexists: string }[] = []\r\n\r\n /** Cache delle proprietà scritte tipo --> {prop} */\r\n private BindProperties: { global: string, prop: string }[] = [];\r\n\r\n /** @ignore Costruttore */\r\n constructor(protected cdr: ChangeDetectorRef, public ngControl: NgControl, protected _validators: Array<any>, @Optional() private ac: AccessControlService, @Optional() public AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) private ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) private FAV_DEBUG_MODE: boolean, private nativeInput: boolean = false) {\r\n\r\n if (ngControl == null) {\r\n if (!this.handleNullNgControl())\r\n console.error(\"ngControl nullo per qualche motivo! Il 90% delle funzionalità di questo input saranno disabilitate\");\r\n\r\n return;\r\n }\r\n\r\n //Se mi arriva l'injectable del contesto posso capire se questo campo deve essere in readonly o no, solo se ho già inizializzato i controller custom dell'access control\r\n if (this.AppContext && this.AppContext.name && this.ACO_CUSTOMKEY && this.ac && this.ac.InitializedCustom) {\r\n this.AppContextOwnership = !this.ac.has(this.ACO_CUSTOMKEY + \":\" + this.AppContext.name, true);\r\n this._readonly = !this.AppContextOwnership\r\n }\r\n\r\n ngControl.valueAccessor = this;\r\n\r\n //Se ho già un parent impostato vuol dire che sotto al tag <form> ho direttamente un tag <form-*>..\r\n //.. quindi posso impostare direttamente il riferimento del Form da usare in HTML per il submitted\r\n\r\n //Se non c'è vuol dire che dentro al tag <form> c'è uno splendido <ng-container *ngTemplateOutlet=\"template; context: ....\">..\r\n //.. il quale a sua volta contiene il controllo <form-*> quindi avrò il form nell'input \"Form\"\r\n if ((<any>ngControl)._parent)\r\n this.Form = <NgForm>(<any>ngControl)._parent;\r\n else\r\n this.detatchedFromform = true;\r\n\r\n //Questa serve per impostare me stesso come si deve, il validatore invece lo passo al validation-input quando viene settato il validationControl\r\n if (this.ngControl) {\r\n //Per tutti i validatori: rigenero la funzione di validazione. Per qualche motivo a volte ho validatori senza...\r\n //... questo è un workaround per essere sicuro di averla sempre.\r\n //Solo i validatori con parametri hanno bisogno della _createValidator (es. \"maxlength\" che ha 1 parametro), quindi no validatori tipo \"required\"\r\n if (this._validators) {\r\n this._validators.forEach(v => {\r\n if (v._createValidator)\r\n v._createValidator();\r\n });\r\n }\r\n\r\n // Hard kill di validatori che vengono iniettati nel punto sbagliato....\r\n (<any>this.ngControl.valueAccessor)._validators = [];\r\n\r\n if (this._validators)\r\n this.ngControl.control.addValidators(this._validators.filter(v => !v.ngOnInit));\r\n\r\n this.ngControl.control.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * Effettua il Bind/Parse delle varie **Source** unendo le informazioni specificate in **Display**\r\n * \r\n * Eventualmente rieffettua un bind al modello in base al valore della variabile **RebindModelAfterSource**\r\n */\r\n protected tryBindSourceDisplay(): void {\r\n if (!this.Source)\r\n return;\r\n\r\n if (this.Source.length == 0 && !this.SourceFirstBind)\r\n this.BoundSource = [];\r\n\r\n this.SourceFirstBind = false;\r\n\r\n // Cache locale per evitare di rifare dei regex.match ogni santa volta\r\n if (this.Source.length > 0) {\r\n this.BoundSource = [];\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 // Blocco per generare la descrizione finale di un elemento\r\n this.Source.forEach(s => {\r\n // Aggiungo alla BoundSource in formato standard KeyValue\r\n this.BoundSource.push(this.transformSourceItem(s));\r\n });\r\n\r\n // Post trybind se c'è un modello associato ricalcolo l'**EvaluatedModel**\r\n if (this.Model)\r\n this.EvaluatedModel = this.BoundSource.find(t => t.id == this.Model)?.description;\r\n }\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) {\r\n iffedMatches.forEach(m => {\r\n // Stessa regex di sopra ma il tag \"i\" serve per tirare fuori i singoli capturing group e per qualche motivo \r\n // new RegExp(baseRegex, \"g\") non funziona quindi non ho potuto razionalizzarlo\r\n let groups = m.match(/:([a-z]+)\\?\\(([^\\(\\)]+)\\)/i);\r\n this.BindCheckingGroups.push({ global: m, prop: groups[1], whenexists: groups[2] });\r\n });\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)\r\n matches.forEach(m => { this.BindProperties.push({ 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 return { id: s[this.IdField], description: desc };\r\n }\r\n\r\n /**\r\n * Indica se il comopnente in questione è in grado di gestire ngControl nulli. \r\n * Di default è **false**\r\n * \r\n * @returns {boolean} **true** se gestisco ngControl nulli, **false** altrimenti\r\n */\r\n handleNullNgControl(): boolean {\r\n return false;\r\n }\r\n\r\n /** @ignore */\r\n ngOnInit() {\r\n // A volte nell'ngOnInit non ci passa quindi lo metto sia qui sia nell'afterviewinit, penso che valga per i componenti di terze parti\r\n // che si collegano per i cazzi loro al form ecc, quindi la parte sopra non serve... BOH\r\n this.checkRequiredness();\r\n\r\n //Il nome non c'è se metto standalone : true (CHE NON é DA METTERE)\r\n //Dato che anche il controllo esterno viene considerato come componente del form, non posso basarmi solo sul nome ma devo aggiungere un tag. In questo caso \"_internal\"\r\n // ATTENZIONE: QUALSIASI SIA IL MOTIVO, SE STO COSO VIENE SPOSTATO DALL ngOnInit NON FUNZIONA PIU NULLA\r\n if (this.ngControl.name)\r\n this.GeneratedName = this.ngControl.name.toString() + \"_internal\";\r\n\r\n // ATTENZIONE: QUALSIASI SIA IL MOTIVO, SE STO COSO VIENE SPOSTATO DALL ngOnInit NON FUNZIONA PIU NULLA\r\n if (this.Form) {\r\n if (!this.formHasBennBound && this.validationControl) {\r\n this.Form.addControl(this.validationControl);\r\n this.formHasBennBound = true;\r\n }\r\n\r\n // Quando un form viene submittato la variabile Form.submitted viene assegnata all'input [submitted] del val-control\r\n // Essendo che però la CD è OnPush per dire ad Angular che l'Input è cambiato e permettere i sideffects di assegnare [submitted]\r\n // devo attaccarmi al submit attuale del form e prima di eseguirlo devo marcare il componente per il check\r\n let origFunc = this.Form.onSubmit;\r\n var formOutsideRef = this.Form;\r\n this.Form.onSubmit = (ev): boolean => {\r\n this.cdr.markForCheck();\r\n return origFunc.apply(formOutsideRef);\r\n };\r\n }\r\n\r\n if (this.SetValidationSubject) {\r\n this.SetValidationSubject.pipe(takeUntil(this.destroyed$)).subscribe(v => {\r\n if (v.fieldName + \"_internal\" == this.GeneratedName) {\r\n let control = this.Form.getControl(this.validationControl);\r\n \r\n // Tentativo di pezza pezzente\r\n if (control) {\r\n control.setErrors({ forcedtoinvalid: true });\r\n control.markAsTouched();\r\n }\r\n\r\n this.ngControl.control.setErrors({ forcedtoinvalid: true });\r\n this.ngControl.control.markAsTouched();\r\n }\r\n })\r\n }\r\n }\r\n\r\n destroyed$: Subject<void> = new Subject<void>();\r\n\r\n /**\r\n * Se sono in modalità detatched devo rimuovere manualmente questo controllo quando entro nella dispose, altrimenti se poi ne andassi a riaggiungere\r\n * un altro con lo stesso \"name\" ma magari resettato, Angular lo re-idraterebbe con i valori precedenti nonostante il modello fosse vuoto\r\n */\r\n ngOnDestroy() {\r\n if (this.Form && this.validationControl && !!this.Form.getControl(this.validationControl))\r\n this.Form.removeControl(this.validationControl);\r\n\r\n\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n /** Elabora i validatori iniettati e capisce se il valore è obbligatorio o meno */\r\n /** Fratello della funzione con lo stesso nome lato validations */\r\n checkRequiredness() {\r\n // controllo se è settato un required per decidere in maniera condizionale se utilizzare il validatore required nel componente interno\r\n // Lo faccio qui e non in un eventuale ngOnInit o costruttore perché ngOnInit non sempre viene chiamato e da costruttore il validatore non ha ancora il valore giusto\r\n if (this._validators && this._validators.some(elem => elem instanceof RequiredValidator && (elem.required === true || (!elem.required && elem.required !== false))))\r\n this.Required = true;\r\n }\r\n\r\n /** @ignore */\r\n ngAfterViewInit() {\r\n if (!this.ngControl)\r\n return;\r\n\r\n this.checkRequiredness();\r\n }\r\n\r\n /** Helper che collega la funzione di reset del controllo form al controllo di validazione sottostante */\r\n private bindResetFunction() {\r\n //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = (<any>this.ngControl.control).__original_reset__ || this.ngControl.control.reset;\r\n var ngControl_outsideReference = this.ngControl.control;\r\n var validationControl_outsideReference = this.validationControl.control;\r\n\r\n this.ngControl.control.reset = () => {\r\n origFunc.apply(ngControl_outsideReference);\r\n validationControl_outsideReference.reset();\r\n };\r\n\r\n //Per consentire richiami multipli di questa funzione prendendo sempre la fiunzione di reset base\r\n (<any>this.ngControl.control).__original_reset__ = origFunc\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n if (obj == null && this.firstBind) {\r\n this.firstBind = false;\r\n return;\r\n }\r\n\r\n this.Model = obj;\r\n\r\n //Per svegliare Angular. Il valore che entra potrebbe essere valido/non valido e questo lo binda a tutto, form compreso\r\n if (this.ngControl)\r\n this.ngControl.control.updateValueAndValidity();\r\n\r\n if (this.Model)\r\n this.onNotNullValueSet();\r\n\r\n // markForCheck non va bene in quanto arrivano possibilmente 2 update su un solo ciclo di stack\r\n // setTime*ut che wrappa tutto non va bene sennò spamma delle change detection a suon di interval che rallentano tantissimo l'app\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /** @ignore */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /** @ignore */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n /**\r\n * Registra internamente il componente di validazione, ne imposta i validatori e collega il Form, se presente\r\n * \r\n * @param {NgModel} comp Elemento HTML marcato con \"#validationControl\"\r\n */\r\n registerValComp(comp: NgModel) {\r\n if (comp) {\r\n // È arrivato un nuovo validationContorl (succede solo nel form-select quando cambia la source da 0 elementi / null ad N elementi, quindi al massimo una volta) \r\n if (this.validationControl && this.Form)\r\n this.Form.removeControl(this.validationControl);\r\n\r\n this.validationControl = comp;\r\n\r\n //Questa serve per passare avanti i validatori\r\n this.validationControl.control.setValidators(this._validators);\r\n\r\n //Se sono staccato dal Form (vuol dire che sono ad esempio dentro un ng-template) aggiungo il controllo al Form passato come input (context del template)\r\n if (this.detatchedFromform && this.Form && !this.formHasBennBound) {\r\n this.Form.addControl(this.validationControl)\r\n this.formHasBennBound = true;\r\n }\r\n\r\n if (this.ngControl)\r\n this.bindResetFunction();\r\n\r\n //I val-roba questo lo fanno automaticamente dentro... gli altri no (es. semplice input checkbox)\r\n this.updateValidityForNativeInput();\r\n }\r\n }\r\n\r\n public registerForm(ngForm: NgForm) {\r\n this.Form = ngForm;\r\n this.Form.addControl(this.validationControl)\r\n this.formHasBennBound = true;\r\n }\r\n\r\n /**\r\n * Aggiorna il valore e la validità dell'input sottostante. Non viene chiamato per input nativi come le checkbox\r\n * \r\n * @param {boolean} forcedValue Forza l'aggiornamento anche se non è un input nativo (input nativo = checkbox, ad esempio)\r\n */\r\n updateValidityForNativeInput(forcedValue: boolean = false) {\r\n if (forcedValue || this.nativeInput)\r\n this.validationControl.control.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Classico \"spara fuori\". Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.\r\n * \r\n * Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html\r\n */\r\n changed(forcedValue: any = null, markForCheck: boolean = false, modelEvaluationHandled: boolean = false, internal: boolean = false) {\r\n let toEmit = forcedValue == null || forcedValue == \"\" ? this.Model ?? \"\" : forcedValue;\r\n\r\n if(!modelEvaluationHandled)\r\n this.EvaluatedModel = toEmit;\r\n \r\n this.propagateChange(toEmit);\r\n this.inputChange.emit(new ChangeEvent(internal, toEmit));\r\n if (markForCheck)\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Classico \"spara fuori\" sul focus. Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.\r\n * \r\n * Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html\r\n */\r\n focused(event: any) {\r\n this.inputFocus.emit(event);\r\n this.log(\"Control Focused - \" + this.GeneratedName);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Classico \"spara fuori\" sulla finalizzazione del valore dell'input (blur / tasto invio, ecc...). Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.\r\n * \r\n * Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html\r\n */\r\n finalized() {\r\n this.inputFinalized.emit(this.ngControl?.name?.toString());\r\n this.log(\"Control Value Finalized - \" + this.GeneratedName);\r\n }\r\n\r\n /**\r\n * Stampa un log a console\r\n * \r\n * @param {string} message Messaggio da stampare\r\n */\r\n public log(message: string) {\r\n if (this.FAV_DEBUG_MODE)\r\n console.log(\"@forms-and-validations: \" + message)\r\n }\r\n\r\n /** @ignore */\r\n abstract onNotNullValueSet(): void;\r\n}","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **FormFileComponent**\r\n */\r\n@Injectable()\r\nexport class FormFileComponentLoc extends LocalizationService {\r\n \r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"en->it\", \"Select a file\", [\"Seleziona un file\"]);\r\n super.set(\"en->it\", \"Files Selected\", [\"File Selezionati\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, ChangeDetectorRef, ElementRef, Inject, Input, Optional, Self, ViewChild, Host } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl, Validator, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\n// Esfaenza\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\n\r\n// Modelli\r\nimport { AppFile } from \"../../models/AppFile\";\r\n\r\n// Configurazioni\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\nimport { FormFileComponentLoc } from \"./form-file.component.loc\";\r\n\r\n/** Componente che permette all'utente di caricare/scaricare un file all'interno di un campo Input */\r\n@Component({\r\n selector: \"form-file\",\r\n providers: [{ provide: LocalizationService, useClass: FormFileComponentLoc }],\r\n styleUrls: [\"form-file.component.css\"],\r\n templateUrl: \"form-file.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormFileComponent 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 = false;\r\n\r\n /** Riferimento all'elemento input di tipo file */\r\n @ViewChild(\"fileInput\", { static: false }) inputEl: ElementRef;\r\n\r\n /** @ignore Costruttore */\r\n constructor(private msgs: MessageService, cdr: ChangeDetectorRef, private utiExts: UtilityService, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, public lc: LocalizationService, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n\r\n //Per questo componente non posso permettermi che il modello sia nullo\r\n this.Model = new AppFile();\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();;\r\n if (this._validators) {\r\n this._validators.push(this);\r\n this.ngControl.control.setValidators(this._validators);\r\n this.ngControl.control.updateValueAndValidity();\r\n }\r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors {\r\n if (this.Required && !(<AppFile>this.Model).filename)\r\n return { required: true }\r\n else return null;\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: AppFile): void {\r\n var model = obj == null ? new AppFile() : obj;\r\n this.EvaluatedModel = model.filename;\r\n super.writeValue(model);\r\n\r\n if(obj == null)\r\n this.changed();\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 fileChange(clear: boolean = false) {\r\n console.log(\"dong\")\r\n let files: File[] = [];\r\n let model = (<AppFile>this.Model);\r\n let ne: HTMLInputElement = this.inputEl.nativeElement;\r\n\r\n if (clear) {\r\n model.filename = \"\";\r\n ne.value = \"\";\r\n 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 if (ne.files.length == 1)\r\n model.filename = ne.files[0].name;\r\n if (ne.files.length > 1)\r\n model.filename = ne.files.length + \" \" + this.lc.loc(\"Files Selected\");\r\n model.nativefiles = files;\r\n model.fileb64 = null;\r\n }\r\n this.EvaluatedModel = model.filename;\r\n this.changed(null, true, true);\r\n }\r\n\r\n /** Permette di scaricare l'eventuale file selezionato */\r\n downloadAttachment() {\r\n let model = (<AppFile>this.Model);\r\n this.utiExts.saveFile(model.fileb64, model.filename);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n\r\n onFileDragOver(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n onFileDropped(event: DragEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n let ne: HTMLInputElement = this.inputEl.nativeElement;\r\n ne.files = event.dataTransfer?.files;\r\n this.fileChange();\r\n // let files = Array.from(event.dataTransfer?.files || []);\r\n // let model = new AppFile();\r\n // model.filename = files[0].name;\r\n // model.fileb64 = null;\r\n // model.nativefiles = files;\r\n // this.writeValue(model);\r\n }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FancyMode && !FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"!FancyMode && FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n\r\n<div *ngIf=\"FancyMode\" (drop)=\"onFileDropped($event)\" (dragover)=\"onFileDragOver($event)\">\r\n <!--Drop-->\r\n <label for=\"{{GeneratedName}}\" class=\"drop-container\">\r\n <span class=\"drop-title\">{{Label}}</span>\r\n <div class=\"file-name-container\">{{Model.filename || 'Nessun file selezionato'}}</div>\r\n <!--Hidden Forms-->\r\n <input hidden type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input hidden type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" \r\n placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n <!--Clean-->\r\n <i class=\"fa fa-times file-delete-btn\" (click)=\"fileChange(true); $event.stopPropagation(); false;\" *ngIf=\"Model.filename\"></i>\r\n <!--Download-->\r\n <div *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" class=\"app-pointer file-download-btn\" (click)=\"downloadAttachment(); $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\r\n<ng-template #controlTemplate>\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n\r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" (click)=\"downloadAttachment()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"Model.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, Component, Host, Inject, Input, Optional, Self } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { DateService } from \"@esfaenza/extensions\";\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { ChangeDetectorRef } from \"@angular/core\";\r\n\r\n/**\r\n * Componente che dà all'utente la possibilità di selezionare una data insieme ad un orario\r\n */\r\n@Component({\r\n selector: \"form-datetime\",\r\n templateUrl: \"form-datetime.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormDateTimeComponent extends BaseFormControl implements ControlValueAccessor {\r\n \r\n /** Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs */\r\n @Input() JsDates: boolean = false;\r\n\r\n /** @ignore Costruttore */\r\n constructor(private datesExts: DateService, cdr: ChangeDetectorRef, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY : string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.EvaluatedModel = this.datesExts.getFormatted(obj, false, true);\r\n super.writeValue(obj);\r\n }\r\n\r\n changed(): void {\r\n this.EvaluatedModel = this.Model ? this.datesExts.getFormatted(this.Model, false, true) : '';\r\n super.changed(null, false, true);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-datetime [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [Readonly]=\"Readonly\"\r\n [id]=\"GeneratedName\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-datetime>\r\n</ng-template>","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **FormAdaptiveComponent**\r\n */\r\n@Injectable()\r\nexport class FormAdaptiveComponentLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"en->it\", \"Select a file\", [\"Seleziona un file\"]);\r\n super.set(\"en->it\", \"Files Selected\", [\"File Selezionati\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Host, Inject, Input, Optional, Self, SimpleChanges, ViewChild } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl, PatternValidator } from \"@angular/forms\";\r\n\r\n// ES / Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { DateService, UtilityService } from \"@esfaenza/extensions\";\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { NgxMatDateAdapter } from \"@angular-material-components/datetime-picker\";\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { FormAdaptiveComponentLoc } from \"./form-adaptive.component.loc\";\r\n\r\n// Modelli\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\nimport { AppFile } from \"../../models/AppFile\";\r\n\r\nimport { Observable } from \"rxjs\";\r\nimport { ChangeEvent } from \"../../models/ChangeEvent\";\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\ndeclare var dayjs: any;\r\n\r\n/** Opzioni generiche disponibili */\r\nexport type AvailableOptions = 'JsDates' | 'CaseSensitive' | 'MinChars' | 'SearchFunction' | 'Alignment' | 'Precision' | 'AllowDownload' | 'AdjustNumber' | 'Pattern';\r\n\r\n/** Componente in grado di assumere la forma di un qualsiasi altro componente form in base al tipo specificato. Utile per la creazione di form dinamici */\r\n@Component({\r\n selector: \"form-adaptive\",\r\n providers: [{ provide: LocalizationService, useClass: FormAdaptiveComponentLoc }],\r\n templateUrl: \"form-adaptive.component.html\",\r\n styleUrls: [\"../form-file/form-file.component.css\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormAdaptiveComponent extends BaseFormControl implements ControlValueAccessor {\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\r\n /** Messaggio per quando si binda un form-adaptive senza tipo */\r\n @Input() TypeMissingMessage: string;\r\n\r\n /** Pattern di validazione */\r\n @Input() Pattern: string;\r\n\r\n /** Indica di aggiustare in uscita i number in modo che siano parsabili dal javascript */\r\n @Input() AdjustNumber: boolean = true;\r\n\r\n /** Riferimento all'elemento input di tipo file qualora il **Type** di questo componente fosse **file** */\r\n @ViewChild(\"fileInput\", { static: false }) inputEl: ElementRef;\r\n\r\n /** Permette di scaricare l'eventuale file presente qualora il **Type** di questo componente fosse **file** */\r\n @Input() AllowDownload: boolean = true;\r\n\r\n /** Modello typescript di bind dei file */\r\n ModelFile: AppFile;\r\n\r\n /** Utilizzata nel form-adapter per specificare la precisione degli input currencymap (Type: currency) */\r\n @Input() Precision: number = 2;\r\n\r\n /** Allineamento della currency mask */\r\n @Input() Alignment: 'left' | 'right' = 'right';\r\n\r\n /** Funzione di ricerca che verrà chiamata dal componente */\r\n @Input() SearchFunction: (search: string, byid: boolean) => Observable<{ id: string, description: string }[]> = null;\r\n\r\n /** Numero minimo di caratteri con cui cercare */\r\n @Input() MinChars: number = 3;\r\n\r\n /** Indica se i controlli devono essere effettuati tenendo conto del Case o meno. Vale solo qualora la **Source** fosse fornita */\r\n @Input() CaseSensitive: boolean = false;\r\n\r\n /** Opzioni specifiche per il componente che si va a visualizzare. Es. per i tipi date: { JsDates: true } */\r\n @Input() Options: { [id in AvailableOptions]?: any } = {};\r\n\r\n /** Variabile interna che gestisce se effettuare il riallineamento dei dati o meno */\r\n private alignValues: boolean = false;\r\n\r\n /**\r\n * Indica se ignorare il prossimo evento writeValue che normalmente dovrebbe richiedere la nuova source. Serve per quando l'utente seleziona un elemento:\r\n * Subito dopo partirebbe un altro evento modelChange che ricaricherebbe nuovamente la source\r\n */\r\n private ignoreNextWriteValue: boolean = false;\r\n\r\n /** Cache della sorgente originale POST binding, in modo da poter fare filtri in locale qualora la **SearchFunction** non fosse definita e la **Source** fosse assegnata */\r\n public FilteredBoundSource: { id: string, description: string }[] = [];\r\n\r\n /** Solo per gli input di tipo \"date\". Capisce che modalità usare per il validation-date sottostante */\r\n public useJsDates: boolean = null;\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, private utiExts: UtilityService, private datesExts: DateService, private dateAdapter: NgxMatDateAdapter<any>, public lc: LocalizationService, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE: boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n\r\n this.ModelFile = new AppFile();\r\n this.UseUserValidators = false;\r\n }\r\n\r\n public IntPattern = '^[0-9]\\\\d*$';\r\n public FloatPattern = '^([0-9]*[,])?[0-9]+$';\r\n\r\n /**\r\n * Nvl con un minimo di senso\r\n * @param value Valore base\r\n * @param ifnod Valore da usare se **value** è nullo o undefined\r\n * @returns Il valore preso fra i due disponibili\r\n */\r\n private nvl<T>(value: T, ifnod: T): T {\r\n return value == null || value == undefined ? ifnod : value;\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n // Assegnazione Opzioni da oggetto\r\n if(this.Options){\r\n this.useJsDates = this.nvl(this.Options?.JsDates, this.useJsDates);;\r\n this.CaseSensitive = this.nvl(this.Options?.CaseSensitive, this.CaseSensitive);\r\n this.MinChars = this.nvl(this.Options?.MinChars, this.MinChars);\r\n this.SearchFunction = this.nvl(this.Options?.SearchFunction, this.SearchFunction);\r\n this.Alignment = this.nvl(this.Options?.Alignment, this.Alignment);\r\n this.Precision = this.nvl(this.Options?.Precision, this.Precision);\r\n this.AllowDownload = this.nvl(this.Options?.AllowDownload, this.AllowDownload);\r\n this.AdjustNumber = this.nvl(this.Options?.AdjustNumber, this.AdjustNumber);\r\n this.Pattern = this.nvl(this.Options?.Pattern, this.Pattern);\r\n }\r\n\r\n if (this.ngControl) {\r\n // Esclusi i validatori a componenti\r\n let validators = [...(this._validators || [])].filter(v => !v.ngOnInit);\r\n\r\n var pv = new PatternValidator();\r\n switch (this.Type) {\r\n case 'int':\r\n pv.pattern = this.Pattern || this.IntPattern;\r\n validators.push(pv);\r\n break;\r\n case 'float':\r\n case 'number':\r\n pv.pattern = this.Pattern || this.FloatPattern;\r\n validators.push(pv);\r\n break;\r\n case 'string':\r\n if (this.Pattern) {\r\n pv.pattern = this.Pattern;\r\n validators.push(pv);\r\n }\r\n break;\r\n }\r\n (<any>pv)._validator = (<any>pv).createValidator(pv.pattern);\r\n (<any>this.ngControl)._setValidators(validators);\r\n this.ngControl.control.setValidators(validators);\r\n this.ngControl.control.updateValueAndValidity();\r\n }\r\n\r\n super.ngOnInit();\r\n }\r\n\r\n /** @ignore */\r\n public async ngOnChanges(changes: SimpleChanges) {\r\n const newSource = changes[\"Source\"];\r\n const newType = changes[\"Type\"];\r\n\r\n if (newSource) {\r\n this.tryBindSourceDisplay();\r\n\r\n // Prima assegnazione se cambia la source sotto (quindi se viene bindata direttamente da HTML)\r\n if (this.Type == \"autocomplete\" && (this.Model?.length || 0) >= this.MinChars && !this.SearchFunction)\r\n this.FilteredBoundSource = this.BoundSource;\r\n else\r\n this.FilteredBoundSource = [];\r\n\r\n this.cdr.markForCheck();\r\n }\r\n\r\n if (newType && this.Model)\r\n this.writeValue(this.Model);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.alignValues = false;\r\n\r\n this.EvaluatedModel = obj?.toString() || \"\";\r\n\r\n if (!this.Type) {\r\n this.Type = \"string\";\r\n this.EvaluatedModel = obj;\r\n }\r\n\r\n if (this.Type == \"date\" || this.Type == \"datetime\") {\r\n this.useJsDates = this.useJsDates == null ? Object.prototype.toString.call(obj) === \"[object Date]\" : this.useJsDates;\r\n if (this.Type == \"date\")\r\n this.EvaluatedModel = this.datesExts.getFormatted(obj, true, false);\r\n if (this.Type == \"datetime\")\r\n this.EvaluatedModel = this.datesExts.getFormatted(obj, false, true);\r\n }\r\n else if ((this.Type == \"float\" || this.Type == \"number\") && obj) {\r\n obj = obj.toString().replace(\".\", \",\");\r\n this.EvaluatedModel = obj;\r\n }\r\n // Per sicurezza riallineo i valori\r\n else if (this.Type == \"boolean\") {\r\n obj = obj ? (obj === true || obj.toLowerCase() == \"true\") : false;\r\n this.alignValues = true;\r\n this.EvaluatedModel = this.lc.loc(obj ? 'Sì' : 'No');\r\n }\r\n else if (this.Type == \"time\") {\r\n const [hours, minutes, seconds] = (obj || \"00:00:00\").split(\":\");\r\n obj = dayjs().hour(parseInt(hours ?? 0)).minute(parseInt(minutes ?? 0)).second(parseInt(seconds ?? 0));\r\n this.EvaluatedModel = `${hours || '00'}:${minutes || '00'}:${seconds || '00'}`;\r\n }\r\n else if (this.Type == \"file\") {\r\n obj = this.ModelFile;\r\n this.EvaluatedModel = this.ModelFile.filename;\r\n }\r\n else if (this.Type == \"autocomplete\") {\r\n if (this.SearchFunction) {\r\n this.SearchFunction(obj, true).subscribe(t => {\r\n this.Source = t;\r\n this.tryBindSourceDisplay();\r\n setTimeout(() => { this.finalizeValue(obj); });\r\n });\r\n return;\r\n }\r\n else\r\n this.finalizeValue(obj);\r\n }\r\n\r\n if (this.BoundSource && this.BoundSource.length > 0)\r\n this.EvaluatedModel = this.BoundSource.find(t => t.id == obj)?.description;\r\n\r\n super.writeValue(obj);\r\n\r\n if (this.alignValues) {\r\n this.changed();\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Dato un valore verifica se può restituire le informazioni trovate in **Source** con id uguale a **value** o se deve restituire il valore in se\r\n * \r\n * @param {any} value Valore scritto nell'input di testo\r\n */\r\n private finalizeValue(value: any) {\r\n var val = this.Source.find(t => t.id == value);\r\n this.propagateChange(val ? val.id : value);\r\n this.Model = val ? val.description : value;\r\n this.EvaluatedModel = this.Model;\r\n }\r\n\r\n /**\r\n * Evento di filtro della sorgente dati in base all'input utente\r\n * \r\n * @param {string} event Input utente\r\n */\r\n public filterSource(event?: ChangeEvent) {\r\n if (this.ignoreNextWriteValue) {\r\n this.ignoreNextWriteValue = false;\r\n return;\r\n }\r\n\r\n // Quando filtro la source, se non devo ignorare l'evento devo comunque assicurarmi di impostare il valore selezionato a null\r\n super.changed(null);\r\n\r\n if (!event && this.MinChars == 0 && !this.SearchFunction) {\r\n this.FilteredBoundSource = this.BoundSource;\r\n return;\r\n }\r\n\r\n if (!event || event.value.length < this.MinChars) {\r\n this.FilteredBoundSource = [];\r\n return;\r\n }\r\n\r\n if (!this.SearchFunction && (!this.Source || this.Source.length == 0))\r\n throw \"Impossibile filtrare gli elementi senza una funzione di ricerca che restituisca una lista di { id: string, description: string }\";\r\n\r\n if (this.SearchFunction) {\r\n this.throttla(\"filtersource\", () => {\r\n this.SearchFunction(event.value, false).subscribe(t => {\r\n this.Source = t;\r\n this.tryBindSourceDisplay();\r\n // In questo caso è già filtrata dalla SearchFunction\r\n this.FilteredBoundSource = this.BoundSource;\r\n this.removeFilteredSourceOnDescriptionSelection();\r\n this.cdr.markForCheck();\r\n });\r\n }, 400);\r\n }\r\n else {\r\n this.throttla(\"filtersource\", () => {\r\n // In questo caso devo filtrare io in memoria\r\n this.FilteredBoundSource = this.BoundSource.filter(t => (this.CaseSensitive && t.description.includes(event.value)) || (!this.CaseSensitive && t.description.toLowerCase().includes(event.value.toLowerCase())));\r\n this.removeFilteredSourceOnDescriptionSelection();\r\n this.cdr.markForCheck();\r\n }, 100);\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private removeFilteredSourceOnDescriptionSelection() {\r\n if (this.FilteredBoundSource.length == 1 && (this.FilteredBoundSource[0].description === this.Model)) {\r\n this.Model = this.BoundSource[0].id;\r\n this.EvaluatedModel = this.BoundSource[0].description;\r\n this.FilteredBoundSource = [];\r\n }\r\n }\r\n\r\n /** Metodo richiamato quando viene modificato il modello del campo di input */\r\n changed(event?: ChangeEvent) {\r\n var toEmit = this.getModelToEmit();\r\n\r\n if (this.Type == \"autocomplete\")\r\n this.ignoreNextWriteValue = true;\r\n\r\n if (this.EmitPendingChanges)\r\n super.changed(toEmit, false, false, event?.internal);\r\n }\r\n\r\n /** @ignore */\r\n finalized() {\r\n super.finalized();\r\n }\r\n\r\n /** Metodo richiamato quando viene selezionato il campo col mouse */\r\n focused(event: any) {\r\n super.focused(event);\r\n }\r\n\r\n /** Effettua gli aggiustamenti dati del caso ed emette il modello corretto */\r\n private getModelToEmit() {\r\n var toEmit = this.Model ?\r\n (this.Type == \"time\" || this.useJsDates ?\r\n this.dateAdapter.clone(this.datesExts.getDateConvertion(this.Model))\r\n : JSON.parse(JSON.stringify(this.Model)))\r\n : null;\r\n\r\n if ((this.Type == \"float\" || this.Type == \"number\") && toEmit) {\r\n if(this.AdjustNumber)\r\n toEmit = toEmit.replace(\".\", \"\").replace(\",\", \".\");\r\n this.EvaluatedModel = toEmit;\r\n }\r\n else if (this.Type == \"boolean\") {\r\n toEmit = toEmit ? true : false;\r\n this.EvaluatedModel = this.lc.loc(toEmit ? 'Yes' : 'No');;\r\n }\r\n else if (this.Type == \"time\") {\r\n toEmit = toEmit.format(\"HH:mm:ss\");\r\n this.EvaluatedModel = toEmit;\r\n }\r\n else if ((this.Type == \"date\" || this.Type == \"datetime\") && this.useJsDates) {\r\n toEmit = toEmit.toDate();\r\n this.EvaluatedModel = this.datesExts.getFormatted(this.Model, this.Type == \"date\", this.Type == \"datetime\");\r\n }\r\n\r\n return toEmit;\r\n }\r\n\r\n /**\r\n * Helper per gestire la modifica del file attualmente bindato. Ovviamente funziona solo qualora il **Type** fosse **file**\r\n * \r\n * @param {boolean} clear Indica se bisogna svuotare l'input o meno \r\n */\r\n fileChange(clear: boolean = false) {\r\n let files: File[] = [];\r\n let model = (<AppFile>this.Model);\r\n let ne: HTMLInputElement = this.inputEl.nativeElement;\r\n\r\n if (clear) {\r\n model.filename = \"\";\r\n ne.value = \"\";\r\n }\r\n else {\r\n for (let i = 0; i < ne.files.length; i++)\r\n files.push(ne.files.item(i));\r\n\r\n if (ne.files.length == 1)\r\n model.filename = ne.files[0].name;\r\n if (ne.files.length > 1)\r\n model.filename = ne.files.length + \" \" + this.lc.loc(\"Files Selected\");\r\n model.nativefiles = files;\r\n model.fileb64 = null;\r\n }\r\n this.changed();\r\n }\r\n\r\n /** Permette di scaricare il file collegato all'evetnuale file input rappresentato da questo componente */\r\n downloadAttachment() {\r\n let model = (<AppFile>this.Model);\r\n this.utiExts.saveFile(model.fileb64, model.filename);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n\r\n //******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate\r\n //TODO: spostarla in un metodo di utilità (esfaenza/extensions)\r\n /** @ignore */\r\n private executionTimers: { [index: string]: any } = {};\r\n /** @ignore */\r\n private throttla(id: string, func: Function, throttleTime: number): void {\r\n //Se ho la funzione che vuole eseguire ripulisco quel timeout\r\n if (this.executionTimers[id])\r\n clearTimeout(this.executionTimers[id]);\r\n\r\n //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi\r\n this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);\r\n }\r\n //*************************\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div *ngIf=\"!Type\" class=\"app-margin-top-5\">\r\n <em>{{TypeMissingMessage}}</em>\r\n </div>\r\n \r\n <!--Se currency-->\r\n <div *ngIf=\"Type == 'currency'\">\r\n <val-currency #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\"\r\n [CurrencyOptions]=\"{ prefix: '', thousands: '.', decimal: ',', precision: Precision, align: Alignment }\" [noValidate]=\"!Validation\"\r\n type=\"text\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed();\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-currency>\r\n </div>\r\n <!--Se data-->\r\n <div *ngIf=\"Type == 'date'\">\r\n <val-date #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" [useJsDates]=\"useJsDates\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div *ngIf=\"Type == 'string'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || ''}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se numero-->\r\n <div *ngIf=\"Type == 'float' || Type == 'number'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || FloatPattern}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se numero intero-->\r\n <div *ngIf=\"Type == 'int'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || IntPattern}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"m-t-5\" *ngIf=\"Type == 'boolean'\">\r\n <input #validationControl=\"ngModel\" [readonly]=\"Readonly\" type=\"checkbox\" class=\"app-pointer\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" (ngModelChange)=\"changed(); finalized();\" (click)=\"focused($event);\" />\r\n </div>\r\n <!--Se enum-->\r\n <div *ngIf=\"Type == 'enum'\">\r\n <val-select #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [placeHolderValue]=\"''\" [placeholder]=\"Required ? ('Select' | localize : lc) + '...' : Placeholder\" [required]=\"Required\" [(ngModel)]=\"Model\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\">\r\n <option *ngFor=\"let val of BoundSource\" [value]=\"val.id\">{{val.description}}</option>\r\n </val-select>\r\n </div>\r\n <!--Se autocomplete-->\r\n <div *ngIf=\"Type == 'autocomplete'\">\r\n <val-autocomplete #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [placeholder]=\"Required ? ('Select' | localize : lc) + '...' : Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" [FilteredSource]=\"FilteredBoundSource\" (inputChange)=\"filterSource($event); changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-autocomplete>\r\n </div>\r\n <!--Se date time-->\r\n <div *ngIf=\"Type == 'datetime'\">\r\n <val-datetime #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [useJsDates]=\"useJsDates\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-datetime>\r\n </div>\r\n <!--Se time-->\r\n <div *ngIf=\"Type == 'time'\">\r\n <ngx-mat-timepicker name=\"val-time\" #elementRef #baseInput=\"ngModel\" [(ngModel)]=\"Model\" [disabled]=\"Readonly\"\r\n [showSpinners]=\"false\" [stepHour]=\"2\" [stepMinute]=\"5\" [stepSecond]=\"30\"\r\n [showSeconds]=\"true\" (ngModelChange)=\"changed()\" #validationControl=\"ngModel\">\r\n </ngx-mat-timepicker>\r\n </div>\r\n <!--Se file-->\r\n <div *ngIf=\"Type == 'file'\">\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" #fileInput id=\"{{GeneratedName}}\" class=\"file-upload-btn app-pointer\" [multiple]=\"null\"/>\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && ModelFile.filename && ModelFile.fileb64\" class=\"form-control checking-field\" placeholder=\"{{'Select a file' | localize : lc}}...\" [(ngModel)]=\"ModelFile.filename\" name=\"dsfile\" #validationControl=\"ngModel\" [required]=\"Required\"/>\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && ModelFile.filename && ModelFile.fileb64\" (click)=\"downloadAttachment()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"ModelFile.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n </div>\r\n</ng-template>","// Angular\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 vuoto, \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-empty\",\r\n templateUrl: \"form-empty.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormEmptyComponent {\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 finto */\r\n @Input() FormGroupClass: string = \"\";\r\n\r\n /** Valore placeholder da mostrare */\r\n public PlaceholderModel: string = \"Placeholder\";\r\n}","<div class=\"form-group row app-hidden-view {{FormGroupClass}}\" [class.app-margin-bottom-0]=\"Last\">\r\n <label class=\"col-md-4 m-t-5\">Placeholder:</label>\r\n <div class=\"col-md-8\">\r\n <val-input type=\"text\" [(ngModel)]=\"PlaceholderModel\" [ngModelOptions]=\"{standalone: true}\"></val-input>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>","// Angular\r\nimport { ChangeDetectionStrategy, Component, Input, TemplateRef } from \"@angular/core\";\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 changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormTemplateComponent {\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}","<!-- NON PROPRIO Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\"><ng-container *ngTemplateOutlet=\"content\"></ng-container></ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\"><ng-container *ngTemplateOutlet=\"content\"></ng-container></div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"content\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n <div [hidden]=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"content\"></ng-container></div>\r\n <div [hidden]=\"!DisplayMode || !DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<!-- Singola proiezione -->\r\n<ng-template #content><ng-content></ng-content></ng-template>","// Angular\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 changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormErrorComponent {\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 { 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 changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormInfoComponent {\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 { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\nimport { Component, Inject, Optional, Self, Host, ChangeDetectionStrategy, Input } from \"@angular/core\";\r\n\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE, FAV_SLIDER_MODE } from '../../tokens';\r\nimport { ChangeDetectorRef } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/** Componente rappresentante una checkbox */\r\n@Component({\r\n selector: \"form-checkbox\",\r\n templateUrl: \"form-checkbox.component.html\",\r\n styleUrls: [\"form-checkbox.component.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormCheckboxComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Mostra l'input checkbox con lo stile di uno slider */\r\n @Input() SliderMode: boolean = null;\r\n\r\n /** @ignore Costruttore */\r\n constructor(private lc: LocalizationService, cdr: ChangeDetectorRef, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_SLIDER_MODE) private FAV_SLIDER_MODE: boolean, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE: boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n if (this.SliderMode == null)\r\n this.SliderMode = this.FAV_SLIDER_MODE;\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n obj = obj ? (obj === true || obj.toLowerCase() == \"true\") : false;\r\n this.EvaluatedModel = this.lc.loc(obj ? 'Sì' : 'No');\r\n\r\n super.writeValue(obj);\r\n }\r\n\r\n changed(): void {\r\n this.EvaluatedModel = this.lc.loc(this.Model ? 'Sì' : 'No');\r\n super.changed(null, false, true);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\" class=\"app-inline-block\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}:</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <ng-container *ngIf=\"SliderMode\">\r\n <label class=\"toggler-wrapper slider-checkbox\">\r\n <input [disabled]=\"Readonly ? true : null\" type=\"checkbox\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" #validationControl=\"ngModel\" (ngModelChange)=\"changed(); finalized()\" (click)=\"focused($event)\" >\r\n <div class=\"toggler-slider\">\r\n <div class=\"toggler-knob\"></div>\r\n </div>\r\n </label>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!SliderMode\">\r\n <input class=\"app-pointer\" [disabled]=\"Readonly ? true : null\" type=\"checkbox\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" #validationControl=\"ngModel\" (ngModelChange)=\"changed(); finalized()\" (click)=\"focused($event)\"/>\r\n </ng-container>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, Component, Host, Inject, Input, Optional, Self } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { DateService } from \"@esfaenza/extensions\";\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { ChangeDetectorRef } from \"@angular/core\";\r\n\r\n/** Componente che dà all'utente la possibilità di selezionare una data */\r\n@Component({\r\n selector: \"form-date\",\r\n templateUrl: \"form-date.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormDateComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs */\r\n @Input() JsDates: boolean = false;\r\n\r\n /** @ignore Costruttore */\r\n constructor(private datesExts: DateService, cdr: ChangeDetectorRef, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE: boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.EvaluatedModel = this.datesExts.getFormatted(obj, true, false);\r\n super.writeValue(obj);\r\n }\r\n\r\n changed(): void {\r\n let newlyEvaluatedModel = this.Model ? this.datesExts.getFormatted(this.Model, true, false) : '';\r\n\r\n // Evito che l'inputChange lato html mi faccia sparare fuori dai changed finti. L'input cambia solo quando cambia il modello presentato\r\n if (newlyEvaluatedModel != this.EvaluatedModel) {\r\n this.EvaluatedModel = newlyEvaluatedModel\r\n super.changed(null, false, true);\r\n }\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-date [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [id]=\"GeneratedName\"\r\n [Readonly]=\"Readonly\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-date>\r\n</ng-template>","// Angular\r\nimport { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Host, Inject, Input, Optional, Output, Self } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\nimport { ChangeDetectorRef } from \"@angular/core\";\r\n\r\n/** Semplice componente di Input testuale, con eventuale prefisso/suffisso */\r\n@Component({\r\n selector: \"form-input\",\r\n templateUrl: \"form-input.component.html\",\r\n styleUrls: [\"./form-input.component.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormInputComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Indica se l'input relativo è di tipo Password */\r\n @Input() public Password: boolean = false;\r\n\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 /** Delegato per l'esecuzione di un'operazione al click del prefisso */\r\n @Output() onPrefixAction: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del suffisso */\r\n @ContentChild(\"suffix\", { static: false }) suffix;\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del prefisso */\r\n @ContentChild(\"prefix\", { static: false }) prefix;\r\n\r\n /** Indica la presenza o meno di un suffisso, si basa sulla \"truthiness\" della proiezione **suffix** */\r\n public HasSuffix: boolean = false;\r\n\r\n /** Indica la presenza o meno di un prefisso, si basa sulla \"truthiness\" della proiezione **prefix** */\r\n public HasPrefix: boolean = false;\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.EvaluatedModel = obj?.toString() || \"\";\r\n super.writeValue(obj);\r\n }\r\n\r\n /** @ignore */\r\n ngAfterContentInit() {\r\n this.HasSuffix = !!this.suffix;\r\n this.HasPrefix = !!this.prefix;\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-input [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\"\r\n [noValidate]=\"!Validation\"\r\n [Frozen]=\"Frozen\"\r\n [submitted]=\"Form?.submitted\"\r\n [Readonly]=\"Readonly\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n type=\"text\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}\"\r\n autocomplete=\"off\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [Password]=\"Password\">\r\n <ng-container *ngIf=\"HasSuffix\">\r\n <ng-template #suffix_internal>\r\n <span class=\"input-suffix\" matSuffix (click)=\"onSuffixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\r\n </span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"HasPrefix\">\r\n <ng-template #prefix_internal>\r\n <span matPrefix (click)=\"onPrefixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\r\n </span>\r\n </ng-template>\r\n </ng-container>\r\n </val-input>\r\n</ng-template>","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **FormSelectComponent**\r\n */\r\n@Injectable()\r\nexport class FormSelectComponentLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"it->en\", \"Seleziona\", [\"Select\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self, SimpleChanges, ChangeDetectorRef, TemplateRef, Host } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { FormSelectComponentLoc } from \"./form-select.component.loc\";\r\n\r\n/** Componente che permette di selezionare un valore da una lista di valori disponibili */\r\n@Component({\r\n selector: \"form-select\",\r\n providers: [{ provide: LocalizationService, useClass: FormSelectComponentLoc }],\r\n templateUrl: \"form-select.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormSelectComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Permette di specificare il testo della Label flottante material-style */\r\n @Input() SelectLabel: string = \"\";\r\n\r\n /**\r\n * Permette al componente di considerare questo valore come \"valore placeholder\"\r\n * \r\n * Si consiglia di mantenere il default\r\n */\r\n @Input() PlaceholderValue: string = '';\r\n\r\n /** Override del placeholder per select requried */\r\n @Input() RequiredPlaceholder: string = null;\r\n\r\n /**\r\n * Permette al componente di considerare questo valore come \"valore vuoto\"\r\n * \r\n * Si consiglia di mantenere il default\r\n */\r\n @Input() EmptyFieldValue: string = '-2000';\r\n\r\n /** Se **true** rimuove il simbolino di validazione (croce rossa o tick verde) */\r\n @Input() ShowValidationSymbol: boolean = true;\r\n\r\n /** Template per la visualizzazione delle opzioni */\r\n @Input() OptionTemplate: TemplateRef<any> = null;\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, public lc: LocalizationService, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n public ngOnChanges(changes: SimpleChanges) {\r\n let newSource = changes[\"Source\"];\r\n if (!newSource)\r\n return;\r\n\r\n let curr = newSource.currentValue;\r\n let prev = newSource.previousValue;\r\n\r\n // Se manca curr vuol dire che non ho un valore e posso ignorare (alla peggio deve arrivarmi un array vuoto)\r\n if (!curr)\r\n return;\r\n\r\n // Se manca prev vuol dire che è la prima assegnazione, lo considero un array vuoto e proseguo... ogni tanto viene chiamato una sola volta\r\n // ogni tanto viene chiamato due volte... è un pelo arbitrario ma vabbè\r\n if (!prev)\r\n prev = [];\r\n\r\n // Considero di aver ricevuto una nuova sorgente se:\r\n // 1: La sorgente nuova ha un numero di elementi diverso dalla sorgente vecchia\r\n // 2: Sia la sorgente nuova che vecchia hanno almeno un elemento e l'id del primo elemento della sorgente nuova è diverso dall'id del primo elemento della sorgente vecchia\r\n if (newSource && (curr.length != prev.length || (curr.length > 0 && curr[0][this.IdField] != prev[0][this.IdField]))) {\r\n /*\r\n * NGBUG:\r\n * Uso questo escamotage per distruggere il val-select e ricrearlo\r\n * Purtroppo una volta bindato a una sorgente, cambiargliela sotto significa mandare in palla material\r\n * che si mette a far floattare la label anche se il valore e' vuoto\r\n * Distruggendo il componente e ricreandolo material riparte da 0 e non da' problemi.\r\n * Ovviamente lo faccio solo quando ho una SelectLabel, altrimenti non ho problemi di floattamenti\r\n */\r\n if (!this.SourceFirstBind && this.SelectLabel) {\r\n\r\n this.detatchPreviousAndRetatchNext((afterStuff) => {\r\n this.BoundSource = null;\r\n setTimeout(() => {\r\n this.tryBindSourceDisplay();\r\n this.EvaluatedModel = this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == this.Model)?.description : \"\";\r\n this.cdr.detectChanges();\r\n setTimeout(() => { afterStuff(); })\r\n\r\n });\r\n });\r\n }\r\n else\r\n this.detatchPreviousAndRetatchNext((afterStuff) => {\r\n this.tryBindSourceDisplay();\r\n this.EvaluatedModel = this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == this.Model)?.description : \"\";\r\n this.cdr.detectChanges();\r\n setTimeout(() => { afterStuff(); })\r\n });\r\n\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private detatchPreviousAndRetatchNext(doStuff: Function) {\r\n if (this.DisplayMode) {\r\n doStuff(() => { });\r\n return;\r\n }\r\n\r\n if(this.validationControl && this.Form)\r\n this.Form.removeControl(this.validationControl);\r\n\r\n setTimeout(() => {\r\n doStuff(() => {\r\n if (this.validationControl && this.Form)\r\n this.Form.addControl(this.validationControl);\r\n else\r\n if (this.validationControl && this.Form) {\r\n this.Form.addControl(this.validationControl);\r\n }\r\n else if (!this.validationControl && this.Form) {\r\n // Questo messaggio ha senso solo se almeno il form esiste... se non esiste sticazzi insomma...\r\n console.error(`Impossibile aggiungere il componente di validazione per ${this.GeneratedName}, le validazioni potrebbero funzionare in maniera erratica`)\r\n }\r\n });\r\n })\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.EvaluatedModel = this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == obj)?.description : \"\";\r\n\r\n super.writeValue(obj);\r\n }\r\n\r\n changed() {\r\n this.EvaluatedModel = this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == this.Model)?.description : \"\";\r\n\r\n super.changed(null, false, true);\r\n }\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n\r\n <!-- Select vuota per quando non ho Sorgenti dati da cui selezionare. Uguale identica alla piena ma senza option\r\n Purtroppo devono essere due componenti distinti perché una select una volta creata non riesce più ad adattarsi ai cambi di options -->\r\n <val-select *ngIf=\"!BoundSource || BoundSource.length == 0\"\r\n [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\"\r\n [attr.required]=\"Required\"\r\n [noValidate]=\"!Validation\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : ('Seleziona' | localize : lc) + '...')) : Placeholder\"\r\n [placeHolderValue]=\"PlaceholderValue\"\r\n [submitted]=\"Form?.submitted\"\r\n [emptyFieldValue]=\"Required || Placeholder || SelectLabel ? EmptyFieldValue : ''\"\r\n [(ngModel)]=\"Model\"\r\n [showValidationSymbol]=\"ShowValidationSymbol\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}_zero\"\r\n (inputChange)=\"Model = $event == EmptyFieldValue ? (Required? PlaceholderValue : '') : $event; changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n #validationControl=\"ngModel\">\r\n </val-select>\r\n\r\n <!-- Select vera e propria per quando arrivano i dati -->\r\n <val-select *ngIf=\"BoundSource && BoundSource.length > 0\"\r\n [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\"\r\n [attr.required]=\"Required\"\r\n [noValidate]=\"!Validation\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [showValidationSymbol]=\"ShowValidationSymbol\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : ('Seleziona' | localize : lc) + '...')) : Placeholder\"\r\n [placeHolderValue]=\"PlaceholderValue\"\r\n [submitted]=\"Form?.submitted\"\r\n [emptyFieldValue]=\"Required || Placeholder || SelectLabel ? EmptyFieldValue : ''\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}_filled\"\r\n (inputChange)=\"Model = $event == EmptyFieldValue ? (Required? PlaceholderValue : '') : $event; changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n #validationControl=\"ngModel\">\r\n\r\n <ng-container *ngIf=\"OptionTemplate\">\r\n <option *ngFor=\"let obj of Source\" [value]=\"obj[IdField]\">\r\n <ng-container *ngTemplateOutlet=\"OptionTemplate; context: { $implicit : obj }\"></ng-container>\r\n </option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!OptionTemplate\">\r\n <option *ngFor=\"let obj of BoundSource\" [value]=\"obj.id\">\r\n {{obj.description}}\r\n </option>\r\n </ng-container>\r\n </val-select>\r\n</ng-template>","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **FormMultiSelectComponent**\r\n */\r\n@Injectable()\r\nexport class FormMultiSelectComponentLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"en->it\", \"Select everything\", [\"Seleziona tutto\"]);\r\n super.set(\"en->it\", \"Deselect everything\", [\"Deseleziona tutto\"]);\r\n super.set(\"en->it\", \"Select one or more values...\", [\"Seleziona uno o più valori...\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, Host, Inject, Input, Optional, Self, SimpleChanges, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { FormMultiSelectComponentLoc } from \"./form-multiselect.component.loc\";\r\nimport { ChangeDetectorRef } from \"@angular/core\";\r\n\r\n/**\r\n * Componente che permette di effettuare una selezione multipla fra gli oggetti passati nell'Input **Source**\r\n * \r\n * N.B: Al contrario degli altri componenti form-* questo viene tenuto con **changeDetection: ChangeDetectionStrategy.Default** in quanto il componente \r\n * utilizzato internamente (angular2-multiselect) non è stato assolutamente pensato per essere usato con **ChangeDetectionStrategy.OnPush**\r\n */\r\n@Component({\r\n selector: \"form-multiselect\",\r\n viewProviders: [{ provide: LocalizationService, useClass: FormMultiSelectComponentLoc }],\r\n templateUrl: \"form-multiselect.component.html\",\r\n styleUrls: [\"form-multiselect.component.css\"],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.Default\r\n})\r\nexport class FormMultiSelectComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /**\r\n * Modello temporaneo **NON** compatibile in maniera diretta con il componente **angular2-multiselect** usato internamente\r\n * \r\n * Serve da appoggio per effettuare un re-bind qualora la sorgente cambiasse e qualora **RebindModelAfterSource** fosse true\r\n */\r\n private TmpModel: string | string[] | {id: string, description: string}[] = [];\r\n\r\n /** Indica se la prossima modifica alla Source deve anche effettuare un re-bind del modello. Serve se la **BoundSource** passa da non avere oggetti ad averne */\r\n private RebindModelAfterSource: boolean = false;\r\n\r\n /** Permette di specificare il testo della Label flottante material-style */\r\n @Input() SelectLabel: string = \"\";\r\n\r\n /** Permette al componente di gestire come modello non una lista di chiavi, ma una lista di KeyValue */\r\n @Input() UseKeyValues: boolean = false;\r\n\r\n /** Indica al componente di emettere una lista di chiavi separate da virgola piuttosto che una lista vera e propria di chiavi/KeyValue */\r\n @Input() UseCommaSeparatedList: boolean = false;\r\n\r\n /** Indica se effettuare l'emit come lista di valori in un Json */\r\n @Input() UseJsonList: boolean = false;\r\n\r\n /** Impostazioni del componente interno **angular2-multiselect** */\r\n public Settings: { selectAllText: string, unSelectAllText: string, text: string, enableCheckAll: boolean, disabled: boolean, labelKey: string, tagToBody: boolean } = null;\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, public lc: LocalizationService, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n\r\n // Default dei settings per evitare che siano mai nulli, altrimenti il cazzo di CuppaLab salta in araia che è veramente una bellezza\r\n this.evaluateSettings(false);\r\n }\r\n\r\n /** @ignore */\r\n public async ngOnChanges(changes: SimpleChanges) {\r\n const newSource = changes[\"Source\"];\r\n if (newSource)\r\n {\r\n this.tryBindSourceDisplay();\r\n if (this.RebindModelAfterSource) {\r\n this.writeValue(this.TmpModel);\r\n this.RebindModelAfterSource = false;\r\n }\r\n }\r\n\r\n const readonly = changes[\"Readonly\"];\r\n this.evaluateSettings(readonly ? readonly.currentValue ?? false : this.Readonly ?? false);\r\n }\r\n\r\n /**\r\n * Scrive i nuovi settings per il componente\r\n * \r\n * @param {boolean} disabled Indica se il componente dev'essere disabilitato o meno\r\n */\r\n private evaluateSettings(disabled: boolean) {\r\n this.Settings = {\r\n selectAllText: this.lc.loc(\"Select everything\"),\r\n unSelectAllText: this.lc.loc(\"Deselect everything\"),\r\n text: this.SelectLabel || this.lc.loc(\"Select one or more values...\"),\r\n enableCheckAll: true,\r\n disabled: disabled,\r\n labelKey: \"description\",\r\n tagToBody: false\r\n };\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n\r\n /**\r\n * Indica se il comopnente in questione è in grado di gestire ngControl nulli. \r\n * In questo componente è normale che sia così quindi restituisce semplicemente **true**\r\n * \r\n * @returns {boolean} **true** se gestisco ngControl nulli, **false** altrimenti\r\n */\r\n handleNullNgControl(): boolean {\r\n return true;\r\n }\r\n\r\n /** @ignore Override per gestire input in ingresso */\r\n writeValue(obj: any[] | string): void {\r\n this.TmpModel = obj;\r\n let toPass: { id: string, description: string }[] = [];\r\n\r\n if(this.UseCommaSeparatedList && obj && (typeof obj === 'string' || obj instanceof String))\r\n obj = (<string>obj).split(',');\r\n\r\n if(this.UseJsonList && obj && (typeof obj === 'string' || obj instanceof String))\r\n obj = JSON.parse(<string>obj);\r\n\r\n //Qui arrivano solo gli id, o {id: x, description: y} in caso sono in UseKeyValues, \r\n //devo tirare fuori gli oggetti relativi e piazzarli come lista per il Model\r\n if (obj && obj.length > 0) {\r\n (<any[]>obj).forEach(t => {\r\n let item = this.BoundSource.find(o => o.id == (this.UseKeyValues ? t.id : t));\r\n if (item)\r\n toPass.push(JSON.parse(JSON.stringify(item)));\r\n else if (!this.BoundSource || this.BoundSource.length == 0)\r\n this.RebindModelAfterSource = true;\r\n });\r\n }\r\n\r\n this.EvaluatedModel = toPass.map(t => t.description).join(', ');\r\n super.writeValue(toPass);\r\n }\r\n\r\n /** @ignore Override per gestire input in uscita */\r\n changed() {\r\n let toEmit = null;\r\n if (this.UseJsonList)\r\n toEmit = JSON.stringify((<any[]>this.Model).map(m => m.id));\r\n else if (!this.UseKeyValues && !this.UseCommaSeparatedList)\r\n toEmit = (<any[]>this.Model).map(m => m.id);\r\n else if (this.UseKeyValues)\r\n toEmit = (<any[]>this.Model).map(m => ({ id: m.id, description: m.description }));\r\n else if (this.UseCommaSeparatedList)\r\n toEmit = (<any[]>this.Model).map(m => m.id).join(',');\r\n\r\n this.EvaluatedModel = this.Model.map(t => t.itemName).join(', ');\r\n super.changed(toEmit, false, true);\r\n super.finalized();\r\n }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div [class.ms-placeholder]=\"!Model || Model.length == 0\" (click)=\"focused($event)\">\r\n <angular2-multiselect #validationControl=\"ngModel\" type=\"text\"\r\n [(ngModel)]=\"Model\" name=\"{{GeneratedName}}\"\r\n [settings]=\"Settings\" [data]=\"BoundSource\"\r\n (onSelect)=\"changed();\" \r\n (onDeSelect)=\"changed();\" \r\n (onSelectAll)=\"changed();\"\r\n (onDeSelectAll)=\"changed();\" \r\n (onDeSelectAll)=\"Model = []; changed();\">\r\n </angular2-multiselect>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Host, Inject, Input, Optional, Self } from \"@angular/core\";\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\n/** Componente che presenta una casella di testo tipicamente utilizzata per scrivere delle note o del log breve */\r\n@Component({\r\n selector: \"form-textarea\",\r\n templateUrl: \"form-textarea.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormTextareaComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Numero di righe da visualizzare di default */\r\n @Input() Rows: number;\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional()@Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.EvaluatedModel = obj?.toString() || \"\";\r\n super.writeValue(obj);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-textarea \r\n [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\"\r\n [noValidate]=\"!Validation\" \r\n [submitted]=\"Form?.submitted\" \r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [id]=\"GeneratedName\" \r\n [rows]=\"Rows\" \r\n [Readonly]=\"Readonly\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey app-no-resize' : 'app-no-resize'\" \r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\" \r\n autocomplete=\"off\" \r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\" \r\n #validationControl=\"ngModel\" \r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n >\r\n </val-textarea>\r\n</ng-template>","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **FormAutocompleteComponent**\r\n */\r\n@Injectable()\r\nexport class FormAutocompleteComponentLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"it->en\", \"Seleziona\", [\"Select\"])\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, Inject, Input, Optional, ChangeDetectorRef, Self, SimpleChanges, Host } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { Observable } from \"rxjs\";\r\n\r\n//Localizzazione\r\nimport { FormAutocompleteComponentLoc } from \"./form-autocomplete.component.loc\";\r\n\r\n/** Componente di input che si auto-completa in base al valore attuale */\r\n@Component({\r\n selector: \"form-autocomplete\",\r\n templateUrl: \"form-autocomplete.component.html\",\r\n providers: [{ provide: LocalizationService, useClass: FormAutocompleteComponentLoc }],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormAutocompleteComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Permette di specificare il testo della Label flottante material-style */\r\n @Input() SelectLabel: string = \"\";\r\n\r\n /** Contesto per la funzione di ricerca */\r\n @Input() SearchFunctionContext: any;\r\n\r\n /** Funzione di ricerca che verrà chiamata dal componente */\r\n @Input() SearchFunction: (search: string, byid: boolean, context?: any) => Observable<{ id: string, description: string }[]> = null;\r\n\r\n /** Numero minimo di caratteri con cui cercare */\r\n @Input() MinChars: number = 3;\r\n\r\n /** Definisce che ad ogni selezione deve chiudere la tendina */\r\n @Input() HideChoicesOnSelection: boolean = false;\r\n\r\n /** Override del placeholder per select requried */\r\n @Input() RequiredPlaceholder: string = null;\r\n\r\n /** Indica se i controlli devono essere effettuati tenendo conto del Case o meno. Vale solo qualora la **Source** fosse fornita */\r\n @Input() CaseSensitive: boolean = false;\r\n\r\n /** Indica se usare la modalità multiselezione o no */\r\n @Input() Multi: boolean = false;\r\n\r\n /** Indica se usare la modalità multiselezione o no */\r\n @Input() MultiElementsThreshold: number = 10;\r\n\r\n /** Indica il fatto che non c'è una Source da cui scegliere */\r\n @Input() UnboundMode: boolean = false;\r\n\r\n /**\r\n * Indica se ignorare il prossimo evento writeValue che normalmente dovrebbe richiedere la nuova source. Serve per quando l'utente seleziona un elemento:\r\n * Subito dopo partirebbe un altro evento modelChange che ricaricherebbe nuovamente la source\r\n */\r\n private ignoreNextWriteValue: boolean = false;\r\n\r\n /** Sorgente Bindata Filtrata in base al contenuto della casella di testo */\r\n public FilteredBoundSource: { id: string, description: string }[] = [];\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, public lc: LocalizationService, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE: boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(value: any): void {\r\n if (!value) return;\r\n\r\n if (this.SearchFunction && !this.UnboundMode) {\r\n\r\n this.doSearchProtected(value, true, this.SearchFunctionContext, (t) => {\r\n this.Source = t;\r\n this.tryBindSourceDisplay();\r\n setTimeout(() => { this.finalizeValue(value); });\r\n });\r\n return;\r\n }\r\n\r\n if (!this.Multi)\r\n this.finalizeValue(value);\r\n }\r\n\r\n /**\r\n * Dato un valore verifica se può restituire le informazioni trovate in **Source** con id uguale a **value** o se deve restituire il valore in se\r\n * \r\n * @param {any} value Valore scritto nell'input di testo\r\n */\r\n private finalizeValue(value: any) {\r\n var val = this.UnboundMode ? null : this.BoundSource.find(t => t.id == value);\r\n this.propagateChange(val ? val.id : value);\r\n\r\n // Alor... praticamente qui potrebbero arrivare degli switcheroni in cui il Model è uguale all'inizio e alla fine dello stack, per qualche motivo\r\n // quindi per assicurarmi che il valore venga preso correttamente faccio il classico metti a null poi metti su\r\n // Notare che mettere il modello a null scatena i writevalue ma tutti i writevalue che si collegao a questo giro dovrebbero essere NOOP su null\r\n this.Model = null;\r\n setTimeout(() => {\r\n this.Model = val ? val.description : value;\r\n this.EvaluatedModel = this.Model;\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n /**\r\n * Quando viene scritto un nuovo valore bisogna controllare se per botta di culo fosse un id, in tal caso dev'essere rieffettuato il bind\r\n * per mostrare solo la descrizione nell'autocomplete\r\n */\r\n public evaluateIdResearch(onFailure: Function) {\r\n let tmpModel = this.Model;\r\n \r\n if(this.UnboundMode)\r\n return;\r\n\r\n if (!tmpModel || !this.SearchFunction) {\r\n onFailure?.();\r\n return;\r\n }\r\n\r\n this.doSearchProtected(tmpModel, true, this.SearchFunctionContext, (t) => {\r\n if (t && t.length > 0) {\r\n this.Source = t;\r\n this.tryBindSourceDisplay();\r\n if (!this.Multi)\r\n setTimeout(() => { this.finalizeValue(tmpModel); });\r\n else\r\n this.cdr.markForCheck();\r\n }\r\n else\r\n onFailure?.();\r\n });\r\n }\r\n\r\n /**\r\n * Evento di filtro della sorgente dati in base all'input utente\r\n * \r\n * @param {string} event Input utente\r\n */\r\n public filterSource(event: string) {\r\n\r\n // Contorllo prima di tutto se è un ID. in caso contrario effettuo la ricerca\r\n this.evaluateIdResearch(() => {\r\n this.doFilterSource(event);\r\n })\r\n }\r\n\r\n doFilterSource(event: string){\r\n if (this.UnboundMode)\r\n return;\r\n\r\n if (this.ignoreNextWriteValue) {\r\n this.ignoreNextWriteValue = false;\r\n return;\r\n }\r\n\r\n // Quando filtro la source, se non devo ignorare l'evento devo comunque assicurarmi di impostare il valore selezionato a null\r\n if (!this.Multi)\r\n super.changed(null);\r\n\r\n if (!event && this.MinChars == 0 && !this.SearchFunction) {\r\n this.FilteredBoundSource = this.BoundSource;\r\n this.cdr.markForCheck();\r\n return;\r\n }\r\n\r\n if (!event || event.length < this.MinChars) {\r\n this.FilteredBoundSource = [];\r\n this.cdr.markForCheck();\r\n return;\r\n }\r\n\r\n if (!this.SearchFunction && (!this.Source || this.Source.length == 0))\r\n throw \"Impossibile filtrare gli elementi senza una funzione di ricerca che restituisca una lista di { id: string, description: string }\";\r\n\r\n if (this.SearchFunction) {\r\n this.throttla(\"filtersource\", () => {\r\n this.doSearchProtected(event, false, this.SearchFunctionContext, (t) => {\r\n this.Source = t;\r\n this.tryBindSourceDisplay();\r\n // In questo caso è già filtrata dalla SearchFunction\r\n this.FilteredBoundSource = this.BoundSource;\r\n this.removeFilteredSourceOnDescriptionSelection();\r\n this.cdr.markForCheck();\r\n })\r\n }, 400);\r\n }\r\n else {\r\n this.throttla(\"filtersource\", () => {\r\n // In questo caso devo filtrare io in memoria\r\n this.FilteredBoundSource = this.BoundSource.filter(t => (this.CaseSensitive && t.description.includes(event)) || (!this.CaseSensitive && t.description.toLowerCase().includes(event.toLowerCase())));\r\n this.removeFilteredSourceOnDescriptionSelection();\r\n this.cdr.markForCheck();\r\n }, 100);\r\n }\r\n }\r\n\r\n timer = null;\r\n maxCallsPerSecond = 4;\r\n callsDoneThisThreeSeconds = 0;\r\n\r\n // Permetto al massimo 4 chiamate ogni 3 secondi, se nell'arco di 3 secondi ci sono più di 4 chiamate, ignoro le eccedenti\r\n private doSearchProtected(search: string, byid: boolean, context?: any, onRes?: Function) {\r\n if (!this.timer) {\r\n this.timer = setTimeout(() => {\r\n this.callsDoneThisThreeSeconds = 0;\r\n clearTimeout(this.timer);\r\n this.timer = null;\r\n }, 3000);\r\n }\r\n\r\n if (this.callsDoneThisThreeSeconds >= this.maxCallsPerSecond)\r\n return;\r\n\r\n this.callsDoneThisThreeSeconds++;\r\n this.SearchFunction(search, byid, context).subscribe(t => {\r\n onRes(t);\r\n });\r\n }\r\n\r\n /** @ignore */\r\n private removeFilteredSourceOnDescriptionSelection() {\r\n if (this.FilteredBoundSource.length == 1 && (this.FilteredBoundSource[0].description === this.Model) && !this.Multi) {\r\n let model = this.BoundSource[0].id\r\n this.Model = model;\r\n this.EvaluatedModel = this.BoundSource[0].description;\r\n this.FilteredBoundSource = [];\r\n setTimeout(() => { this.finalizeValue(model); });\r\n }\r\n }\r\n\r\n /** @ignore */\r\n public ngOnChanges(changes: SimpleChanges) {\r\n let newSource = changes[\"Source\"];\r\n if (newSource) {\r\n this.tryBindSourceDisplay();\r\n\r\n // Prima assegnazione se cambia la source sotto (quindi se viene bindata direttamente da HTML)\r\n if ((this.Model?.length || 0) >= this.MinChars && !this.SearchFunction)\r\n this.FilteredBoundSource = this.BoundSource;\r\n else\r\n this.FilteredBoundSource = [];\r\n\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n /** @ignore Override che marca anche il prossimo evento di filterSource da ignorare */\r\n changed(forcedValue: any = null, markForCheck: boolean = false) {\r\n if (!this.Multi)\r\n this.ignoreNextWriteValue = true;\r\n\r\n if (forcedValue == \"\" && this.Multi)\r\n this.Model = \"\";\r\n\r\n var selecteds: string[] = forcedValue ? [forcedValue] : this.Model ? (this.Model.Multi ? this.Model.split(',') : [this.Model]) : [];\r\n this.EvaluatedModel = selecteds.map(s => this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == s)?.description : this.UnboundMode ? s : \"\").join(', ');\r\n\r\n super.changed(forcedValue, markForCheck);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n\r\n //******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate\r\n //TODO: spostarla in un metodo di utilità (esfaenza/extensions)\r\n /** @ignore */\r\n private executionTimers: { [index: string]: any } = {};\r\n /** @ignore */\r\n private throttla(id: string, func: Function, throttleTime: number): void {\r\n //Se ho la funzione che vuole eseguire ripulisco quel timeout\r\n if (this.executionTimers[id])\r\n clearTimeout(this.executionTimers[id]);\r\n\r\n //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi\r\n this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);\r\n }\r\n //*************************\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n<!-- Form-Model: {{Model}} -->\r\n<ng-template #controlTemplate>\r\n <val-autocomplete *ngIf=\"!Multi\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n type=\"text\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"filterSource($event);\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n (optionChange)=\"changed($event);\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : (('Seleziona' | localize : lc) + '...'))) : Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [FilteredSource]=\"FilteredBoundSource\">\r\n </val-autocomplete>\r\n\r\n <val-autocomplete-multi *ngIf=\"Multi\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n [ChipThreshold]=\"MultiElementsThreshold\"\r\n [HideChoicesOnSelection]=\"HideChoicesOnSelection\"\r\n type=\"text\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"filterSource($event);\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n (optionChange)=\"changed($event);\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : (('Seleziona' | localize : lc) + '...'))) : Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [FilteredSource]=\"FilteredBoundSource\"\r\n [UnboundMode]=\"UnboundMode\">\r\n\r\n </val-autocomplete-multi>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\nimport { Component, Inject, Optional, Self, Host, Input, ChangeDetectorRef, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\nimport { NgxMatDateAdapter } from \"@angular-material-components/datetime-picker\";\r\n\r\n// Esfaenza\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { ACO_CUSTOMKEY } from '../../tokens';\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\ndeclare var dayjs: any;\r\n\r\n/** Componente che identifica la selezione di un orario */\r\n@Component({\r\n selector: \"form-time\",\r\n templateUrl: \"form-time.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormTimeComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Mostra o meno gli spinner dove cliccare per aumentare/diminuire le componenti dell'orologio (ore, minuti e secondi) */\r\n @Input() ShowSpinners: boolean = false;\r\n\r\n /** Imposta lo step (minimo avanzamento) per la cella \"ore\" */\r\n @Input() StepHour: number = 1;\r\n\r\n /** Imposta lo step (minimo avanzamento) per la cella \"minuti\" */\r\n @Input() StepMinute: number = 1;\r\n\r\n /** Imposta lo step (minimo avanzamento) per la cella \"secondi\" */\r\n @Input() StepSecond: number = 5;\r\n\r\n /** Indica se mostrare i secondi o meno */\r\n @Input() ShowSeconds: boolean = false;\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 /** @ignore */\r\n constructor(cdr: ChangeDetectorRef, private dateAdapter: NgxMatDateAdapter<any>, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, true);\r\n }\r\n\r\n /** @ignore Override per gestire input in ingresso */\r\n writeValue(obj: any): void {\r\n\r\n //Qualsiasi cosa mi arrivi devo ricondurla a un dayjs\r\n switch (this.InOutFormat) {\r\n case 'date':\r\n obj = dayjs(obj);\r\n this.EvaluatedModel = obj.format('HH:mm:ss');\r\n break;\r\n case 'timestring':\r\n const [hours, minutes, seconds] = (obj || \"00:00:00\").split(\":\");\r\n obj = dayjs().hour(parseInt(hours ?? 0)).minute(parseInt(minutes ?? 0)).second(parseInt(seconds ?? 0));\r\n this.EvaluatedModel = `${hours || '00'}:${minutes || '00'}:${seconds || '00'}`;\r\n break;\r\n case 'dayjs':\r\n obj = obj;\r\n this.EvaluatedModel = obj.format('HH:mm:ss');\r\n break;\r\n }\r\n\r\n super.writeValue(obj);\r\n }\r\n\r\n /** @ignore Override per gestire input in uscita */\r\n changed() {\r\n var toEmit = this.dateAdapter.clone(this.Model);\r\n\r\n switch (this.InOutFormat) {\r\n case 'date':\r\n toEmit = toEmit.toDate();\r\n this.EvaluatedModel = toEmit.format('HH:mm:ss');\r\n break;\r\n case 'timestring':\r\n toEmit = toEmit.format(\"HH:mm\" + (this.ShowSeconds ? \":ss\" : \"\"));\r\n this.EvaluatedModel = toEmit;\r\n break;\r\n case 'dayjs':\r\n toEmit = toEmit;\r\n this.EvaluatedModel = toEmit.format('HH:mm:ss');\r\n break;\r\n }\r\n\r\n super.changed(toEmit);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <ngx-mat-timepicker name=\"{{GeneratedName}}\" #elementRef #baseInput=\"ngModel\" [(ngModel)]=\"Model\" [disabled]=\"Readonly\"\r\n [showSpinners]=\"ShowSpinners\" [stepHour]=\"StepHour\" [stepMinute]=\"StepMinute\" [stepSecond]=\"StepSecond\"\r\n [showSeconds]=\"ShowSeconds\" (ngModelChange)=\"changed()\" #validationControl=\"ngModel\">\r\n </ngx-mat-timepicker>\r\n\r\n</ng-template>","// Angular\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatLegacyAutocompleteModule as MatAutocompleteModule } from '@angular/material/legacy-autocomplete';\r\nimport { MatLegacyInputModule as MatInputModule } from \"@angular/material/legacy-input\";\r\nimport { MatLegacyChipsModule as MatChipsModule } from '@angular/material/legacy-chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatLegacyCheckboxModule as MatCheckboxModule } from '@angular/material/legacy-checkbox';\r\n\r\n// Es\r\nimport { LocalizationModule } from \"@esfaenza/localizations\";\r\nimport { MatDayjsDateModule } from '@esfaenza/material-dayjs-adapter';\r\nimport { CurrencyMaskModule } from '@esfaenza/ngx-currency-mask';\r\n\r\n// Librerie / Modelli\r\nimport { AngularMultiSelectModule } from \"angular2-multiselect-dropdown\";\r\nimport { NgxMatDateAdapter, NgxMatDatetimePickerModule, NGX_MAT_DATE_FORMATS, NgxMatTimepickerModule } from '@angular-material-components/datetime-picker';\r\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\r\n\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE, FAV_SLIDER_MODE } from './tokens';\r\nimport { FormsAndValidationsModuleConfig } from './models/FormsAndValidationsModuleConfig';\r\nimport { CustomRequiredDirective } from './validations/customValidators/CustomRequiredDirective';\r\nimport { NgxExpandedDayJsDateAdapter } from './models/dayjs-adapter/dayjs-date-adapter';\r\n\r\n// Validations\r\nimport { ValidationSelectComponent } from './validations/validation-select/validation-select.component';\r\nimport { ValidationDateComponent } from './validations/validation-date/validation-date.component';\r\nimport { ValidationCurrencyComponent } from './validations/validation-currency/validation-currency.component';\r\nimport { ValidationTextAreaComponent } from './validations/validation-text-area/validation-text-area.component';\r\nimport { ValidationInputComponent } from './validations/validation-input/validation-input.component';\r\nimport { ValidationDateTimeComponent } from './validations/validation-datetime/validation-datetime.component';\r\nimport { ValidationAutocompleteComponent } from './validations/validation-autocomplete/validation-autocomplete.component';\r\nimport { ValidationAutocompleteMultiComponent } from './validations/validation-autocomplete-multi/validation-autocomplete-multi.component';\r\n\r\n// Forms\r\nimport { FormFileComponent } from './forms/form-file/form-file.component';\r\nimport { FormDateTimeComponent } from './forms/form-datetime/form-datetime.component';\r\nimport { FormAdaptiveComponent } from './forms/form-adaptive/form-adaptive.component';\r\nimport { FormEmptyComponent } from './forms/form-empty/form-empty.component';\r\nimport { FormTemplateComponent } from './forms/form-template/form-template.component';\r\nimport { FormErrorComponent } from './forms/form-error/form-error.component';\r\nimport { FormInfoComponent } from './forms/form-info/form-info.component';\r\nimport { FormCheckboxComponent } from './forms/form-checkbox/form-checkbox.component';\r\nimport { FormDateComponent } from './forms/form-date/form-date.component';\r\nimport { FormInputComponent } from './forms/form-input/form-input.component';\r\nimport { FormSelectComponent } from './forms/form-select/form-select.component';\r\nimport { FormMultiSelectComponent } from './forms/form-multiselect/form-multiselect.component';\r\nimport { FormTextareaComponent } from './forms/form-textarea/form-textarea.component';\r\nimport { FormAutocompleteComponent } from './forms/form-autocomplete/form-autocomplete.component';\r\nimport { FormTimeComponent } from './forms/form-time/form-time.component';\r\n\r\n/**\r\n * Formato in display (modalità lunga, con ore, minuti e secondi) delle date per tutti i componenti che utilizzino input data.\r\n * \r\n * Da convenzione è sempre quello italiano quindi viene cablato\r\n */\r\nconst formats_long = {\r\n parse: { dateInput: 'DD/MM/YYYY HH:mm:ss' },\r\n display: {\r\n dateInput: 'DD/MM/YYYY HH:mm:ss',\r\n monthYearLabel: 'MM YYYY',\r\n dateA11yLabel: 'DD/MM/YYYY HH:mm:ss',\r\n monthYearA11yLabel: 'MM YYYY',\r\n }\r\n};\r\n\r\n/**\r\n * Componenti Dichiarati ed esportati dalla libreria\r\n */\r\nconst COMPONENTS = [\r\n ValidationInputComponent,\r\n ValidationSelectComponent,\r\n ValidationDateComponent,\r\n CustomRequiredDirective,\r\n ValidationCurrencyComponent,\r\n ValidationTextAreaComponent,\r\n FormCheckboxComponent,\r\n FormDateComponent,\r\n FormEmptyComponent,\r\n FormInputComponent,\r\n FormSelectComponent,\r\n FormTextareaComponent,\r\n FormTemplateComponent,\r\n FormErrorComponent,\r\n FormInfoComponent,\r\n FormAdaptiveComponent,\r\n FormMultiSelectComponent,\r\n FormFileComponent,\r\n ValidationAutocompleteComponent,\r\n ValidationAutocompleteMultiComponent,\r\n FormAutocompleteComponent,\r\n FormDateTimeComponent,\r\n ValidationDateTimeComponent,\r\n FormTimeComponent\r\n];\r\n\r\n/**\r\n * Moduli utilizzati solo dalla libreria\r\n */\r\nconst MODULES = [\r\n CommonModule,\r\n FormsModule,\r\n LocalizationModule,\r\n MatInputModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatCheckboxModule,\r\n MatDatepickerModule,\r\n MatDayjsDateModule,\r\n TooltipModule,\r\n CurrencyMaskModule,\r\n MatAutocompleteModule,\r\n NgxMatDatetimePickerModule,\r\n NgxMatTimepickerModule\r\n];\r\n\r\n/**\r\n * Moduli utilizzati dalla libreria e che devono essere esposti all'esterno\r\n */\r\nconst MODULES_TO_EXPORT = [\r\n AngularMultiSelectModule\r\n];\r\n\r\n@NgModule({\r\n imports: [...MODULES, ...MODULES_TO_EXPORT],\r\n declarations: [...COMPONENTS],\r\n exports: [...MODULES_TO_EXPORT, ...COMPONENTS]\r\n})\r\nexport class FormsAndValidationsModule {\r\n static forRoot(config?: FormsAndValidationsModuleConfig): ModuleWithProviders<FormsAndValidationsModule> {\r\n return {\r\n ngModule: FormsAndValidationsModule,\r\n providers: [\r\n { provide: FAV_DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false },\r\n { provide: ACO_CUSTOMKEY, useValue: config?.acocustom || null },\r\n { provide: NGX_MAT_DATE_FORMATS, useValue: formats_long },\r\n { provide: FAV_SLIDER_MODE, useValue: config?.sliderMode != null ? config?.sliderMode : false },\r\n { provide: NgxMatDateAdapter, useClass: NgxExpandedDayJsDateAdapter },\r\n ]\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of forms-and-validations\r\n */\r\n\r\n//models\r\nexport * from './lib/models/AppFile';\r\nexport * from './lib/models/ChangeEvent';\r\nexport * from './lib/models/FormsAndValidationsModuleConfig';\r\nexport * from './lib/models/dayjs-adapter/dayjs-date-adapter';\r\nexport * from './lib/tokens';\r\n\r\n //module\r\nexport * from './lib/forms-and-validations.module';\r\n\r\n//validations\r\nexport * from './lib/validations/validation-datetime/validation-datetime.component';\r\nexport * from './lib/validations/validation-input/validation-input.component';\r\nexport * from './lib/validations/validation-date/validation-date.component';\r\nexport * from './lib/validations/validation-select/validation-select.component';\r\nexport * from './lib/validations/validation-text-area/validation-text-area.component';\r\nexport * from './lib/validations/validation-currency/validation-currency.component';\r\nexport * from './lib/validations/validation-autocomplete/validation-autocomplete.component';\r\nexport * from './lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component';\r\n\r\n//directives\r\nexport * from './lib/validations/customValidators/CustomRequiredDirective';\r\n\r\n//forms\r\nexport * from './lib/forms/form-datetime/form-datetime.component';\r\nexport * from './lib/forms/form-adaptive/form-adaptive.component';\r\nexport * from './lib/forms/form-empty/form-empty.component';\r\nexport * from './lib/forms/form-template/form-template.component';\r\nexport * from './lib/forms/form-error/form-error.component';\r\nexport * from './lib/forms/form-info/form-info.component';\r\nexport * from './lib/forms/form-checkbox/form-checkbox.component';\r\nexport * from './lib/forms/form-date/form-date.component';\r\nexport * from './lib/forms/form-input/form-input.component';\r\nexport * from './lib/forms/form-select/form-select.component';\r\nexport * from './lib/forms/form-textarea/form-textarea.component';\r\nexport * from './lib/forms/form-autocomplete/form-autocomplete.component';\r\nexport * from './lib/forms/form-file/form-file.component';\r\nexport * from './lib/forms/form-time/form-time.component';\r\nexport * from './lib/forms/form-multiselect/form-multiselect.component';\r\nexport * from './lib/forms/base-form-control';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4","i7.CustomRequiredDirective","i5","i6","i8","i7","i9","MatAutocompleteTrigger","i10","i11","i1","i5.ValidationDateTimeComponent","i7.ValidationInputComponent","i8.ValidationSelectComponent","i9.ValidationDateComponent","i10.ValidationCurrencyComponent","i11.ValidationAutocompleteComponent","i12.ValidationDateTimeComponent","i2.ValidationInputComponent","i5.ValidationDateComponent","i5.ValidationInputComponent","i5.ValidationSelectComponent","i4.ValidationTextAreaComponent","i5.ValidationAutocompleteComponent","i6.ValidationAutocompleteMultiComponent","MatInputModule","MatChipsModule","MatCheckboxModule","MatAutocompleteModule"],"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/FormsAndValidationsModuleConfig.ts","../../../projects/forms-and-validations/src/lib/models/dayjs-adapter/dayjs-date-adapter.ts","../../../projects/forms-and-validations/src/lib/tokens.ts","../../../projects/forms-and-validations/src/lib/validations/customValidators/CustomRequiredDirective.ts","../../../projects/forms-and-validations/src/lib/validations/base-validation.ts","../../../projects/forms-and-validations/src/lib/validations/base-validation.loc.ts","../../../projects/forms-and-validations/src/lib/validations/validation-select/validation-select.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-select/validation-select.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-date/validation-date.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-date/validation-date.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-input/validation-input.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-input/validation-input.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-currency/validation-currency.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-currency/validation-currency.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-text-area/validation-text-area.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-text-area/validation-text-area.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-datetime/validation-datetime.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-datetime/validation-datetime.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-autocomplete/validation-autocomplete.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-autocomplete/validation-autocomplete.component.html","../../../projects/forms-and-validations/src/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.ts","../../../projects/forms-and-validations/src/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.html","../../../projects/forms-and-validations/src/lib/forms/base-form-control.ts","../../../projects/forms-and-validations/src/lib/forms/form-file/form-file.component.loc.ts","../../../projects/forms-and-validations/src/lib/forms/form-file/form-file.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-file/form-file.component.html","../../../projects/forms-and-validations/src/lib/forms/form-datetime/form-datetime.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-datetime/form-datetime.component.html","../../../projects/forms-and-validations/src/lib/forms/form-adaptive/form-adaptive.component.loc.ts","../../../projects/forms-and-validations/src/lib/forms/form-adaptive/form-adaptive.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-adaptive/form-adaptive.component.html","../../../projects/forms-and-validations/src/lib/forms/form-empty/form-empty.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-empty/form-empty.component.html","../../../projects/forms-and-validations/src/lib/forms/form-template/form-template.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-template/form-template.component.html","../../../projects/forms-and-validations/src/lib/forms/form-error/form-error.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-error/form-error.component.html","../../../projects/forms-and-validations/src/lib/forms/form-info/form-info.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-info/form-info.component.html","../../../projects/forms-and-validations/src/lib/forms/form-checkbox/form-checkbox.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-checkbox/form-checkbox.component.html","../../../projects/forms-and-validations/src/lib/forms/form-date/form-date.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-date/form-date.component.html","../../../projects/forms-and-validations/src/lib/forms/form-input/form-input.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-input/form-input.component.html","../../../projects/forms-and-validations/src/lib/forms/form-select/form-select.component.loc.ts","../../../projects/forms-and-validations/src/lib/forms/form-select/form-select.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-select/form-select.component.html","../../../projects/forms-and-validations/src/lib/forms/form-multiselect/form-multiselect.component.loc.ts","../../../projects/forms-and-validations/src/lib/forms/form-multiselect/form-multiselect.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-multiselect/form-multiselect.component.html","../../../projects/forms-and-validations/src/lib/forms/form-textarea/form-textarea.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-textarea/form-textarea.component.html","../../../projects/forms-and-validations/src/lib/forms/form-autocomplete/form-autocomplete.component.loc.ts","../../../projects/forms-and-validations/src/lib/forms/form-autocomplete/form-autocomplete.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-autocomplete/form-autocomplete.component.html","../../../projects/forms-and-validations/src/lib/forms/form-time/form-time.component.ts","../../../projects/forms-and-validations/src/lib/forms/form-time/form-time.component.html","../../../projects/forms-and-validations/src/lib/forms-and-validations.module.ts","../../../projects/forms-and-validations/src/public-api.ts","../../../projects/forms-and-validations/src/esfaenza-forms-and-validations.ts"],"sourcesContent":["\r\n/**\r\n * Classe che identifica un file\r\n */\r\nexport class AppFile {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(){\r\n this.filename = \"\";\r\n this.fileb64 = \"\";\r\n this.nativefiles = [];\r\n }\r\n\r\n /**\r\n * Nome del file, Viene letto in Input e valorizzato in Output\r\n */\r\n filename: string; //I-O\r\n\r\n /**\r\n * B64 del file, Viene letto in Input ma non valorizzato in Output (non puà leggere dal filesystem)\r\n */\r\n fileb64: string; //I\r\n\r\n /**\r\n * Lista di file nativi collegati a questo input. Viene solo valorizzato in Output. Non è letto come Input\r\n */\r\n nativefiles: File[]; //O\r\n}","export 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 FormsAndValidationsModuleConfig {\r\n\r\n /** Chiave dei permessi Custom in cui ci sono le informazioni di Ownership */\r\n acocustom?: string;\r\n\r\n /** Abilita o meno la modalità di debug */\r\n debugMode?: boolean;\r\n\r\n /** Abilita o meno la modalità slider delle checkbox */\r\n sliderMode?: boolean;\r\n}","//Angular\r\nimport { Inject, Injectable } from \"@angular/core\";\r\nimport { MAT_DATE_LOCALE } from \"@angular/material/core\";\r\n\r\n//Libreria\r\n// Questa non è più usata, la tengo qui per crosscheck in caso di updates\r\n//import { NgxMatDateAdapter } from \"@angular-material-components/datetime-picker\";\r\nimport { DayJsDateAdapter } from \"@esfaenza/material-dayjs-adapter\";\r\nimport { Dayjs } from \"dayjs\";\r\n\r\n/**\r\n * Espansione dell'adapter di default di DayJs già utilizzato per i bind base su Material.\r\n * \r\n * Questa versione serve unicamente per i controlli **datetime-picker**, ma dato che io l'adapter già lo avevo lato **esfaenza/material-dayjs-adapter** \r\n * qui devo semplicemente aggiungere le funzioni non presenti nella mia implementazione che servono al **datetime-picker**\r\n */\r\n@Injectable()\r\nexport class NgxExpandedDayJsDateAdapter extends DayJsDateAdapter {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(@Inject(MAT_DATE_LOCALE) dateLocale: string) {\r\n super(dateLocale);\r\n }\r\n\r\n // Espando il mio DayJsDateAdapter con i metodi extra del NgxMatDateAdapter che servono per il material timepicker\r\n // Non potendo fare \"extends\" da due classi mi tocca tenerlo così senza type safety.... \r\n\r\n /**\r\n * Identifica se due date hanno lo stesso orario\r\n * \r\n * @param {DayJs} a Primo elemento del controllo\r\n * @param {DayJs} b Secondo elemento del controllo\r\n * @returns **true** se hanno lo stess orario, **false** altrimenti\r\n */\r\n isSameTime(a: Dayjs, b: Dayjs): boolean {\r\n if (a == null || b == null) return true;\r\n return this.getHour(a) === this.getHour(b)\r\n && this.getMinute(a) === this.getMinute(b)\r\n && this.getSecond(a) === this.getSecond(b);\r\n }\r\n\r\n /**\r\n * Copia dell'orario da una data all'altra, Modifica direttamente l'oggetto **toDate**\r\n * \r\n * @param {DayJs} toDate Data in cui copiare l'orario\r\n * @param {DayJs} fromDate Data da cui copiare l'orario\r\n */\r\n copyTime(toDate: Dayjs, fromDate: Dayjs) {\r\n this.setHour(toDate, this.getHour(fromDate));\r\n this.setMinute(toDate, this.getMinute(fromDate));\r\n this.setSecond(toDate, this.getSecond(fromDate));\r\n }\r\n\r\n /**\r\n * Mette a confronto due date\r\n * @param {Dayjs} first Prima data da confrontare\r\n * @param {Dayjs} second Seconda data da confrontare\r\n * @param {boolean} showSeconds Indica se considerare anche i secondi, di default no\r\n * @returns {number} 0 se le due date sono uguali, un numero minore di 0 se la prima data è precedente alla seconda e un numero maggiore di 0 altrimenti\r\n */\r\n compareDateWithTime(first: Dayjs, second: Dayjs, showSeconds?: boolean): number {\r\n let res = super.compareDate(first, second) ||\r\n this.getHour(first) - this.getHour(second) ||\r\n this.getMinute(first) - this.getMinute(second);\r\n\r\n if (showSeconds)\r\n res = res || this.getSecond(first) - this.getSecond(second);\r\n \r\n return res;\r\n }\r\n\r\n /**\r\n * Assegna a una data i valori di ore, minuti e secondi di default. \r\n * \r\n * Se non specificati vengono assegnati degli '0'\r\n * \r\n * @param {DayJs} date Data a cui assegnare i valori di default\r\n * @param {number[]} defaultTime Valori di default per ore, minuti e secondi, considerati 0 se non presenti\r\n */\r\n setTimeByDefaultValues(date: Dayjs, defaultTime: number[]) {\r\n if (!Array.isArray(defaultTime)) {\r\n throw Error('@Input DefaultTime should be an array');\r\n }\r\n this.setHour(date, defaultTime[0] || 0);\r\n this.setMinute(date, defaultTime[1] || 0);\r\n this.setSecond(date, defaultTime[2] || 0);\r\n }\r\n}","import { InjectionToken } from '@angular/core';\r\n\r\n/** Chiave che indica il prefisso dei Contesti Applicativi per permettere l'abilitazione/disabilitazione di input in maniera contestuale */\r\nexport const ACO_CUSTOMKEY: InjectionToken<string> = new InjectionToken<string>('ACO_CUSTOMKEY');\r\n\r\n/** Token che indica la lingua da utilizzare, sono supportate \"it-IT\" ed \"en-US\" */\r\nexport const FAV_DEBUG_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('FAV_DEBUG_MODE');\r\n\r\n/** Token che indica se far apparire l'input delle checkbox come slider o come input nativi */\r\nexport const FAV_SLIDER_MODE: InjectionToken<boolean> = new InjectionToken<boolean>('FAV_SLIDER_MODE');","// Angular\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from \"@angular/forms\";\r\nimport { Directive, Input } from \"@angular/core\";\r\n\r\n/**\r\n * Direttiva utilizzata per validazioni \"required\" custom, in modo da poter dire che anche se c'è un valore selezionato, ma quel valore lo considero null \r\n * allora la validazione fallisce. Attualmente usato nell'unico punto sensato: validation-select\r\n */\r\n@Directive({\r\n selector: '[customRequired]',\r\n providers: [{ provide: NG_VALIDATORS, useExisting: CustomRequiredDirective, multi: true }]\r\n})\r\nexport class CustomRequiredDirective implements Validator {\r\n\r\n /**\r\n * Lista di valori che vengono considerati \"vuoti\" seppur presenti\r\n */\r\n @Input(\"CustomNullValues\") NullValues: string[] = [];\r\n\r\n /**\r\n * booleano in modalità stringa (\"true\" o \"false\") che indica se applicare la validazione di obbligatorietà o meno\r\n */\r\n @Input('customRequired') public customRequired: boolean;\r\n\r\n /**\r\n * @ignore\r\n */\r\n validate(c: AbstractControl): { [key: string]: any; } {\r\n // Controllo solo per custom required a true, altrimenti qualsiasi valore mi va bene\r\n if (!this.customRequired)\r\n return null;\r\n\r\n return !c.value || this.NullValues.includes(c.value) ? { required: true } : null;\r\n }\r\n}","// Angular\r\nimport { EventEmitter, Input, Output, ViewChild, Directive, ElementRef, ChangeDetectorRef } from \"@angular/core\";\r\nimport { NgModel, RequiredValidator, Validator } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { TooltipDirective } from \"ngx-bootstrap/tooltip\";\r\nimport { Subject } from \"rxjs\";\r\nimport { ChangeEvent } from \"../models/ChangeEvent\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n/**\r\n * Classe astratta base che contiene le logiche / proprietà in comune a tutti i validatori\r\n * \r\n * Nota bene: I tooltip rallentano tantissimo la pagina perché il tizio che ha fatto ngx bootstrap non è capace\r\n */\r\n@Directive()\r\nexport abstract class BaseValidation {\r\n\r\n /** @ignore Constructor */\r\n constructor(protected cdr: ChangeDetectorRef) { }\r\n\r\n /**\r\n * Per non sovrascrivere l'originale con errori che spuntano da BE\r\n */\r\n public validationFailedBind: string;\r\n\r\n /**\r\n * Per gestire il cambio di messaggi di errore\r\n */\r\n private valueOnLastValidation: string;\r\n\r\n /**\r\n * Servizio di localizzazione del Componente\r\n */\r\n protected lc: LocalizationService;\r\n\r\n /**\r\n * Variabile per tenere in memoria lo stato di submit di questo componente\r\n */\r\n protected _submitted: boolean;\r\n\r\n /**\r\n * Variabile per tenere in memoria il fatto che il componente è forzato a invalido o no\r\n */\r\n protected _forceInvalid: boolean = false;\r\n\r\n /**\r\n * Indica se il valore è obbligatorio o opzionale\r\n */\r\n public required: boolean = false;\r\n\r\n /**\r\n * Query che raccoglie il tooltip in maniera statica (solo all'inizio)\r\n */\r\n @ViewChild(TooltipDirective, { static: false }) protected tooltip: TooltipDirective;\r\n\r\n /**\r\n * Query che raccoglie il tooltip in maniera dinamica (ad ogni change detection)\r\n * \r\n * @param {TooltipDirective} comp Elemento HTML a cui è applicata la direttiva del tooltip\r\n */\r\n @ViewChild(TooltipDirective, { static: true }) set tooltip_static(comp: TooltipDirective) {\r\n if (comp) { this.tooltip = comp; }\r\n };\r\n\r\n /**\r\n * Elemento HTML rappresentante l'Input\r\n */\r\n @ViewChild('htmlInput', { static: false }) htmlInput: ElementRef;\r\n\r\n /**\r\n * Query che raccoglie l'input o direttiva che contiene il valore in maniera statica (solo all'inizio)\r\n */\r\n @ViewChild(\"baseInput\", { static: false }) baseInput: NgModel;\r\n\r\n /**\r\n * Query che raccoglie l'input o direttiva che contiene il valore in maniera dinamica (ad ogni change detection)\r\n * \r\n * @param {NgModel} comp Elemento HTML associato al ngModel del componente\r\n */\r\n @ViewChild(\"baseInput\", { static: true }) set baseInput_static(comp: NgModel) {\r\n if (comp) { this.baseInput = comp; }\r\n };\r\n\r\n /**\r\n * Subject a cui l'oggetto interno si collega per effettuare il focus dell'elemento input sottostante\r\n */\r\n @Input() FocusSubject: Subject<void>;\r\n\r\n /**\r\n * @EXPERIMENTAL\r\n */\r\n @Input() SetValidationSubject: Subject<{ fieldName: string, error: string }>;\r\n\r\n /**\r\n * Indica se di default deve valutare il messaggio di errore in base al validatore che fallisce.\r\n * \r\n * Se fallisce il required validator scriverà che l'input è obbligatorio, se invece fallisce \r\n * un eventuale pattern validator scriverà che il formato dell'input è invalido\r\n */\r\n @Input() InferErrorMessages: boolean = true;\r\n\r\n /**\r\n * Modalità in cui viene mostrato il campo, 1-1 rispetto alle definizioni di Angular Material \r\n */\r\n @Input() FieldAppearence: \"legacy\" | \"standard\" | \"fill\" | \"outline\" = \"outline\";\r\n\r\n /**\r\n * Indica se il **Placeholder** dev'essere usato come una floating label di material o solo come un placeholder standard \r\n * \r\n * Ignorata lato autocomplete, autocomplete-multi e select in quanto hanno gestioni particolari di placeholder ecc...\r\n */\r\n @Input() FloatingLabel: boolean = true;\r\n\r\n /**\r\n * Messaggio da mostrare se la validazione fallisce. \r\n * \r\n * Se questo è valorizzato, il messaggio non viene valutato in automatico nonstante **InferErrorMessages** sia **true**\r\n */\r\n @Input() validationFailed: string = \"\";\r\n\r\n /**\r\n * Indica se il componente è in sola lettura\r\n */\r\n @Input() Readonly: boolean = false;\r\n\r\n /**\r\n * Indica le dimensioni del componente\r\n */\r\n @Input() widthPx: number = null;\r\n\r\n /**\r\n * Indica se il componente è disabilitato o no (più o meno stesso concetto del readonly)\r\n */\r\n @Input() disabled: boolean = false;\r\n\r\n /**\r\n * Eventuale placeholder da mostrare al posto del valore quando il valore è nullo / vuoto\r\n */\r\n @Input() placeholder: string = \"\";\r\n\r\n /**\r\n * Classi da applicare al componente\r\n */\r\n @Input() class: string = \"\";\r\n\r\n /**\r\n * Stili da applicare al componente\r\n */\r\n @Input() style: string = \"\";\r\n\r\n /**\r\n * Pattern di validazione dell'input\r\n */\r\n @Input() pattern: string = \"\";\r\n\r\n /**\r\n * Indica di non validare il componente\r\n */\r\n @Input() noValidate: boolean = false;\r\n\r\n /**\r\n * Indica se abilitare o meno l'autocompletamento di default del browser\r\n */\r\n @Input() autocomplete: string = \"off\";\r\n\r\n /**\r\n * Id dell'input. È importante impostarlo soprattutto se l'interfaccia generata dev'essere testata\r\n */\r\n @Input() id: string = \"\";\r\n\r\n /**\r\n * Evento che sostituisce l'ngModelChange facendolo funzionare in maniera un po' più consistente\r\n */\r\n @Output() inputChange: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /**\r\n * Evento che indica il focus avvenuto su un controllo\r\n */\r\n @Output() inputFocus: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /**\r\n * Evento che indica la finalizzazione del valore avvenuta su un controllo\r\n */\r\n @Output() inputFinalized: EventEmitter<any> = new EventEmitter<any>();\r\n \r\n /**\r\n * Imposta il componente come \"submitted\" scatenandone le validazioni ed eventualmente la visualizzazione del tooltip di errore\r\n * \r\n * @param {boolean} val **true** se si vuole impostare questo controllo come submitted, **false** altrimenti\r\n */\r\n @Input(\"submitted\") set submitted(val: boolean) {\r\n this._submitted = val;\r\n if (!this.baseInput)\r\n return;\r\n\r\n if (val)\r\n this.baseInput.control.markAsTouched();\r\n\r\n if (this.baseInput.control.status === \"INVALID\" && val)\r\n this.showTooltipWithMessage();\r\n else\r\n this.tooltip.hide();\r\n }\r\n\r\n /**\r\n * Imposta il componente come \"invalid\" a prescindere dai validatori\r\n */\r\n @Input() set forceInvalid(val: boolean) {\r\n this._forceInvalid = val;\r\n\r\n if (val)\r\n setTimeout(() => {\r\n this.baseInput.control.setErrors({ forcedtoinvalid: true });\r\n this.baseInput.control.markAsTouched();\r\n this.baseInput.control.markAsDirty();\r\n this.cdr.detectChanges();\r\n });\r\n else\r\n setTimeout(() => {\r\n this.baseInput.control.setErrors({ forcedtoinvalid: null });\r\n this.baseInput.control.updateValueAndValidity();\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (this.SetValidationSubject) {\r\n this.SetValidationSubject.pipe(takeUntil(this.destroyed$)).subscribe(v => {\r\n if (v.fieldName + \"_internal\" == this.id) {\r\n this.forceInvalid = true;\r\n this.showTooltipWithMessage(v.error);\r\n }\r\n })\r\n } \r\n }\r\n\r\n protected checkRequiredness(_validators: Validator[]) {\r\n if (_validators && _validators.some(elem => elem instanceof RequiredValidator && (elem.required === true || (!elem.required && elem.required !== false))))\r\n this.required = true;\r\n }\r\n\r\n destroyed$: Subject<void> = new Subject<void>();\r\n ngOnDestroy(){\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n /**\r\n * Helper che controlla se il tooltip deve essere mostrato o meno, \r\n * richiamato direttamente dall'HTML dei componenti\r\n */\r\n public checkTooltip() {\r\n if ((this.baseInput.invalid && this.baseInput.touched))\r\n this.showTooltipWithMessage();\r\n }\r\n\r\n /**\r\n * Helper che calcola il messaggio da mostrare nel tooltip che andrà ad aprire\r\n */\r\n private showTooltipWithMessage(messageOverride: string = null) {\r\n\r\n // Aggiorno il messaggio di validazione solo se il valore è diverso dall'ultimo valore ricevuto\r\n if (this.valueOnLastValidation != this.baseInput.value) {\r\n this.validationFailedBind = messageOverride || this.validationFailed || (this.InferErrorMessages ? this.inferMessage() : \"\");\r\n this.valueOnLastValidation = this.baseInput.value;\r\n }\r\n\r\n if (this.validationFailedBind)\r\n this.tooltip.show();\r\n }\r\n\r\n /**\r\n * Calcola il messaggio da mostrare in base al valore.\r\n * \r\n * Entrare in questa funzione significa che lo stato di validazione è fallito, per questo si comporta semplicemente in maniera esclusiva, e cioè:\r\n * \r\n * 1) Se ero required e sono senza valore --> Input richiesto\r\n * \r\n * 2) Altrimenti se ho un valore --> Di sicuro il formato è errato\r\n */\r\n private inferMessage(): string {\r\n if (this.required && !this.baseInput.value)\r\n return this.lc.loc(\"Required Input\")\r\n\r\n if (this.baseInput.value)\r\n return this.lc.loc(\"Invalid Input Format\")\r\n }\r\n\r\n /**\r\n * Forza la chiusura del tooltip\r\n */\r\n closeTooltip() {\r\n this.tooltip.hide();\r\n }\r\n\r\n /**\r\n * Controlla se il controllo è valido e in caso lo sia chiude il tooltip\r\n */\r\n protected CheckValidity() {\r\n if (!this.baseInput.statusChanges)\r\n return;\r\n\r\n this.baseInput.statusChanges.subscribe(event => {\r\n if (event === \"VALID\")\r\n this.tooltip.hide();\r\n });\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n protected propagateChange = (_: any) => { };\r\n\r\n /**\r\n * L'emit del focus dell'elemento\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n onFocus(toEmit) {\r\n this.inputFocus.emit(toEmit);\r\n }\r\n\r\n /**\r\n * Finalizzazione Input\r\n */\r\n onFinalize() {\r\n this.inputFinalized.emit();\r\n }\r\n\r\n /**\r\n * Subscription alle richieste di focus\r\n */\r\n observable: any;\r\n\r\n /**\r\n * Registra il Subject per ricevere le richieste di Focus dall'esterno\r\n */\r\n registerFocusRequest(): any {\r\n if(!this.FocusSubject)\r\n return;\r\n this.observable = this.FocusSubject.subscribe(t => {\r\n this.htmlInput.nativeElement.focus();\r\n });\r\n }\r\n\r\n /**\r\n * Deregistra il Subject delle richieste di focus\r\n */\r\n deregisterFocusRequest() {\r\n if (this.observable)\r\n this.observable.unsubscribe();\r\n }\r\n}","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione in comune con tutti i Componenti di validazione\r\n */\r\n@Injectable()\r\nexport class BaseValidationLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n super.set(\"en->it\", \"Required Input\", [\"Input Richiesto\"]);\r\n super.set(\"en->it\", \"Invalid Input Format\", [\"Formato Input Invalido\"]);\r\n super.set(\"en->it\", \"Elements selected\", [\"Elementi selezionati\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Inject, Injector, Input, Optional, Output, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport {BaseValidation} from '../base-validation';\r\nimport {BaseValidationLoc} from '../base-validation.loc';\r\n\r\nimport { Subscription } from \"rxjs\";\r\n\r\n/**\r\n * Componente di validaizone per gli input a selezione singola\r\n */\r\n@Component({\r\n selector: \"val-select\",\r\n templateUrl: \"validation-select.component.html\",\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationSelectComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class ValidationSelectComponent extends BaseValidation implements ControlValueAccessor {\r\n \r\n /**\r\n * valore del campo vuoto della select\r\n */\r\n @Input() public emptyFieldValue = \"-2000\";\r\n \r\n /**\r\n * Valore del placeholder\r\n */\r\n @Input() public placeHolderValue = \"-1000\";\r\n \r\n /**\r\n * Per i componenti non obbligatori indica se fornire un \"valore vuoto\"\r\n */\r\n @Input() public emptyValue = true;\r\n\r\n /**\r\n * Indica se mostrare o nascondere il simboletto di validazione (Tic verde o Croce rossa)\r\n */\r\n @Input() public showValidationSymbol: boolean = true;\r\n\r\n /**\r\n * Contenuto della label Floattante Material-Style\r\n */\r\n @Input() public label: string = \"\";\r\n\r\n /**\r\n * Evento richiamato quando si perde il focus sull'input di inserimento\r\n */\r\n @Output() public onBlur: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n /**\r\n * Controllo esposto ottenuto tramite injector\r\n */\r\n public parentControl: UntypedFormControl;\r\n\r\n /**\r\n * Valore del modello rappresentato dal componente\r\n */\r\n public value: string;\r\n\r\n /**\r\n * Subscription del tootltip da ripulire alla distruzione del componente\r\n */\r\n private tooltipSubscription: Subscription;\r\n\r\n /**\r\n * @ignore \r\n */\r\n constructor(@Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, cdr: ChangeDetectorRef, protected lc: LocalizationService) {\r\n super(cdr);\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n this.deregisterFocusRequest();\r\n if (this.tooltipSubscription) this.tooltipSubscription.unsubscribe();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngAfterViewInit() {\r\n this.postBinding();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n postBinding() {\r\n // Eredito i validatori\r\n if (!this.noValidate) {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n // se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n\r\n // faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => {\r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n private onTouched = () => { }; //placeholder on touched function\r\n\r\n /**\r\n * @ignore \r\n */\r\n writeValue(value: any): void {\r\n this.value = value;\r\n this.propagateChange(value);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n onModelChange(toEmit) {\r\n this.writeValue(toEmit);\r\n this.inputChange.emit(toEmit);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\r\n <select matNativeControl\r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n name=\"val-select\"\r\n class=\"form-control\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n id=\"{{id}}\"\r\n [customRequired]=\"required\"\r\n [CustomNullValues]=\"[placeHolderValue, emptyFieldValue]\"\r\n [(ngModel)]=\"value\"\r\n [tooltip]=\"tolTemplate\"\r\n [class.checking-combo]=\"!noValidate\"\r\n [class.app-option-placeholder]=\"baseInput.value === placeHolderValue\"\r\n [class.no-bg-img]=\"!showValidationSymbol\"\r\n [disabled]=\"Readonly\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (blur)=\"closeTooltip(); onBlur.emit(true);\"\r\n (ngModelChange)=\"onModelChange($event); onFinalize()\">\r\n\r\n <option *ngIf=\"placeholder\" [value]=\"placeHolderValue\" disabled selected hidden>{{placeholder}}</option>\r\n <option *ngIf=\"required == false && emptyValue\" [value]=\"emptyFieldValue\"></option>\r\n <ng-content></ng-content>\r\n </select>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Inject, Injector, Input, Optional, ViewEncapsulation} from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidation } from \"../base-validation\";\r\nimport { BaseValidationLoc } from \"../base-validation.loc\"\r\nimport { DateService } from '@esfaenza/extensions';\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\ndeclare var dayjs: any;\r\n\r\n/**\r\n * Componente di validaizone per gli input di tipo data\r\n */\r\n@Component({\r\n selector: \"val-date\",\r\n templateUrl: \"validation-date.component.html\",\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: [\"../validation-style.scss\"],\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationDateComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class ValidationDateComponent extends BaseValidation implements ControlValueAccessor {\r\n \r\n /**\r\n * Usato solo per stampare il placeholder qualora l'Input **placeholder** non fosse valorizzato\r\n */\r\n public _format: string;\r\n\r\n /**\r\n * Modello collegato all'input\r\n */\r\n public value: Date;\r\n\r\n /**\r\n * Controllo esposto ottenuto tramite injector\r\n */\r\n private parentControl: UntypedFormControl;\r\n\r\n /**\r\n * Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs\r\n */\r\n @Input() public useJsDates: boolean = false;\r\n\r\n /**\r\n * @ignore \r\n */\r\n constructor(cdr : ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, protected lc: LocalizationService, private dateExts: DateService) {\r\n super(cdr);\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n\r\n this._format = this.lc.token(\"getSmallDateDisplayFormat\");\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this.deregisterFocusRequest();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngAfterViewInit() {\r\n this.postBinding();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n postBinding() {\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n else {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n // //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => { //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n private onTouched = () => { };\r\n\r\n /**\r\n * @ignore \r\n */\r\n writeValue(value: any): void {\r\n if (!value) {\r\n this.value = null;\r\n if (this.baseInput)\r\n this.baseInput.reset();\r\n } else {\r\n var date = null;\r\n if (this.useJsDates) {\r\n date = this.dateExts.getDateConvertion(value);\r\n if (date) {\r\n this.propagateChange(date.toDate());\r\n this.inputChange.emit(date.toDate());\r\n }\r\n }\r\n else\r\n date = dayjs(value, this.lc.token(\"getSmallDateFormat\"));\r\n\r\n this.value = date;\r\n }\r\n\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di, eventualmente, aggiustare il valore da propagare ed emetterlo\r\n * \r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n outputValue(toEmit: any): void {\r\n let value = toEmit.value;\r\n let propagateValue: any;\r\n\r\n if (!value)\r\n propagateValue = null;\r\n else if (!this.useJsDates)\r\n propagateValue = value.format(this.lc.token(\"getSmallDateFormat\"));\r\n else {\r\n if (value && value.isValid())\r\n propagateValue = value.hour(0).minute(0).second(0).toDate();\r\n else\r\n propagateValue = null;\r\n }\r\n this.propagateChange(propagateValue);\r\n this.inputChange.emit(propagateValue);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n <input matInput\r\n [matDatepicker]=\"datepicker\"\r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n name=\"val-date\"\r\n class=\"form-control {{class}}\"\r\n autocomplete=\"{{autocomplete}}\"\r\n id=\"{{id}}\"\r\n (click)=\"onFocus($event)\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate\"\r\n [tooltip]=\"tolTemplate\"\r\n [placeholder]=\"placeholder ? (FloatingLabel ? undefined : placeholder) : _format\"\r\n [disabled]=\"Readonly || disabled\"\r\n [isDisabled]=\"Readonly || disabled\"\r\n (dateChange)=\"outputValue($event); onFinalize();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip();\"\r\n />\r\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n <mat-datepicker #datepicker></mat-datepicker>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, forwardRef, Inject, Injector, Input, Optional, SimpleChanges, ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidation } from \"../base-validation\";\r\nimport { BaseValidationLoc } from '../base-validation.loc';\r\nimport { Subscription } from \"rxjs\";\r\n\r\n/**\r\n * Componente di validaizone per gli input a semplice casella di testo\r\n */\r\n@Component({\r\n selector: \"val-input\",\r\n templateUrl: \"validation-input.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationInputComponent),\r\n multi: true\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\"]\r\n})\r\nexport class ValidationInputComponent extends BaseValidation implements ControlValueAccessor {\r\n\r\n /** \r\n * Permette di scrivere o meno nel campo di Input. Si differenzia dal Readonly in quanto fisicamente l'Input è scrivibile e vengono mantenuti i temi della validazione\r\n * ma interagire direttamente con la casella di Input per l'utente non è possibile\r\n */\r\n @Input() Frozen: boolean = false;\r\n\r\n /**\r\n * Indica se questo Comopnente deve rappresentare un oggetto di Input di tipo \"Password\"\r\n */\r\n @Input() public Password: boolean = false;\r\n\r\n /**\r\n * Indica se deve mostrare un indicazione di warning nel suffisso\r\n */\r\n @Input() public showWarning: boolean = false;\r\n\r\n /**\r\n * Titolo del Warning da impostare se **showWarning** è impostato a **true**\r\n */\r\n @Input() public warningTitle: string;\r\n\r\n /**\r\n * Classe del warning eventualmente modificabile. \r\n * \r\n * Default: \"fa fa-warning\"\r\n */\r\n @Input() public warningClass: string = \"fa fa-warning\";\r\n\r\n /**\r\n * Valore del modello rappresentato da questo input\r\n */\r\n @Input(\"value\") public value: any;\r\n\r\n /**\r\n * Contiene la proiezione del suffisso qualora fosse fornita\r\n */\r\n @ContentChild(\"suffix_internal\", { static: false }) suffix_internal;\r\n\r\n /**\r\n * Contiene la proiezione del prefisso qualora fosse fornita\r\n */\r\n @ContentChild(\"prefix_internal\", { static: false }) prefix_internal;\r\n\r\n /**\r\n * Subscription del tooltip da ripulire al destroy del componente\r\n */\r\n private tooltipSubscription: Subscription;\r\n\r\n /**\r\n * Controllo esposto ottenuto tramite injector\r\n */\r\n private parentControl: UntypedFormControl;\r\n\r\n /**\r\n * Identifica se il testo di un componente di tipo \"password\" dev'essere visualizzato o meno\r\n */\r\n public passShown: boolean = false;\r\n\r\n /**\r\n * Tipo del componente, può essere \"text\" o \"password\" e viene impostato automaticamente dall'Input **Password**\r\n */\r\n public type: string = \"text\";\r\n\r\n /**\r\n * Indicazione se il componente ha o meno un suffisso. \r\n * \r\n * Valorizzato a **true** solo se viene trovata una proiezione su **suffix_internal** o se l'Input **showWarning** viene impostato a **true**\r\n */\r\n public HasSuffix: boolean = false;\r\n\r\n /**\r\n * Indicazione se il componente ha o meno un prefisso. \r\n * \r\n * Valorizzato a **true** solo se viene trovata una proiezione su **prefix_internal**\r\n */\r\n public HasPrefix: boolean = false;\r\n\r\n /**\r\n * @ignore \r\n */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, protected lc: LocalizationService) {\r\n super(cdr);\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n\r\n if (this.Password)\r\n this.type = \"password\";\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n\r\n this.deregisterFocusRequest();\r\n if (this.tooltipSubscription) this.tooltipSubscription.unsubscribe();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n ngAfterViewInit() {\r\n this.HasSuffix = !!this.suffix_internal || this.showWarning;\r\n this.HasPrefix = !!this.prefix_internal;\r\n\r\n this.postBinding();\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnChanges(changes: SimpleChanges) {\r\n const newShowWarnings = changes[\"showWarning\"];\r\n if (newShowWarnings)\r\n this.HasSuffix = !!this.suffix_internal || this.showWarning;\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n postBinding() {\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n // Se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n else {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n // Faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => {\r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n private onTouched = () => { };\r\n\r\n /**\r\n * @ignore \r\n */\r\n writeValue(value: any): void {\r\n this.value = value;\r\n this.propagateChange(value);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n onModelChange(toEmit) {\r\n this.writeValue(toEmit);\r\n this.inputChange.emit(toEmit);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n}","<mat-form-field floatLabel=\"never\" appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label [class.app-margin-left-25]=\"HasPrefix\" *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n <ng-container *ngIf=\"HasPrefix\">\r\n <ng-container *ngTemplateOutlet=\"prefix_internal\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Bisogna fixare un po' l'uso di readonly, disabled, frozen cazzi e mazzi -->\r\n <input matInput\r\n #baseInput='ngModel'\r\n #htmlInput\r\n type=\"{{type}}\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n autocomplete=\"{{autocomplete}}\"\r\n name=\"{{id}}\"\r\n class=\"form-control {{class}}\"\r\n id=\"{{id}}\"\r\n [class.app-margin-left-25]=\"HasPrefix\"\r\n [class.mat-input-with-suffix]=\"HasSuffix || Password || showWarning\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate && !showWarning\"\r\n [tooltip]=\"tolTemplate\"\r\n [readonly]=\"Frozen\"\r\n [disabled]=\"Readonly || disabled || Frozen\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip(); onFinalize();\"\r\n >\r\n <ng-container *ngIf=\"HasSuffix || Password || showWarning\">\r\n <ng-container *ngIf=\"!Password && !showWarning\">\r\n <ng-container *ngTemplateOutlet=\"suffix_internal\"></ng-container>\r\n </ng-container>\r\n\r\n <span class=\"form-input-suffix\" *ngIf=\"Password || showWarning\">\r\n <ng-container *ngIf=\"Password\" matSuffix>\r\n <a *ngIf=\"passShown\" class=\"fa fa-eye-slash app-fs-16 app-pointer\" (click)=\"type = 'password'; passShown = !passShown; $event.preventDefault()\"></a>\r\n <a *ngIf=\"!passShown\" class=\"fa fa-eye app-fs-16 app-pointer\" (click)=\"type = 'text'; passShown = !passShown; $event.preventDefault()\"></a>\r\n </ng-container>\r\n <ng-container *ngIf=\"showWarning\" matSuffix>\r\n <span title=\"{{warningTitle}}\" class=\"{{warningClass}} text-warning app-fs-16\"></span>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n</mat-form-field>\r\n\r\n<!-- Questo compoennte nascosto serve solamente per assicurarsi che angular carichi gli stili dei mat-button che altrimenti non caricherebbe... dunno why -->\r\n<div hidden><mat-datepicker-toggle></mat-datepicker-toggle></div>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Inject, Injector, Input, Optional, ViewEncapsulation } from \"@angular/core\";\r\nimport { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport {BaseValidationLoc} from '../base-validation.loc';\r\nimport {ValidationInputComponent} from '../validation-input/validation-input.component';\r\n\r\n/**\r\n * Componente di validaizone per gli input con maschera di inserimento numerica\r\n */\r\n@Component({\r\n selector: \"val-currency\",\r\n templateUrl: \"validation-currency.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationCurrencyComponent),\r\n multi: true\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\", \"validation-currency.component.scss\"]\r\n})\r\nexport class ValidationCurrencyComponent extends ValidationInputComponent {\r\n\r\n /**\r\n * Opzioni direttamente bindate alla direttiva **currencyMask**\r\n */\r\n @Input() CurrencyOptions: any;\r\n\r\n /**\r\n * @ignore \r\n */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<any>, injector: Injector, protected lc: LocalizationService) {\r\n super(cdr, validators, asyncValidators, injector, lc);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n this.registerFocusRequest();\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n this.deregisterFocusRequest();\r\n }\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n <input #baseInput='ngModel'\r\n #htmlInput\r\n currencyMask\r\n matInput\r\n [readonly]=\"Readonly\"\r\n [options]='CurrencyOptions'\r\n [(ngModel)]=\"value\"\r\n name=\"val-input\"\r\n id=\"{{id}}\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip(); onFinalize();\"\r\n class=\"form-control {{class}}\"\r\n [class.checking-field]=\"!noValidate\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n type=\"{{type}}\"\r\n [tooltip]=\"tolTemplate\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n autocomplete=\"{{autocomplete}}\" />\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div>\r\n <span class=\"close-button pull-right\" (click)=\"closeTooltip()\" aria-label=\"Close\">\r\n <span aria-hidden=\"true\">×</span>\r\n </span>\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Inject, Injector, Input, Optional, ViewEncapsulation } from \"@angular/core\";\r\nimport { NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidationLoc } from \"../base-validation.loc\";\r\nimport { ValidationInputComponent } from \"../validation-input/validation-input.component\";\r\n\r\n/**\r\n * Componente di validaizone per gli input ad area di testo\r\n */\r\n@Component({\r\n selector: \"val-textarea\",\r\n templateUrl: \"validation-text-area.component.html\",\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationTextAreaComponent),\r\n multi: true\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ValidationTextAreaComponent extends ValidationInputComponent {\r\n\r\n /**\r\n * Righe da mostrare di default per l'area di inserimento\r\n */\r\n @Input() rows: number = 2;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) asyncValidators: Array<any>, injector: Injector, protected lc: LocalizationService) {\r\n super(cdr, validators, asyncValidators, injector, lc);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnInit(): void {\r\n super.ngOnInit();\r\n\r\n this.registerFocusRequest();\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n \r\n this.deregisterFocusRequest();\r\n }\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-full-height mat-no-border-top mat-height-auto\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n <textarea matInput\r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n [(ngModel)]=\"value\"\r\n name=\"val-textarea\"\r\n triggers=\"\"\r\n class=\"app-no-resize form-control {{class}}\"\r\n id=\"{{id}}\"\r\n [class.checking-field]=\"!noValidate\"\r\n rows=\"{{rows}}\"\r\n [tooltip]=\"tolTemplate\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\r\n placement=\"top\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip(); onFinalize();\"\r\n (ngModelChange)=\"onModelChange($event)\">\r\n </textarea>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Inject, Injector, Input, Optional, ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidation } from \"../base-validation\";\r\nimport { BaseValidationLoc } from \"../base-validation.loc\"\r\nimport { DateService } from '@esfaenza/extensions';\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\ndeclare var dayjs: any;\r\n\r\n/**\r\n * Componente di validaizone per gli input di tipo data-ora\r\n */\r\n@Component({\r\n selector: \"val-datetime\",\r\n templateUrl: \"validation-datetime.component.html\",\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: [\"../validation-style.scss\"],\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationDateTimeComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class ValidationDateTimeComponent extends BaseValidation implements ControlValueAccessor {\r\n\r\n /**\r\n * Usato solo per stampare il placeholder qualora l'Input **placeholder** non fosse valorizzato\r\n */\r\n public _format: string;\r\n\r\n /**\r\n * Modello collegato all'input\r\n */\r\n public value: Date;\r\n\r\n /**\r\n * Controllo esposto ottenuto tramite injector\r\n */\r\n private parentControl: UntypedFormControl;\r\n\r\n /**\r\n * Proprietà dell'elemento di selezione dell'orario. Mostra o nasconde gli spinner\r\n * \r\n * Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai\r\n */\r\n public showSpinners = true;\r\n\r\n /**\r\n * Proprietà dell'elemento di selezione dell'orario. Mostra o nasconde i secondi\r\n * \r\n * Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai\r\n */\r\n public showSeconds = true;\r\n\r\n /**\r\n * Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per le ore\r\n * \r\n * Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai\r\n */\r\n public stepHour = 1;\r\n\r\n /**\r\n * Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per i minuti\r\n * \r\n * Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai\r\n */\r\n public stepMinute = 1;\r\n\r\n /**\r\n * Proprietà dell'elemento di selezione dell'orario. Imposta l'incremento/decremento minimo per i secondi\r\n * \r\n * Attualemnte non bindata ed utilizzata solo a livello di default ma non si sa mai\r\n */\r\n public stepSecond = 1;\r\n\r\n /**\r\n * Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs\r\n */\r\n @Input() public useJsDates: boolean = false;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, protected lc: LocalizationService, private dateExts: DateService) {\r\n super(cdr);\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n\r\n this._format = this.lc.token(\"getSmallDateDisplayFormat\");\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngOnDestroy(){\r\n super.ngOnDestroy();\r\n this.deregisterFocusRequest();\r\n }\r\n\r\n /**\r\n * @ignore\r\n */\r\n ngAfterViewInit() {\r\n this.postBinding();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n postBinding() {\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n // Se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n else {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n // Faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => { \r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n private onTouched = () => { };\r\n\r\n /**\r\n * @ignore \r\n */\r\n writeValue(value: any): void {\r\n if (!value) {\r\n this.value = null;\r\n if (this.baseInput)\r\n this.baseInput.reset();\r\n } else {\r\n var date = null;\r\n if (this.useJsDates) {\r\n date = this.dateExts.getDateConvertion(value)\r\n this.propagateChange(date);\r\n this.inputChange.emit(date);\r\n }\r\n else\r\n date = dayjs(value, this.lc.token(\"getSmallDateFormat\") + \" HH:mm:ss\");\r\n\r\n this.value = date;\r\n }\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di, eventualmente, aggiustare il valore da propagare ed emetterlo\r\n * \r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n outputValue(toEmit: any): void {\r\n let value = toEmit.value;\r\n let propagateValue: any;\r\n\r\n if (!value)\r\n propagateValue = null;\r\n else if (!this.useJsDates)\r\n propagateValue = value.format(this.lc.token(\"getSmallDateFormat\") + \" HH:mm:ss\");\r\n else {\r\n if (value && value.isValid())\r\n propagateValue = value.toDate();\r\n else\r\n propagateValue = null;\r\n }\r\n this.propagateChange(propagateValue);\r\n this.inputChange.emit(propagateValue);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * @ignore \r\n */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"placeholder && FloatingLabel\">{{placeholder}}</mat-label>\r\n\r\n <input matInput \r\n [ngxMatDatetimePicker]=\"datepicker\" \r\n #baseInput=\"ngModel\"\r\n #htmlInput\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n name=\"val-date\"\r\n id=\"{{id}}\"\r\n (click)=\"onFocus($event)\"\r\n class=\"form-control {{class}}\"\r\n autocomplete=\"{{autocomplete}}\"\r\n [placeholder]=\"FloatingLabel ? undefined : placeholder\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate\"\r\n [tooltip]=\"tolTemplate\"\r\n [placeholder]=\"placeholder ? '' : _format\"\r\n [disabled]=\"Readonly || disabled\"\r\n [isDisabled]=\"Readonly || disabled\"\r\n (dateChange)=\"outputValue($event); onFinalize();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip();\"\r\n />\r\n\r\n <mat-datepicker-toggle matSuffix [for]=\"datepicker\"></mat-datepicker-toggle>\r\n\r\n <ngx-mat-datetime-picker #datepicker \r\n [showSpinners]=\"showSpinners\" \r\n [showSeconds]=\"showSeconds\" \r\n [stepHour]=\"stepHour\" \r\n [stepMinute]=\"stepMinute\" \r\n [stepSecond]=\"stepSecond\" \r\n [touchUi]=\"false\" \r\n [color]=\"'primary'\">\r\n </ngx-mat-datetime-picker>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl, RequiredValidator } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Inject, Injector, Input, Optional, Output, ViewEncapsulation } from \"@angular/core\";\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidation } from \"../base-validation\";\r\nimport { BaseValidationLoc } from '../base-validation.loc';\r\nimport { Subscription } from \"rxjs\";\r\n\r\n/**\r\n * Componente di validaizone per gli input di Autocompletamento\r\n */\r\n@Component({\r\n selector: \"val-autocomplete\",\r\n templateUrl: \"validation-autocomplete.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationAutocompleteComponent),\r\n multi: true\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\"]\r\n})\r\nexport class ValidationAutocompleteComponent extends BaseValidation implements ControlValueAccessor {\r\n\r\n\r\n /** Sorgente da cui scegliere valori filtrata in base a quello che ha scritto l'utente */\r\n @Input() FilteredSource: { id: string, description: string }[] = [];\r\n\r\n /** Valore del modello */\r\n @Input() public value: any;\r\n\r\n /** Contenuto della label Floattante Material-Style */\r\n @Input() public label: string = \"\";\r\n\r\n /** Evento che indica l'opzione selezionata dal componente. Il valore finale della selezione dovrà essere questo */\r\n @Output() optionChange: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /** Subscription del tootltip da ripulire alla distruzione del componente */\r\n private tooltipSubscription: Subscription;\r\n\r\n /** Controllo esposto ottenuto tramite injector */\r\n private parentControl: UntypedFormControl;\r\n\r\n /** @ignore */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, protected lc: LocalizationService) {\r\n super(cdr);\r\n }\r\n\r\n /** @ignore */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n }\r\n\r\n /** @ignore */\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this.deregisterFocusRequest();\r\n if (this.tooltipSubscription) this.tooltipSubscription.unsubscribe();\r\n }\r\n\r\n /** @ignore */\r\n ngAfterViewInit() {\r\n this.postBinding();\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n private postBinding() {\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n //se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n else {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => { //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private onTouched = () => { }; //placeholder on touched function\r\n\r\n /** @ignore */\r\n writeValue(value: any): void {\r\n var val = value && this.FilteredSource ? this.FilteredSource.find(t => t.id == value) : null;\r\n if(val) this.optionChange.emit(val.id);\r\n this.propagateChange(val ? val.id : value);\r\n this.value = val ? val.description : value;\r\n }\r\n\r\n /**\r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n onModelChange(toEmit) {\r\n this.writeValue(toEmit);\r\n this.inputChange.emit(toEmit);\r\n this.onTouched();\r\n }\r\n\r\n /** @ignore */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /** @ignore */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n}","<!-- Val-Model: {{value}} -->\r\n<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top mat-height-fixed\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\r\n <input matInput\r\n #htmlInput\r\n #baseInput='ngModel'\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n placeholder=\"{{placeholder}}\"\r\n [matAutocomplete]=\"auto\"\r\n name=\"val-input\"\r\n id=\"{{id}}\"\r\n class=\"form-control {{class}}\"\r\n [(ngModel)]=\"value\"\r\n [class.checking-field]=\"!noValidate\"\r\n [tooltip]=\"tolTemplate\"\r\n [disabled]=\"Readonly || disabled\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (keyup)=\"($event.keyCode == 13 || $event.keyCode == 27) && onFinalize();\"\r\n (blur)=\"closeTooltip(); onFinalize();\">\r\n\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n <mat-option *ngFor=\"let option of FilteredSource\" [value]=\"option.id\">\r\n {{option.description}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, UntypedFormControl, NG_ASYNC_VALIDATORS, NG_VALIDATORS, NG_VALUE_ACCESSOR, NgControl } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, forwardRef, Inject, Injector, Input, Optional, Output, SimpleChanges, ViewChild, ViewEncapsulation } from \"@angular/core\";\r\nimport { MatLegacyAutocompleteTrigger as MatAutocompleteTrigger } from \"@angular/material/legacy-autocomplete\";\r\nimport { COMMA, ENTER } from \"@angular/cdk/keycodes\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { BaseValidation } from \"../base-validation\";\r\nimport { BaseValidationLoc } from '../base-validation.loc';\r\nimport { Subscription } from \"rxjs\";\r\n\r\n/** Componente di validaizone per gli input di Autocompletamento */\r\n@Component({\r\n selector: \"val-autocomplete-multi\",\r\n templateUrl: \"validation-autocomplete-multi.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: LocalizationService, useClass: BaseValidationLoc },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ValidationAutocompleteMultiComponent),\r\n multi: true\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: [\"../validation-style.scss\", \"./validation-autocomplete-multi.component.scss\"]\r\n})\r\nexport class ValidationAutocompleteMultiComponent extends BaseValidation implements ControlValueAccessor {\r\n\r\n public displayFn = (): string => '';\r\n\r\n /** Numero massimo di chip visualizzate */\r\n @Input() ChipThreshold: number = 10;\r\n\r\n /** Sorgente da cui scegliere valori filtrata in base a quello che ha scritto l'utente */\r\n @Input() FilteredSource: { id: string, description: string }[] = [];\r\n\r\n /** Indica il fatto che non c'è una Source da cui scegliere */\r\n @Input() public UnboundMode: boolean;\r\n\r\n /** Valore del modello */\r\n @Input() public value: any;\r\n\r\n /** Contenuto della label Floattante Material-Style */\r\n @Input() public label: string = \"\";\r\n\r\n /** Definisce che ad ogni selezione deve chiudere la tendina */\r\n @Input() public HideChoicesOnSelection: boolean = false;\r\n\r\n /** Evento che indica l'opzione selezionata dal componente. Il valore finale della selezione dovrà essere questo */\r\n @Output() optionChange: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /** Trigger dell'autocomplete per tenerlo aperto */\r\n @ViewChild(MatAutocompleteTrigger) autoTrigger: MatAutocompleteTrigger;\r\n \r\n /** Subscription del tootltip da ripulire alla distruzione del componente */\r\n private tooltipSubscription: Subscription;\r\n\r\n /** Controllo esposto ottenuto tramite injector */\r\n private parentControl: UntypedFormControl;\r\n\r\n /** Chiavi su cui dividere gli input del mat chip */\r\n public separatorKeysCodes: number[];\r\n\r\n /** Aggiunge una chip o meno su blur */\r\n public addOnBlur: boolean;\r\n\r\n /** Elementi selezionati */\r\n public selectData: { id: string, description: string }[] = [];\r\n\r\n /** @ignore */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Inject(NG_VALIDATORS) private _validators: Array<any>, @Optional() @Inject(NG_ASYNC_VALIDATORS) private _asyncValidators: Array<any>, private injector: Injector, public lc: LocalizationService) {\r\n super(cdr);\r\n }\r\n\r\n /** @ignore */\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.registerFocusRequest();\r\n\r\n this.checkRequiredness(this._validators);\r\n\r\n if (this.UnboundMode) {\r\n this.separatorKeysCodes = [ENTER, COMMA];\r\n this.addOnBlur = true;\r\n }\r\n else {\r\n this.separatorKeysCodes = [ENTER];\r\n this.addOnBlur = false;\r\n }\r\n }\r\n\r\n /** @ignore */\r\n ngOnDestroy() {\r\n super.ngOnDestroy();\r\n this.deregisterFocusRequest();\r\n if (this.tooltipSubscription) this.tooltipSubscription.unsubscribe();\r\n }\r\n\r\n /** @ignore */\r\n ngAfterViewInit() {\r\n this.postBinding();\r\n }\r\n\r\n /** In caso arrivi una nuova sorgente devo reimpostare lo stato di selezione con quello attuale */\r\n public ngOnChanges(changes: SimpleChanges) {\r\n let newSource = changes[\"FilteredSource\"];\r\n if (!newSource || newSource.firstChange)\r\n return;\r\n\r\n for (let i = 0; i < this.FilteredSource.length; i++) {\r\n let item = this.FilteredSource[i];\r\n (<any>item).selected = this.selectData.find(t => t.id == item.id)\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che si occupa di collegare i validatori e la funzione di reset dal **ControlValueAccessor** rappresentato \r\n * da questo componente al **ControlValueAccessor** rappresentato dall'effettivo elemento di Input presente lato HTML\r\n */\r\n private postBinding() {\r\n this.CheckValidity();\r\n const ngControl: NgControl = this.injector.get(NgControl, null);\r\n if (ngControl) {\r\n this.parentControl = ngControl.control as UntypedFormControl;\r\n\r\n //se la variabile novalidate è true, elimino tutti i validatori eventualmente inseriti\r\n if (this.noValidate) {\r\n this.parentControl.clearValidators();\r\n this.parentControl.clearAsyncValidators();\r\n }\r\n else {\r\n this.baseInput.control.setAsyncValidators(this._asyncValidators);\r\n this.baseInput.control.setValidators(this._validators);\r\n }\r\n\r\n //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = this.parentControl.reset;\r\n this.parentControl.reset = () => { //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n origFunc.apply(this.parentControl);\r\n this.baseInput.control.reset();\r\n this.tooltip.hide();\r\n };\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private onTouched = () => { }; //placeholder on touched function\r\n\r\n /** @ignore */\r\n writeValue(value: any, finalValue: boolean = false): void {\r\n var val = value && this.FilteredSource ? this.FilteredSource.find(t => t.id == value) : null;\r\n if(finalValue) this.optionChange.emit(value);\r\n this.propagateChange(val ? val.id : value);\r\n this.value = val ? val.description : value;\r\n }\r\n\r\n /**\r\n * L'emit della modifica al valore viene gestito su un evento custom (**inputChange**) come workaround al malfunzionamento dell'**ngModelChange** nativo\r\n * \r\n * @param {any} toEmit valore da propagare all'esterno\r\n */\r\n onModelChange(toEmit, finalValue: boolean = false) {\r\n this.writeValue(toEmit, finalValue);\r\n if(!finalValue)\r\n this.inputChange.emit(toEmit);\r\n this.onTouched();\r\n }\r\n\r\n /** @ignore */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /** @ignore */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n addWhenUnbound(event: any) {\r\n let input = event.input;\r\n let toAdd = event.value;\r\n\r\n if (!this.value) this.value = [];\r\n\r\n if ((toAdd || '').trim()) {\r\n let array = toAdd.split(/[\\s,;]+/).filter(f => f != null && f != \"\" && f != undefined);\r\n array = array.map(item => item.replace(',', '').replace(';', '').trim());\r\n\r\n array.forEach(a => {\r\n this.toggleSelection({id: a, description: a});\r\n })\r\n\r\n this.value = [...this.value, ...array];\r\n this.propagateChange(this.value);\r\n }\r\n if (input) { input.value = ''; }\r\n }\r\n\r\n /** Rimuove un elemento selezionato */\r\n public removeChip(data: { id: string, description: string }): void {\r\n if (!data) {\r\n this.selectData = [];\r\n if(this.FilteredSource)\r\n this.FilteredSource.forEach(data => (<any>data).selected = false);\r\n this.onModelChange(\"\", true);\r\n this.onFinalize();\r\n }\r\n else\r\n this.toggleSelection(data);\r\n };\r\n\r\n /** Seleziona o deseleziona un oggetto */\r\n public toggleSelection(data: { id: string, description: string }): void {\r\n (<any>data).selected = !(<any>data).selected;\r\n\r\n if ((<any>data).selected === true) {\r\n this.selectData.push(data);\r\n } else {\r\n const i = this.selectData.findIndex(value => value.id === data.id);\r\n this.selectData.splice(i, 1);\r\n }\r\n this.onModelChange(this.selectData.map(t => t.id).join(','), true);\r\n if (this.HideChoicesOnSelection)\r\n this.htmlInput.nativeElement.value = \"\";\r\n else {\r\n if (!this.UnboundMode) {\r\n this.autoTrigger.closePanel();\r\n requestAnimationFrame(() => {\r\n this.autoTrigger.openPanel();\r\n });\r\n }\r\n }\r\n this.onFinalize();\r\n };\r\n}","<mat-form-field appearance=\"{{FieldAppearence}}\" class=\"mat-full-width mat-no-border-top\" [style.width.px]=\"widthPx\">\r\n <mat-label *ngIf=\"label\">{{label}}</mat-label>\r\n <mat-chip-list #chipList>\r\n <ng-container *ngIf=\"selectData.length < ChipThreshold\" >\r\n <mat-chip *ngFor=\"let select of selectData\" class=\"cardinal-colors\" (click)=\"!(Readonly || disabled) && removeChip(select)\">\r\n {{ select.description }}\r\n <mat-icon class=\"mat-chip-remove\">cancel</mat-icon>\r\n </mat-chip>\r\n </ng-container>\r\n\r\n <mat-chip *ngIf=\"selectData.length >= ChipThreshold\" class=\"cardinal-colors\" (click)=\"!(Readonly || disabled) && removeChip(null)\">\r\n {{ selectData.length }} {{ 'Elements selected' | localize: lc }}\r\n <mat-icon class=\"mat-chip-remove\">cancel</mat-icon>\r\n </mat-chip>\r\n\r\n <input matInput\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n #htmlInput\r\n #baseInput='ngModel'\r\n type=\"text\"\r\n triggers=\"\"\r\n placement=\"top\"\r\n [placeholder]=\"placeholder\"\r\n [matAutocomplete]=\"auto\"\r\n name=\"val-input\"\r\n id=\"{{id}}\"\r\n [(ngModel)]=\"value\"\r\n [tooltip]=\"tolTemplate\"\r\n [disabled]=\"Readonly || disabled\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n (matChipInputTokenEnd)=\"addWhenUnbound($event)\"\r\n (click)=\"onFocus($event)\"\r\n (focus)=\"checkTooltip();\"\r\n (blur)=\"closeTooltip();\">\r\n </mat-chip-list>\r\n\r\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let data of FilteredSource\">\r\n <div (click)=\"toggleSelection(data); !HideChoicesOnSelection && $event.stopPropagation()\">\r\n <mat-checkbox [checked]=\"data.selected\" (change)=\"toggleSelection(data);\" (click)=\"!HideChoicesOnSelection && $event.stopPropagation()\">\r\n {{ data.description }}\r\n </mat-checkbox>\r\n </div>\r\n </mat-option>\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n\r\n<ng-template #tolTemplate>\r\n <div (click)=\"closeTooltip()\">\r\n <span>{{validationFailedBind}}</span>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, NgControl, NgForm, NgModel, RequiredValidator } from \"@angular/forms\";\r\nimport { EventEmitter, Input, Output, ViewChild, Optional, Inject, Directive, ChangeDetectorRef } from \"@angular/core\";\r\n\r\n// // Configurazioni\r\nimport { AccessControlService, ComponentContext } from \"@esfaenza/access-control\";\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../tokens';\r\nimport { Subject } from \"rxjs\";\r\nimport { TemplateRef } from \"@angular/core\";\r\nimport { ChangeEvent } from \"../models/ChangeEvent\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\n\r\n/** Componente base da cui tutti i componenti Form implementano */\r\n@Directive()\r\nexport abstract class BaseFormControl implements ControlValueAccessor {\r\n\r\n /**\r\n * https://github.com/angular/angular/issues/14988\r\n * TL:DR; Il primo valore passato al writeValue è nullo perché quando i cagnacci fanno new FormControl()\r\n * scrivono un writeValue nullo... quindi al primo binding salto l'inizializzazione se ho la coppia null-firstBind\r\n * poi mettendo firstBind a false di lì in poi funziono come devo. Vista la casistica evito essenzialmente metà detectChanges\r\n */\r\n private firstBind: boolean = true;\r\n\r\n /**\r\n * Indica di utilizzare i validatori che l'utente piazza sul componente. \r\n * Da non usare nel caso di form-adaptive dato che i validatori vengono valutati in base al tipo ecc\r\n */\r\n protected UseUserValidators:boolean = true;\r\n\r\n /** Indica se il campo è obbligatorio i opzionale */\r\n public Required: boolean = false;\r\n\r\n /** Modello rappresentato da questo campo */\r\n public Model: any;\r\n\r\n /** Valore del Modello */\r\n public EvaluatedModel: string;\r\n\r\n /** Nome generato per il controllo interno. Di default è il nome del controllo esterno con l'aggiunta di \"_internal\". Serve per evitare cross-bind */\r\n public GeneratedName: string;\r\n\r\n /** Indica se il Form che contiene questo campo è già stato registrato */\r\n protected formHasBennBound: boolean = false;\r\n\r\n /**\r\n * Indica se questo campo è staccato dal Form, ad esempio nel caso sia in un ng-template proiettato nel form.\r\n * \r\n * In quel caso la variabile **Form** del componente dev'essere valorizzata\r\n */\r\n protected detatchedFromform: boolean = false;\r\n\r\n /** @ignore */\r\n protected propagateChange = (_: any) => { };\r\n\r\n /** @ignore */\r\n protected onTouched = () => { };\r\n\r\n /** @ignore Vedi getter e setter */\r\n public _readonly: boolean = false;\r\n\r\n /**\r\n * Qualora ci fosse un contesto collegato questa variabile identifica se Sono l'Owner o meno.\r\n * \r\n * Se non lo sono, il campo risulterà in sola lettura \r\n */\r\n private AppContextOwnership: boolean = true;\r\n\r\n /** Subject a cui l'oggetto interno si collega per effettuare il focus dell'elemento input sottostante */\r\n @Input() FocusSubject: Subject<void>;\r\n /**\r\n * @EXPERIMENTAL\r\n */\r\n @Input() SetValidationSubject: Subject<{ fieldName: string, error: string }>;\r\n\r\n /** Modalità in cui viene mostrato il campo, 1-1 rispetto alle definizioni di Angular Material */\r\n @Input() FieldAppearence: \"legacy\" | \"standard\" | \"fill\" | \"outline\" = \"outline\";\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 /** Definisce se richiamare l'EventEmitter **inputChange** in maniera classica (true) o solo per la change considerate definitive come tasto invio / blur / ecc... (false) */\r\n @Input() EmitPendingChanges: boolean = true;\r\n\r\n /** Attiva o disattiva la validazione per questo componente */\r\n @Input() Validation: boolean = true;\r\n\r\n /** \r\n * Permette di scrivere o meno nel campo di Input. Si differenzia dal Readonly in quanto fisicamente l'Input è scrivibile e vengono mantenuti i temi della validazione\r\n * ma interagire direttamente con la casella di Input per l'utente non è possibile\r\n */\r\n @Input() Frozen: boolean = false;\r\n\r\n /** Placeholder per quando l'input è vuoto */\r\n @Input() Placeholder: string = \"\";\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 /** Messaggio da mostrare quando la validazione fallisce per questo componente. Di default viene proposta dalla libreria */\r\n @Input() FailedValidationMessage: string = \"\";\r\n\r\n /** Input che forza l'invalidità del componente */\r\n @Input() ForcedError: boolean = false;\r\n\r\n /** Mostra un testo a sinistra dell'input (FormLayout permettendo) */\r\n @Input() Label: string = \"\";\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 /** Associa il componente Form a questo input */\r\n @Input() Form: NgForm = null;\r\n\r\n /** Sorgente da cui scegliere valori per i componenti Form che lo consentono */\r\n @Input() Source: any[];\r\n\r\n /** Nome della proprietà che contiene l'Id degli oggetti bindati nella **Source** */\r\n @Input() IdField: string = 'id';\r\n\r\n /**\r\n * Indica se il **Placeholder** dev'essere usato come una floating label di material o solo come un placeholder standard \r\n * \r\n * Ignorata lato autocomplete, autocomplete-multi e select in quanto hanno gestioni particolari di placeholder ecc...\r\n */\r\n @Input() FloatingLabel: boolean = true;\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 /** 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 /** 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 /** 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 /**\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\r\n /** Risultato dell'unione fra le informazioni degli oggetti in **Source** e le impostazioni specificate nell'Input **Display** */\r\n public BoundSource: { id: string, description: string }[] = [];\r\n\r\n /** Indica se è il primo Bind della Source */\r\n protected SourceFirstBind: boolean = true;\r\n\r\n /**\r\n * Ottiene il valore della variabile **_readonly**\r\n * \r\n * @returns {boolean} **true** se sola lettura, **false** altrimenti\r\n */\r\n get Readonly(): boolean { \r\n return this._readonly;\r\n }\r\n\r\n /**\r\n * Imposta il valore della variabile **_readonly** gestendo anche il Contesto applicativo\r\n * \r\n * @param {boolean} value Valore da impostare\r\n */\r\n @Input() set Readonly(value: boolean) {\r\n if (this.AppContextOwnership) \r\n this._readonly = value;\r\n }\r\n\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 * \r\n * @param {string} input Input nel formato \"X Y\"\r\n */\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\r\n /** val-qualcosa che fa effettivamente da input, o eventualmente il singolo input in casi particolari (es checkbox) */\r\n protected validationControl: NgModel;\r\n\r\n /**\r\n * Query sull'elemento 'validationControl' che funziona in ambiente statico\r\n * \r\n * @param {NgModel} comp Elemento HTML marcato con \"#validationControl\"\r\n */\r\n @ViewChild(\"validationControl\", { static: false }) set _validationControl(comp: NgModel) { this.registerValComp(comp); }\r\n\r\n /**\r\n * Query sull'elemento 'validationControl' che funziona in ambiente dinamico\r\n * \r\n * @param {NgModel} comp Elemento HTML marcato con \"#validationControl\"\r\n */\r\n @ViewChild(\"validationControl\", { static: true }) set validationControl_static(comp: NgModel) { this.registerValComp(comp); };\r\n\r\n /** Evento chiamato alla modifica del valore collegato a questo campo */\r\n @Output() inputChange: EventEmitter<ChangeEvent> = new EventEmitter<ChangeEvent>();\r\n\r\n /** Evento chiamato al focus del campo di testo/combo/quelcheè, riemitta l'evento originale Javascript */\r\n @Output() inputFocus: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /** Evento chiamato al finalize del campo di testo/combo/quelcheè */\r\n @Output() inputFinalized: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /** Cache delle condizioni scritte tipo :prop?(Roba con {prop}) */\r\n private BindCheckingGroups: { global: string, prop: string, whenexists: string }[] = []\r\n\r\n /** Cache delle proprietà scritte tipo --> {prop} */\r\n private BindProperties: { global: string, prop: string }[] = [];\r\n\r\n /** @ignore Costruttore */\r\n constructor(protected cdr: ChangeDetectorRef, public ngControl: NgControl, protected _validators: Array<any>, @Optional() private ac: AccessControlService, @Optional() public AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) private ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) private FAV_DEBUG_MODE: boolean, private nativeInput: boolean = false) {\r\n\r\n if (ngControl == null) {\r\n if (!this.handleNullNgControl())\r\n console.error(\"ngControl nullo per qualche motivo! Il 90% delle funzionalità di questo input saranno disabilitate\");\r\n\r\n return;\r\n }\r\n\r\n //Se mi arriva l'injectable del contesto posso capire se questo campo deve essere in readonly o no, solo se ho già inizializzato i controller custom dell'access control\r\n if (this.AppContext && this.AppContext.name && this.ACO_CUSTOMKEY && this.ac && this.ac.InitializedCustom) {\r\n this.AppContextOwnership = !this.ac.has(this.ACO_CUSTOMKEY + \":\" + this.AppContext.name, true);\r\n this._readonly = !this.AppContextOwnership\r\n }\r\n\r\n ngControl.valueAccessor = this;\r\n\r\n //Se ho già un parent impostato vuol dire che sotto al tag <form> ho direttamente un tag <form-*>..\r\n //.. quindi posso impostare direttamente il riferimento del Form da usare in HTML per il submitted\r\n\r\n //Se non c'è vuol dire che dentro al tag <form> c'è uno splendido <ng-container *ngTemplateOutlet=\"template; context: ....\">..\r\n //.. il quale a sua volta contiene il controllo <form-*> quindi avrò il form nell'input \"Form\"\r\n if ((<any>ngControl)._parent)\r\n this.Form = <NgForm>(<any>ngControl)._parent;\r\n else\r\n this.detatchedFromform = true;\r\n\r\n //Questa serve per impostare me stesso come si deve, il validatore invece lo passo al validation-input quando viene settato il validationControl\r\n if (this.ngControl) {\r\n //Per tutti i validatori: rigenero la funzione di validazione. Per qualche motivo a volte ho validatori senza...\r\n //... questo è un workaround per essere sicuro di averla sempre.\r\n //Solo i validatori con parametri hanno bisogno della _createValidator (es. \"maxlength\" che ha 1 parametro), quindi no validatori tipo \"required\"\r\n if (this._validators) {\r\n this._validators.forEach(v => {\r\n if (v._createValidator)\r\n v._createValidator();\r\n });\r\n }\r\n\r\n // Hard kill di validatori che vengono iniettati nel punto sbagliato....\r\n (<any>this.ngControl.valueAccessor)._validators = [];\r\n\r\n if (this._validators)\r\n this.ngControl.control.addValidators(this._validators.filter(v => !v.ngOnInit));\r\n\r\n this.ngControl.control.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * Effettua il Bind/Parse delle varie **Source** unendo le informazioni specificate in **Display**\r\n * \r\n * Eventualmente rieffettua un bind al modello in base al valore della variabile **RebindModelAfterSource**\r\n */\r\n protected tryBindSourceDisplay(): void {\r\n if (!this.Source)\r\n return;\r\n\r\n if (this.Source.length == 0 && !this.SourceFirstBind)\r\n this.BoundSource = [];\r\n\r\n this.SourceFirstBind = false;\r\n\r\n // Cache locale per evitare di rifare dei regex.match ogni santa volta\r\n if (this.Source.length > 0) {\r\n this.BoundSource = [];\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 // Blocco per generare la descrizione finale di un elemento\r\n this.Source.forEach(s => {\r\n // Aggiungo alla BoundSource in formato standard KeyValue\r\n this.BoundSource.push(this.transformSourceItem(s));\r\n });\r\n\r\n // Post trybind se c'è un modello associato ricalcolo l'**EvaluatedModel**\r\n if (this.Model)\r\n this.EvaluatedModel = this.BoundSource.find(t => t.id == this.Model)?.description;\r\n }\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) {\r\n iffedMatches.forEach(m => {\r\n // Stessa regex di sopra ma il tag \"i\" serve per tirare fuori i singoli capturing group e per qualche motivo \r\n // new RegExp(baseRegex, \"g\") non funziona quindi non ho potuto razionalizzarlo\r\n let groups = m.match(/:([a-z]+)\\?\\(([^\\(\\)]+)\\)/i);\r\n this.BindCheckingGroups.push({ global: m, prop: groups[1], whenexists: groups[2] });\r\n });\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)\r\n matches.forEach(m => { this.BindProperties.push({ 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 return { id: s[this.IdField], description: desc };\r\n }\r\n\r\n /**\r\n * Indica se il comopnente in questione è in grado di gestire ngControl nulli. \r\n * Di default è **false**\r\n * \r\n * @returns {boolean} **true** se gestisco ngControl nulli, **false** altrimenti\r\n */\r\n handleNullNgControl(): boolean {\r\n return false;\r\n }\r\n\r\n /** @ignore */\r\n ngOnInit() {\r\n // A volte nell'ngOnInit non ci passa quindi lo metto sia qui sia nell'afterviewinit, penso che valga per i componenti di terze parti\r\n // che si collegano per i cazzi loro al form ecc, quindi la parte sopra non serve... BOH\r\n this.checkRequiredness();\r\n\r\n //Il nome non c'è se metto standalone : true (CHE NON é DA METTERE)\r\n //Dato che anche il controllo esterno viene considerato come componente del form, non posso basarmi solo sul nome ma devo aggiungere un tag. In questo caso \"_internal\"\r\n // ATTENZIONE: QUALSIASI SIA IL MOTIVO, SE STO COSO VIENE SPOSTATO DALL ngOnInit NON FUNZIONA PIU NULLA\r\n if (this.ngControl.name)\r\n this.GeneratedName = this.ngControl.name.toString() + \"_internal\";\r\n\r\n // ATTENZIONE: QUALSIASI SIA IL MOTIVO, SE STO COSO VIENE SPOSTATO DALL ngOnInit NON FUNZIONA PIU NULLA\r\n if (this.Form) {\r\n if (!this.formHasBennBound && this.validationControl) {\r\n this.Form.addControl(this.validationControl);\r\n this.formHasBennBound = true;\r\n }\r\n\r\n // Quando un form viene submittato la variabile Form.submitted viene assegnata all'input [submitted] del val-control\r\n // Essendo che però la CD è OnPush per dire ad Angular che l'Input è cambiato e permettere i sideffects di assegnare [submitted]\r\n // devo attaccarmi al submit attuale del form e prima di eseguirlo devo marcare il componente per il check\r\n let origFunc = this.Form.onSubmit;\r\n var formOutsideRef = this.Form;\r\n this.Form.onSubmit = (ev): boolean => {\r\n this.cdr.markForCheck();\r\n return origFunc.apply(formOutsideRef);\r\n };\r\n }\r\n\r\n if (this.SetValidationSubject) {\r\n this.SetValidationSubject.pipe(takeUntil(this.destroyed$)).subscribe(v => {\r\n if (v.fieldName + \"_internal\" == this.GeneratedName) {\r\n let control = this.Form.getControl(this.validationControl);\r\n \r\n // Tentativo di pezza pezzente\r\n if (control) {\r\n control.setErrors({ forcedtoinvalid: true });\r\n control.markAsTouched();\r\n }\r\n\r\n this.ngControl.control.setErrors({ forcedtoinvalid: true });\r\n this.ngControl.control.markAsTouched();\r\n }\r\n })\r\n }\r\n }\r\n\r\n destroyed$: Subject<void> = new Subject<void>();\r\n\r\n /**\r\n * Se sono in modalità detatched devo rimuovere manualmente questo controllo quando entro nella dispose, altrimenti se poi ne andassi a riaggiungere\r\n * un altro con lo stesso \"name\" ma magari resettato, Angular lo re-idraterebbe con i valori precedenti nonostante il modello fosse vuoto\r\n */\r\n ngOnDestroy() {\r\n if (this.Form && this.validationControl && !!this.Form.getControl(this.validationControl))\r\n this.Form.removeControl(this.validationControl);\r\n\r\n\r\n this.destroyed$.next();\r\n this.destroyed$.complete();\r\n }\r\n\r\n /** Elabora i validatori iniettati e capisce se il valore è obbligatorio o meno */\r\n /** Fratello della funzione con lo stesso nome lato validations */\r\n checkRequiredness() {\r\n // controllo se è settato un required per decidere in maniera condizionale se utilizzare il validatore required nel componente interno\r\n // Lo faccio qui e non in un eventuale ngOnInit o costruttore perché ngOnInit non sempre viene chiamato e da costruttore il validatore non ha ancora il valore giusto\r\n if (this._validators && this._validators.some(elem => elem instanceof RequiredValidator && (elem.required === true || (!elem.required && elem.required !== false))))\r\n this.Required = true;\r\n }\r\n\r\n /** @ignore */\r\n ngAfterViewInit() {\r\n if (!this.ngControl)\r\n return;\r\n\r\n this.checkRequiredness();\r\n }\r\n\r\n /** Helper che collega la funzione di reset del controllo form al controllo di validazione sottostante */\r\n private bindResetFunction() {\r\n //faccio in modo che se chiamo il reset del controllo (o della form) dall'esterno si resetti anche il controllo nativo\r\n const origFunc = (<any>this.ngControl.control).__original_reset__ || this.ngControl.control.reset;\r\n var ngControl_outsideReference = this.ngControl.control;\r\n var validationControl_outsideReference = this.validationControl.control;\r\n\r\n this.ngControl.control.reset = () => {\r\n origFunc.apply(ngControl_outsideReference);\r\n validationControl_outsideReference.reset();\r\n };\r\n\r\n //Per consentire richiami multipli di questa funzione prendendo sempre la fiunzione di reset base\r\n (<any>this.ngControl.control).__original_reset__ = origFunc\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n if (obj == null && this.firstBind) {\r\n this.firstBind = false;\r\n return;\r\n }\r\n\r\n this.Model = obj;\r\n\r\n //Per svegliare Angular. Il valore che entra potrebbe essere valido/non valido e questo lo binda a tutto, form compreso\r\n if (this.ngControl)\r\n this.ngControl.control.updateValueAndValidity();\r\n\r\n if (this.Model)\r\n this.onNotNullValueSet();\r\n\r\n // markForCheck non va bene in quanto arrivano possibilmente 2 update su un solo ciclo di stack\r\n // setTime*ut che wrappa tutto non va bene sennò spamma delle change detection a suon di interval che rallentano tantissimo l'app\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /** @ignore */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /** @ignore */\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n /**\r\n * Registra internamente il componente di validazione, ne imposta i validatori e collega il Form, se presente\r\n * \r\n * @param {NgModel} comp Elemento HTML marcato con \"#validationControl\"\r\n */\r\n registerValComp(comp: NgModel) {\r\n if (comp) {\r\n // È arrivato un nuovo validationContorl (succede solo nel form-select quando cambia la source da 0 elementi / null ad N elementi, quindi al massimo una volta) \r\n if (this.validationControl && this.Form)\r\n this.Form.removeControl(this.validationControl);\r\n\r\n this.validationControl = comp;\r\n\r\n //Questa serve per passare avanti i validatori\r\n this.validationControl.control.setValidators(this._validators);\r\n\r\n //Se sono staccato dal Form (vuol dire che sono ad esempio dentro un ng-template) aggiungo il controllo al Form passato come input (context del template)\r\n if (this.detatchedFromform && this.Form && !this.formHasBennBound) {\r\n this.Form.addControl(this.validationControl)\r\n this.formHasBennBound = true;\r\n }\r\n\r\n if (this.ngControl)\r\n this.bindResetFunction();\r\n\r\n //I val-roba questo lo fanno automaticamente dentro... gli altri no (es. semplice input checkbox)\r\n this.updateValidityForNativeInput();\r\n }\r\n }\r\n\r\n public registerForm(ngForm: NgForm) {\r\n this.Form = ngForm;\r\n this.Form.addControl(this.validationControl)\r\n this.formHasBennBound = true;\r\n }\r\n\r\n /**\r\n * Aggiorna il valore e la validità dell'input sottostante. Non viene chiamato per input nativi come le checkbox\r\n * \r\n * @param {boolean} forcedValue Forza l'aggiornamento anche se non è un input nativo (input nativo = checkbox, ad esempio)\r\n */\r\n updateValidityForNativeInput(forcedValue: boolean = false) {\r\n if (forcedValue || this.nativeInput)\r\n this.validationControl.control.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Classico \"spara fuori\". Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.\r\n * \r\n * Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html\r\n */\r\n changed(forcedValue: any = null, markForCheck: boolean = false, modelEvaluationHandled: boolean = false, internal: boolean = false) {\r\n let toEmit = forcedValue == null || forcedValue == \"\" ? this.Model ?? \"\" : forcedValue;\r\n\r\n if(!modelEvaluationHandled)\r\n this.EvaluatedModel = toEmit;\r\n \r\n this.propagateChange(toEmit);\r\n this.inputChange.emit(new ChangeEvent(internal, toEmit));\r\n if (markForCheck)\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Classico \"spara fuori\" sul focus. Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.\r\n * \r\n * Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html\r\n */\r\n focused(event: any) {\r\n this.inputFocus.emit(event);\r\n this.log(\"Control Focused - \" + this.GeneratedName);\r\n }\r\n\r\n /**\r\n * @ignore\r\n * Classico \"spara fuori\" sulla finalizzazione del valore dell'input (blur / tasto invio, ecc...). Mantengo lo stesso nome dell'evento dei <val-*> (inputChange) per retrocompatibilità.\r\n * \r\n * Non posso tenerlo protected altrimenti posso eseguirlo solo dal .ts e non dall' .html\r\n */\r\n finalized() {\r\n this.inputFinalized.emit(this.ngControl?.name?.toString());\r\n this.log(\"Control Value Finalized - \" + this.GeneratedName);\r\n }\r\n\r\n /**\r\n * Stampa un log a console\r\n * \r\n * @param {string} message Messaggio da stampare\r\n */\r\n public log(message: string) {\r\n if (this.FAV_DEBUG_MODE)\r\n console.log(\"@forms-and-validations: \" + message)\r\n }\r\n\r\n /** @ignore */\r\n abstract onNotNullValueSet(): void;\r\n}","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **FormFileComponent**\r\n */\r\n@Injectable()\r\nexport class FormFileComponentLoc extends LocalizationService {\r\n \r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"en->it\", \"Select a file\", [\"Seleziona un file\"]);\r\n super.set(\"en->it\", \"Files Selected\", [\"File Selezionati\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, ChangeDetectorRef, ElementRef, Inject, Input, Optional, Self, ViewChild, Host } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl, Validator, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\n// Esfaenza\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService, UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\n\r\n// Modelli\r\nimport { AppFile } from \"../../models/AppFile\";\r\n\r\n// Configurazioni\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\nimport { FormFileComponentLoc } from \"./form-file.component.loc\";\r\n\r\n/** Componente che permette all'utente di caricare/scaricare un file all'interno di un campo Input */\r\n@Component({\r\n selector: \"form-file\",\r\n providers: [{ provide: LocalizationService, useClass: FormFileComponentLoc }],\r\n styleUrls: [\"form-file.component.css\"],\r\n templateUrl: \"form-file.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormFileComponent 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 = false;\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 /** Riferimento all'elemento input di tipo file */\r\n @ViewChild(\"fileInput\", { static: false }) inputEl: ElementRef;\r\n\r\n /** @ignore Costruttore */\r\n constructor(private msgs: MessageService, cdr: ChangeDetectorRef, private utiExts: UtilityService, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, public lc: LocalizationService, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n\r\n //Per questo componente non posso permettermi che il modello sia nullo\r\n this.Model = new AppFile();\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();;\r\n if (this._validators) {\r\n this._validators.push(this);\r\n this.ngControl.control.setValidators(this._validators);\r\n this.ngControl.control.updateValueAndValidity();\r\n }\r\n\r\n if(this.ReadFile && this.Multiple)\r\n throw new Error(\"Impossibile utilizzare ReadFile e Multiple nello stesso form-file.\"); \r\n }\r\n\r\n validate(control: AbstractControl): ValidationErrors {\r\n if (this.Required && !(<AppFile>this.Model).filename)\r\n return { required: true }\r\n else return null;\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: AppFile): void {\r\n var model = obj == null ? new AppFile() : obj;\r\n this.EvaluatedModel = model.filename;\r\n super.writeValue(model);\r\n\r\n if(obj == null)\r\n this.changed();\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 fileChange(clear: boolean = false) {\r\n let files: File[] = [];\r\n let model = (<AppFile>this.Model);\r\n let ne: HTMLInputElement = this.inputEl.nativeElement;\r\n\r\n if (clear) {\r\n model.filename = \"\";\r\n ne.value = \"\";\r\n 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 // 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\r\n if(this.ReadFile) {\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 model.fileb64 = fileSourceSegments[fileSourceSegments.length -1];\r\n };\r\n }\r\n }\r\n\r\n // Modalità Upload Multiple File\r\n if (ne.files.length > 1)\r\n model.filename = ne.files.length + \" \" + this.lc.loc(\"Files Selected\");\r\n\r\n model.nativefiles = files;\r\n model.fileb64 = null;\r\n }\r\n\r\n this.EvaluatedModel = model.filename;\r\n this.changed(null, true, true);\r\n }\r\n\r\n /** Permette di scaricare l'eventuale file selezionato */\r\n onDownloadFile() {\r\n let model = (<AppFile>this.Model);\r\n this.utiExts.saveFile(model.fileb64, model.filename);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\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 let ne: HTMLInputElement = this.inputEl.nativeElement;\r\n ne.files = event.dataTransfer?.files;\r\n this.fileChange();\r\n }\r\n}","<!--Per la DisplayMode, a differenza di TUTTI gli altri forms, ho dovuto inserire \"Model?.filename\", in quanto \r\nEvaluatedModel è una stringa valorizzata col modello AppFile, e non posso farci ragionamenti sopra a causa del compilatore-->\r\n\r\n<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FancyMode && !FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"!FancyMode && FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <span class=\"app-link\" style=\"display: inline;\" *ngIf=\"Model?.filename\" (click)=\"onDownloadFile()\">{{ Model?.filename }}</span>\r\n <span *ngIf=\"!Model?.filename\">N/A</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" (click)=\"onDownloadFile()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"Model.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Fancy Mode-->\r\n<div *ngIf=\"FancyMode\" (drop)=\"onFileDropped($event)\" (dragover)=\"onFileDragOver($event)\">\r\n <!--Drop-->\r\n <label for=\"{{GeneratedName}}\" class=\"drop-container\">\r\n <span class=\"drop-title\">{{Label}}</span>\r\n <div class=\"file-name-container\">{{Model.filename || 'Nessun file selezionato'}}</div>\r\n <!--Hidden Forms-->\r\n <input hidden type=\"file\" (change)=\"fileChange()\" id=\"{{GeneratedName}}\" #fileInput class=\"file-upload-btn app-pointer\" [multiple]=\"Multiple ? true : null\" />\r\n <input hidden type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && Model.filename && Model.fileb64\" class=\"form-control checking-field\" \r\n placeholder=\"{{Placeholder || ('Select a file' | localize : lc)}}...\" [(ngModel)]=\"Model.filename\" name=\"dsfile_{{GeneratedName}}\" #validationControl=\"ngModel\" />\r\n <!--Clean-->\r\n <i class=\"fa fa-times file-delete-btn\" (click)=\"fileChange(true); $event.stopPropagation(); false;\" *ngIf=\"Model.filename\"></i>\r\n <!--Download-->\r\n <div *ngIf=\"AllowDownload && Model.filename && Model.fileb64\" class=\"app-pointer file-download-btn\" (click)=\"onDownloadFile(); $event.stopPropagation(); false;\">\r\n <span class=\"file-download-btn-text\">Download <i class=\"fa fa-download\"></i></span>\r\n </div>\r\n </label>\r\n</div>","// Angular\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, Component, Host, Inject, Input, Optional, Self } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { DateService } from \"@esfaenza/extensions\";\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { ChangeDetectorRef } from \"@angular/core\";\r\n\r\n/**\r\n * Componente che dà all'utente la possibilità di selezionare una data insieme ad un orario\r\n */\r\n@Component({\r\n selector: \"form-datetime\",\r\n templateUrl: \"form-datetime.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormDateTimeComponent extends BaseFormControl implements ControlValueAccessor {\r\n \r\n /** Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs */\r\n @Input() JsDates: boolean = false;\r\n\r\n /** @ignore Costruttore */\r\n constructor(private datesExts: DateService, cdr: ChangeDetectorRef, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY : string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.EvaluatedModel = this.datesExts.getFormatted(obj, false, true);\r\n super.writeValue(obj);\r\n }\r\n\r\n changed(): void {\r\n this.EvaluatedModel = this.Model ? this.datesExts.getFormatted(this.Model, false, true) : '';\r\n super.changed(null, false, true);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-datetime [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [Readonly]=\"Readonly\"\r\n [id]=\"GeneratedName\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-datetime>\r\n</ng-template>","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **FormAdaptiveComponent**\r\n */\r\n@Injectable()\r\nexport class FormAdaptiveComponentLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"en->it\", \"Select a file\", [\"Seleziona un file\"]);\r\n super.set(\"en->it\", \"Files Selected\", [\"File Selezionati\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Host, Inject, Input, Optional, Self, SimpleChanges, ViewChild } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl, PatternValidator } from \"@angular/forms\";\r\n\r\n// ES / Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { DateService, UtilityService } from \"@esfaenza/extensions\";\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { NgxMatDateAdapter } from \"@angular-material-components/datetime-picker\";\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { FormAdaptiveComponentLoc } from \"./form-adaptive.component.loc\";\r\n\r\n// Modelli\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\nimport { AppFile } from \"../../models/AppFile\";\r\n\r\nimport { Observable } from \"rxjs\";\r\nimport { ChangeEvent } from \"../../models/ChangeEvent\";\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\ndeclare var dayjs: any;\r\n\r\n/** Opzioni generiche disponibili */\r\nexport type AvailableOptions = 'JsDates' | 'CaseSensitive' | 'MinChars' | 'SearchFunction' | 'Alignment' | 'Precision' | 'AllowDownload' | 'AdjustNumber' | 'Pattern';\r\n\r\n/** Componente in grado di assumere la forma di un qualsiasi altro componente form in base al tipo specificato. Utile per la creazione di form dinamici */\r\n@Component({\r\n selector: \"form-adaptive\",\r\n providers: [{ provide: LocalizationService, useClass: FormAdaptiveComponentLoc }],\r\n templateUrl: \"form-adaptive.component.html\",\r\n styleUrls: [\"../form-file/form-file.component.css\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormAdaptiveComponent extends BaseFormControl implements ControlValueAccessor {\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\r\n /** Messaggio per quando si binda un form-adaptive senza tipo */\r\n @Input() TypeMissingMessage: string;\r\n\r\n /** Pattern di validazione */\r\n @Input() Pattern: string;\r\n\r\n /** Indica di aggiustare in uscita i number in modo che siano parsabili dal javascript */\r\n @Input() AdjustNumber: boolean = true;\r\n\r\n /** Riferimento all'elemento input di tipo file qualora il **Type** di questo componente fosse **file** */\r\n @ViewChild(\"fileInput\", { static: false }) inputEl: ElementRef;\r\n\r\n /** Permette di scaricare l'eventuale file presente qualora il **Type** di questo componente fosse **file** */\r\n @Input() AllowDownload: boolean = true;\r\n\r\n /** Modello typescript di bind dei file */\r\n ModelFile: AppFile;\r\n\r\n /** Utilizzata nel form-adapter per specificare la precisione degli input currencymap (Type: currency) */\r\n @Input() Precision: number = 2;\r\n\r\n /** Allineamento della currency mask */\r\n @Input() Alignment: 'left' | 'right' = 'right';\r\n\r\n /** Funzione di ricerca che verrà chiamata dal componente */\r\n @Input() SearchFunction: (search: string, byid: boolean) => Observable<{ id: string, description: string }[]> = null;\r\n\r\n /** Numero minimo di caratteri con cui cercare */\r\n @Input() MinChars: number = 3;\r\n\r\n /** Indica se i controlli devono essere effettuati tenendo conto del Case o meno. Vale solo qualora la **Source** fosse fornita */\r\n @Input() CaseSensitive: boolean = false;\r\n\r\n /** Opzioni specifiche per il componente che si va a visualizzare. Es. per i tipi date: { JsDates: true } */\r\n @Input() Options: { [id in AvailableOptions]?: any } = {};\r\n\r\n /** Variabile interna che gestisce se effettuare il riallineamento dei dati o meno */\r\n private alignValues: boolean = false;\r\n\r\n /**\r\n * Indica se ignorare il prossimo evento writeValue che normalmente dovrebbe richiedere la nuova source. Serve per quando l'utente seleziona un elemento:\r\n * Subito dopo partirebbe un altro evento modelChange che ricaricherebbe nuovamente la source\r\n */\r\n private ignoreNextWriteValue: boolean = false;\r\n\r\n /** Cache della sorgente originale POST binding, in modo da poter fare filtri in locale qualora la **SearchFunction** non fosse definita e la **Source** fosse assegnata */\r\n public FilteredBoundSource: { id: string, description: string }[] = [];\r\n\r\n /** Solo per gli input di tipo \"date\". Capisce che modalità usare per il validation-date sottostante */\r\n public useJsDates: boolean = null;\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, private utiExts: UtilityService, private datesExts: DateService, private dateAdapter: NgxMatDateAdapter<any>, public lc: LocalizationService, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE: boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n\r\n this.ModelFile = new AppFile();\r\n this.UseUserValidators = false;\r\n }\r\n\r\n public IntPattern = '^[0-9]\\\\d*$';\r\n public FloatPattern = '^([0-9]*[,])?[0-9]+$';\r\n\r\n /**\r\n * Nvl con un minimo di senso\r\n * @param value Valore base\r\n * @param ifnod Valore da usare se **value** è nullo o undefined\r\n * @returns Il valore preso fra i due disponibili\r\n */\r\n private nvl<T>(value: T, ifnod: T): T {\r\n return value == null || value == undefined ? ifnod : value;\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n // Assegnazione Opzioni da oggetto\r\n if(this.Options){\r\n this.useJsDates = this.nvl(this.Options?.JsDates, this.useJsDates);;\r\n this.CaseSensitive = this.nvl(this.Options?.CaseSensitive, this.CaseSensitive);\r\n this.MinChars = this.nvl(this.Options?.MinChars, this.MinChars);\r\n this.SearchFunction = this.nvl(this.Options?.SearchFunction, this.SearchFunction);\r\n this.Alignment = this.nvl(this.Options?.Alignment, this.Alignment);\r\n this.Precision = this.nvl(this.Options?.Precision, this.Precision);\r\n this.AllowDownload = this.nvl(this.Options?.AllowDownload, this.AllowDownload);\r\n this.AdjustNumber = this.nvl(this.Options?.AdjustNumber, this.AdjustNumber);\r\n this.Pattern = this.nvl(this.Options?.Pattern, this.Pattern);\r\n }\r\n\r\n if (this.ngControl) {\r\n // Esclusi i validatori a componenti\r\n let validators = [...(this._validators || [])].filter(v => !v.ngOnInit);\r\n\r\n var pv = new PatternValidator();\r\n switch (this.Type) {\r\n case 'int':\r\n pv.pattern = this.Pattern || this.IntPattern;\r\n validators.push(pv);\r\n break;\r\n case 'float':\r\n case 'number':\r\n pv.pattern = this.Pattern || this.FloatPattern;\r\n validators.push(pv);\r\n break;\r\n case 'string':\r\n if (this.Pattern) {\r\n pv.pattern = this.Pattern;\r\n validators.push(pv);\r\n }\r\n break;\r\n }\r\n (<any>pv)._validator = (<any>pv).createValidator(pv.pattern);\r\n (<any>this.ngControl)._setValidators(validators);\r\n this.ngControl.control.setValidators(validators);\r\n this.ngControl.control.updateValueAndValidity();\r\n }\r\n\r\n super.ngOnInit();\r\n }\r\n\r\n /** @ignore */\r\n public async ngOnChanges(changes: SimpleChanges) {\r\n const newSource = changes[\"Source\"];\r\n const newType = changes[\"Type\"];\r\n\r\n if (newSource) {\r\n this.tryBindSourceDisplay();\r\n\r\n // Prima assegnazione se cambia la source sotto (quindi se viene bindata direttamente da HTML)\r\n if (this.Type == \"autocomplete\" && (this.Model?.length || 0) >= this.MinChars && !this.SearchFunction)\r\n this.FilteredBoundSource = this.BoundSource;\r\n else\r\n this.FilteredBoundSource = [];\r\n\r\n this.cdr.markForCheck();\r\n }\r\n\r\n if (newType && this.Model)\r\n this.writeValue(this.Model);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.alignValues = false;\r\n\r\n this.EvaluatedModel = obj?.toString() || \"\";\r\n\r\n if (!this.Type) {\r\n this.Type = \"string\";\r\n this.EvaluatedModel = obj;\r\n }\r\n\r\n if (this.Type == \"date\" || this.Type == \"datetime\") {\r\n this.useJsDates = this.useJsDates == null ? Object.prototype.toString.call(obj) === \"[object Date]\" : this.useJsDates;\r\n if (this.Type == \"date\")\r\n this.EvaluatedModel = this.datesExts.getFormatted(obj, true, false);\r\n if (this.Type == \"datetime\")\r\n this.EvaluatedModel = this.datesExts.getFormatted(obj, false, true);\r\n }\r\n else if ((this.Type == \"float\" || this.Type == \"number\") && obj) {\r\n obj = obj.toString().replace(\".\", \",\");\r\n this.EvaluatedModel = obj;\r\n }\r\n // Per sicurezza riallineo i valori\r\n else if (this.Type == \"boolean\") {\r\n obj = obj ? (obj === true || obj.toLowerCase() == \"true\") : false;\r\n this.alignValues = true;\r\n this.EvaluatedModel = this.lc.loc(obj ? 'Sì' : 'No');\r\n }\r\n else if (this.Type == \"time\") {\r\n const [hours, minutes, seconds] = (obj || \"00:00:00\").split(\":\");\r\n obj = dayjs().hour(parseInt(hours ?? 0)).minute(parseInt(minutes ?? 0)).second(parseInt(seconds ?? 0));\r\n this.EvaluatedModel = `${hours || '00'}:${minutes || '00'}:${seconds || '00'}`;\r\n }\r\n else if (this.Type == \"file\") {\r\n obj = this.ModelFile;\r\n this.EvaluatedModel = this.ModelFile.filename;\r\n }\r\n else if (this.Type == \"autocomplete\") {\r\n if (this.SearchFunction) {\r\n this.SearchFunction(obj, true).subscribe(t => {\r\n this.Source = t;\r\n this.tryBindSourceDisplay();\r\n setTimeout(() => { this.finalizeValue(obj); });\r\n });\r\n return;\r\n }\r\n else\r\n this.finalizeValue(obj);\r\n }\r\n\r\n if (this.BoundSource && this.BoundSource.length > 0)\r\n this.EvaluatedModel = this.BoundSource.find(t => t.id == obj)?.description;\r\n\r\n super.writeValue(obj);\r\n\r\n if (this.alignValues) {\r\n this.changed();\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Dato un valore verifica se può restituire le informazioni trovate in **Source** con id uguale a **value** o se deve restituire il valore in se\r\n * \r\n * @param {any} value Valore scritto nell'input di testo\r\n */\r\n private finalizeValue(value: any) {\r\n var val = this.Source.find(t => t.id == value);\r\n this.propagateChange(val ? val.id : value);\r\n this.Model = val ? val.description : value;\r\n this.EvaluatedModel = this.Model;\r\n }\r\n\r\n /**\r\n * Evento di filtro della sorgente dati in base all'input utente\r\n * \r\n * @param {string} event Input utente\r\n */\r\n public filterSource(event?: ChangeEvent) {\r\n if (this.ignoreNextWriteValue) {\r\n this.ignoreNextWriteValue = false;\r\n return;\r\n }\r\n\r\n // Quando filtro la source, se non devo ignorare l'evento devo comunque assicurarmi di impostare il valore selezionato a null\r\n super.changed(null);\r\n\r\n if (!event && this.MinChars == 0 && !this.SearchFunction) {\r\n this.FilteredBoundSource = this.BoundSource;\r\n return;\r\n }\r\n\r\n if (!event || event.value.length < this.MinChars) {\r\n this.FilteredBoundSource = [];\r\n return;\r\n }\r\n\r\n if (!this.SearchFunction && (!this.Source || this.Source.length == 0))\r\n throw \"Impossibile filtrare gli elementi senza una funzione di ricerca che restituisca una lista di { id: string, description: string }\";\r\n\r\n if (this.SearchFunction) {\r\n this.throttla(\"filtersource\", () => {\r\n this.SearchFunction(event.value, false).subscribe(t => {\r\n this.Source = t;\r\n this.tryBindSourceDisplay();\r\n // In questo caso è già filtrata dalla SearchFunction\r\n this.FilteredBoundSource = this.BoundSource;\r\n this.removeFilteredSourceOnDescriptionSelection();\r\n this.cdr.markForCheck();\r\n });\r\n }, 400);\r\n }\r\n else {\r\n this.throttla(\"filtersource\", () => {\r\n // In questo caso devo filtrare io in memoria\r\n this.FilteredBoundSource = this.BoundSource.filter(t => (this.CaseSensitive && t.description.includes(event.value)) || (!this.CaseSensitive && t.description.toLowerCase().includes(event.value.toLowerCase())));\r\n this.removeFilteredSourceOnDescriptionSelection();\r\n this.cdr.markForCheck();\r\n }, 100);\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private removeFilteredSourceOnDescriptionSelection() {\r\n if (this.FilteredBoundSource.length == 1 && (this.FilteredBoundSource[0].description === this.Model)) {\r\n this.Model = this.BoundSource[0].id;\r\n this.EvaluatedModel = this.BoundSource[0].description;\r\n this.FilteredBoundSource = [];\r\n }\r\n }\r\n\r\n /** Metodo richiamato quando viene modificato il modello del campo di input */\r\n changed(event?: ChangeEvent) {\r\n var toEmit = this.getModelToEmit();\r\n\r\n if (this.Type == \"autocomplete\")\r\n this.ignoreNextWriteValue = true;\r\n\r\n if (this.EmitPendingChanges)\r\n super.changed(toEmit, false, false, event?.internal);\r\n }\r\n\r\n /** @ignore */\r\n finalized() {\r\n super.finalized();\r\n }\r\n\r\n /** Metodo richiamato quando viene selezionato il campo col mouse */\r\n focused(event: any) {\r\n super.focused(event);\r\n }\r\n\r\n /** Effettua gli aggiustamenti dati del caso ed emette il modello corretto */\r\n private getModelToEmit() {\r\n var toEmit = this.Model ?\r\n (this.Type == \"time\" || this.useJsDates ?\r\n this.dateAdapter.clone(this.datesExts.getDateConvertion(this.Model))\r\n : JSON.parse(JSON.stringify(this.Model)))\r\n : null;\r\n\r\n if ((this.Type == \"float\" || this.Type == \"number\") && toEmit) {\r\n if(this.AdjustNumber)\r\n toEmit = toEmit.replace(\".\", \"\").replace(\",\", \".\");\r\n this.EvaluatedModel = toEmit;\r\n }\r\n else if (this.Type == \"boolean\") {\r\n toEmit = toEmit ? true : false;\r\n this.EvaluatedModel = this.lc.loc(toEmit ? 'Yes' : 'No');;\r\n }\r\n else if (this.Type == \"time\") {\r\n toEmit = toEmit.format(\"HH:mm:ss\");\r\n this.EvaluatedModel = toEmit;\r\n }\r\n else if ((this.Type == \"date\" || this.Type == \"datetime\") && this.useJsDates) {\r\n toEmit = toEmit.toDate();\r\n this.EvaluatedModel = this.datesExts.getFormatted(this.Model, this.Type == \"date\", this.Type == \"datetime\");\r\n }\r\n\r\n return toEmit;\r\n }\r\n\r\n /**\r\n * Helper per gestire la modifica del file attualmente bindato. Ovviamente funziona solo qualora il **Type** fosse **file**\r\n * \r\n * @param {boolean} clear Indica se bisogna svuotare l'input o meno \r\n */\r\n fileChange(clear: boolean = false) {\r\n let files: File[] = [];\r\n let model = (<AppFile>this.Model);\r\n let ne: HTMLInputElement = this.inputEl.nativeElement;\r\n\r\n if (clear) {\r\n model.filename = \"\";\r\n ne.value = \"\";\r\n }\r\n else {\r\n for (let i = 0; i < ne.files.length; i++)\r\n files.push(ne.files.item(i));\r\n\r\n if (ne.files.length == 1)\r\n model.filename = ne.files[0].name;\r\n if (ne.files.length > 1)\r\n model.filename = ne.files.length + \" \" + this.lc.loc(\"Files Selected\");\r\n model.nativefiles = files;\r\n model.fileb64 = null;\r\n }\r\n this.changed();\r\n }\r\n\r\n /** Permette di scaricare il file collegato all'evetnuale file input rappresentato da questo componente */\r\n downloadAttachment() {\r\n let model = (<AppFile>this.Model);\r\n this.utiExts.saveFile(model.fileb64, model.filename);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n\r\n //******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate\r\n //TODO: spostarla in un metodo di utilità (esfaenza/extensions)\r\n /** @ignore */\r\n private executionTimers: { [index: string]: any } = {};\r\n /** @ignore */\r\n private throttla(id: string, func: Function, throttleTime: number): void {\r\n //Se ho la funzione che vuole eseguire ripulisco quel timeout\r\n if (this.executionTimers[id])\r\n clearTimeout(this.executionTimers[id]);\r\n\r\n //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi\r\n this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);\r\n }\r\n //*************************\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div *ngIf=\"!Type\" class=\"app-margin-top-5\">\r\n <em>{{TypeMissingMessage}}</em>\r\n </div>\r\n \r\n <!--Se currency-->\r\n <div *ngIf=\"Type == 'currency'\">\r\n <val-currency #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\"\r\n [CurrencyOptions]=\"{ prefix: '', thousands: '.', decimal: ',', precision: Precision, align: Alignment }\" [noValidate]=\"!Validation\"\r\n type=\"text\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed();\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-currency>\r\n </div>\r\n <!--Se data-->\r\n <div *ngIf=\"Type == 'date'\">\r\n <val-date #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" [useJsDates]=\"useJsDates\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div *ngIf=\"Type == 'string'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || ''}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se numero-->\r\n <div *ngIf=\"Type == 'float' || Type == 'number'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || FloatPattern}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se numero intero-->\r\n <div *ngIf=\"Type == 'int'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || IntPattern}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"m-t-5\" *ngIf=\"Type == 'boolean'\">\r\n <input #validationControl=\"ngModel\" [readonly]=\"Readonly\" type=\"checkbox\" class=\"app-pointer\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" (ngModelChange)=\"changed(); finalized();\" (click)=\"focused($event);\" />\r\n </div>\r\n <!--Se enum-->\r\n <div *ngIf=\"Type == 'enum'\">\r\n <val-select #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [placeHolderValue]=\"''\" [placeholder]=\"Required ? ('Select' | localize : lc) + '...' : Placeholder\" [required]=\"Required\" [(ngModel)]=\"Model\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\">\r\n <option *ngFor=\"let val of BoundSource\" [value]=\"val.id\">{{val.description}}</option>\r\n </val-select>\r\n </div>\r\n <!--Se autocomplete-->\r\n <div *ngIf=\"Type == 'autocomplete'\">\r\n <val-autocomplete #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [placeholder]=\"Required ? ('Select' | localize : lc) + '...' : Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" [FilteredSource]=\"FilteredBoundSource\" (inputChange)=\"filterSource($event); changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-autocomplete>\r\n </div>\r\n <!--Se date time-->\r\n <div *ngIf=\"Type == 'datetime'\">\r\n <val-datetime #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [useJsDates]=\"useJsDates\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-datetime>\r\n </div>\r\n <!--Se time-->\r\n <div *ngIf=\"Type == 'time'\">\r\n <ngx-mat-timepicker name=\"val-time\" #elementRef #baseInput=\"ngModel\" [(ngModel)]=\"Model\" [disabled]=\"Readonly\"\r\n [showSpinners]=\"false\" [stepHour]=\"2\" [stepMinute]=\"5\" [stepSecond]=\"30\"\r\n [showSeconds]=\"true\" (ngModelChange)=\"changed()\" #validationControl=\"ngModel\">\r\n </ngx-mat-timepicker>\r\n </div>\r\n <!--Se file-->\r\n <div *ngIf=\"Type == 'file'\">\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" #fileInput id=\"{{GeneratedName}}\" class=\"file-upload-btn app-pointer\" [multiple]=\"null\"/>\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && ModelFile.filename && ModelFile.fileb64\" class=\"form-control checking-field\" placeholder=\"{{'Select a file' | localize : lc}}...\" [(ngModel)]=\"ModelFile.filename\" name=\"dsfile\" #validationControl=\"ngModel\" [required]=\"Required\"/>\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && ModelFile.filename && ModelFile.fileb64\" (click)=\"downloadAttachment()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"ModelFile.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n </div>\r\n</ng-template>","// Angular\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 vuoto, \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-empty\",\r\n templateUrl: \"form-empty.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormEmptyComponent {\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 finto */\r\n @Input() FormGroupClass: string = \"\";\r\n\r\n /** Valore placeholder da mostrare */\r\n public PlaceholderModel: string = \"Placeholder\";\r\n}","<div class=\"form-group row app-hidden-view {{FormGroupClass}}\" [class.app-margin-bottom-0]=\"Last\">\r\n <label class=\"col-md-4 m-t-5\">Placeholder:</label>\r\n <div class=\"col-md-8\">\r\n <val-input type=\"text\" [(ngModel)]=\"PlaceholderModel\" [ngModelOptions]=\"{standalone: true}\"></val-input>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>","// Angular\r\nimport { ChangeDetectionStrategy, Component, Input, TemplateRef } from \"@angular/core\";\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 changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormTemplateComponent {\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}","<!-- NON PROPRIO Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\"><ng-container *ngTemplateOutlet=\"content\"></ng-container></ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\"><ng-container *ngTemplateOutlet=\"content\"></ng-container></div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"content\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n <div [hidden]=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"content\"></ng-container></div>\r\n <div [hidden]=\"!DisplayMode || !DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<!-- Singola proiezione -->\r\n<ng-template #content><ng-content></ng-content></ng-template>","// Angular\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 changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormErrorComponent {\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 { 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 changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormInfoComponent {\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 { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\nimport { Component, Inject, Optional, Self, Host, ChangeDetectionStrategy, Input } from \"@angular/core\";\r\n\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE, FAV_SLIDER_MODE } from '../../tokens';\r\nimport { ChangeDetectorRef } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/** Componente rappresentante una checkbox */\r\n@Component({\r\n selector: \"form-checkbox\",\r\n templateUrl: \"form-checkbox.component.html\",\r\n styleUrls: [\"form-checkbox.component.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormCheckboxComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Mostra l'input checkbox con lo stile di uno slider */\r\n @Input() SliderMode: boolean = null;\r\n\r\n /** @ignore Costruttore */\r\n constructor(private lc: LocalizationService, cdr: ChangeDetectorRef, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_SLIDER_MODE) private FAV_SLIDER_MODE: boolean, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE: boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n if (this.SliderMode == null)\r\n this.SliderMode = this.FAV_SLIDER_MODE;\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n obj = obj ? (obj === true || obj.toLowerCase() == \"true\") : false;\r\n this.EvaluatedModel = this.lc.loc(obj ? 'Sì' : 'No');\r\n\r\n super.writeValue(obj);\r\n }\r\n\r\n changed(): void {\r\n this.EvaluatedModel = this.lc.loc(this.Model ? 'Sì' : 'No');\r\n super.changed(null, false, true);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\" class=\"app-inline-block\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}:</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <ng-container *ngIf=\"SliderMode\">\r\n <label class=\"toggler-wrapper slider-checkbox\">\r\n <input [disabled]=\"Readonly ? true : null\" type=\"checkbox\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" #validationControl=\"ngModel\" (ngModelChange)=\"changed(); finalized()\" (click)=\"focused($event)\" >\r\n <div class=\"toggler-slider\">\r\n <div class=\"toggler-knob\"></div>\r\n </div>\r\n </label>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!SliderMode\">\r\n <input class=\"app-pointer\" [disabled]=\"Readonly ? true : null\" type=\"checkbox\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" #validationControl=\"ngModel\" (ngModelChange)=\"changed(); finalized()\" (click)=\"focused($event)\"/>\r\n </ng-container>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, Component, Host, Inject, Input, Optional, Self } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { DateService } from \"@esfaenza/extensions\";\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { ChangeDetectorRef } from \"@angular/core\";\r\n\r\n/** Componente che dà all'utente la possibilità di selezionare una data */\r\n@Component({\r\n selector: \"form-date\",\r\n templateUrl: \"form-date.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormDateComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Utilizza il Date di Javascript come modello in uscita. Il modello in entrata verrà comunque ricondotto a un DayJs */\r\n @Input() JsDates: boolean = false;\r\n\r\n /** @ignore Costruttore */\r\n constructor(private datesExts: DateService, cdr: ChangeDetectorRef, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE: boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.EvaluatedModel = this.datesExts.getFormatted(obj, true, false);\r\n super.writeValue(obj);\r\n }\r\n\r\n changed(): void {\r\n let newlyEvaluatedModel = this.Model ? this.datesExts.getFormatted(this.Model, true, false) : '';\r\n\r\n // Evito che l'inputChange lato html mi faccia sparare fuori dai changed finti. L'input cambia solo quando cambia il modello presentato\r\n if (newlyEvaluatedModel != this.EvaluatedModel) {\r\n this.EvaluatedModel = newlyEvaluatedModel\r\n super.changed(null, false, true);\r\n }\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-date [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [id]=\"GeneratedName\"\r\n [Readonly]=\"Readonly\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey' : ''\"\r\n [useJsDates]=\"JsDates\"\r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\">\r\n </val-date>\r\n</ng-template>","// Angular\r\nimport { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Host, Inject, Input, Optional, Output, Self } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\nimport { ChangeDetectorRef } from \"@angular/core\";\r\n\r\n/** Semplice componente di Input testuale, con eventuale prefisso/suffisso */\r\n@Component({\r\n selector: \"form-input\",\r\n templateUrl: \"form-input.component.html\",\r\n styleUrls: [\"./form-input.component.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormInputComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Indica se l'input relativo è di tipo Password */\r\n @Input() public Password: boolean = false;\r\n\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 /** Delegato per l'esecuzione di un'operazione al click del prefisso */\r\n @Output() onPrefixAction: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del suffisso */\r\n @ContentChild(\"suffix\", { static: false }) suffix;\r\n\r\n /** Elemento che contiene la proiezione dell'HTML del prefisso */\r\n @ContentChild(\"prefix\", { static: false }) prefix;\r\n\r\n /** Indica la presenza o meno di un suffisso, si basa sulla \"truthiness\" della proiezione **suffix** */\r\n public HasSuffix: boolean = false;\r\n\r\n /** Indica la presenza o meno di un prefisso, si basa sulla \"truthiness\" della proiezione **prefix** */\r\n public HasPrefix: boolean = false;\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.EvaluatedModel = obj?.toString() || \"\";\r\n super.writeValue(obj);\r\n }\r\n\r\n /** @ignore */\r\n ngAfterContentInit() {\r\n this.HasSuffix = !!this.suffix;\r\n this.HasPrefix = !!this.prefix;\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-input [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\"\r\n [noValidate]=\"!Validation\"\r\n [Frozen]=\"Frozen\"\r\n [submitted]=\"Form?.submitted\"\r\n [Readonly]=\"Readonly\"\r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n type=\"text\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}\"\r\n autocomplete=\"off\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [Password]=\"Password\">\r\n <ng-container *ngIf=\"HasSuffix\">\r\n <ng-template #suffix_internal>\r\n <span class=\"input-suffix\" matSuffix (click)=\"onSuffixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"suffix\"></ng-container>\r\n </span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"HasPrefix\">\r\n <ng-template #prefix_internal>\r\n <span matPrefix (click)=\"onPrefixAction.emit(); $event.stopPropagation(); $event.preventDefault();\">\r\n <ng-container *ngTemplateOutlet=\"prefix\"></ng-container>\r\n </span>\r\n </ng-template>\r\n </ng-container>\r\n </val-input>\r\n</ng-template>","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **FormSelectComponent**\r\n */\r\n@Injectable()\r\nexport class FormSelectComponentLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"it->en\", \"Seleziona\", [\"Select\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, Inject, Input, Optional, Self, SimpleChanges, ChangeDetectorRef, TemplateRef, Host } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { FormSelectComponentLoc } from \"./form-select.component.loc\";\r\n\r\n/** Componente che permette di selezionare un valore da una lista di valori disponibili */\r\n@Component({\r\n selector: \"form-select\",\r\n providers: [{ provide: LocalizationService, useClass: FormSelectComponentLoc }],\r\n templateUrl: \"form-select.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormSelectComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Permette di specificare il testo della Label flottante material-style */\r\n @Input() SelectLabel: string = \"\";\r\n\r\n /**\r\n * Permette al componente di considerare questo valore come \"valore placeholder\"\r\n * \r\n * Si consiglia di mantenere il default\r\n */\r\n @Input() PlaceholderValue: string = '';\r\n\r\n /** Override del placeholder per select requried */\r\n @Input() RequiredPlaceholder: string = null;\r\n\r\n /**\r\n * Permette al componente di considerare questo valore come \"valore vuoto\"\r\n * \r\n * Si consiglia di mantenere il default\r\n */\r\n @Input() EmptyFieldValue: string = '-2000';\r\n\r\n /** Se **true** rimuove il simbolino di validazione (croce rossa o tick verde) */\r\n @Input() ShowValidationSymbol: boolean = true;\r\n\r\n /** Template per la visualizzazione delle opzioni */\r\n @Input() OptionTemplate: TemplateRef<any> = null;\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, public lc: LocalizationService, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n public ngOnChanges(changes: SimpleChanges) {\r\n let newSource = changes[\"Source\"];\r\n if (!newSource)\r\n return;\r\n\r\n let curr = newSource.currentValue;\r\n let prev = newSource.previousValue;\r\n\r\n // Se manca curr vuol dire che non ho un valore e posso ignorare (alla peggio deve arrivarmi un array vuoto)\r\n if (!curr)\r\n return;\r\n\r\n // Se manca prev vuol dire che è la prima assegnazione, lo considero un array vuoto e proseguo... ogni tanto viene chiamato una sola volta\r\n // ogni tanto viene chiamato due volte... è un pelo arbitrario ma vabbè\r\n if (!prev)\r\n prev = [];\r\n\r\n // Considero di aver ricevuto una nuova sorgente se:\r\n // 1: La sorgente nuova ha un numero di elementi diverso dalla sorgente vecchia\r\n // 2: Sia la sorgente nuova che vecchia hanno almeno un elemento e l'id del primo elemento della sorgente nuova è diverso dall'id del primo elemento della sorgente vecchia\r\n if (newSource && (curr.length != prev.length || (curr.length > 0 && curr[0][this.IdField] != prev[0][this.IdField]))) {\r\n /*\r\n * NGBUG:\r\n * Uso questo escamotage per distruggere il val-select e ricrearlo\r\n * Purtroppo una volta bindato a una sorgente, cambiargliela sotto significa mandare in palla material\r\n * che si mette a far floattare la label anche se il valore e' vuoto\r\n * Distruggendo il componente e ricreandolo material riparte da 0 e non da' problemi.\r\n * Ovviamente lo faccio solo quando ho una SelectLabel, altrimenti non ho problemi di floattamenti\r\n */\r\n if (!this.SourceFirstBind && this.SelectLabel) {\r\n\r\n this.detatchPreviousAndRetatchNext((afterStuff) => {\r\n this.BoundSource = null;\r\n setTimeout(() => {\r\n this.tryBindSourceDisplay();\r\n this.EvaluatedModel = this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == this.Model)?.description : \"\";\r\n this.cdr.detectChanges();\r\n setTimeout(() => { afterStuff(); })\r\n\r\n });\r\n });\r\n }\r\n else\r\n this.detatchPreviousAndRetatchNext((afterStuff) => {\r\n this.tryBindSourceDisplay();\r\n this.EvaluatedModel = this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == this.Model)?.description : \"\";\r\n this.cdr.detectChanges();\r\n setTimeout(() => { afterStuff(); })\r\n });\r\n\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n /** @ignore */\r\n private detatchPreviousAndRetatchNext(doStuff: Function) {\r\n if (this.DisplayMode) {\r\n doStuff(() => { });\r\n return;\r\n }\r\n\r\n if(this.validationControl && this.Form)\r\n this.Form.removeControl(this.validationControl);\r\n\r\n setTimeout(() => {\r\n doStuff(() => {\r\n if (this.validationControl && this.Form)\r\n this.Form.addControl(this.validationControl);\r\n else\r\n if (this.validationControl && this.Form) {\r\n this.Form.addControl(this.validationControl);\r\n }\r\n else if (!this.validationControl && this.Form) {\r\n // Questo messaggio ha senso solo se almeno il form esiste... se non esiste sticazzi insomma...\r\n console.error(`Impossibile aggiungere il componente di validazione per ${this.GeneratedName}, le validazioni potrebbero funzionare in maniera erratica`)\r\n }\r\n });\r\n })\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.EvaluatedModel = this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == obj)?.description : \"\";\r\n\r\n super.writeValue(obj);\r\n }\r\n\r\n changed() {\r\n this.EvaluatedModel = this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == this.Model)?.description : \"\";\r\n\r\n super.changed(null, false, true);\r\n }\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n\r\n <!-- Select vuota per quando non ho Sorgenti dati da cui selezionare. Uguale identica alla piena ma senza option\r\n Purtroppo devono essere due componenti distinti perché una select una volta creata non riesce più ad adattarsi ai cambi di options -->\r\n <val-select *ngIf=\"!BoundSource || BoundSource.length == 0\"\r\n [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\"\r\n [attr.required]=\"Required\"\r\n [noValidate]=\"!Validation\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : ('Seleziona' | localize : lc) + '...')) : Placeholder\"\r\n [placeHolderValue]=\"PlaceholderValue\"\r\n [submitted]=\"Form?.submitted\"\r\n [emptyFieldValue]=\"Required || Placeholder || SelectLabel ? EmptyFieldValue : ''\"\r\n [(ngModel)]=\"Model\"\r\n [showValidationSymbol]=\"ShowValidationSymbol\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}_zero\"\r\n (inputChange)=\"Model = $event == EmptyFieldValue ? (Required? PlaceholderValue : '') : $event; changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n #validationControl=\"ngModel\">\r\n </val-select>\r\n\r\n <!-- Select vera e propria per quando arrivano i dati -->\r\n <val-select *ngIf=\"BoundSource && BoundSource.length > 0\"\r\n [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\"\r\n [attr.required]=\"Required\"\r\n [noValidate]=\"!Validation\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [showValidationSymbol]=\"ShowValidationSymbol\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : ('Seleziona' | localize : lc) + '...')) : Placeholder\"\r\n [placeHolderValue]=\"PlaceholderValue\"\r\n [submitted]=\"Form?.submitted\"\r\n [emptyFieldValue]=\"Required || Placeholder || SelectLabel ? EmptyFieldValue : ''\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}_filled\"\r\n (inputChange)=\"Model = $event == EmptyFieldValue ? (Required? PlaceholderValue : '') : $event; changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n #validationControl=\"ngModel\">\r\n\r\n <ng-container *ngIf=\"OptionTemplate\">\r\n <option *ngFor=\"let obj of Source\" [value]=\"obj[IdField]\">\r\n <ng-container *ngTemplateOutlet=\"OptionTemplate; context: { $implicit : obj }\"></ng-container>\r\n </option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!OptionTemplate\">\r\n <option *ngFor=\"let obj of BoundSource\" [value]=\"obj.id\">\r\n {{obj.description}}\r\n </option>\r\n </ng-container>\r\n </val-select>\r\n</ng-template>","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **FormMultiSelectComponent**\r\n */\r\n@Injectable()\r\nexport class FormMultiSelectComponentLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"en->it\", \"Select everything\", [\"Seleziona tutto\"]);\r\n super.set(\"en->it\", \"Deselect everything\", [\"Deseleziona tutto\"]);\r\n super.set(\"en->it\", \"Select one or more values...\", [\"Seleziona uno o più valori...\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, Host, Inject, Input, Optional, Self, SimpleChanges, ViewEncapsulation } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { FormMultiSelectComponentLoc } from \"./form-multiselect.component.loc\";\r\nimport { ChangeDetectorRef } from \"@angular/core\";\r\n\r\n/**\r\n * Componente che permette di effettuare una selezione multipla fra gli oggetti passati nell'Input **Source**\r\n * \r\n * N.B: Al contrario degli altri componenti form-* questo viene tenuto con **changeDetection: ChangeDetectionStrategy.Default** in quanto il componente \r\n * utilizzato internamente (angular2-multiselect) non è stato assolutamente pensato per essere usato con **ChangeDetectionStrategy.OnPush**\r\n */\r\n@Component({\r\n selector: \"form-multiselect\",\r\n viewProviders: [{ provide: LocalizationService, useClass: FormMultiSelectComponentLoc }],\r\n templateUrl: \"form-multiselect.component.html\",\r\n styleUrls: [\"form-multiselect.component.css\"],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.Default\r\n})\r\nexport class FormMultiSelectComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /**\r\n * Modello temporaneo **NON** compatibile in maniera diretta con il componente **angular2-multiselect** usato internamente\r\n * \r\n * Serve da appoggio per effettuare un re-bind qualora la sorgente cambiasse e qualora **RebindModelAfterSource** fosse true\r\n */\r\n private TmpModel: string | string[] | {id: string, description: string}[] = [];\r\n\r\n /** Indica se la prossima modifica alla Source deve anche effettuare un re-bind del modello. Serve se la **BoundSource** passa da non avere oggetti ad averne */\r\n private RebindModelAfterSource: boolean = false;\r\n\r\n /** Permette di specificare il testo della Label flottante material-style */\r\n @Input() SelectLabel: string = \"\";\r\n\r\n /** Permette al componente di gestire come modello non una lista di chiavi, ma una lista di KeyValue */\r\n @Input() UseKeyValues: boolean = false;\r\n\r\n /** Indica al componente di emettere una lista di chiavi separate da virgola piuttosto che una lista vera e propria di chiavi/KeyValue */\r\n @Input() UseCommaSeparatedList: boolean = false;\r\n\r\n /** Indica se effettuare l'emit come lista di valori in un Json */\r\n @Input() UseJsonList: boolean = false;\r\n\r\n /** Impostazioni del componente interno **angular2-multiselect** */\r\n public Settings: { selectAllText: string, unSelectAllText: string, text: string, enableCheckAll: boolean, disabled: boolean, labelKey: string, tagToBody: boolean } = null;\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, public lc: LocalizationService, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n\r\n // Default dei settings per evitare che siano mai nulli, altrimenti il cazzo di CuppaLab salta in araia che è veramente una bellezza\r\n this.evaluateSettings(false);\r\n }\r\n\r\n /** @ignore */\r\n public async ngOnChanges(changes: SimpleChanges) {\r\n const newSource = changes[\"Source\"];\r\n if (newSource)\r\n {\r\n this.tryBindSourceDisplay();\r\n if (this.RebindModelAfterSource) {\r\n this.writeValue(this.TmpModel);\r\n this.RebindModelAfterSource = false;\r\n }\r\n }\r\n\r\n const readonly = changes[\"Readonly\"];\r\n this.evaluateSettings(readonly ? readonly.currentValue ?? false : this.Readonly ?? false);\r\n }\r\n\r\n /**\r\n * Scrive i nuovi settings per il componente\r\n * \r\n * @param {boolean} disabled Indica se il componente dev'essere disabilitato o meno\r\n */\r\n private evaluateSettings(disabled: boolean) {\r\n this.Settings = {\r\n selectAllText: this.lc.loc(\"Select everything\"),\r\n unSelectAllText: this.lc.loc(\"Deselect everything\"),\r\n text: this.SelectLabel || this.lc.loc(\"Select one or more values...\"),\r\n enableCheckAll: true,\r\n disabled: disabled,\r\n labelKey: \"description\",\r\n tagToBody: false\r\n };\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n\r\n /**\r\n * Indica se il comopnente in questione è in grado di gestire ngControl nulli. \r\n * In questo componente è normale che sia così quindi restituisce semplicemente **true**\r\n * \r\n * @returns {boolean} **true** se gestisco ngControl nulli, **false** altrimenti\r\n */\r\n handleNullNgControl(): boolean {\r\n return true;\r\n }\r\n\r\n /** @ignore Override per gestire input in ingresso */\r\n writeValue(obj: any[] | string): void {\r\n this.TmpModel = obj;\r\n let toPass: { id: string, description: string }[] = [];\r\n\r\n if(this.UseCommaSeparatedList && obj && (typeof obj === 'string' || obj instanceof String))\r\n obj = (<string>obj).split(',');\r\n\r\n if(this.UseJsonList && obj && (typeof obj === 'string' || obj instanceof String))\r\n obj = JSON.parse(<string>obj);\r\n\r\n //Qui arrivano solo gli id, o {id: x, description: y} in caso sono in UseKeyValues, \r\n //devo tirare fuori gli oggetti relativi e piazzarli come lista per il Model\r\n if (obj && obj.length > 0) {\r\n (<any[]>obj).forEach(t => {\r\n let item = this.BoundSource.find(o => o.id == (this.UseKeyValues ? t.id : t));\r\n if (item)\r\n toPass.push(JSON.parse(JSON.stringify(item)));\r\n else if (!this.BoundSource || this.BoundSource.length == 0)\r\n this.RebindModelAfterSource = true;\r\n });\r\n }\r\n\r\n this.EvaluatedModel = toPass.map(t => t.description).join(', ');\r\n super.writeValue(toPass);\r\n }\r\n\r\n /** @ignore Override per gestire input in uscita */\r\n changed() {\r\n let toEmit = null;\r\n if (this.UseJsonList)\r\n toEmit = JSON.stringify((<any[]>this.Model).map(m => m.id));\r\n else if (!this.UseKeyValues && !this.UseCommaSeparatedList)\r\n toEmit = (<any[]>this.Model).map(m => m.id);\r\n else if (this.UseKeyValues)\r\n toEmit = (<any[]>this.Model).map(m => ({ id: m.id, description: m.description }));\r\n else if (this.UseCommaSeparatedList)\r\n toEmit = (<any[]>this.Model).map(m => m.id).join(',');\r\n\r\n this.EvaluatedModel = this.Model.map(t => t.itemName).join(', ');\r\n super.changed(toEmit, false, true);\r\n super.finalized();\r\n }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div [class.ms-placeholder]=\"!Model || Model.length == 0\" (click)=\"focused($event)\">\r\n <angular2-multiselect #validationControl=\"ngModel\" type=\"text\"\r\n [(ngModel)]=\"Model\" name=\"{{GeneratedName}}\"\r\n [settings]=\"Settings\" [data]=\"BoundSource\"\r\n (onSelect)=\"changed();\" \r\n (onDeSelect)=\"changed();\" \r\n (onSelectAll)=\"changed();\"\r\n (onDeSelectAll)=\"changed();\" \r\n (onDeSelectAll)=\"Model = []; changed();\">\r\n </angular2-multiselect>\r\n </div>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Host, Inject, Input, Optional, Self } from \"@angular/core\";\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\n/** Componente che presenta una casella di testo tipicamente utilizzata per scrivere delle note o del log breve */\r\n@Component({\r\n selector: \"form-textarea\",\r\n templateUrl: \"form-textarea.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormTextareaComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Numero di righe da visualizzare di default */\r\n @Input() Rows: number;\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional()@Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE : boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(obj: any): void {\r\n this.EvaluatedModel = obj?.toString() || \"\";\r\n super.writeValue(obj);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <val-textarea \r\n [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\"\r\n [noValidate]=\"!Validation\" \r\n [submitted]=\"Form?.submitted\" \r\n [forceInvalid]=\"ForcedError\" \r\n [FloatingLabel]=\"FloatingLabel\"\r\n [id]=\"GeneratedName\" \r\n [rows]=\"Rows\" \r\n [Readonly]=\"Readonly\"\r\n [class]=\"Readonly ? 'app-bg-lightgrey app-no-resize' : 'app-no-resize'\" \r\n [(ngModel)]=\"Model\"\r\n name=\"{{GeneratedName}}\" \r\n autocomplete=\"off\" \r\n [placeholder]=\"Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\" \r\n #validationControl=\"ngModel\" \r\n (inputChange)=\"changed();\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n >\r\n </val-textarea>\r\n</ng-template>","import { Injectable, Injector } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **FormAutocompleteComponent**\r\n */\r\n@Injectable()\r\nexport class FormAutocompleteComponentLoc extends LocalizationService {\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(injector: Injector) {\r\n super(injector);\r\n\r\n super.set(\"it->en\", \"Seleziona\", [\"Select\"])\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, Component, Inject, Input, Optional, ChangeDetectorRef, Self, SimpleChanges, Host } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\n\r\n// Configurazioni\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE } from '../../tokens';\r\n\r\nimport { Observable } from \"rxjs\";\r\n\r\n//Localizzazione\r\nimport { FormAutocompleteComponentLoc } from \"./form-autocomplete.component.loc\";\r\n\r\n/** Componente di input che si auto-completa in base al valore attuale */\r\n@Component({\r\n selector: \"form-autocomplete\",\r\n templateUrl: \"form-autocomplete.component.html\",\r\n providers: [{ provide: LocalizationService, useClass: FormAutocompleteComponentLoc }],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormAutocompleteComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Permette di specificare il testo della Label flottante material-style */\r\n @Input() SelectLabel: string = \"\";\r\n\r\n /** Contesto per la funzione di ricerca */\r\n @Input() SearchFunctionContext: any;\r\n\r\n /** Funzione di ricerca che verrà chiamata dal componente */\r\n @Input() SearchFunction: (search: string, byid: boolean, context?: any) => Observable<{ id: string, description: string }[]> = null;\r\n\r\n /** Numero minimo di caratteri con cui cercare */\r\n @Input() MinChars: number = 3;\r\n\r\n /** Definisce che ad ogni selezione deve chiudere la tendina */\r\n @Input() HideChoicesOnSelection: boolean = false;\r\n\r\n /** Override del placeholder per select requried */\r\n @Input() RequiredPlaceholder: string = null;\r\n\r\n /** Indica se i controlli devono essere effettuati tenendo conto del Case o meno. Vale solo qualora la **Source** fosse fornita */\r\n @Input() CaseSensitive: boolean = false;\r\n\r\n /** Indica se usare la modalità multiselezione o no */\r\n @Input() Multi: boolean = false;\r\n\r\n /** Indica se usare la modalità multiselezione o no */\r\n @Input() MultiElementsThreshold: number = 10;\r\n\r\n /** Indica il fatto che non c'è una Source da cui scegliere */\r\n @Input() UnboundMode: boolean = false;\r\n\r\n /**\r\n * Indica se ignorare il prossimo evento writeValue che normalmente dovrebbe richiedere la nuova source. Serve per quando l'utente seleziona un elemento:\r\n * Subito dopo partirebbe un altro evento modelChange che ricaricherebbe nuovamente la source\r\n */\r\n private ignoreNextWriteValue: boolean = false;\r\n\r\n /** Sorgente Bindata Filtrata in base al contenuto della casella di testo */\r\n public FilteredBoundSource: { id: string, description: string }[] = [];\r\n\r\n /** @ignore Costruttore */\r\n constructor(cdr: ChangeDetectorRef, public lc: LocalizationService, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, @Optional() ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string, @Optional() @Inject(FAV_DEBUG_MODE) FAV_DEBUG_MODE: boolean) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, FAV_DEBUG_MODE);\r\n }\r\n\r\n /** @ignore */\r\n writeValue(value: any): void {\r\n if (!value) return;\r\n\r\n if (this.SearchFunction && !this.UnboundMode) {\r\n\r\n this.doSearchProtected(value, true, this.SearchFunctionContext, (t) => {\r\n this.Source = t;\r\n this.tryBindSourceDisplay();\r\n setTimeout(() => { this.finalizeValue(value); });\r\n });\r\n return;\r\n }\r\n\r\n if (!this.Multi)\r\n this.finalizeValue(value);\r\n }\r\n\r\n /**\r\n * Dato un valore verifica se può restituire le informazioni trovate in **Source** con id uguale a **value** o se deve restituire il valore in se\r\n * \r\n * @param {any} value Valore scritto nell'input di testo\r\n */\r\n private finalizeValue(value: any) {\r\n var val = this.UnboundMode ? null : this.BoundSource.find(t => t.id == value);\r\n this.propagateChange(val ? val.id : value);\r\n\r\n // Alor... praticamente qui potrebbero arrivare degli switcheroni in cui il Model è uguale all'inizio e alla fine dello stack, per qualche motivo\r\n // quindi per assicurarmi che il valore venga preso correttamente faccio il classico metti a null poi metti su\r\n // Notare che mettere il modello a null scatena i writevalue ma tutti i writevalue che si collegao a questo giro dovrebbero essere NOOP su null\r\n this.Model = null;\r\n setTimeout(() => {\r\n this.Model = val ? val.description : value;\r\n this.EvaluatedModel = this.Model;\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n /**\r\n * Quando viene scritto un nuovo valore bisogna controllare se per botta di culo fosse un id, in tal caso dev'essere rieffettuato il bind\r\n * per mostrare solo la descrizione nell'autocomplete\r\n */\r\n public evaluateIdResearch(onFailure: Function) {\r\n let tmpModel = this.Model;\r\n \r\n if(this.UnboundMode)\r\n return;\r\n\r\n if (!tmpModel || !this.SearchFunction) {\r\n onFailure?.();\r\n return;\r\n }\r\n\r\n this.doSearchProtected(tmpModel, true, this.SearchFunctionContext, (t) => {\r\n if (t && t.length > 0) {\r\n this.Source = t;\r\n this.tryBindSourceDisplay();\r\n if (!this.Multi)\r\n setTimeout(() => { this.finalizeValue(tmpModel); });\r\n else\r\n this.cdr.markForCheck();\r\n }\r\n else\r\n onFailure?.();\r\n });\r\n }\r\n\r\n /**\r\n * Evento di filtro della sorgente dati in base all'input utente\r\n * \r\n * @param {string} event Input utente\r\n */\r\n public filterSource(event: string) {\r\n\r\n // Contorllo prima di tutto se è un ID. in caso contrario effettuo la ricerca\r\n this.evaluateIdResearch(() => {\r\n this.doFilterSource(event);\r\n })\r\n }\r\n\r\n doFilterSource(event: string){\r\n if (this.UnboundMode)\r\n return;\r\n\r\n if (this.ignoreNextWriteValue) {\r\n this.ignoreNextWriteValue = false;\r\n return;\r\n }\r\n\r\n // Quando filtro la source, se non devo ignorare l'evento devo comunque assicurarmi di impostare il valore selezionato a null\r\n if (!this.Multi)\r\n super.changed(null);\r\n\r\n if (!event && this.MinChars == 0 && !this.SearchFunction) {\r\n this.FilteredBoundSource = this.BoundSource;\r\n this.cdr.markForCheck();\r\n return;\r\n }\r\n\r\n if (!event || event.length < this.MinChars) {\r\n this.FilteredBoundSource = [];\r\n this.cdr.markForCheck();\r\n return;\r\n }\r\n\r\n if (!this.SearchFunction && (!this.Source || this.Source.length == 0))\r\n throw \"Impossibile filtrare gli elementi senza una funzione di ricerca che restituisca una lista di { id: string, description: string }\";\r\n\r\n if (this.SearchFunction) {\r\n this.throttla(\"filtersource\", () => {\r\n this.doSearchProtected(event, false, this.SearchFunctionContext, (t) => {\r\n this.Source = t;\r\n this.tryBindSourceDisplay();\r\n // In questo caso è già filtrata dalla SearchFunction\r\n this.FilteredBoundSource = this.BoundSource;\r\n this.removeFilteredSourceOnDescriptionSelection();\r\n this.cdr.markForCheck();\r\n })\r\n }, 400);\r\n }\r\n else {\r\n this.throttla(\"filtersource\", () => {\r\n // In questo caso devo filtrare io in memoria\r\n this.FilteredBoundSource = this.BoundSource.filter(t => (this.CaseSensitive && t.description.includes(event)) || (!this.CaseSensitive && t.description.toLowerCase().includes(event.toLowerCase())));\r\n this.removeFilteredSourceOnDescriptionSelection();\r\n this.cdr.markForCheck();\r\n }, 100);\r\n }\r\n }\r\n\r\n timer = null;\r\n maxCallsPerSecond = 4;\r\n callsDoneThisThreeSeconds = 0;\r\n\r\n // Permetto al massimo 4 chiamate ogni 3 secondi, se nell'arco di 3 secondi ci sono più di 4 chiamate, ignoro le eccedenti\r\n private doSearchProtected(search: string, byid: boolean, context?: any, onRes?: Function) {\r\n if (!this.timer) {\r\n this.timer = setTimeout(() => {\r\n this.callsDoneThisThreeSeconds = 0;\r\n clearTimeout(this.timer);\r\n this.timer = null;\r\n }, 3000);\r\n }\r\n\r\n if (this.callsDoneThisThreeSeconds >= this.maxCallsPerSecond)\r\n return;\r\n\r\n this.callsDoneThisThreeSeconds++;\r\n this.SearchFunction(search, byid, context).subscribe(t => {\r\n onRes(t);\r\n });\r\n }\r\n\r\n /** @ignore */\r\n private removeFilteredSourceOnDescriptionSelection() {\r\n if (this.FilteredBoundSource.length == 1 && (this.FilteredBoundSource[0].description === this.Model) && !this.Multi) {\r\n let model = this.BoundSource[0].id\r\n this.Model = model;\r\n this.EvaluatedModel = this.BoundSource[0].description;\r\n this.FilteredBoundSource = [];\r\n setTimeout(() => { this.finalizeValue(model); });\r\n }\r\n }\r\n\r\n /** @ignore */\r\n public ngOnChanges(changes: SimpleChanges) {\r\n let newSource = changes[\"Source\"];\r\n if (newSource) {\r\n this.tryBindSourceDisplay();\r\n\r\n // Prima assegnazione se cambia la source sotto (quindi se viene bindata direttamente da HTML)\r\n if ((this.Model?.length || 0) >= this.MinChars && !this.SearchFunction)\r\n this.FilteredBoundSource = this.BoundSource;\r\n else\r\n this.FilteredBoundSource = [];\r\n\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n /** @ignore Override che marca anche il prossimo evento di filterSource da ignorare */\r\n changed(forcedValue: any = null, markForCheck: boolean = false) {\r\n if (!this.Multi)\r\n this.ignoreNextWriteValue = true;\r\n\r\n if (forcedValue == \"\" && this.Multi)\r\n this.Model = \"\";\r\n\r\n var selecteds: string[] = forcedValue ? [forcedValue] : this.Model ? (this.Model.Multi ? this.Model.split(',') : [this.Model]) : [];\r\n this.EvaluatedModel = selecteds.map(s => this.BoundSource && this.BoundSource.length > 0 ? this.BoundSource.find(t => t.id == s)?.description : this.UnboundMode ? s : \"\").join(', ');\r\n\r\n super.changed(forcedValue, markForCheck);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n\r\n //******************** Funzione di throttling per non spammare richieste in caso di animazioni attivate\r\n //TODO: spostarla in un metodo di utilità (esfaenza/extensions)\r\n /** @ignore */\r\n private executionTimers: { [index: string]: any } = {};\r\n /** @ignore */\r\n private throttla(id: string, func: Function, throttleTime: number): void {\r\n //Se ho la funzione che vuole eseguire ripulisco quel timeout\r\n if (this.executionTimers[id])\r\n clearTimeout(this.executionTimers[id]);\r\n\r\n //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi\r\n this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);\r\n }\r\n //*************************\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n<!-- Form-Model: {{Model}} -->\r\n<ng-template #controlTemplate>\r\n <val-autocomplete *ngIf=\"!Multi\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n type=\"text\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"filterSource($event);\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n (optionChange)=\"changed($event);\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : (('Seleziona' | localize : lc) + '...'))) : Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [FilteredSource]=\"FilteredBoundSource\">\r\n </val-autocomplete>\r\n\r\n <val-autocomplete-multi *ngIf=\"Multi\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [noValidate]=\"!Validation\"\r\n [submitted]=\"Form?.submitted\"\r\n [Readonly]=\"Readonly\"\r\n [label]=\"SelectLabel\"\r\n [ChipThreshold]=\"MultiElementsThreshold\"\r\n [HideChoicesOnSelection]=\"HideChoicesOnSelection\"\r\n type=\"text\"\r\n [(ngModel)]=\"Model\"\r\n [id]=\"GeneratedName\"\r\n name=\"{{GeneratedName}}\"\r\n #validationControl=\"ngModel\"\r\n (inputChange)=\"filterSource($event);\"\r\n (inputFocus)=\"focused($event);\"\r\n (inputFinalized)=\"finalized()\"\r\n (optionChange)=\"changed($event);\"\r\n [placeholder]=\"Required ? ((RequiredPlaceholder != null ? RequiredPlaceholder : (('Seleziona' | localize : lc) + '...'))) : Placeholder\"\r\n [validationFailed]=\"FailedValidationMessage\"\r\n [FilteredSource]=\"FilteredBoundSource\"\r\n [UnboundMode]=\"UnboundMode\">\r\n\r\n </val-autocomplete-multi>\r\n</ng-template>","// Angular\r\nimport { ControlValueAccessor, NG_VALIDATORS, NgControl } from \"@angular/forms\";\r\nimport { Component, Inject, Optional, Self, Host, Input, ChangeDetectorRef, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\nimport { NgxMatDateAdapter } from \"@angular-material-components/datetime-picker\";\r\n\r\n// Esfaenza\r\nimport { AccessControlService, ComponentContext } from '@esfaenza/access-control';\r\n\r\n// Applicazione\r\nimport { BaseFormControl } from \"../base-form-control\";\r\nimport { ACO_CUSTOMKEY } from '../../tokens';\r\n\r\n/**\r\n * Dichiarazione della variabile globale dayjs. L'onere di \"crearla\" è affidato all'applicazione che utilizza questa libreria, \r\n * che dovrà importare lo script globale di dayjs nella CLI\r\n */\r\ndeclare var dayjs: any;\r\n\r\n/** Componente che identifica la selezione di un orario */\r\n@Component({\r\n selector: \"form-time\",\r\n templateUrl: \"form-time.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FormTimeComponent extends BaseFormControl implements ControlValueAccessor {\r\n\r\n /** Mostra o meno gli spinner dove cliccare per aumentare/diminuire le componenti dell'orologio (ore, minuti e secondi) */\r\n @Input() ShowSpinners: boolean = false;\r\n\r\n /** Imposta lo step (minimo avanzamento) per la cella \"ore\" */\r\n @Input() StepHour: number = 1;\r\n\r\n /** Imposta lo step (minimo avanzamento) per la cella \"minuti\" */\r\n @Input() StepMinute: number = 1;\r\n\r\n /** Imposta lo step (minimo avanzamento) per la cella \"secondi\" */\r\n @Input() StepSecond: number = 5;\r\n\r\n /** Indica se mostrare i secondi o meno */\r\n @Input() ShowSeconds: boolean = false;\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 /** @ignore */\r\n constructor(cdr: ChangeDetectorRef, private dateAdapter: NgxMatDateAdapter<any>, @Optional() @Self() ngControl: NgControl, @Optional() @Inject(NG_VALIDATORS) _validators: Array<any>, ac: AccessControlService, @Optional() AppContext: ComponentContext, @Optional() @Inject(ACO_CUSTOMKEY) ACO_CUSTOMKEY: string) {\r\n super(cdr, ngControl, _validators, ac, AppContext, ACO_CUSTOMKEY, true);\r\n }\r\n\r\n /** @ignore Override per gestire input in ingresso */\r\n writeValue(obj: any): void {\r\n\r\n //Qualsiasi cosa mi arrivi devo ricondurla a un dayjs\r\n switch (this.InOutFormat) {\r\n case 'date':\r\n obj = dayjs(obj);\r\n this.EvaluatedModel = obj.format('HH:mm:ss');\r\n break;\r\n case 'timestring':\r\n const [hours, minutes, seconds] = (obj || \"00:00:00\").split(\":\");\r\n obj = dayjs().hour(parseInt(hours ?? 0)).minute(parseInt(minutes ?? 0)).second(parseInt(seconds ?? 0));\r\n this.EvaluatedModel = `${hours || '00'}:${minutes || '00'}:${seconds || '00'}`;\r\n break;\r\n case 'dayjs':\r\n obj = obj;\r\n this.EvaluatedModel = obj.format('HH:mm:ss');\r\n break;\r\n }\r\n\r\n super.writeValue(obj);\r\n }\r\n\r\n /** @ignore Override per gestire input in uscita */\r\n changed() {\r\n var toEmit = this.dateAdapter.clone(this.Model);\r\n\r\n switch (this.InOutFormat) {\r\n case 'date':\r\n toEmit = toEmit.toDate();\r\n this.EvaluatedModel = toEmit.format('HH:mm:ss');\r\n break;\r\n case 'timestring':\r\n toEmit = toEmit.format(\"HH:mm\" + (this.ShowSeconds ? \":ss\" : \"\"));\r\n this.EvaluatedModel = toEmit;\r\n break;\r\n case 'dayjs':\r\n toEmit = toEmit;\r\n this.EvaluatedModel = toEmit.format('HH:mm:ss');\r\n break;\r\n }\r\n\r\n super.changed(toEmit);\r\n }\r\n\r\n /** @ignore */\r\n onNotNullValueSet(): void { }\r\n}","<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <ngx-mat-timepicker name=\"{{GeneratedName}}\" #elementRef #baseInput=\"ngModel\" [(ngModel)]=\"Model\" [disabled]=\"Readonly\"\r\n [showSpinners]=\"ShowSpinners\" [stepHour]=\"StepHour\" [stepMinute]=\"StepMinute\" [stepSecond]=\"StepSecond\"\r\n [showSeconds]=\"ShowSeconds\" (ngModelChange)=\"changed()\" #validationControl=\"ngModel\">\r\n </ngx-mat-timepicker>\r\n\r\n</ng-template>","// Angular\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatLegacyAutocompleteModule as MatAutocompleteModule } from '@angular/material/legacy-autocomplete';\r\nimport { MatLegacyInputModule as MatInputModule } from \"@angular/material/legacy-input\";\r\nimport { MatLegacyChipsModule as MatChipsModule } from '@angular/material/legacy-chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatLegacyCheckboxModule as MatCheckboxModule } from '@angular/material/legacy-checkbox';\r\n\r\n// Es\r\nimport { LocalizationModule } from \"@esfaenza/localizations\";\r\nimport { MatDayjsDateModule } from '@esfaenza/material-dayjs-adapter';\r\nimport { CurrencyMaskModule } from '@esfaenza/ngx-currency-mask';\r\n\r\n// Librerie / Modelli\r\nimport { AngularMultiSelectModule } from \"angular2-multiselect-dropdown\";\r\nimport { NgxMatDateAdapter, NgxMatDatetimePickerModule, NGX_MAT_DATE_FORMATS, NgxMatTimepickerModule } from '@angular-material-components/datetime-picker';\r\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\r\n\r\nimport { ACO_CUSTOMKEY, FAV_DEBUG_MODE, FAV_SLIDER_MODE } from './tokens';\r\nimport { FormsAndValidationsModuleConfig } from './models/FormsAndValidationsModuleConfig';\r\nimport { CustomRequiredDirective } from './validations/customValidators/CustomRequiredDirective';\r\nimport { NgxExpandedDayJsDateAdapter } from './models/dayjs-adapter/dayjs-date-adapter';\r\n\r\n// Validations\r\nimport { ValidationSelectComponent } from './validations/validation-select/validation-select.component';\r\nimport { ValidationDateComponent } from './validations/validation-date/validation-date.component';\r\nimport { ValidationCurrencyComponent } from './validations/validation-currency/validation-currency.component';\r\nimport { ValidationTextAreaComponent } from './validations/validation-text-area/validation-text-area.component';\r\nimport { ValidationInputComponent } from './validations/validation-input/validation-input.component';\r\nimport { ValidationDateTimeComponent } from './validations/validation-datetime/validation-datetime.component';\r\nimport { ValidationAutocompleteComponent } from './validations/validation-autocomplete/validation-autocomplete.component';\r\nimport { ValidationAutocompleteMultiComponent } from './validations/validation-autocomplete-multi/validation-autocomplete-multi.component';\r\n\r\n// Forms\r\nimport { FormFileComponent } from './forms/form-file/form-file.component';\r\nimport { FormDateTimeComponent } from './forms/form-datetime/form-datetime.component';\r\nimport { FormAdaptiveComponent } from './forms/form-adaptive/form-adaptive.component';\r\nimport { FormEmptyComponent } from './forms/form-empty/form-empty.component';\r\nimport { FormTemplateComponent } from './forms/form-template/form-template.component';\r\nimport { FormErrorComponent } from './forms/form-error/form-error.component';\r\nimport { FormInfoComponent } from './forms/form-info/form-info.component';\r\nimport { FormCheckboxComponent } from './forms/form-checkbox/form-checkbox.component';\r\nimport { FormDateComponent } from './forms/form-date/form-date.component';\r\nimport { FormInputComponent } from './forms/form-input/form-input.component';\r\nimport { FormSelectComponent } from './forms/form-select/form-select.component';\r\nimport { FormMultiSelectComponent } from './forms/form-multiselect/form-multiselect.component';\r\nimport { FormTextareaComponent } from './forms/form-textarea/form-textarea.component';\r\nimport { FormAutocompleteComponent } from './forms/form-autocomplete/form-autocomplete.component';\r\nimport { FormTimeComponent } from './forms/form-time/form-time.component';\r\n\r\n/**\r\n * Formato in display (modalità lunga, con ore, minuti e secondi) delle date per tutti i componenti che utilizzino input data.\r\n * \r\n * Da convenzione è sempre quello italiano quindi viene cablato\r\n */\r\nconst formats_long = {\r\n parse: { dateInput: 'DD/MM/YYYY HH:mm:ss' },\r\n display: {\r\n dateInput: 'DD/MM/YYYY HH:mm:ss',\r\n monthYearLabel: 'MM YYYY',\r\n dateA11yLabel: 'DD/MM/YYYY HH:mm:ss',\r\n monthYearA11yLabel: 'MM YYYY',\r\n }\r\n};\r\n\r\n/**\r\n * Componenti Dichiarati ed esportati dalla libreria\r\n */\r\nconst COMPONENTS = [\r\n ValidationInputComponent,\r\n ValidationSelectComponent,\r\n ValidationDateComponent,\r\n CustomRequiredDirective,\r\n ValidationCurrencyComponent,\r\n ValidationTextAreaComponent,\r\n FormCheckboxComponent,\r\n FormDateComponent,\r\n FormEmptyComponent,\r\n FormInputComponent,\r\n FormSelectComponent,\r\n FormTextareaComponent,\r\n FormTemplateComponent,\r\n FormErrorComponent,\r\n FormInfoComponent,\r\n FormAdaptiveComponent,\r\n FormMultiSelectComponent,\r\n FormFileComponent,\r\n ValidationAutocompleteComponent,\r\n ValidationAutocompleteMultiComponent,\r\n FormAutocompleteComponent,\r\n FormDateTimeComponent,\r\n ValidationDateTimeComponent,\r\n FormTimeComponent\r\n];\r\n\r\n/**\r\n * Moduli utilizzati solo dalla libreria\r\n */\r\nconst MODULES = [\r\n CommonModule,\r\n FormsModule,\r\n LocalizationModule,\r\n MatInputModule,\r\n MatChipsModule,\r\n MatIconModule,\r\n MatCheckboxModule,\r\n MatDatepickerModule,\r\n MatDayjsDateModule,\r\n TooltipModule,\r\n CurrencyMaskModule,\r\n MatAutocompleteModule,\r\n NgxMatDatetimePickerModule,\r\n NgxMatTimepickerModule\r\n];\r\n\r\n/**\r\n * Moduli utilizzati dalla libreria e che devono essere esposti all'esterno\r\n */\r\nconst MODULES_TO_EXPORT = [\r\n AngularMultiSelectModule\r\n];\r\n\r\n@NgModule({\r\n imports: [...MODULES, ...MODULES_TO_EXPORT],\r\n declarations: [...COMPONENTS],\r\n exports: [...MODULES_TO_EXPORT, ...COMPONENTS]\r\n})\r\nexport class FormsAndValidationsModule {\r\n static forRoot(config?: FormsAndValidationsModuleConfig): ModuleWithProviders<FormsAndValidationsModule> {\r\n return {\r\n ngModule: FormsAndValidationsModule,\r\n providers: [\r\n { provide: FAV_DEBUG_MODE, useValue: config?.debugMode != null ? config?.debugMode : false },\r\n { provide: ACO_CUSTOMKEY, useValue: config?.acocustom || null },\r\n { provide: NGX_MAT_DATE_FORMATS, useValue: formats_long },\r\n { provide: FAV_SLIDER_MODE, useValue: config?.sliderMode != null ? config?.sliderMode : false },\r\n { provide: NgxMatDateAdapter, useClass: NgxExpandedDayJsDateAdapter },\r\n ]\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of forms-and-validations\r\n */\r\n\r\n//models\r\nexport * from './lib/models/AppFile';\r\nexport * from './lib/models/ChangeEvent';\r\nexport * from './lib/models/FormsAndValidationsModuleConfig';\r\nexport * from './lib/models/dayjs-adapter/dayjs-date-adapter';\r\nexport * from './lib/tokens';\r\n\r\n //module\r\nexport * from './lib/forms-and-validations.module';\r\n\r\n//validations\r\nexport * from './lib/validations/validation-datetime/validation-datetime.component';\r\nexport * from './lib/validations/validation-input/validation-input.component';\r\nexport * from './lib/validations/validation-date/validation-date.component';\r\nexport * from './lib/validations/validation-select/validation-select.component';\r\nexport * from './lib/validations/validation-text-area/validation-text-area.component';\r\nexport * from './lib/validations/validation-currency/validation-currency.component';\r\nexport * from './lib/validations/validation-autocomplete/validation-autocomplete.component';\r\nexport * from './lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component';\r\n\r\n//directives\r\nexport * from './lib/validations/customValidators/CustomRequiredDirective';\r\n\r\n//forms\r\nexport * from './lib/forms/form-datetime/form-datetime.component';\r\nexport * from './lib/forms/form-adaptive/form-adaptive.component';\r\nexport * from './lib/forms/form-empty/form-empty.component';\r\nexport * from './lib/forms/form-template/form-template.component';\r\nexport * from './lib/forms/form-error/form-error.component';\r\nexport * from './lib/forms/form-info/form-info.component';\r\nexport * from './lib/forms/form-checkbox/form-checkbox.component';\r\nexport * from './lib/forms/form-date/form-date.component';\r\nexport * from './lib/forms/form-input/form-input.component';\r\nexport * from './lib/forms/form-select/form-select.component';\r\nexport * from './lib/forms/form-textarea/form-textarea.component';\r\nexport * from './lib/forms/form-autocomplete/form-autocomplete.component';\r\nexport * from './lib/forms/form-file/form-file.component';\r\nexport * from './lib/forms/form-time/form-time.component';\r\nexport * from './lib/forms/form-multiselect/form-multiselect.component';\r\nexport * from './lib/forms/base-form-control';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i4","i7.CustomRequiredDirective","i5","i6","i8","i7","i9","MatAutocompleteTrigger","i10","i11","i1","i5.ValidationDateTimeComponent","i7.ValidationInputComponent","i8.ValidationSelectComponent","i9.ValidationDateComponent","i10.ValidationCurrencyComponent","i11.ValidationAutocompleteComponent","i12.ValidationDateTimeComponent","i2.ValidationInputComponent","i5.ValidationDateComponent","i5.ValidationInputComponent","i5.ValidationSelectComponent","i4.ValidationTextAreaComponent","i5.ValidationAutocompleteComponent","i6.ValidationAutocompleteMultiComponent","MatInputModule","MatChipsModule","MatCheckboxModule","MatAutocompleteModule"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEG;MACU,OAAO,CAAA;AAEhB;;AAEG;AACH,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;KACzB;AAgBJ;;MC7BY,WAAW,CAAA;IACpB,WAAmB,CAAA,QAAiB,EAAS,KAAU,EAAA;AAApC,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAS;AAAS,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAK;KAAG;AAC7D;;ACFD;;AAEG;MACU,+BAA+B,CAAA;AAU3C;;ACbD;AAUA;;;;;AAKG;AAEG,MAAO,2BAA4B,SAAQ,gBAAgB,CAAA;AAE7D;;AAEG;AACH,IAAA,WAAA,CAAqC,UAAkB,EAAA;QACnD,KAAK,CAAC,UAAU,CAAC,CAAC;KACrB;;;AAKD;;;;;;AAMG;IACH,UAAU,CAAC,CAAQ,EAAE,CAAQ,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;eACnC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACvC,eAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAClD;AAED;;;;;AAKG;IACH,QAAQ,CAAC,MAAa,EAAE,QAAe,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;KACpD;AAED;;;;;;AAMG;AACH,IAAA,mBAAmB,CAAC,KAAY,EAAE,MAAa,EAAE,WAAqB,EAAA;QAClE,IAAI,GAAG,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAEnD,QAAA,IAAI,WAAW;AACX,YAAA,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAEhE,QAAA,OAAO,GAAG,CAAC;KACd;AAED;;;;;;;AAOG;IACH,sBAAsB,CAAC,IAAW,EAAE,WAAqB,EAAA;AACrD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AAC7B,YAAA,MAAM,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACxD,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7C;;AAvEQ,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,kBAKhB,eAAe,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4HAL1B,2BAA2B,EAAA,CAAA,CAAA;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;;;8BAMM,MAAM;+BAAC,eAAe,CAAA;;;;ACpBvC;MACa,aAAa,GAA2B,IAAI,cAAc,CAAS,eAAe,EAAE;AAEjG;MACa,cAAc,GAA4B,IAAI,cAAc,CAAU,gBAAgB,EAAE;AAErG;MACa,eAAe,GAA4B,IAAI,cAAc,CAAU,iBAAiB;;ACTrG;AAIA;;;AAGG;MAKU,uBAAuB,CAAA;AAJpC,IAAA,WAAA,GAAA;AAMI;;AAEG;AACwB,QAAA,IAAU,CAAA,UAAA,GAAa,EAAE,CAAC;KAiBxD;AAVG;;AAEG;AACH,IAAA,QAAQ,CAAC,CAAkB,EAAA;;QAEvB,IAAI,CAAC,IAAI,CAAC,cAAc;AACpB,YAAA,OAAO,IAAI,CAAC;QAEhB,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;KACpF;;oHArBQ,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAFrB,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,CAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAEjF,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAJnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAA,uBAAyB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;iBAC7F,CAAA;8BAM8B,UAAU,EAAA,CAAA;sBAApC,KAAK;uBAAC,kBAAkB,CAAA;gBAKO,cAAc,EAAA,CAAA;sBAA7C,KAAK;uBAAC,gBAAgB,CAAA;;;ACtB3B;AAaA;;;;AAIG;MAEmB,cAAc,CAAA;;AAGhC,IAAA,WAAA,CAAsB,GAAsB,EAAA;AAAtB,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AAsB5C;;AAEG;AACO,QAAA,IAAa,CAAA,aAAA,GAAY,KAAK,CAAC;AAEzC;;AAEG;AACI,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AA6CjC;;;;;AAKG;AACM,QAAA,IAAkB,CAAA,kBAAA,GAAY,IAAI,CAAC;AAE5C;;AAEG;AACM,QAAA,IAAe,CAAA,eAAA,GAA+C,SAAS,CAAC;AAEjF;;;;AAIG;AACM,QAAA,IAAa,CAAA,aAAA,GAAY,IAAI,CAAC;AAEvC;;;;AAIG;AACM,QAAA,IAAgB,CAAA,gBAAA,GAAW,EAAE,CAAC;AAEvC;;AAEG;AACM,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAEnC;;AAEG;AACM,QAAA,IAAO,CAAA,OAAA,GAAW,IAAI,CAAC;AAEhC;;AAEG;AACM,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAEnC;;AAEG;AACM,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;AAElC;;AAEG;AACM,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AAE5B;;AAEG;AACM,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AAE5B;;AAEG;AACM,QAAA,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;AAE9B;;AAEG;AACM,QAAA,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;AAErC;;AAEG;AACM,QAAA,IAAY,CAAA,YAAA,GAAW,KAAK,CAAC;AAEtC;;AAEG;AACM,QAAA,IAAE,CAAA,EAAA,GAAW,EAAE,CAAC;AAEzB;;AAEG;AACO,QAAA,IAAA,CAAA,WAAW,GAAyB,IAAI,YAAY,EAAU,CAAC;AAEzE;;AAEG;AACO,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAO,CAAC;AAElE;;AAEG;AACO,QAAA,IAAA,CAAA,cAAc,GAAsB,IAAI,YAAY,EAAO,CAAC;AAyDtE,QAAA,IAAA,CAAA,UAAU,GAAkB,IAAI,OAAO,EAAQ,CAAC;AAkEhD;;AAEG;QACO,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAO,GAAC,CAAC;KAnSK;AAqCjD;;;;AAIG;IACH,IAAmD,cAAc,CAAC,IAAsB,EAAA;AACpF,QAAA,IAAI,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAAE,SAAA;KACrC;;AAYD;;;;AAIG;IACH,IAA8C,gBAAgB,CAAC,IAAa,EAAA;AACxE,QAAA,IAAI,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AAAE,SAAA;KACvC;;AAwGD;;;;AAIG;IACH,IAAwB,SAAS,CAAC,GAAY,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,SAAS;YACf,OAAO;AAEX,QAAA,IAAI,GAAG;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAE3C,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG;YAClD,IAAI,CAAC,sBAAsB,EAAE,CAAC;;AAE9B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KAC3B;AAED;;AAEG;IACH,IAAa,YAAY,CAAC,GAAY,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;AAEzB,QAAA,IAAI,GAAG;YACH,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;AACvC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AAC7B,aAAC,CAAC,CAAC;;YAEH,UAAU,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;AACpD,aAAC,CAAC,CAAC;KACV;IAED,QAAQ,GAAA;QACJ,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;gBACrE,IAAI,CAAC,CAAC,SAAS,GAAG,WAAW,IAAI,IAAI,CAAC,EAAE,EAAE;AACtC,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,oBAAA,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACxC,iBAAA;AACL,aAAC,CAAC,CAAA;AACL,SAAA;KACJ;AAES,IAAA,iBAAiB,CAAC,WAAwB,EAAA;AAChD,QAAA,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,YAAY,iBAAiB,KAAK,IAAI,CAAC,QAAQ,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC;AACrJ,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KAC5B;IAGD,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;KAC9B;AACD;;;AAGG;IACI,YAAY,GAAA;AACf,QAAA,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO;YACjD,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACrC;AAED;;AAEG;IACK,sBAAsB,CAAC,kBAA0B,IAAI,EAAA;;QAGzD,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACpD,IAAI,CAAC,oBAAoB,GAAG,eAAe,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7H,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrD,SAAA;QAED,IAAI,IAAI,CAAC,oBAAoB;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KAC3B;AAED;;;;;;;;AAQG;IACK,YAAY,GAAA;QAChB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK;YACtC,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAExC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK;YACpB,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;KACjD;AAED;;AAEG;IACH,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACvB;AAED;;AAEG;IACO,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa;YAC7B,OAAO;QAEX,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,IAAG;YAC3C,IAAI,KAAK,KAAK,OAAO;AACjB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAC;KACN;AAOD;;;;AAIG;AACH,IAAA,OAAO,CAAC,MAAM,EAAA;AACV,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAChC;AAED;;AAEG;IACH,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;KAC9B;AAOD;;AAEG;IACH,oBAAoB,GAAA;QAChB,IAAG,CAAC,IAAI,CAAC,YAAY;YACjB,OAAO;QACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAG;AAC9C,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AACzC,SAAC,CAAC,CAAC;KACN;AAED;;AAEG;IACH,sBAAsB,GAAA;QAClB,IAAI,IAAI,CAAC,UAAU;AACf,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;KACrC;;2GA9UiB,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;+FAAd,cAAc,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAsCrB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAOhB,gBAAgB,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FA7CT,cAAc,EAAA,UAAA,EAAA,CAAA;kBADnC,SAAS;wGAuCoD,OAAO,EAAA,CAAA;sBAAhE,SAAS;gBAAC,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAOK,cAAc,EAAA,CAAA;sBAAhE,SAAS;gBAAC,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAOF,SAAS,EAAA,CAAA;sBAAnD,SAAS;gBAAC,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAKE,SAAS,EAAA,CAAA;sBAAnD,SAAS;gBAAC,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAOK,gBAAgB,EAAA,CAAA;sBAA7D,SAAS;gBAAC,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAO/B,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAKG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAQG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAKG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAOG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAOG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAKG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAKG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAKG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAKG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAKG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAKG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAKG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAKG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAKG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAKG,EAAE,EAAA,CAAA;sBAAV,KAAK;gBAKI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAKG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAKG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAOiB,SAAS,EAAA,CAAA;sBAAhC,KAAK;uBAAC,WAAW,CAAA;gBAiBL,YAAY,EAAA,CAAA;sBAAxB,KAAK;;;AChNV;;AAEG;AAEG,MAAO,iBAAkB,SAAQ,mBAAmB,CAAA;AAEtD;;AAEG;AACH,IAAA,WAAA,CAAY,QAAkB,EAAA;QAC1B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3D,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,sBAAsB,EAAE,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACxE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;KACtE;;8GAVQ,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjB,iBAAiB,EAAA,CAAA,CAAA;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;;;ACNX;AAaA;;AAEG;AAgBG,MAAO,yBAA0B,SAAQ,cAAc,CAAA;AA+CzD;;AAEG;IACH,WAAuD,CAAA,WAAuB,EAAmD,gBAA4B,EAAU,QAAkB,EAAE,GAAsB,EAAY,EAAuB,EAAA;QAChP,KAAK,CAAC,GAAG,CAAC,CAAC;AADwC,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAAmD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAY;AAAU,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAAoC,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;AAhDpP;;AAEG;AACa,QAAA,IAAe,CAAA,eAAA,GAAG,OAAO,CAAC;AAE1C;;AAEG;AACa,QAAA,IAAgB,CAAA,gBAAA,GAAG,OAAO,CAAC;AAE3C;;AAEG;AACa,QAAA,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;AAElC;;AAEG;AACa,QAAA,IAAoB,CAAA,oBAAA,GAAY,IAAI,CAAC;AAErD;;AAEG;AACa,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;AAEnC;;AAEG;AACc,QAAA,IAAA,CAAA,MAAM,GAA0B,IAAI,YAAY,EAAW,CAAC;AAoF7E;;AAEG;QACK,IAAA,CAAA,SAAS,GAAG,MAAQ,GAAC,CAAC;KAjE7B;AAED;;AAEG;IACH,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC5C;AAED;;AAEG;IACH,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,mBAAmB;AAAE,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;KACxE;AAED;;AAEG;IACH,eAAe,GAAA;QACX,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;AAED;;;AAGG;IACH,WAAW,GAAA;;AAEP,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1D,SAAA;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,MAAM,SAAS,GAAc,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAChE,QAAA,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAA6B,CAAC;;YAG7D,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAC7C,aAAA;;AAGD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,MAAK;AAC5B,gBAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,aAAC,CAAC;AACL,SAAA;KACJ;AAOD;;AAEG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAC3B;AAED;;;;AAIG;AACH,IAAA,aAAa,CAAC,MAAM,EAAA;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;AAED;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC7B;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;;sHAvJQ,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAkDF,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAuD,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlD9G,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EATvB,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,QAAA;AACI,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,YAAA,KAAK,EAAE,IAAI;AACd,SAAA;AACJ,KAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BL,8hDAiCc,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,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,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,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,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FDFD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAfrC,SAAS;+BACI,YAAY,EAAA,aAAA,EAEP,iBAAiB,CAAC,IAAI,mBAEpB,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACxD,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;qBACJ,EAAA,QAAA,EAAA,8hDAAA,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,CAAA;;;8BAoDY,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAAoC,QAAQ;;8BAAI,MAAM;+BAAC,mBAAmB,CAAA;;yBA7CvG,eAAe,EAAA,CAAA;sBAA9B,KAAK;gBAKU,gBAAgB,EAAA,CAAA;sBAA/B,KAAK;gBAKU,UAAU,EAAA,CAAA;sBAAzB,KAAK;gBAKU,oBAAoB,EAAA,CAAA;sBAAnC,KAAK;gBAKU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBAKW,MAAM,EAAA,CAAA;sBAAtB,MAAM;;;AE7DX;AAkBA;;AAEG;AAgBG,MAAO,uBAAwB,SAAQ,cAAc,CAAA;AAsBvD;;AAEG;IACH,WAAY,CAAA,GAAuB,EAA6C,WAAuB,EAAmD,gBAA4B,EAAU,QAAkB,EAAY,EAAuB,EAAU,QAAqB,EAAA;QAChR,KAAK,CAAC,GAAG,CAAC,CAAC;AADiE,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAAmD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAY;AAAU,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAAY,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;AAAU,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAa;AARpR;;AAEG;AACa,QAAA,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;AAkE5C;;AAEG;AACK,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAI,CAAC;KA9D7B;AAED;;AAEG;IACH,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC7D;AAED;;AAEG;IACH,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;AAED;;AAEG;IACH,eAAe,GAAA;QACX,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;AAED;;;AAGG;IACH,WAAW,GAAA;QACP,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,MAAM,SAAS,GAAc,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAChE,QAAA,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAA6B,CAAC;YAE7D,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAC7C,aAAA;AACI,iBAAA;gBACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACjE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1D,aAAA;;;AAID,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,MAAK;AAC5B,gBAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,aAAC,CAAC;AACL,SAAA;KACJ;AAOD;;AAEG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;QACjB,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,CAAC,SAAS;AACd,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC9B,SAAA;AAAM,aAAA;YACH,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC9C,gBAAA,IAAI,IAAI,EAAE;oBACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACxC,iBAAA;AACJ,aAAA;;AAEG,gBAAA,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAE7D,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACrB,SAAA;AAED,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAC3B;AAED;;;;;;AAMG;AACH,IAAA,WAAW,CAAC,MAAW,EAAA;AACnB,QAAA,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,cAAmB,CAAC;AAExB,QAAA,IAAI,CAAC,KAAK;YACN,cAAc,GAAG,IAAI,CAAC;aACrB,IAAI,CAAC,IAAI,CAAC,UAAU;AACrB,YAAA,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAClE,aAAA;AACD,YAAA,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;gBACxB,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;;gBAE5D,cAAc,GAAG,IAAI,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;AAED;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC7B;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;;oHA3JQ,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAyByB,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAuD,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAzBvI,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EATrB,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,QAAA;AACI,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,uBAAuB,CAAC;AACtD,YAAA,KAAK,EAAE,IAAI;AACd,SAAA;KACJ,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClCL,49CAgCc,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,EAAAC,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,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FDID,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAfnC,SAAS;+BACI,UAAU,EAAA,aAAA,EAEL,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAEpC,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,6BAA6B,CAAC;AACtD,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;qBACJ,EAAA,QAAA,EAAA,49CAAA,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,CAAA;;;8BA2BqC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAAoC,QAAQ;;8BAAI,MAAM;+BAAC,mBAAmB,CAAA;;yBALhI,UAAU,EAAA,CAAA;sBAAzB,KAAK;;;AExDV;AAYA;;AAEG;AAgBG,MAAO,wBAAyB,SAAQ,cAAc,CAAA;AA+ExD;;AAEG;IACH,WAAY,CAAA,GAAsB,EAA6C,WAAuB,EAAmD,gBAA4B,EAAU,QAAkB,EAAY,EAAuB,EAAA;QAChP,KAAK,CAAC,GAAG,CAAC,CAAC;AADgE,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAAmD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAY;AAAU,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAAY,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;AAhFpP;;;AAGE;AACO,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;AAEjC;;AAEG;AACa,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;AAE1C;;AAEG;AACa,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAO7C;;;;AAIG;AACa,QAAA,IAAY,CAAA,YAAA,GAAW,eAAe,CAAC;AA2BvD;;AAEG;AACI,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAElC;;AAEG;AACI,QAAA,IAAI,CAAA,IAAA,GAAW,MAAM,CAAC;AAE7B;;;;AAIG;AACI,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAElC;;;;AAIG;AACI,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAkFlC;;AAEG;AACK,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAI,CAAC;KA9E7B;AAED;;AAEG;IACH,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,QAAQ;AACb,YAAA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;KAC9B;AAED;;AAEG;IACH,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,mBAAmB;AAAE,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;KACxE;AAED;;AAEG;IACH,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;QAExC,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;AAED;;AAEG;AACH,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAC/C,QAAA,IAAI,eAAe;AACf,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,CAAC;KACnE;AAED;;;AAGG;IACH,WAAW,GAAA;QACP,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,MAAM,SAAS,GAAc,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAChE,QAAA,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAA6B,CAAC;;YAG7D,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAC7C,aAAA;AACI,iBAAA;gBACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACjE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1D,aAAA;;AAGD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,MAAK;AAC5B,gBAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,aAAC,CAAC;AACL,SAAA;KACJ;AAOD;;AAEG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAC3B;AAED;;;;AAIG;AACH,IAAA,aAAa,CAAC,MAAM,EAAA;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;AAED;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC7B;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;;qHApMQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAkFuB,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAuD,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAlFtI,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAXtB,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,QAAA;AACI,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,YAAA,KAAK,EAAE,IAAI;AACd,SAAA;KACJ,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BL,w8FAuDc,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAN,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FDzBD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAfpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAEJ,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EACc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,w8FAAA,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,CAAA;;;8BAqFA,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAAoC,QAAQ;;8BAAI,MAAM;+BAAC,mBAAmB,CAAA;;yBA5EtI,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAKU,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBAKU,WAAW,EAAA,CAAA;sBAA1B,KAAK;gBAKU,YAAY,EAAA,CAAA;sBAA3B,KAAK;gBAOU,YAAY,EAAA,CAAA;sBAA3B,KAAK;gBAKiB,KAAK,EAAA,CAAA;sBAA3B,KAAK;uBAAC,OAAO,CAAA;gBAKsC,eAAe,EAAA,CAAA;sBAAlE,YAAY;gBAAC,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAKE,eAAe,EAAA,CAAA;sBAAlE,YAAY;gBAAC,IAAA,EAAA,CAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;AEzEtD;AAWA;;AAEG;AAgBG,MAAO,2BAA4B,SAAQ,wBAAwB,CAAA;AAOrE;;AAEG;IACH,WAAY,CAAA,GAAsB,EAAqC,UAAsB,EAA2C,eAA2B,EAAE,QAAkB,EAAY,EAAuB,EAAA;QACtN,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AADyI,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;KAEzN;AAED;;AAEG;IACH,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;AAED;;AAEG;IACH,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;;wHA5BQ,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAUoB,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAA8C,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAV7H,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAXzB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,QAAA;AACI,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,YAAA,KAAK,EAAE,IAAI;AACd,SAAA;AACJ,KAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBL,u8CAiCc,EAAA,MAAA,EAAA,CAAA,igBAAA,EAAA,sHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,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,EAAAC,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,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,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;2FDJD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAfvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAEP,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EACc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,u8CAAA,EAAA,MAAA,EAAA,CAAA,igBAAA,EAAA,sHAAA,CAAA,EAAA,CAAA;;;8BAaA,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA2B,QAAQ;;8BAAI,MAAM;+BAAC,mBAAmB,CAAA;;yBAL7H,eAAe,EAAA,CAAA;sBAAvB,KAAK;;;AElCV;AAWA;;AAEG;AAgBG,MAAO,2BAA4B,SAAQ,wBAAwB,CAAA;AAOrE;;AAEG;IACH,WAAY,CAAA,GAAsB,EAAqC,UAAsB,EAA2C,eAA2B,EAAE,QAAkB,EAAY,EAAuB,EAAA;QACtN,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;AADyI,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;AAR1N;;AAEG;AACM,QAAA,IAAI,CAAA,IAAA,GAAW,CAAC,CAAC;KAOzB;AAED;;AAEG;IACH,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;AAED;;AAEG;IACH,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpB,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;;wHA9BQ,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAUoB,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAA8C,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAV7H,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAZzB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,QAAA;AACI,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,YAAA,KAAK,EAAE,IAAI;AACd,SAAA;AACJ,KAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBL,muCA2Bc,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAP,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,EAAAC,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,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FDED,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAfvC,SAAS;YACI,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAEb,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;qBACJ,EAAA,aAAA,EACc,iBAAiB,CAAC,IAAI,EAEpB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,muCAAA,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,CAAA;;;8BAYV,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA2B,QAAQ;;8BAAI,MAAM;+BAAC,mBAAmB,CAAA;;yBAL7H,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;AElCV;AAkBA;;AAEG;AAgBG,MAAO,2BAA4B,SAAQ,cAAc,CAAA;AAyD3D;;AAEG;IACH,WAAY,CAAA,GAAsB,EAA6C,WAAuB,EAAmD,gBAA4B,EAAU,QAAkB,EAAY,EAAuB,EAAU,QAAqB,EAAA;QAC/Q,KAAK,CAAC,GAAG,CAAC,CAAC;AADgE,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAAmD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAY;AAAU,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAAY,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;AAAU,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAa;AA3CnR;;;;AAIG;AACI,QAAA,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;AAE3B;;;;AAIG;AACI,QAAA,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC;AAE1B;;;;AAIG;AACI,QAAA,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;AAEpB;;;;AAIG;AACI,QAAA,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;AAEtB;;;;AAIG;AACI,QAAA,IAAU,CAAA,UAAA,GAAG,CAAC,CAAC;AAEtB;;AAEG;AACa,QAAA,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;AAkE5C;;AAEG;AACK,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAI,CAAC;KA9D7B;AAED;;AAEG;IACH,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC7D;AAED;;AAEG;IACH,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;AAED;;AAEG;IACH,eAAe,GAAA;QACX,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;AAED;;;AAGG;IACH,WAAW,GAAA;QACP,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,MAAM,SAAS,GAAc,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAChE,QAAA,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAA6B,CAAC;;YAG7D,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAC7C,aAAA;AACI,iBAAA;gBACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACjE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1D,aAAA;;AAGD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,MAAK;AAC5B,gBAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,aAAC,CAAC;AACL,SAAA;KACJ;AAOD;;AAEG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;QACjB,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,CAAC,SAAS;AACd,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC9B,SAAA;AAAM,aAAA;YACH,IAAI,IAAI,GAAG,IAAI,CAAC;YAChB,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;AAC7C,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC3B,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,aAAA;;AAEG,gBAAA,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,WAAW,CAAC,CAAC;AAE3E,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAC3B;AAED;;;;;;AAMG;AACH,IAAA,WAAW,CAAC,MAAW,EAAA;AACnB,QAAA,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,cAAmB,CAAC;AAExB,QAAA,IAAI,CAAC,KAAK;YACN,cAAc,GAAG,IAAI,CAAC;aACrB,IAAI,CAAC,IAAI,CAAC,UAAU;AACrB,YAAA,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,WAAW,CAAC,CAAC;AAChF,aAAA;AACD,YAAA,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;AACxB,gBAAA,cAAc,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;;gBAEhC,cAAc,GAAG,IAAI,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;AAED;;AAEG;AACH,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC7B;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;;wHA3LQ,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EA4DoB,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAuD,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA5DtI,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EATzB,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,QAAA;AACI,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,2BAA2B,CAAC;AAC1D,YAAA,KAAK,EAAE,IAAI;AACd,SAAA;KACJ,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClCL,80DA4Cc,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,EAAAC,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,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,4BAAA,EAAA,OAAA,EAAA,KAAA,EAAA,KAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FDRD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAfvC,SAAS;+BACI,cAAc,EAAA,aAAA,EAET,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAEpC,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,iCAAiC,CAAC;AAC1D,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;qBACJ,EAAA,QAAA,EAAA,80DAAA,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,CAAA;;;8BA8DoC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAAoC,QAAQ;;8BAAI,MAAM;+BAAC,mBAAmB,CAAA;;yBAL/H,UAAU,EAAA,CAAA;sBAAzB,KAAK;;;AE3FV;AAWA;;AAEG;AAgBG,MAAO,+BAAgC,SAAQ,cAAc,CAAA;;IAsB/D,WAAY,CAAA,GAAsB,EAA6C,WAAuB,EAAmD,gBAA4B,EAAU,QAAkB,EAAY,EAAuB,EAAA;QAChP,KAAK,CAAC,GAAG,CAAC,CAAC;AADgE,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAAmD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAY;AAAU,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAAY,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;;AAlB3O,QAAA,IAAc,CAAA,cAAA,GAA0C,EAAE,CAAC;;AAMpD,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;;AAGzB,QAAA,IAAA,CAAA,YAAY,GAAyB,IAAI,YAAY,EAAU,CAAC;;QAgElE,IAAA,CAAA,SAAS,GAAG,MAAQ,GAAC,CAAC;KArD7B;;IAGD,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC5C;;IAGD,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,mBAAmB;AAAE,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;KACxE;;IAGD,eAAe,GAAA;QACX,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;AAED;;;AAGG;IACK,WAAW,GAAA;QACf,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,MAAM,SAAS,GAAc,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAChE,QAAA,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAA6B,CAAC;;YAG7D,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAC7C,aAAA;AACI,iBAAA;gBACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACjE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1D,aAAA;;AAGD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,MAAK;AAC5B,gBAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,aAAC,CAAC;AACL,SAAA;KACJ;;AAMD,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;AAC7F,QAAA,IAAG,GAAG;YAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;KAC9C;AAED;;;;AAIG;AACH,IAAA,aAAa,CAAC,MAAM,EAAA;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;;AAGD,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC7B;;AAGD,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;;4HA1GQ,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAsBgB,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAuD,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAtBtI,+BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAX7B,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,QAAA;AACI,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,+BAA+B,CAAC;AAC9D,YAAA,KAAK,EAAE,IAAI;AACd,SAAA;KACJ,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBL,o9CAmCc,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,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,EAAAC,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,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FDND,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAf3C,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAEX,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,qCAAqC,CAAC;AAC9D,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EACc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,o9CAAA,EAAA,MAAA,EAAA,CAAA,igBAAA,CAAA,EAAA,CAAA;;;8BAyBA,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAAoC,QAAQ;;8BAAI,MAAM;+BAAC,mBAAmB,CAAA;;yBAlBtI,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAGU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBAGU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBAGI,YAAY,EAAA,CAAA;sBAArB,MAAM;;;AE1CX;AAcA;AAgBM,MAAO,oCAAqC,SAAQ,cAAc,CAAA;;IA4CpE,WAAY,CAAA,GAAsB,EAA6C,WAAuB,EAAmD,gBAA4B,EAAU,QAAkB,EAAS,EAAuB,EAAA;QAC7O,KAAK,CAAC,GAAG,CAAC,CAAC;AADgE,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAAmD,QAAA,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAY;AAAU,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;AAAS,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;AA1C1O,QAAA,IAAA,CAAA,SAAS,GAAG,MAAc,EAAE,CAAC;;AAG3B,QAAA,IAAa,CAAA,aAAA,GAAW,EAAE,CAAC;;AAG3B,QAAA,IAAc,CAAA,cAAA,GAA0C,EAAE,CAAC;;AASpD,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;;AAGnB,QAAA,IAAsB,CAAA,sBAAA,GAAY,KAAK,CAAC;;AAG9C,QAAA,IAAA,CAAA,YAAY,GAAyB,IAAI,YAAY,EAAU,CAAC;;AAkBnE,QAAA,IAAU,CAAA,UAAA,GAA0C,EAAE,CAAC;;QA+EtD,IAAA,CAAA,SAAS,GAAG,MAAQ,GAAC,CAAC;KA1E7B;;IAGD,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACzB,SAAA;AACI,aAAA;AACD,YAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,KAAK,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC1B,SAAA;KACJ;;IAGD,WAAW,GAAA;QACP,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,mBAAmB;AAAE,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;KACxE;;IAGD,eAAe,GAAA;QACX,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;;AAGM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACrC,QAAA,IAAI,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,WAAW;YACnC,OAAO;AAEX,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAA;AACpE,SAAA;KACJ;AAED;;;AAGG;IACK,WAAW,GAAA;QACf,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,MAAM,SAAS,GAAc,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAChE,QAAA,IAAI,SAAS,EAAE;AACX,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,OAA6B,CAAC;;YAG7D,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAC7C,aAAA;AACI,iBAAA;gBACD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACjE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC1D,aAAA;;AAGD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,MAAK;AAC5B,gBAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,aAAC,CAAC;AACL,SAAA;KACJ;;AAMD,IAAA,UAAU,CAAC,KAAU,EAAE,UAAA,GAAsB,KAAK,EAAA;AAC9C,QAAA,IAAI,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC;AAC7F,QAAA,IAAG,UAAU;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;KAC9C;AAED;;;;AAIG;AACH,IAAA,aAAa,CAAC,MAAM,EAAE,UAAA,GAAsB,KAAK,EAAA;AAC7C,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACpC,QAAA,IAAG,CAAC,UAAU;AACV,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;;AAGD,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC7B;;AAGD,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;AAED,IAAA,cAAc,CAAC,KAAU,EAAA;AACrB,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAExB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEjC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;YACtB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC;AACvF,YAAA,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAEzE,YAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AACd,gBAAA,IAAI,CAAC,eAAe,CAAC,EAAC,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAC,CAAC,CAAC;AAClD,aAAC,CAAC,CAAA;AAEF,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,SAAA;AACD,QAAA,IAAI,KAAK,EAAE;AAAE,YAAA,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;AAAE,SAAA;KACnC;;AAGM,IAAA,UAAU,CAAC,IAAyC,EAAA;QACvD,IAAI,CAAC,IAAI,EAAE;AACP,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAG,IAAI,CAAC,cAAc;AAClB,gBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,IAAU,IAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACtE,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;AACrB,SAAA;;AAEG,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAClC;;;AAGM,IAAA,eAAe,CAAC,IAAyC,EAAA;AACtD,QAAA,IAAK,CAAC,QAAQ,GAAG,CAAO,IAAK,CAAC,QAAQ,CAAC;AAE7C,QAAA,IAAU,IAAK,CAAC,QAAQ,KAAK,IAAI,EAAE;AAC/B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,SAAA;AAAM,aAAA;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,SAAA;QACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,sBAAsB;YAC3B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;AACvC,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACnB,gBAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;gBAC9B,qBAAqB,CAAC,MAAK;AACvB,oBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;AACjC,iBAAC,CAAC,CAAC;AACN,aAAA;AACJ,SAAA;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;;;iIA/MQ,oCAAoC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EA4CW,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAuD,mBAAmB,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA5CtI,oCAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oCAAoC,EAXlC,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA;AACP,QAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,QAAA;AACI,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,UAAU,CAAC,MAAM,oCAAoC,CAAC;AACnE,YAAA,KAAK,EAAE,IAAI;AACd,SAAA;AACJ,KAAA,EA8BU,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAAE,4BAAsB,4FCxDrC,i+EAoDc,EAAA,MAAA,EAAA,CAAA,igBAAA,EAAA,4OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAT,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,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,EAAAC,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,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,uBAAA,EAAA,+BAAA,EAAA,aAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,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;2FDtBD,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBAfhD,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wBAAwB,EAEjB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACpC,SAAA,EAAA;AACP,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7D,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,0CAA0C,CAAC;AACnE,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA,EACc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,i+EAAA,EAAA,MAAA,EAAA,CAAA,igBAAA,EAAA,4OAAA,CAAA,EAAA,CAAA;;;8BA+CA,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAAoC,QAAQ;;8BAAI,MAAM;+BAAC,mBAAmB,CAAA;;yBAvCtI,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAGU,WAAW,EAAA,CAAA;sBAA1B,KAAK;gBAGU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBAGU,KAAK,EAAA,CAAA;sBAApB,KAAK;gBAGU,sBAAsB,EAAA,CAAA;sBAArC,KAAK;gBAGI,YAAY,EAAA,CAAA;sBAArB,MAAM;gBAG4B,WAAW,EAAA,CAAA;sBAA7C,SAAS;uBAACF,4BAAsB,CAAA;;;AExDrC;AAYA;MAEsB,eAAe,CAAA;AAoJjC;;;;AAIG;AACH,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;AAED;;;;AAIG;IACH,IAAa,QAAQ,CAAC,KAAc,EAAA;QAChC,IAAI,IAAI,CAAC,mBAAmB;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KAC9B;AAED;;;;AAIG;IACH,IAAa,eAAe,CAAC,KAAa,EAAA;QACtC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;AAKD;;;;AAIG;AACH,IAAA,IAAuD,kBAAkB,CAAC,IAAa,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE;AAExH;;;;AAIG;AACH,IAAA,IAAsD,wBAAwB,CAAC,IAAa,EAAA,EAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE;;;AAkB7H,IAAA,WAAA,CAAsB,GAAsB,EAAS,SAAoB,EAAY,WAAuB,EAAsB,EAAwB,EAAqB,UAA4B,EAA6C,aAAqB,EAA8C,cAAuB,EAAU,cAAuB,KAAK,EAAA;AAAlW,QAAA,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;AAAS,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AAAY,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;AAAsB,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAsB;AAAqB,QAAA,IAAU,CAAA,UAAA,GAAV,UAAU,CAAkB;AAA6C,QAAA,IAAa,CAAA,aAAA,GAAb,aAAa,CAAQ;AAA8C,QAAA,IAAc,CAAA,cAAA,GAAd,cAAc,CAAS;AAAU,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAiB;AAjNxX;;;;;AAKG;AACK,QAAA,IAAS,CAAA,SAAA,GAAY,IAAI,CAAC;AAElC;;;AAGE;AACQ,QAAA,IAAiB,CAAA,iBAAA,GAAW,IAAI,CAAC;;AAGpC,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;;AAYvB,QAAA,IAAgB,CAAA,gBAAA,GAAY,KAAK,CAAC;AAE5C;;;;AAIG;AACO,QAAA,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;;QAGnC,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAO,GAAC,CAAC;;AAGlC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAK,GAAI,CAAC;;AAGzB,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;AAElC;;;;AAIG;AACK,QAAA,IAAmB,CAAA,mBAAA,GAAY,IAAI,CAAC;;AAUnC,QAAA,IAAe,CAAA,eAAA,GAA+C,SAAS,CAAC;;AAGxE,QAAA,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;;AAG3B,QAAA,IAAkB,CAAA,kBAAA,GAAY,IAAI,CAAC;;AAGnC,QAAA,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;AAEpC;;;AAGG;AACM,QAAA,IAAM,CAAA,MAAA,GAAY,KAAK,CAAC;;AAGxB,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;;AAGzB,QAAA,IAAc,CAAA,cAAA,GAAW,EAAE,CAAC;;AAG5B,QAAA,IAAuB,CAAA,uBAAA,GAAW,EAAE,CAAC;;AAGrC,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;;AAG7B,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;;AAGnB,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;;AAG1B,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;;AAG1B,QAAA,IAAI,CAAA,IAAA,GAAY,KAAK,CAAC;;AAGtB,QAAA,IAAI,CAAA,IAAA,GAAW,IAAI,CAAC;;AAMpB,QAAA,IAAO,CAAA,OAAA,GAAW,IAAI,CAAC;AAEhC;;;;AAIG;AACM,QAAA,IAAa,CAAA,aAAA,GAAY,IAAI,CAAC;;AAG9B,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;;AAG7B,QAAA,IAAgB,CAAA,gBAAA,GAAY,IAAI,CAAC;;AAMjC,QAAA,IAAa,CAAA,aAAA,GAAiC,MAAM,CAAC;;AAGrD,QAAA,IAAe,CAAA,eAAA,GAAW,GAAG,CAAC;AAEvC;;;;;AAKG;AACM,QAAA,IAAO,CAAA,OAAA,GAAW,eAAe,CAAC;;AAGpC,QAAA,IAAW,CAAA,WAAA,GAA0C,EAAE,CAAC;;AAGrD,QAAA,IAAe,CAAA,eAAA,GAAY,IAAI,CAAC;;AAkDhC,QAAA,IAAA,CAAA,WAAW,GAA8B,IAAI,YAAY,EAAe,CAAC;;AAGzE,QAAA,IAAA,CAAA,UAAU,GAAsB,IAAI,YAAY,EAAO,CAAC;;AAGxD,QAAA,IAAA,CAAA,cAAc,GAAyB,IAAI,YAAY,EAAU,CAAC;;AAGpE,QAAA,IAAkB,CAAA,kBAAA,GAA2D,EAAE,CAAA;;AAG/E,QAAA,IAAc,CAAA,cAAA,GAAuC,EAAE,CAAC;AAkMhE,QAAA,IAAA,CAAA,UAAU,GAAkB,IAAI,OAAO,EAAQ,CAAC;QA7L5C,IAAI,SAAS,IAAI,IAAI,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC3B,gBAAA,OAAO,CAAC,KAAK,CAAC,oGAAoG,CAAC,CAAC;YAExH,OAAO;AACV,SAAA;;QAGD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE;YACvG,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC/F,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAA;AAC7C,SAAA;AAED,QAAA,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;;;;;QAO/B,IAAU,SAAU,CAAC,OAAO;AACxB,YAAA,IAAI,CAAC,IAAI,GAAiB,SAAU,CAAC,OAAO,CAAC;;AAE7C,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;;QAGlC,IAAI,IAAI,CAAC,SAAS,EAAE;;;;YAIhB,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAG;oBACzB,IAAI,CAAC,CAAC,gBAAgB;wBAClB,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAC7B,iBAAC,CAAC,CAAC;AACN,aAAA;;YAGK,IAAI,CAAC,SAAS,CAAC,aAAc,CAAC,WAAW,GAAG,EAAE,CAAC;YAErD,IAAI,IAAI,CAAC,WAAW;gBAChB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEpF,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;AACnD,SAAA;KACJ;AAED;;;;AAIG;IACO,oBAAoB,GAAA;;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM;YACZ,OAAO;QAEX,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe;AAChD,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAE1B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;;AAG7B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAEtB,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC;gBACnC,IAAI,CAAC,0BAA0B,EAAE,CAAC;AAEtC,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC;gBAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;;AAGlC,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;;AAEpB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,aAAC,CAAC,CAAC;;YAGH,IAAI,IAAI,CAAC,KAAK;gBACV,IAAI,CAAC,cAAc,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAC;AACzF,SAAA;KACJ;;IAGO,0BAA0B,GAAA;;QAE9B,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;AACpE,QAAA,IAAI,YAAY,EAAE;AACd,YAAA,YAAY,CAAC,OAAO,CAAC,CAAC,IAAG;;;gBAGrB,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBACnD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxF,aAAC,CAAC,CAAC;AACN,SAAA;KACJ;;IAGO,sBAAsB,GAAA;;QAE1B,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO;AACP,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAM,EAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAC9G;AAED;;;;;;AAMG;AACK,IAAA,mBAAmB,CAAC,CAAM,EAAA;;AAE9B,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;;;AAIxB,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,CAAC;YACnC,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,CAAC;AAC1H,SAAA;AAED,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,CAAC;AAC/B,YAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,SAAA;AAED,QAAA,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;KACrD;AAED;;;;;AAKG;IACH,mBAAmB,GAAA;AACf,QAAA,OAAO,KAAK,CAAC;KAChB;;IAGD,QAAQ,GAAA;;;QAGJ,IAAI,CAAC,iBAAiB,EAAE,CAAC;;;;AAKzB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI;AACnB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,WAAW,CAAC;;QAGtE,IAAI,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAClD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAChC,aAAA;;;;AAKD,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAClC,YAAA,IAAI,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,KAAa;AACjC,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AACxB,gBAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AAC1C,aAAC,CAAC;AACL,SAAA;QAED,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;gBACrE,IAAI,CAAC,CAAC,SAAS,GAAG,WAAW,IAAI,IAAI,CAAC,aAAa,EAAE;AACjD,oBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;;AAG3D,oBAAA,IAAI,OAAO,EAAE;wBACT,OAAO,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC7C,OAAO,CAAC,aAAa,EAAE,CAAC;AAC3B,qBAAA;AAED,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;AAC1C,iBAAA;AACL,aAAC,CAAC,CAAA;AACL,SAAA;KACJ;AAID;;;AAGG;IACH,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACrF,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAGpD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;KAC9B;;;IAID,iBAAiB,GAAA;;;AAGb,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,YAAY,iBAAiB,KAAK,IAAI,CAAC,QAAQ,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC;AAC/J,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KAC5B;;IAGD,eAAe,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,SAAS;YACf,OAAO;QAEX,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;;IAGO,iBAAiB,GAAA;;AAErB,QAAA,MAAM,QAAQ,GAAS,IAAI,CAAC,SAAS,CAAC,OAAQ,CAAC,kBAAkB,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;AAClG,QAAA,IAAI,0BAA0B,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACxD,QAAA,IAAI,kCAAkC,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;QAExE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,GAAG,MAAK;AAChC,YAAA,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC3C,kCAAkC,CAAC,KAAK,EAAE,CAAC;AAC/C,SAAC,CAAC;;QAGI,IAAI,CAAC,SAAS,CAAC,OAAQ,CAAC,kBAAkB,GAAG,QAAQ,CAAA;KAC9D;;AAGD,IAAA,UAAU,CAAC,GAAQ,EAAA;AACf,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;AAC/B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;;QAGjB,IAAI,IAAI,CAAC,SAAS;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QAEpD,IAAI,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,iBAAiB,EAAE,CAAC;;;AAI7B,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC5B;;AAGD,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACpB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC7B;;AAGD,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;AAED;;;;AAIG;AACH,IAAA,eAAe,CAAC,IAAa,EAAA;AACzB,QAAA,IAAI,IAAI,EAAE;;AAEN,YAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI;gBACnC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAEpD,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;;YAG9B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAG/D,YAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBAC/D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;AAC5C,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAChC,aAAA;YAED,IAAI,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,iBAAiB,EAAE,CAAC;;YAG7B,IAAI,CAAC,4BAA4B,EAAE,CAAC;AACvC,SAAA;KACJ;AAEM,IAAA,YAAY,CAAC,MAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;AAC5C,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;KAChC;AAED;;;;AAIG;IACH,4BAA4B,CAAC,cAAuB,KAAK,EAAA;AACrD,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,WAAW;AAC/B,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;KAC/D;AAED;;;;;AAKG;AACH,IAAA,OAAO,CAAC,WAAmB,GAAA,IAAI,EAAE,YAAA,GAAwB,KAAK,EAAE,sBAAkC,GAAA,KAAK,EAAE,QAAA,GAAoB,KAAK,EAAA;;QAC9H,IAAI,MAAM,GAAG,WAAW,IAAI,IAAI,IAAI,WAAW,IAAI,EAAE,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,GAAG,WAAW,CAAC;AAEvF,QAAA,IAAG,CAAC,sBAAsB;AACtB,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAEjC,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACzD,QAAA,IAAI,YAAY;AACZ,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAC/B;AAED;;;;;AAKG;AACH,IAAA,OAAO,CAAC,KAAU,EAAA;AACd,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;KACvD;AAED;;;;;AAKG;IACH,SAAS,GAAA;;AACL,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,0CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,QAAQ,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;KAC/D;AAED;;;;AAIG;AACI,IAAA,GAAG,CAAC,OAAe,EAAA;QACtB,IAAI,IAAI,CAAC,cAAc;AACnB,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,GAAG,OAAO,CAAC,CAAA;KACxD;;4GA/jBiB,eAAe,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;gGAAf,eAAe,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,0BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBADpC,SAAS;;;8BAoNyG,QAAQ;;8BAAsC,QAAQ;;8BAAyC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBA5JxS,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAIG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAGG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAGG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAGG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAGG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAMG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAGG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAGG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAGG,uBAAuB,EAAA,CAAA;sBAA/B,KAAK;gBAGG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAGG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAGG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAOG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAGG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAGG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAQG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAsBO,QAAQ,EAAA,CAAA;sBAApB,KAAK;gBAUO,eAAe,EAAA,CAAA;sBAA3B,KAAK;gBAciD,kBAAkB,EAAA,CAAA;sBAAxE,SAAS;gBAAC,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAOK,wBAAwB,EAAA,CAAA;sBAA7E,SAAS;gBAAC,IAAA,EAAA,CAAA,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAGtC,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAGG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAGG,cAAc,EAAA,CAAA;sBAAvB,MAAM;;;ACrNX;;AAEG;AAEG,MAAO,oBAAqB,SAAQ,mBAAmB,CAAA;AAEzD;;AAEG;AACH,IAAA,WAAA,CAAY,QAAkB,EAAA;QAC1B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;KAC/D;;iHAVQ,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qHAApB,oBAAoB,EAAA,CAAA,CAAA;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;;;ACNX;AAmBA;AAQM,MAAO,iBAAkB,SAAQ,eAAe,CAAA;;AAqBlD,IAAA,WAAA,CAAoB,IAAoB,EAAE,GAAsB,EAAU,OAAuB,EAAsB,SAAoB,EAAqC,WAAuB,EAAc,EAAwB,EAAc,UAA4B,EAAqC,aAAqB,EAAS,EAAuB,EAAsC,cAAwB,EAAA;AAC3a,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AADlE,QAAA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAgB;AAAkC,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAgB;AAAyP,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;;AAlBxW,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;;AAG1B,QAAA,IAAa,CAAA,aAAA,GAAY,IAAI,CAAC;;AAG9B,QAAA,IAAO,CAAA,OAAA,GAAW,CAAC,CAAC;;AAGpB,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;;AAG3B,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;;AAU/B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;KAC9B;IAED,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QAAA,CAAC;QAClB,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;AACnD,SAAA;AAED,QAAA,IAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;AAC7B,YAAA,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;KAC7F;AAED,IAAA,QAAQ,CAAC,OAAwB,EAAA;QAC7B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAW,IAAI,CAAC,KAAM,CAAC,QAAQ;AAChD,YAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;;AACxB,YAAA,OAAO,IAAI,CAAC;KACpB;;AAGD,IAAA,UAAU,CAAC,GAAY,EAAA;AACnB,QAAA,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG,GAAG,CAAC;AAC9C,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC;AACrC,QAAA,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAExB,IAAG,GAAG,IAAI,IAAI;YACV,IAAI,CAAC,OAAO,EAAE,CAAC;KACtB;AAED;;;;AAIG;IACH,UAAU,CAAC,QAAiB,KAAK,EAAA;QAC7B,IAAI,KAAK,GAAW,EAAE,CAAC;AACvB,QAAA,IAAI,KAAK,GAAa,IAAI,CAAC,KAAM,CAAC;AAClC,QAAA,IAAI,EAAE,GAAqB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAEtD,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AACpB,YAAA,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;AACd,YAAA,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AACnB,YAAA,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;AAC1B,SAAA;AACI,aAAA;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,CAAC;AAC5B,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,CAAA;AAC5F,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACtB,OAAO;AACV,iBAAA;AACD,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,aAAA;;AAGD,YAAA,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;gBACtB,IAAI,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,gBAAA,KAAK,CAAC,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC;gBAEnC,IAAG,IAAI,CAAC,QAAQ,EAAE;AACd,oBAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAC9B,oBAAA,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACnC,oBAAA,MAAM,CAAC,MAAM,GAAG,MAAK;wBACjB,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;wBAC1C,IAAI,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAE/C,KAAK,CAAC,OAAO,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,GAAE,CAAC,CAAC,CAAC;AACrE,qBAAC,CAAC;AACL,iBAAA;AACJ,aAAA;;AAGD,YAAA,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACnB,gBAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAE3E,YAAA,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,YAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;AACxB,SAAA;AAED,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KAClC;;IAGD,cAAc,GAAA;AACV,QAAA,IAAI,KAAK,GAAa,IAAI,CAAC,KAAM,CAAC;AAClC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;KACxD;;AAGD,IAAA,iBAAiB,MAAY;;AAG7B,IAAA,cAAc,CAAC,KAAgB,EAAA;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;KAC3B;;AAGD,IAAA,aAAa,CAAC,KAAgB,EAAA;;QAC1B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,EAAE,GAAqB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QACtD,EAAE,CAAC,KAAK,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAC;QACrC,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;;AAtIQ,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EAqBuI,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,EAA+H,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,gEAA6E,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AArB5Y,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EALf,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,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,uJCtBjF,0gLAgEM,EAAA,MAAA,EAAA,CAAA,ytCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,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,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,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,MAAA,EAAA,IAAA,EAAAF,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDrCO,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EACV,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,EAG5D,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0gLAAA,EAAA,MAAA,EAAA,CAAA,ytCAAA,CAAA,EAAA,CAAA;;;8BAuBqD,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA4B,QAAQ;;8BAA8B,QAAQ;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA0D,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBAlB5Y,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAGG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGqC,OAAO,EAAA,CAAA;sBAAjD,SAAS;gBAAC,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;AE7C7C;AAaA;;AAEG;AAMG,MAAO,qBAAsB,SAAQ,eAAe,CAAA;;AAMtD,IAAA,WAAA,CAAoB,SAAsB,EAAE,GAAsB,EAAsB,SAAoB,EAAqC,WAAuB,EAAc,EAAwB,EAAc,UAA4B,EAAqC,aAAsB,EAAsC,cAAwB,EAAA;AAC7W,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AADlE,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAa;;AAHjC,QAAA,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;KAKjC;;AAGD,IAAA,UAAU,CAAC,GAAQ,EAAA;AACf,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACpE,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACzB;IAED,OAAO,GAAA;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7F,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KACpC;;AAGD,IAAA,iBAAiB,MAAY;;AAtBpB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAMoG,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAU,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,EAA+H,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,6BAA8C,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAN9U,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,4GCrBlC,0tGA0Cc,EAAA,YAAA,EAAA,CAAA,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,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,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDrBD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACI,eAAe,EAAA,eAAA,EAER,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0tGAAA,EAAA,CAAA;;;8BAQsB,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA4B,QAAQ;;8BAA8B,QAAQ;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA2B,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBAH9U,OAAO,EAAA,CAAA;sBAAf,KAAK;;;AErBV;;AAEG;AAEG,MAAO,wBAAyB,SAAQ,mBAAmB,CAAA;AAE7D;;AAEG;AACH,IAAA,WAAA,CAAY,QAAkB,EAAA;QAC1B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC5D,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC;KAC/D;;qHAVQ,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;yHAAxB,wBAAwB,EAAA,CAAA,CAAA;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;;;ACwBX;AAQM,MAAO,qBAAsB,SAAQ,eAAe,CAAA;;IAyDtD,WAAY,CAAA,GAAsB,EAAU,OAAuB,EAAU,SAAsB,EAAU,WAAmC,EAAS,EAAuB,EAAsB,SAAoB,EAAqC,WAAuB,EAAE,EAAwB,EAAc,UAA4B,EAAqC,aAAqB,EAAsC,cAAuB,EAAA;AAC7c,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AAD1C,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAgB;AAAU,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAa;AAAU,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAwB;AAAS,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;;AA7CvK,QAAA,IAAY,CAAA,YAAA,GAAY,IAAI,CAAC;;AAM7B,QAAA,IAAa,CAAA,aAAA,GAAY,IAAI,CAAC;;AAM9B,QAAA,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;;AAGtB,QAAA,IAAS,CAAA,SAAA,GAAqB,OAAO,CAAC;;AAGtC,QAAA,IAAc,CAAA,cAAA,GAAyF,IAAI,CAAC;;AAG5G,QAAA,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;;AAGrB,QAAA,IAAa,CAAA,aAAA,GAAY,KAAK,CAAC;;AAG/B,QAAA,IAAO,CAAA,OAAA,GAAuC,EAAE,CAAC;;AAGlD,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAErC;;;AAGG;AACK,QAAA,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;;AAGvC,QAAA,IAAmB,CAAA,mBAAA,GAA0C,EAAE,CAAC;;AAGhE,QAAA,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;AAU3B,QAAA,IAAU,CAAA,UAAA,GAAG,aAAa,CAAC;AAC3B,QAAA,IAAY,CAAA,YAAA,GAAG,sBAAsB,CAAC;;;;AA4SrC,QAAA,IAAe,CAAA,eAAA,GAA6B,EAAE,CAAC;AAjTnD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,OAAO,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;KAClC;AAKD;;;;;AAKG;IACK,GAAG,CAAI,KAAQ,EAAE,KAAQ,EAAA;AAC7B,QAAA,OAAO,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;KAC9D;IAED,QAAQ,GAAA;;;QAGJ,IAAG,IAAI,CAAC,OAAO,EAAC;AACZ,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAAA,CAAC;AACpE,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,0CAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC/E,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,0CAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,0CAAE,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAClF,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,0CAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,0CAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAC/E,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,0CAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5E,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAChE,SAAA;QAED,IAAI,IAAI,CAAC,SAAS,EAAE;;YAEjB,IAAI,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAExE,YAAA,IAAI,EAAE,GAAG,IAAI,gBAAgB,EAAE,CAAC;YAChC,QAAQ,IAAI,CAAC,IAAI;AACb,gBAAA,KAAK,KAAK;oBACN,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC;AAC7C,oBAAA,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpB,MAAM;AACV,gBAAA,KAAK,OAAO,CAAC;AACb,gBAAA,KAAK,QAAQ;oBACT,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC;AAC/C,oBAAA,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpB,MAAM;AACV,gBAAA,KAAK,QAAQ;oBACT,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,wBAAA,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC1B,wBAAA,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,qBAAA;oBACD,MAAM;AACb,aAAA;YACK,EAAG,CAAC,UAAU,GAAS,EAAG,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,SAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;AAClD,SAAA;QAED,KAAK,CAAC,QAAQ,EAAE,CAAC;KACpB;;AAGY,IAAA,WAAW,CAAC,OAAsB,EAAA;;;AAC3C,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpC,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhC,YAAA,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,oBAAoB,EAAE,CAAC;;gBAG5B,IAAI,IAAI,CAAC,IAAI,IAAI,cAAc,IAAI,CAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,KAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc;AACjG,oBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;;AAE5C,oBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAElC,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC3B,aAAA;AAED,YAAA,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK;AACrB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;AACnC,KAAA;;AAGD,IAAA,UAAU,CAAC,GAAQ,EAAA;;AACf,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AAEzB,QAAA,IAAI,CAAC,cAAc,GAAG,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACZ,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACrB,YAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;AAC7B,SAAA;QAED,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU,EAAE;AAChD,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC;AACtH,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM;AACnB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACxE,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU;AACvB,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3E,SAAA;AACI,aAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,KAAK,GAAG,EAAE;AAC7D,YAAA,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACvC,YAAA,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;AAC7B,SAAA;;AAEI,aAAA,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE;YAC7B,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,IAAI,KAAK,CAAC;AAClE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACxD,SAAA;AACI,aAAA,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE;AAC1B,YAAA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACjE,GAAG,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAP,IAAA,IAAA,OAAO,cAAP,OAAO,GAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAP,OAAO,GAAI,CAAC,CAAC,CAAC,CAAC;AACvG,YAAA,IAAI,CAAC,cAAc,GAAG,CAAG,EAAA,KAAK,IAAI,IAAI,CAAA,CAAA,EAAI,OAAO,IAAI,IAAI,CAAI,CAAA,EAAA,OAAO,IAAI,IAAI,EAAE,CAAC;AAClF,SAAA;AACI,aAAA,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE;AAC1B,YAAA,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;YACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACjD,SAAA;AACI,aAAA,IAAI,IAAI,CAAC,IAAI,IAAI,cAAc,EAAE;YAClC,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AACzC,oBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,oBAAA,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,iBAAC,CAAC,CAAC;gBACH,OAAO;AACV,aAAA;;AAEG,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC/B,SAAA;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAC/C,IAAI,CAAC,cAAc,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAC;AAE/E,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC3B,SAAA;KACJ;AAED;;;;AAIG;AACK,IAAA,aAAa,CAAC,KAAU,EAAA;AAC5B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;AAC3C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;KACpC;AAED;;;;AAIG;AACI,IAAA,YAAY,CAAC,KAAmB,EAAA;QACnC,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,OAAO;AACV,SAAA;;AAGD,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpB,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtD,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;YAC5C,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC9C,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;YAC9B,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AACjE,YAAA,MAAM,kIAAkI,CAAC;QAE7I,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAK;AAC/B,gBAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;AAClD,oBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChB,IAAI,CAAC,oBAAoB,EAAE,CAAC;;AAE5B,oBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;oBAC5C,IAAI,CAAC,0CAA0C,EAAE,CAAC;AAClD,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,iBAAC,CAAC,CAAC;aACN,EAAE,GAAG,CAAC,CAAC;AACX,SAAA;AACI,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAK;;gBAE/B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjN,IAAI,CAAC,0CAA0C,EAAE,CAAC;AAClD,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;aAC3B,EAAE,GAAG,CAAC,CAAC;AACX,SAAA;KACJ;;IAGO,0CAA0C,GAAA;QAC9C,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE;YAClG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AACtD,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AACjC,SAAA;KACJ;;AAGD,IAAA,OAAO,CAAC,KAAmB,EAAA;AACvB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,cAAc;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAErC,IAAI,IAAI,CAAC,kBAAkB;AACvB,YAAA,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,QAAQ,CAAC,CAAC;KAC5D;;IAGD,SAAS,GAAA;QACL,KAAK,CAAC,SAAS,EAAE,CAAC;KACrB;;AAGD,IAAA,OAAO,CAAC,KAAU,EAAA;AACd,QAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACxB;;IAGO,cAAc,GAAA;AAClB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK;aAClB,IAAI,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU;AACnC,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpE,kBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;cAC1C,IAAI,CAAC;AAEX,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,KAAK,MAAM,EAAE;YAC3D,IAAG,IAAI,CAAC,YAAY;AAChB,gBAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAChC,SAAA;AACI,aAAA,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE;YAC7B,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AAC/B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;YAAA,CAAC;AAC7D,SAAA;AACI,aAAA,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE;AAC1B,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAChC,SAAA;AACI,aAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;AAC1E,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;AAC/G,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;AAED;;;;AAIG;IACH,UAAU,CAAC,QAAiB,KAAK,EAAA;QAC7B,IAAI,KAAK,GAAW,EAAE,CAAC;AACvB,QAAA,IAAI,KAAK,GAAa,IAAI,CAAC,KAAM,CAAC;AAClC,QAAA,IAAI,EAAE,GAAqB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAEtD,QAAA,IAAI,KAAK,EAAE;AACP,YAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AACpB,YAAA,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC;AACjB,SAAA;AACI,aAAA;AACD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;AACpC,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjC,YAAA,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;gBACpB,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtC,YAAA,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AACnB,gBAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC3E,YAAA,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,YAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;AACxB,SAAA;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;KAClB;;IAGD,kBAAkB,GAAA;AACd,QAAA,IAAI,KAAK,GAAa,IAAI,CAAC,KAAM,CAAC;AAClC,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;KACxD;;AAGD,IAAA,iBAAiB,MAAY;;AAOrB,IAAA,QAAQ,CAAC,EAAU,EAAE,IAAc,EAAE,YAAoB,EAAA;;AAE7D,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG3C,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAQ,EAAA,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;KAC3G;;AAtXQ,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAyDkN,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAZ,IAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,EAAmH,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,EAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,6BAA6C,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAzD/a,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EALnB,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC,4KCjCrF,w4TAyFc,EAAA,MAAA,EAAA,CAAA,ytCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,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,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,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,WAAA,EAAA,IAAA,EAAAF,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAc,wBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,uBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,+BAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAlB,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDnDD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAPjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EACd,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,wBAAwB,EAAE,CAAC,EAGhE,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,w4TAAA,EAAA,MAAA,EAAA,CAAA,ytCAAA,CAAA,EAAA,CAAA;;;8BA2DoI,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAAsD,QAAQ;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBAtD/a,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAGG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAGG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAGqC,OAAO,EAAA,CAAA;sBAAjD,SAAS;gBAAC,IAAA,EAAA,CAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAGhC,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAMG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAGG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,OAAO,EAAA,CAAA;sBAAf,KAAK;;;AE7EV;AAGA;;;AAGG;MAMU,kBAAkB,CAAA;AAL/B,IAAA,WAAA,GAAA;;AAQa,QAAA,IAAI,CAAA,IAAA,GAAY,KAAK,CAAC;;AAGtB,QAAA,IAAc,CAAA,cAAA,GAAW,EAAE,CAAC;;AAG9B,QAAA,IAAgB,CAAA,gBAAA,GAAW,aAAa,CAAC;KACnD;;+GAVY,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,8GCZ/B,4XAMM,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,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,WAAA,EAAA,IAAA,EAAAQ,wBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDMO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACI,YAAY,EAAA,eAAA,EAEL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4XAAA,EAAA,CAAA;8BAKtC,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,cAAc,EAAA,CAAA;sBAAtB,KAAK;;;AElBV;AAGA;;;AAGG;MAMU,qBAAqB,CAAA;AALlC,IAAA,WAAA,GAAA;;AAQa,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;;AAG1B,QAAA,IAAK,CAAA,KAAA,GAAW,EAAE,CAAC;;AAGnB,QAAA,IAAU,CAAA,UAAA,GAAW,OAAO,CAAC;;AAG7B,QAAA,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;;AAG3B,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;;AAG1B,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;;AAG1B,QAAA,IAAI,CAAA,IAAA,GAAY,KAAK,CAAC;;AAGtB,QAAA,IAAc,CAAA,cAAA,GAAW,EAAE,CAAC;;AAG5B,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;;AAM7B,QAAA,IAAa,CAAA,aAAA,GAAiC,MAAM,CAAC;;AAGrD,QAAA,IAAgB,CAAA,gBAAA,GAAY,IAAI,CAAC;;AAGjC,QAAA,IAAe,CAAA,eAAA,GAAW,GAAG,CAAC;KAQ1C;;IALG,IAAa,eAAe,CAAC,KAAa,EAAA;QACtC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;;kHA9CQ,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,ieCZlC,srEAsB6D,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAR,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,CAAA,CAAA;2FDVhD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACI,eAAe,EAAA,eAAA,EAER,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,srEAAA,EAAA,CAAA;8BAKtC,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAGG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAGG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAGG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAGG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAGG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAGO,eAAe,EAAA,CAAA;sBAA3B,KAAK;;;AEtDV;AAGA;;;AAGG;MAMU,kBAAkB,CAAA;AAL/B,IAAA,WAAA,GAAA;;AAQa,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;;AAG1B,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;;AAG1B,QAAA,IAAI,CAAA,IAAA,GAAY,KAAK,CAAC;;AAGtB,QAAA,IAAc,CAAA,cAAA,GAAW,EAAE,CAAC;KAQxC;;IALG,IAAa,eAAe,CAAC,KAAa,EAAA;QACtC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;;+GAnBQ,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,kNCZ/B,oVAMM,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDMO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,SAAS;+BACI,YAAY,EAAA,eAAA,EAEL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,oVAAA,EAAA,CAAA;8BAKtC,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAGO,eAAe,EAAA,CAAA;sBAA3B,KAAK;;;AE3BV;AAGA;;;AAGG;MAMU,iBAAiB,CAAA;AAL9B,IAAA,WAAA,GAAA;;AAOa,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;;AAG1B,QAAA,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;;AAG1B,QAAA,IAAI,CAAA,IAAA,GAAY,KAAK,CAAC;;AAGtB,QAAA,IAAc,CAAA,cAAA,GAAW,EAAE,CAAC;KAQxC;;IALG,IAAa,eAAe,CAAC,KAAa,EAAA;QACtC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;;8GAlBQ,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,iNCZ9B,wUAMM,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDMO,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACI,WAAW,EAAA,eAAA,EAEJ,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wUAAA,EAAA,CAAA;8BAItC,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAGO,eAAe,EAAA,CAAA;sBAA3B,KAAK;;;AE1BV;AAYA;AAOM,MAAO,qBAAsB,SAAQ,eAAe,CAAA;;AAMtD,IAAA,WAAA,CAAoB,EAAuB,EAAE,GAAsB,EAAsB,SAAoB,EAAqC,WAAuB,EAAE,EAAwB,EAAc,UAA4B,EAAqC,aAAqB,EAA+C,eAAwB,EAAsC,cAAuB,EAAA;AACva,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AADlE,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;AAA2S,QAAA,IAAe,CAAA,eAAA,GAAf,eAAe,CAAS;;AAHrW,QAAA,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;KAKnC;IAED,QAAQ,GAAA;QACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI;AACvB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC;KAC9C;;AAGD,IAAA,UAAU,CAAC,GAAQ,EAAA;QACf,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,IAAI,KAAK,CAAC;AAClE,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAErD,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACzB;IAED,OAAO,GAAA;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QAC5D,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KACpC;;AAGD,IAAA,iBAAiB,MAAY;;AA9BpB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,2IAMqG,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAmH,aAAa,EAA6C,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,eAAe,6BAAwD,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AANzY,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,kHCnBlC,imGAqCc,EAAA,MAAA,EAAA,CAAA,m5BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,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,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,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,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,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDlBD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACI,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,imGAAA,EAAA,MAAA,EAAA,CAAA,m5BAAA,CAAA,EAAA,CAAA;;;8BAQuB,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAAsD,QAAQ;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,eAAe,CAAA;;8BAAqC,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBAHzY,UAAU,EAAA,CAAA;sBAAlB,KAAK;;;AEtBV;AAaA;AAMM,MAAO,iBAAkB,SAAQ,eAAe,CAAA;;AAMlD,IAAA,WAAA,CAAoB,SAAsB,EAAE,GAAsB,EAAsB,SAAoB,EAAqC,WAAuB,EAAc,EAAwB,EAAc,UAA4B,EAAqC,aAAqB,EAAsC,cAAuB,EAAA;AAC3W,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AADlE,QAAA,IAAS,CAAA,SAAA,GAAT,SAAS,CAAa;;AAHjC,QAAA,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;KAKjC;;AAGD,IAAA,UAAU,CAAC,GAAQ,EAAA;AACf,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACpE,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACzB;IAED,OAAO,GAAA;QACH,IAAI,mBAAmB,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;;AAGjG,QAAA,IAAI,mBAAmB,IAAI,IAAI,CAAC,cAAc,EAAE;AAC5C,YAAA,IAAI,CAAC,cAAc,GAAG,mBAAmB,CAAA;YACzC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACpC,SAAA;KACJ;;AAGD,IAAA,iBAAiB,MAAY;;AA3BpB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EAMwG,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,EAA+H,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,6BAA6C,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAN7U,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,wGCnB9B,soGA0Cc,EAAA,YAAA,EAAA,CAAA,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,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,WAAA,EAAA,IAAA,EAAAS,uBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDvBD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACI,WAAW,EAAA,eAAA,EAEJ,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,soGAAA,EAAA,CAAA;;;8BAQsB,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA4B,QAAQ;;8BAA8B,QAAQ;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBAH7U,OAAO,EAAA,CAAA;sBAAf,KAAK;;;AEtBV;AAYA;AAOM,MAAO,kBAAmB,SAAQ,eAAe,CAAA;;AAwBnD,IAAA,WAAA,CAAY,GAAsB,EAAsB,SAAoB,EAAqC,WAAuB,EAAc,EAAwB,EAAc,UAA4B,EAAqC,aAAqB,EAAsC,cAAwB,EAAA;AAC5U,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;;AAtBtE,QAAA,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;;AAGhC,QAAA,IAAA,CAAA,cAAc,GAAuB,IAAI,YAAY,EAAQ,CAAC;;AAG9D,QAAA,IAAA,CAAA,cAAc,GAAuB,IAAI,YAAY,EAAQ,CAAC;;AASjE,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;;AAG3B,QAAA,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;KAKjC;;AAGD,IAAA,UAAU,CAAC,GAAQ,EAAA;AACf,QAAA,IAAI,CAAC,cAAc,GAAG,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC;AAC5C,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACzB;;IAGD,kBAAkB,GAAA;QACd,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;KAClC;;AAGD,IAAA,iBAAiB,MAAY;;AAzCpB,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAwBuE,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAT,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,EAA+H,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAZ,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,6BAA6C,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAxB7S,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,6WCnB/B,m+HA2Dc,EAAA,MAAA,EAAA,CAAA,8HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,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,WAAA,EAAA,IAAA,EAAAV,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAoB,wBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,cAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDxCD,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;+BACI,YAAY,EAAA,eAAA,EAGL,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,m+HAAA,EAAA,MAAA,EAAA,CAAA,8HAAA,CAAA,EAAA,CAAA;;;8BA0BV,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA4B,QAAQ;;8BAA8B,QAAQ;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBArBtS,QAAQ,EAAA,CAAA;sBAAvB,KAAK;gBAGI,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAGG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBAGoC,MAAM,EAAA,CAAA;sBAAhD,YAAY;gBAAC,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;gBAGE,MAAM,EAAA,CAAA;sBAAhD,YAAY;gBAAC,IAAA,EAAA,CAAA,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;;;AE/B7C;;AAEG;AAEG,MAAO,sBAAuB,SAAQ,mBAAmB,CAAA;AAE3D;;AAEG;AACH,IAAA,WAAA,CAAY,QAAkB,EAAA;QAC1B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;KAChD;;mHATQ,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;uHAAtB,sBAAsB,EAAA,CAAA,CAAA;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;;;ACNX;AAaA;AAOM,MAAO,mBAAoB,SAAQ,eAAe,CAAA;;AA6BpD,IAAA,WAAA,CAAY,GAAsB,EAAS,EAAuB,EAAsB,SAAoB,EAAqC,WAAuB,EAAc,EAAwB,EAAc,UAA4B,EAAqC,aAAqB,EAAsC,cAAwB,EAAA;AAC5W,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AAD3C,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;;AA1BzD,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;AAElC;;;;AAIG;AACM,QAAA,IAAgB,CAAA,gBAAA,GAAW,EAAE,CAAC;;AAG9B,QAAA,IAAmB,CAAA,mBAAA,GAAW,IAAI,CAAC;AAE5C;;;;AAIG;AACM,QAAA,IAAe,CAAA,eAAA,GAAW,OAAO,CAAC;;AAGlC,QAAA,IAAoB,CAAA,oBAAA,GAAY,IAAI,CAAC;;AAGrC,QAAA,IAAc,CAAA,cAAA,GAAqB,IAAI,CAAC;KAKhD;;AAGM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACrC,QAAA,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS;YACV,OAAO;AAEX,QAAA,IAAI,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC;AAClC,QAAA,IAAI,IAAI,GAAG,SAAS,CAAC,aAAa,CAAC;;AAGnC,QAAA,IAAI,CAAC,IAAI;YACL,OAAO;;;AAIX,QAAA,IAAI,CAAC,IAAI;YACL,IAAI,GAAG,EAAE,CAAC;;;;AAKd,QAAA,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAClH;;;;;;;AAOG;YACH,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE;AAE3C,gBAAA,IAAI,CAAC,6BAA6B,CAAC,CAAC,UAAU,KAAI;AAC9C,oBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBACxB,UAAU,CAAC,MAAK;;wBACZ,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,wBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,GAAG,EAAE,CAAC;AACzI,wBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;wBACzB,UAAU,CAAC,MAAQ,EAAA,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;AAEvC,qBAAC,CAAC,CAAC;AACP,iBAAC,CAAC,CAAC;AACN,aAAA;;AAEG,gBAAA,IAAI,CAAC,6BAA6B,CAAC,CAAC,UAAU,KAAI;;oBAC9C,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,oBAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,GAAG,EAAE,CAAC;AACzI,oBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;oBACzB,UAAU,CAAC,MAAQ,EAAA,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;AACvC,iBAAC,CAAC,CAAC;AAEP,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC3B,SAAA;KACJ;;AAGO,IAAA,6BAA6B,CAAC,OAAiB,EAAA;QACnD,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,OAAO,CAAC,MAAQ,GAAC,CAAC,CAAC;YACnB,OAAO;AACV,SAAA;AAED,QAAA,IAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI;YAClC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEpD,UAAU,CAAC,MAAK;YACZ,OAAO,CAAC,MAAK;AACT,gBAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI;oBACnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAE7C,qBAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,EAAE;oBACrC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAChD,iBAAA;qBACI,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,EAAE;;oBAE3C,OAAO,CAAC,KAAK,CAAC,CAAA,wDAAA,EAA2D,IAAI,CAAC,aAAa,CAA4D,0DAAA,CAAA,CAAC,CAAA;AAC3J,iBAAA;AACT,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAA;KACL;;AAGD,IAAA,UAAU,CAAC,GAAQ,EAAA;;AACf,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,MAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,GAAG,EAAE,CAAC;AAElI,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACzB;IAED,OAAO,GAAA;;AACH,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,GAAG,EAAE,CAAC;QAEzI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KACpC;;AAED,IAAA,iBAAiB,MAAY;;AA/HpB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EA6BsG,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,EAA+H,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,6BAA6C,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7B7U,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAJjB,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC,sEChBnF,0oLAgFc,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,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,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,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,WAAA,EAAA,IAAA,EAAAC,yBAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FD5DD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,EACZ,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC,EAE9D,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,0oLAAA,EAAA,CAAA;;;8BA+BsB,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA4B,QAAQ;;8BAA8B,QAAQ;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBA1B7U,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAOG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAGG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAOG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAGG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBAGG,cAAc,EAAA,CAAA;sBAAtB,KAAK;;;AE3CV;;AAEG;AAEG,MAAO,2BAA4B,SAAQ,mBAAmB,CAAA;AAEhE;;AAEG;AACH,IAAA,WAAA,CAAY,QAAkB,EAAA;QAC1B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC9D,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAClE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,8BAA8B,EAAE,CAAC,+BAA+B,CAAC,CAAC,CAAC;KAC1F;;wHAXQ,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4HAA3B,2BAA2B,EAAA,CAAA,CAAA;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;;;ACQX;;;;;AAKG;AASG,MAAO,wBAAyB,SAAQ,eAAe,CAAA;;AA4BzD,IAAA,WAAA,CAAY,GAAsB,EAAS,EAAuB,EAAsB,SAAoB,EAAqC,WAAuB,EAAc,EAAwB,EAAc,UAA4B,EAAqC,aAAqB,EAAsC,cAAwB,EAAA;AAC5W,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AAD3C,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;AA1BlE;;;;AAIG;AACK,QAAA,IAAQ,CAAA,QAAA,GAA4D,EAAE,CAAC;;AAGvE,QAAA,IAAsB,CAAA,sBAAA,GAAY,KAAK,CAAC;;AAGvC,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;;AAGzB,QAAA,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;;AAG9B,QAAA,IAAqB,CAAA,qBAAA,GAAY,KAAK,CAAC;;AAGvC,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;;AAG/B,QAAA,IAAQ,CAAA,QAAA,GAAuJ,IAAI,CAAC;;AAOvK,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KAChC;;AAGY,IAAA,WAAW,CAAC,OAAsB,EAAA;;;AAC3C,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpC,YAAA,IAAI,SAAS,EACb;gBACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,sBAAsB,EAAE;AAC7B,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,oBAAA,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACvC,iBAAA;AACJ,aAAA;AAED,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YACrC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,YAAY,mCAAI,KAAK,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,KAAK,CAAC,CAAC;;AAC7F,KAAA;AAED;;;;AAIG;AACK,IAAA,gBAAgB,CAAC,QAAiB,EAAA;QACtC,IAAI,CAAC,QAAQ,GAAG;YACZ,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAC/C,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC;AACnD,YAAA,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,8BAA8B,CAAC;AACrE,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,SAAS,EAAE,KAAK;SACnB,CAAC;KACL;;AAGD,IAAA,iBAAiB,MAAY;AAE7B;;;;;AAKG;IACH,mBAAmB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC;KACf;;AAGD,IAAA,UAAU,CAAC,GAAmB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,MAAM,GAA0C,EAAE,CAAC;AAEvD,QAAA,IAAG,IAAI,CAAC,qBAAqB,IAAI,GAAG,KAAK,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,YAAY,MAAM,CAAC;AACtF,YAAA,GAAG,GAAY,GAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEnC,QAAA,IAAG,IAAI,CAAC,WAAW,IAAI,GAAG,KAAK,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,YAAY,MAAM,CAAC;AAC5E,YAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAS,GAAG,CAAC,CAAC;;;AAIlC,QAAA,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACf,YAAA,GAAI,CAAC,OAAO,CAAC,CAAC,IAAG;AACrB,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9E,gBAAA,IAAI,IAAI;AACJ,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC;AACtD,oBAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;AAC3C,aAAC,CAAC,CAAC;AACN,SAAA;QAED,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,QAAA,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;KAC5B;;IAGD,OAAO,GAAA;QACH,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,WAAW;YAChB,MAAM,GAAG,IAAI,CAAC,SAAS,CAAS,IAAI,CAAC,KAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC3D,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,qBAAqB;AACtD,YAAA,MAAM,GAAW,IAAI,CAAC,KAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;aAC3C,IAAI,IAAI,CAAC,YAAY;YACtB,MAAM,GAAW,IAAI,CAAC,KAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;aACjF,IAAI,IAAI,CAAC,qBAAqB;YAC/B,MAAM,GAAW,IAAI,CAAC,KAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnC,KAAK,CAAC,SAAS,EAAE,CAAC;KACrB;;AA3HQ,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,EA4BiG,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,EAA+H,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,6BAA6C,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA5B7U,wBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EC5BrC,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,k0FAoCc,EDdK,MAAA,EAAA,CAAA,qzFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,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,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,WAAA,EAAA,IAAA,EAAAnB,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,SAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,2BAA2B,EAAE,CAAC,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;2FAM/E,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,iBACb,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,2BAA2B,EAAE,CAAC,iBAGzE,iBAAiB,CAAC,IAAI,EACpB,eAAA,EAAA,uBAAuB,CAAC,OAAO,EAAA,QAAA,EAAA,k0FAAA,EAAA,MAAA,EAAA,CAAA,qzFAAA,CAAA,EAAA,CAAA;;;8BA8BqB,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA4B,QAAQ;;8BAA8B,QAAQ;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBAf7U,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAGG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAGG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAGG,WAAW,EAAA,CAAA;sBAAnB,KAAK;;;AElDV;AAWA;AAMM,MAAO,qBAAsB,SAAQ,eAAe,CAAA;;AAMtD,IAAA,WAAA,CAAY,GAAsB,EAAsB,SAAoB,EAAqC,WAAuB,EAAc,EAAwB,EAAc,UAA4B,EAAoC,aAAa,EAAsC,cAAwB,EAAA;AACnU,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;KACrF;;AAGD,IAAA,UAAU,CAAC,GAAQ,EAAA;AACf,QAAA,IAAI,CAAC,cAAc,GAAG,CAAA,GAAG,KAAH,IAAA,IAAA,GAAG,KAAH,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,GAAG,CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC;AAC5C,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACzB;;AAGD,IAAA,iBAAiB,MAAY;;AAjBpB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,EAMoE,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAQ,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,EAA8H,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAZ,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,6BAAqC,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AANpS,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,sGCjBlC,kpGA8Cc,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,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,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAW,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,WAAA,EAAA,IAAA,EAAAY,2BAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FD7BD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACI,eAAe,EAAA,eAAA,EAER,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,kpGAAA,EAAA,CAAA;;;8BAQV,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA4B,QAAQ;;8BAA8B,QAAQ;;8BAAkC,QAAQ;;8BAAG,MAAM;+BAAC,aAAa,CAAA;;8BAAkB,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBAHpS,IAAI,EAAA,CAAA;sBAAZ,KAAK;;;AEjBV;;AAEG;AAEG,MAAO,4BAA6B,SAAQ,mBAAmB,CAAA;AAEjE;;AAEG;AACH,IAAA,WAAA,CAAY,QAAkB,EAAA;QAC1B,KAAK,CAAC,QAAQ,CAAC,CAAC;QAEhB,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;KAC/C;;yHATQ,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;6HAA5B,4BAA4B,EAAA,CAAA,CAAA;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC,UAAU;;;ACNX;AAiBA;AAOM,MAAO,yBAA0B,SAAQ,eAAe,CAAA;;AA0C1D,IAAA,WAAA,CAAY,GAAsB,EAAS,EAAuB,EAAsB,SAAoB,EAAqC,WAAuB,EAAc,EAAwB,EAAc,UAA4B,EAAqC,aAAqB,EAAsC,cAAuB,EAAA;AAC3W,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;AAD3C,QAAA,IAAE,CAAA,EAAA,GAAF,EAAE,CAAqB;;AAvCzD,QAAA,IAAW,CAAA,WAAA,GAAW,EAAE,CAAC;;AAMzB,QAAA,IAAc,CAAA,cAAA,GAAwG,IAAI,CAAC;;AAG3H,QAAA,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;;AAGrB,QAAA,IAAsB,CAAA,sBAAA,GAAY,KAAK,CAAC;;AAGxC,QAAA,IAAmB,CAAA,mBAAA,GAAW,IAAI,CAAC;;AAGnC,QAAA,IAAa,CAAA,aAAA,GAAY,KAAK,CAAC;;AAG/B,QAAA,IAAK,CAAA,KAAA,GAAY,KAAK,CAAC;;AAGvB,QAAA,IAAsB,CAAA,sBAAA,GAAW,EAAE,CAAC;;AAGpC,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAEtC;;;AAGG;AACK,QAAA,IAAoB,CAAA,oBAAA,GAAY,KAAK,CAAC;;AAGvC,QAAA,IAAmB,CAAA,mBAAA,GAA0C,EAAE,CAAC;AAyIvE,QAAA,IAAK,CAAA,KAAA,GAAG,IAAI,CAAC;AACb,QAAA,IAAiB,CAAA,iBAAA,GAAG,CAAC,CAAC;AACtB,QAAA,IAAyB,CAAA,yBAAA,GAAG,CAAC,CAAC;;;;AAoEtB,QAAA,IAAe,CAAA,eAAA,GAA6B,EAAE,CAAC;KA1MtD;;AAGD,IAAA,UAAU,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAE1C,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,KAAI;AAClE,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,gBAAA,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACrD,aAAC,CAAC,CAAC;YACH,OAAO;AACV,SAAA;QAED,IAAI,CAAC,IAAI,CAAC,KAAK;AACX,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KACjC;AAED;;;;AAIG;AACK,IAAA,aAAa,CAAC,KAAU,EAAA;AAC5B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;;;;AAK3C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,UAAU,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;AAC3C,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAC;KACN;AAED;;;AAGG;AACI,IAAA,kBAAkB,CAAC,SAAmB,EAAA;AACzC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;QAE1B,IAAG,IAAI,CAAC,WAAW;YACf,OAAO;AAEX,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACnC,YAAA,SAAS,KAAT,IAAA,IAAA,SAAS,KAAT,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,SAAS,EAAI,CAAC;YACd,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,KAAI;AACrE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChB,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,IAAI,CAAC,IAAI,CAAC,KAAK;AACX,oBAAA,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;;AAEpD,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC/B,aAAA;;AAEG,gBAAA,SAAS,KAAT,IAAA,IAAA,SAAS,KAAT,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,SAAS,EAAI,CAAC;AACtB,SAAC,CAAC,CAAC;KACN;AAED;;;;AAIG;AACI,IAAA,YAAY,CAAC,KAAa,EAAA;;AAG7B,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAK;AACzB,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAA;KACL;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;QACxB,IAAI,IAAI,CAAC,WAAW;YAChB,OAAO;QAEX,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,OAAO;AACV,SAAA;;QAGD,IAAI,CAAC,IAAI,CAAC,KAAK;AACX,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAExB,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtD,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;AAC5C,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO;AACV,SAAA;QAED,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;AACxC,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO;AACV,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AACjE,YAAA,MAAM,kIAAkI,CAAC;QAE7I,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAK;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,KAAI;AACnE,oBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;oBAChB,IAAI,CAAC,oBAAoB,EAAE,CAAC;;AAE5B,oBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;oBAC5C,IAAI,CAAC,0CAA0C,EAAE,CAAC;AAClD,oBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,iBAAC,CAAC,CAAA;aACL,EAAE,GAAG,CAAC,CAAC;AACX,SAAA;AACI,aAAA;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAK;;gBAE/B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrM,IAAI,CAAC,0CAA0C,EAAE,CAAC;AAClD,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;aAC3B,EAAE,GAAG,CAAC,CAAC;AACX,SAAA;KACJ;;AAOO,IAAA,iBAAiB,CAAC,MAAc,EAAE,IAAa,EAAE,OAAa,EAAE,KAAgB,EAAA;AACpF,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,MAAK;AACzB,gBAAA,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;AACnC,gBAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;aACrB,EAAE,IAAI,CAAC,CAAC;AACZ,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,iBAAiB;YACxD,OAAO;QAEX,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,IAAG;YACrD,KAAK,CAAC,CAAC,CAAC,CAAC;AACb,SAAC,CAAC,CAAC;KACN;;IAGO,0CAA0C,GAAA;QAC9C,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACjH,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAClC,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AACtD,YAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,YAAA,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACpD,SAAA;KACJ;;AAGM,IAAA,WAAW,CAAC,OAAsB,EAAA;;AACrC,QAAA,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClC,QAAA,IAAI,SAAS,EAAE;YACX,IAAI,CAAC,oBAAoB,EAAE,CAAC;;AAG5B,YAAA,IAAI,CAAC,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,0CAAE,MAAM,KAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc;AAClE,gBAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;;AAE5C,gBAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAElC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC3B,SAAA;KACJ;;AAGD,IAAA,OAAO,CAAC,WAAA,GAAmB,IAAI,EAAE,eAAwB,KAAK,EAAA;QAC1D,IAAI,CAAC,IAAI,CAAC,KAAK;AACX,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AAErC,QAAA,IAAI,WAAW,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK;AAC/B,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEpB,IAAI,SAAS,GAAa,WAAW,GAAG,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACpI,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,CAAA,EAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEtL,QAAA,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;KAC5C;;AAGD,IAAA,iBAAiB,MAAY;;AAOrB,IAAA,QAAQ,CAAC,EAAU,EAAE,IAAc,EAAE,YAAoB,EAAA;;AAE7D,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;;AAG3C,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAQ,EAAA,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;KAC3G;;AA/PQ,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,EA0CgG,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,EAA+H,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,aAAa,6BAA6C,cAAc,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA1C7U,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAHvB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC,sECrBzF,yhJAgEc,EAAA,YAAA,EAAA,CAAA,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,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,WAAA,EAAA,IAAA,EAAAC,+BAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,OAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oCAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,wBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDxCD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAElB,SAAA,EAAA,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC,EACpE,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,yhJAAA,EAAA,CAAA;;;8BA4CsB,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA4B,QAAQ;;8BAA8B,QAAQ;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,cAAc,CAAA;;yBAvC7U,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAGG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAGG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAGG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBAGG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAGG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAGG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAGG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;gBAGG,WAAW,EAAA,CAAA;sBAAnB,KAAK;;;AEtDV;AAmBA;AAMM,MAAO,iBAAkB,SAAQ,eAAe,CAAA;;AA6BlD,IAAA,WAAA,CAAY,GAAsB,EAAU,WAAmC,EAAsB,SAAoB,EAAqC,WAAuB,EAAE,EAAwB,EAAc,UAA4B,EAAqC,aAAqB,EAAA;AAC/S,QAAA,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AADhC,QAAA,IAAW,CAAA,WAAA,GAAX,WAAW,CAAwB;;AA1BtE,QAAA,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;;AAG9B,QAAA,IAAQ,CAAA,QAAA,GAAW,CAAC,CAAC;;AAGrB,QAAA,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;;AAGvB,QAAA,IAAU,CAAA,UAAA,GAAW,CAAC,CAAC;;AAGvB,QAAA,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;AAEtC;;;;;;;;AAQG;AACM,QAAA,IAAW,CAAA,WAAA,GAAoC,YAAY,CAAC;KAKpE;;AAGD,IAAA,UAAU,CAAC,GAAQ,EAAA;;QAGf,QAAQ,IAAI,CAAC,WAAW;AACpB,YAAA,KAAK,MAAM;AACP,gBAAA,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjB,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC7C,MAAM;AACV,YAAA,KAAK,YAAY;AACb,gBAAA,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBACjE,GAAG,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAA,IAAA,IAAL,KAAK,KAAL,KAAA,CAAA,GAAA,KAAK,GAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAP,IAAA,IAAA,OAAO,cAAP,OAAO,GAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAP,OAAO,GAAI,CAAC,CAAC,CAAC,CAAC;AACvG,gBAAA,IAAI,CAAC,cAAc,GAAG,CAAG,EAAA,KAAK,IAAI,IAAI,CAAA,CAAA,EAAI,OAAO,IAAI,IAAI,CAAI,CAAA,EAAA,OAAO,IAAI,IAAI,EAAE,CAAC;gBAC/E,MAAM;AACV,YAAA,KAAK,OAAO;gBACR,GAAG,GAAG,GAAG,CAAC;gBACV,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC7C,MAAM;AACb,SAAA;AAED,QAAA,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KACzB;;IAGD,OAAO,GAAA;AACH,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhD,QAAQ,IAAI,CAAC,WAAW;AACpB,YAAA,KAAK,MAAM;AACP,gBAAA,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;gBACzB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAChD,MAAM;AACV,YAAA,KAAK,YAAY;gBACb,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;AAClE,gBAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;gBAC7B,MAAM;AACV,YAAA,KAAK,OAAO;gBACR,MAAM,GAAG,MAAM,CAAC;gBAChB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAChD,MAAM;AACb,SAAA;AAED,QAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KACzB;;AAGD,IAAA,iBAAiB,MAAY;;8GA/EpB,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAd,IAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EA6BqH,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAmH,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA7BnR,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,oPCzB9B,moFA8Bc,EAAA,YAAA,EAAA,CAAA,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,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,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;2FDLD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACI,WAAW,EAAA,eAAA,EAEJ,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,moFAAA,EAAA,CAAA;;;8BA+BmC,QAAQ;;8BAAI,IAAI;;8BAA0B,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;8BAAsD,QAAQ;;8BAAkC,QAAQ;;8BAAI,MAAM;+BAAC,aAAa,CAAA;;yBA1BnR,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAGG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAGG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAGG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAWG,WAAW,EAAA,CAAA;sBAAnB,KAAK;;;AEnDV;AAqDA;;;;AAIG;AACH,MAAM,YAAY,GAAG;AACnB,IAAA,KAAK,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE;AAC3C,IAAA,OAAO,EAAE;AACP,QAAA,SAAS,EAAE,qBAAqB;AAChC,QAAA,cAAc,EAAE,SAAS;AACzB,QAAA,aAAa,EAAE,qBAAqB;AACpC,QAAA,kBAAkB,EAAE,SAAS;AAC9B,KAAA;CACF,CAAC;AAEF;;AAEG;AACH,MAAM,UAAU,GAAG;IACjB,wBAAwB;IACxB,yBAAyB;IACzB,uBAAuB;IACvB,uBAAuB;IACvB,2BAA2B;IAC3B,2BAA2B;IAC3B,qBAAqB;IACrB,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,qBAAqB;IACrB,qBAAqB;IACrB,kBAAkB;IAClB,iBAAiB;IACjB,qBAAqB;IACrB,wBAAwB;IACxB,iBAAiB;IACjB,+BAA+B;IAC/B,oCAAoC;IACpC,yBAAyB;IACzB,qBAAqB;IACrB,2BAA2B;IAC3B,iBAAiB;CAClB,CAAC;AAEF;;AAEG;AACH,MAAM,OAAO,GAAG;IACd,YAAY;IACZ,WAAW;IACX,kBAAkB;IAClBe,oBAAc;IACdC,oBAAc;IACd,aAAa;IACbC,uBAAiB;IACjB,mBAAmB;IACnB,kBAAkB;IAClB,aAAa;IACb,kBAAkB;IAClBC,2BAAqB;IACrB,0BAA0B;IAC1B,sBAAsB;CACvB,CAAC;AAEF;;AAEG;AACH,MAAM,iBAAiB,GAAG;IACxB,wBAAwB;CACzB,CAAC;MAOW,yBAAyB,CAAA;IACpC,OAAO,OAAO,CAAC,MAAwC,EAAA;QACrD,OAAO;AACL,YAAA,QAAQ,EAAE,yBAAyB;AACnC,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,SAAS,KAAI,IAAI,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,SAAS,GAAG,KAAK,EAAE;AAC5F,gBAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAA,MAAM,KAAN,IAAA,IAAA,MAAM,uBAAN,MAAM,CAAE,SAAS,KAAI,IAAI,EAAE;AAC/D,gBAAA,EAAE,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,YAAY,EAAE;AACzD,gBAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAA,MAAM,KAAN,IAAA,IAAA,MAAM,KAAN,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAM,CAAE,UAAU,KAAI,IAAI,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,UAAU,GAAG,KAAK,EAAE;AAC/F,gBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AACtE,aAAA;SACF,CAAC;KACH;;sHAZU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAzB,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,iBA1DpC,wBAAwB;QACxB,yBAAyB;QACzB,uBAAuB;QACvB,uBAAuB;QACvB,2BAA2B;QAC3B,2BAA2B;QAC3B,qBAAqB;QACrB,iBAAiB;QACjB,kBAAkB;QAClB,kBAAkB;QAClB,mBAAmB;QACnB,qBAAqB;QACrB,qBAAqB;QACrB,kBAAkB;QAClB,iBAAiB;QACjB,qBAAqB;QACrB,wBAAwB;QACxB,iBAAiB;QACjB,+BAA+B;QAC/B,oCAAoC;QACpC,yBAAyB;QACzB,qBAAqB;QACrB,2BAA2B;AAC3B,QAAA,iBAAiB,aAOjB,YAAY;QACZ,WAAW;QACX,kBAAkB;QAClBH,oBAAc;QACdC,oBAAc;QACd,aAAa;QACbC,uBAAiB;QACjB,mBAAmB;QACnB,kBAAkB;QAClB,aAAa;QACb,kBAAkB;QAClBC,2BAAqB;QACrB,0BAA0B;QAC1B,sBAAsB,EAOtB,wBAAwB,CAAxB,EAAA,OAAA,EAAA,CAAA,wBAAwB,EAlDxB,wBAAwB;QACxB,yBAAyB;QACzB,uBAAuB;QACvB,uBAAuB;QACvB,2BAA2B;QAC3B,2BAA2B;QAC3B,qBAAqB;QACrB,iBAAiB;QACjB,kBAAkB;QAClB,kBAAkB;QAClB,mBAAmB;QACnB,qBAAqB;QACrB,qBAAqB;QACrB,kBAAkB;QAClB,iBAAiB;QACjB,qBAAqB;QACrB,wBAAwB;QACxB,iBAAiB;QACjB,+BAA+B;QAC/B,oCAAoC;QACpC,yBAAyB;QACzB,qBAAqB;QACrB,2BAA2B;QAC3B,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAmCN,yBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,EAJvB,OAAA,EAAA,CAAA,OAAO,EAAK,iBAAiB,EAJ1C,wBAAwB,CAAA,EAAA,CAAA,CAAA;2FAQb,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,GAAG,iBAAiB,CAAC;AAC3C,oBAAA,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC;AAC7B,oBAAA,OAAO,EAAE,CAAC,GAAG,iBAAiB,EAAE,GAAG,UAAU,CAAC;iBAC/C,CAAA;;;ACjID;;AAEG;AAEH;;ACJA;;AAEG;;;;"}
|