import { FocusOrigin } from '@angular/cdk/a11y';
import { AfterContentChecked, AfterContentInit, AfterViewInit, ElementRef, InjectionToken, OnDestroy, Provider, QueryList } from '@angular/core';
import { NgControl } from '@angular/forms';
import { KbqColorDirective } from '@koobiq/components/core';
import { KbqCleaner } from './cleaner';
import { KbqFormFieldControl } from './form-field-control';
import { KbqHint } from './hint';
import { KbqPasswordHint } from './password-hint';
import { KbqPasswordToggle } from './password-toggle';
import { KbqPrefix } from './prefix';
import { KbqStepper } from './stepper';
import { KbqSuffix } from './suffix';
import * as i0 from "@angular/core";
/** @docs-private */
export declare function getKbqFormFieldMissingControlError(): Error;
/** @docs-private */
export declare function getKbqFormFieldYouCanNotUseCleanerInNumberInputError(): Error;
/**
 * Default options for the kbq-form-field that can be configured using the `KBQ_FORM_FIELD_DEFAULT_OPTIONS`
 * injection token.
 */
export type KbqFormFieldDefaultOptions = Partial<{
    /** Disables form field borders and shadows. */
    noBorders: boolean;
}>;
/**
 * Injection token that can be used to configure the default options for all kbq-form-field's.
 */
export declare const KBQ_FORM_FIELD_DEFAULT_OPTIONS: InjectionToken<Partial<{
    /** Disables form field borders and shadows. */
    noBorders: boolean;
}>>;
/** Utility provider for `KBQ_FORM_FIELD_DEFAULT_OPTIONS`. */
export declare const kbqFormFieldDefaultOptionsProvider: (options: KbqFormFieldDefaultOptions) => Provider;
/** Container for form controls that applies styling and behavior. */
export declare class KbqFormField extends KbqColorDirective implements AfterContentInit, AfterViewInit, OnDestroy, AfterContentChecked {
    private readonly destroyRef;
    private readonly changeDetectorRef;
    private readonly focusMonitor;
    private readonly defaultOptions;
    /**
     * @docs-private
     */
    readonly elementRef: ElementRef<HTMLElement>;
    /** Disables form field borders and shadows. */
    readonly noBorders: import("@angular/core").InputSignalWithTransform<boolean | undefined, unknown>;
    /**
     * The form field control.
     *
     * @docs-private
     */
    control: KbqFormFieldControl<unknown>;
    /**
     * @docs-private
     */
    readonly stepper: KbqStepper;
    /**
     * @docs-private
     *
     * @TODO Should be readonly (#DS-3883)
     */
    cleaner: KbqCleaner | null;
    /**
     * @docs-private
     */
    passwordToggle: KbqPasswordToggle | null;
    /**
     * @docs-private
     */
    hint: QueryList<KbqHint>;
    /**
     * @docs-private
     */
    passwordHints: QueryList<KbqPasswordHint>;
    /**
     * @docs-private
     */
    suffix: QueryList<KbqSuffix>;
    /**
     * @docs-private
     */
    prefix: QueryList<KbqPrefix>;
    /**
     * @docs-private
     */
    connectionContainerRef: ElementRef;
    private readonly reactivePasswordHint;
    private readonly error;
    private readonly label;
    /**
     * @docs-private
     */
    hovered: boolean;
    /**
     * @docs-private
     */
    canCleanerClearByEsc: boolean;
    /** Whether the form field is invalid. */
    get invalid(): boolean;
    /**
     * Whether the form field control has an reactive password hint.
     *
     * @docs-private
     */
    protected get hasReactivePasswordHint(): boolean;
    /**
     * Whether the form-field contains kbq-error.
     *
     * @docs-private
     */
    protected get hasError(): boolean;
    /**
     * Whether the form-field contains kbq-label.
     *
     * @docs-private
     */
    protected get hasLabel(): boolean;
    /**
     * Whether the form-field contains kbq-password-hint.
     *
     * @docs-private
     */
    get hasPasswordHint(): boolean;
    /**
     * Current focus origin state.
     *
     * @docs-private
     */
    get focusOrigin(): FocusOrigin;
    private _focusOrigin;
    /**
     * @docs-private
     */
    get hasFocus(): boolean;
    /**
     * Whether the form-field contains kbq-hint.
     *
     * @docs-private
     */
    get hasHint(): boolean;
    /**
     * Whether the form-field contains kbqSuffix.
     *
     * @docs-private
     */
    get hasSuffix(): boolean;
    /**
     * Whether the form-field contains kbqPrefix.
     *
     * @docs-private
     */
    get hasPrefix(): boolean;
    /**
     * Whether the form-field contains kbq-cleaner.
     *
     * @docs-private
     */
    get hasCleaner(): boolean;
    /**
     * Whether the form-field contains kbq-stepper.
     *
     * @docs-private
     */
    get hasStepper(): boolean;
    /**
     * Whether the form-field contains kbq-password-toggle.
     *
     * @docs-private
     */
    get hasPasswordToggle(): boolean;
    /**
     * @docs-private
     */
    get canShowCleaner(): boolean;
    /** Whether the form field is disabled. */
    get disabled(): boolean;
    /**
     * @deprecated stepper should be always visible when provided, so this parameter is redundant,
     * use `hasStepper` instead
     *
     * @docs-private
     */
    canShowStepper: boolean;
    ngAfterContentInit(): void;
    ngAfterContentChecked(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    /** Focuses the control. */
    focus(options?: FocusOptions): void;
    /**
     * @deprecated Use `focus` instead.
     *
     * @docs-private
     */
    focusViaKeyboard(options?: FocusOptions): void;
    /**
     * @docs-private
     */
    clearValue(event: Event): void;
    /**
     * Handles a click on the control's container.
     *
     * @docs-private
     */
    onContainerClick(event: MouseEvent): void;
    /**
     * Handles keydown events.
     *
     * @docs-private
     */
    onKeyDown(event: KeyboardEvent): void;
    /**
     * @docs-private
     */
    onHoverChanged(isHovered: boolean): void;
    /**
     * Gets an ElementRef for the element that a overlay attached to the form-field should be positioned relative to.
     */
    getConnectedOverlayOrigin(): ElementRef;
    /**
     * Determines whether a class from the NgControl should be forwarded to the host element.
     *
     * @docs-private
     */
    shouldForward(prop: keyof NgControl): boolean;
    /**
     * Runs the focus monitor for the form field.
     *
     * @docs-private
     */
    runFocusMonitor: () => void;
    /**
     * Stops the focus monitor for the form field.
     *
     * @docs-private
     */
    stopFocusMonitor(): void;
    /**
     * Throws an error if the form-field control is missing.
     *
     * @docs-private
     */
    protected validateControlChild(): void;
    /** Initializes the form field control. */
    private initializeControl;
    /** Initializes the kbqPrefix and kbqSuffix containers. */
    private initializePrefixAndSuffix;
    /** Initializes the KbqHint, KbqPasswordHint, KbqReactivePasswordHint and KbqError containers. */
    private initializeHint;
    static ɵfac: i0.ɵɵFactoryDeclaration<KbqFormField, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<KbqFormField, "kbq-form-field", ["kbqFormField"], { "noBorders": { "alias": "noBorders"; "required": false; "isSignal": true; }; }, {}, ["control", "stepper", "cleaner", "passwordToggle", "label", "hint", "passwordHints", "suffix", "prefix", "reactivePasswordHint", "error"], ["kbq-label", "[kbqPrefix]", "*", "kbq-cleaner", "kbq-password-toggle, kbq-stepper, [kbqSuffix]", "kbq-error", "kbq-hint, kbq-password-hint, kbq-reactive-password-hint"], true, never>;
}
/**
 * @docs-private
 *
 * @deprecated Will be removed in next major release, use `noBorders` input instead.
 */
export declare class KbqFormFieldWithoutBorders {
    static ɵfac: i0.ɵɵFactoryDeclaration<KbqFormFieldWithoutBorders, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<KbqFormFieldWithoutBorders, "kbq-form-field[kbqFormFieldWithoutBorders]", ["kbqFormFieldWithoutBorders"], {}, {}, never, never, true, never>;
}
/**
 * @docs-private
 */
export declare class KbqTrim {
    private readonly noTrim;
    private ngControl;
    private original;
    constructor(noTrim: boolean, ngControl: NgControl);
    trim(value: any): any;
    private registerOnChange;
    static ɵfac: i0.ɵɵFactoryDeclaration<KbqTrim, [{ attribute: "no-trim"; }, { optional: true; self: true; }]>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<KbqTrim, "[kbqInput], [kbqTextarea]", ["KbqTrim"], {}, {}, never, never, true, never>;
}
