import { EventEmitter, OnInit } from '@angular/core'; import { FormControl, FormGroup } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { DynamicFormField, SelectOption } from '../../models/form-field.model'; import { PhoneCountry } from '../../data/phone-countries'; import * as i0 from "@angular/core"; export declare class DynamicFieldComponent implements OnInit { field: DynamicFormField; form: FormGroup; /** Apparence héritée du formulaire parent — surchargeable par field.appearance */ formAppearance: 'outline' | 'fill' | 'simple'; /** Comportement du label hérité du parent — surchargeable par field.floatLabel */ formFloatLabel: 'auto' | 'always'; get resolvedAppearance(): 'outline' | 'fill' | 'simple'; /** Apparence passée à mat-form-field : 'simple' est géré côté template, ne jamais le passer à Material */ get matAppearance(): 'outline' | 'fill'; get isSimple(): boolean; get resolvedFloatLabel(): 'auto' | 'always'; private builder; private evaluator; private http; private dataApiUrl; private globalDateLocale; private dateAdapter; private cdr; resolvedOptions: SelectOption[]; loadingOptions: boolean; lookupLoading: boolean; /** Texte affiché/tapé dans le champ — distinct de `formControl`, qui reçoit * la valeur sélectionnée (opt.value) plutôt que le texte de recherche. */ searchDisplayControl: FormControl; private remoteSearch$; get remoteSearchHasEnoughChars(): boolean; displayRemoteOption: (value: SelectOption | string | null) => string; onRemoteOptionSelected(event: MatAutocompleteSelectedEvent): void; /** Emitted on every value change of this field */ fieldChange: EventEmitter<{ key: string; value: any; }>; isoCountrySearchCtrl: FormControl; get filteredIsoCountries(): PhoneCountry[]; displayIsoCountry: (value: PhoneCountry | string | null) => string; onIsoCountrySelected(event: MatAutocompleteSelectedEvent): void; dialCodeSearchCtrl: FormControl; get filteredDialCodeCountries(): PhoneCountry[]; displayDialCode: (value: PhoneCountry | string | null) => string; onDialCodeSelected(event: MatAutocompleteSelectedEvent): void; fileDragging: boolean; get selectedFiles(): File[]; onFileInputChange(event: Event): void; onFileDragOver(event: DragEvent): void; onFileDragLeave(event: DragEvent): void; onFileDrop(event: DragEvent): void; removeFile(index: number, input: HTMLInputElement): void; formatFileSize(bytes: number): string; private setFiles; locating: boolean; locationError: string; readonly phoneCountries: PhoneCountry[]; selectedPhoneCountry: PhoneCountry; phoneSearch: string; /** Chiffres locaux courants (hors indicatif), tenus à jour par `applyPhoneMask` — évite de les re-dériver de la valeur E.164 complète du formControl (qui contient déjà l'ancien indicatif). */ private phoneLocalDigits; /** Texte affiché dans la saisie (chiffres locaux masqués). Suit aussi la valeur posée de * l'extérieur (initialValues en mode édition, patchValue) — sans lui, la saisie restait vide. */ phoneDisplay: string; get filteredPhoneCountries(): PhoneCountry[]; selectPhoneCountry(country: PhoneCountry): void; getLocation(): void; private _geoError; onPhoneSelectChange(event: Event): void; applyPhoneMask(event: Event): void; private maskPhone; /** * Répercute une valeur du formControl sur le pays et la saisie affichée : '+222 22 12 34 56' * ou '0022222123456' -> Mauritanie + '22 12 34 56' ; un numéro sans indicatif ('774127793') * garde le pays courant. Ignore les valeurs produites par la saisie elle-même. */ private syncPhoneFromValue; get hostStyle(): Record; get hostClass(): string; ngOnInit(): void; private resolveOptions; private resolveStaticOptions; /** Liste brute (non filtrée) mise en cache pour `dependsOnMode: 'client'`. */ private rawRemoteItems; /** Refiltre localement `rawRemoteItems` (mode `dependsOnMode: 'client'`) selon la valeur courante du champ `dependsOn`. */ private applyClientFilter; /** Remplace les `{{cléDeChamp}}` d'une URL par la valeur courante du champ correspondant dans ce formulaire. */ private interpolateUrl; /** Câble la recherche distante debouncée (field.remoteSearch) : ne charge rien * tant que l'utilisateur ne tape pas, contrairement à `resolveOptions()`. */ private setupRemoteSearch; private fetchRemoteSearch; /** Applique field.optionsFilter (ex: ne garder que status === 'ACTIF') aux items bruts * reçus de l'API, avant leur mapping en {label, value}. No-op si non configuré. */ private filterItems; /** @param cacheRaw Conserve la réponse brute dans `rawRemoteItems` pour un filtrage local ultérieur, au lieu de la mapper directement dans `resolvedOptions`. */ private loadRemoteOptions; /** * Une réponse d'API select-options peut déjà être un tableau brut, ou * être enveloppée (ex: { data: [...], total: N }). `responseDataKey` * force explicitement la clé à utiliser ; sinon 'data' est essayé en * repli automatique, la convention la plus courante. */ private extractOptionsArray; get formControl(): FormControl; /** * Masque de saisie : # = chiffre, tout autre caractère = séparateur littéral. * Ex : '## ## ## ## ##' → téléphone, '##/##/####' → date. */ applyMask(event: Event): void; get isInputField(): boolean; get hasOptions(): boolean; get hasError(): boolean; get errorMessage(): string | null; /** Bornes du mat-datepicker [min]/[max] : la plus stricte entre field.minDate/maxDate * ('today' ou ISO 'YYYY-MM-DD') et la valeur courante du champ validation.minField/maxField * — une période début/fin grise ainsi les dates invalides dans le calendrier. */ get minDate(): Date | undefined; get maxDate(): Date | undefined; /** Same bound, as 'YYYY-MM-DD' for the native min/max attributes (simple appearance). */ get minDateAttr(): string | undefined; get maxDateAttr(): string | undefined; private resolveFieldDate; /** type 'date', apparence simple : bloque la saisie (Tab reste libre), Entrée/Espace ouvrent le sélecteur. */ onNativeDateKeydown(e: KeyboardEvent): void; openNativeDatePicker(e: Event): void; /** Valeur courante d'un autre champ date du formulaire (Date du datepicker ou chaîne ISO). */ private siblingDate; private stricterDate; private setupRequiredWhen; private updateRequiredFromConditions; onLookupBlur(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }