import { DoCheck, EventEmitter, OnInit, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
import { FormControl } from '@angular/forms';
import { PhoneInputMetadata, PhoneInputChangeEvent, CountryCode } from './types';
import * as i0 from "@angular/core";
export declare class PhoneInputComponent implements OnInit, OnChanges, OnDestroy, DoCheck {
    private presets;
    /**
     * Preset name to apply. Presets define reusable phone input configurations
     * that can be registered at app level via provideValtechPresets().
     *
     * @example
     * <val-phone-input preset="form-field" [props]="{ control: ctrl }"></val-phone-input>
     */
    preset?: string;
    /**
     * Phone input configuration object. Values here override preset values.
     */
    props: Partial<PhoneInputMetadata>;
    /**
     * Resolved props after merging preset + explicit props.
     */
    resolvedProps: PhoneInputMetadata;
    phoneChange: EventEmitter<PhoneInputChangeEvent>;
    states: {
        ENABLED: "ENABLED";
        DISABLED: "DISABLED";
        WORKING: "WORKING";
        ERROR: "ERROR";
    };
    internalCountryControl: FormControl<string>;
    internalNumberControl: FormControl<string>;
    private valueSubscription;
    private isInternalUpdate;
    /** Último valor del control externo ya reflejado en el input. */
    private lastSyncedValue;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    /**
     * Refleja cambios del control externo que NO emiten `valueChanges` — p. ej.
     * `patchValue(..., { emitEvent: false })` en una carga programática de datos.
     * Sin esto el input quedaría vacío tras un `patchValue` silencioso.
     */
    ngDoCheck(): void;
    ngOnDestroy(): void;
    /**
     * Merge preset configuration with explicit props.
     * Explicit props take precedence over preset values.
     */
    private resolveProps;
    private setupComponent;
    private parsePhoneNumber;
    getLabel(): string;
    getPlaceholder(): string;
    getHint(): string;
    getCountryList(): CountryCode[];
    getSelectedCountry(): CountryCode | null;
    get hasError(): boolean;
    getErrorMessage(): string;
    onCountryChange(event: CustomEvent): void;
    onNumberInput(event: CustomEvent): void;
    onNumberInputNative(event: Event): void;
    onBlur(): void;
    private updateMainControl;
    private validateNumber;
    static ɵfac: i0.ɵɵFactoryDeclaration<PhoneInputComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<PhoneInputComponent, "val-phone-input", never, { "preset": { "alias": "preset"; "required": false; }; "props": { "alias": "props"; "required": false; }; }, { "phoneChange": "phoneChange"; }, never, never, true, never>;
}
