import * as _angular_core from '@angular/core';
import { OnInit, OnDestroy, DoCheck, ElementRef, Renderer2, ComponentRef } from '@angular/core';
import { NgControl } from '@angular/forms';
import { InputDirective } from '@eui/components/shared';
import { BooleanInput } from '@angular/cdk/coercion';
import * as i1 from '@eui/components/directives';
import { EuiIconSvgComponent } from '@eui/components/eui-icon';

/**
 * @description
 * A custom input text component that extends InputDirective and provides additional functionality
 * such as validation states, clearable input, and loading states.
 *
 * @usageNotes
 * ### Basic Usage
 * ```html
 * <input euiInputText [(ngModel)]="username" placeholder="Enter username" />
 * ```
 *
 * ### With Clearable Button
 * ```html
 * <input euiInputText [euiClearable]="true" [(ngModel)]="searchTerm" />
 * ```
 *
 * ### With Loading State
 * ```html
 * <input euiInputText [euiLoading]="isSearching" [(ngModel)]="query" />
 * ```
 *
 * ### Accessibility
 * - Use associated `<label>` with `for` attribute
 * - Invalid state is communicated via visual styling and `aria-invalid`
 * - Clearable button has appropriate ARIA label
 *
 * ### Notes
 * - Supports all standard HTML input attributes
 * - Works with Angular Forms (template-driven and reactive)
 * - Validation state automatically syncs with form control
 */
declare class EuiInputTextComponent extends InputDirective implements OnInit, OnDestroy, DoCheck {
    /**
     * @description
     * Gets the CSS classes for the component, including validation state classes
     *
     * @returns {string} Space-separated string of CSS class names
     */
    get class(): string;
    /**
     * @description
     * Gets or sets the invalid state of the input
     * When used with NgControl, this state is automatically managed based on control state
     *
     * @returns {boolean} Current invalid state
     */
    isInvalid: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
    /** @internal */
    protected _isInvalid: _angular_core.WritableSignal<boolean>;
    protected control: NgControl;
    protected _elementRef: ElementRef;
    protected _renderer: Renderer2;
    constructor();
    /**
     * @description
     * Initializes the component and sets the root class name
     */
    ngOnInit(): void;
    /**
     * @description
     * Cleans up component resources
     */
    ngOnDestroy(): void;
    /**
     * @description
     * Checks and updates the invalid state when using NgControl
     */
    ngDoCheck(): void;
    /**
     * @description
     * Sets the invalid state of the input and updates related properties
     *
     * @param {boolean} state - The invalid state to set
     * @private
     */
    private setInvalid;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<EuiInputTextComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<EuiInputTextComponent, "input[euiInputText]", never, { "isInvalid": { "alias": "isInvalid"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.EuiClearableDirective; inputs: { "euiClearable": "euiClearable"; "readonly": "readonly"; "disabled": "disabled"; }; outputs: {}; }, { directive: typeof i1.EuiLoadingDirective; inputs: { "euiLoading": "euiLoading"; "readonly": "readonly"; }; outputs: {}; }]>;
}

/**
 * @description
 * Metadata for the icon directive used in input elements.
 * This interface defines the properties that can be used to configure the icon,
 * including the icon name, aria label, and whether the icon is clickable.
 */
interface InputIconMetadata {
    /**
     * @description
     * The icon name to be displayed. This should correspond to an icon in the icon set.
     */
    icon: string;
    /**
     * @description
     * The aria-label for the icon, used for accessibility purposes.
     * This should describe the icon's function or purpose.
     */
    ariaLabel?: string;
    /**
     * @description
     * Indicates whether the icon is clickable. If true, the icon will respond to click events.
     * If false, the icon will not respond to click events and will not have pointer events enabled.
     */
    clickable?: boolean;
    /**
     * @description
     * The color of the icon. This can be used to customize the appearance of the icon.
     * If not specified, the default color will be used.
     */
    colour?: string;
}
/**
 * @description
 * Directive to add an icon to an eui-input-text element, allowing for click events too.
 *
 * @usageNotes
 * ### Basic Usage
 * ```html
 * <input euiInputText [euiIcon]="{ icon: 'eui-search' }" />
 * ```
 *
 * ### Clickable Icon
 * ```html
 * <input euiInputText
 *   [euiIcon]="{ icon: 'eui-close', clickable: true, ariaLabel: 'Clear search' }"
 *   (iconClick)="clearSearch()" />
 * ```
 *
 * ### Accessibility
 * - Non-clickable icons should be decorative (`aria-hidden="true"`)
 * - Clickable icons must have `ariaLabel` for screen readers
 * - Clickable icons are keyboard accessible (Tab + Enter)
 *
 * ### Notes
 * - Icon is positioned at the end of the input
 * - Automatically creates flex wrapper for layout
 * - Supports custom icon colors via `colour` property
 */
declare class EuiIconDirective implements OnDestroy {
    euiIcon: _angular_core.InputSignal<InputIconMetadata>;
    readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
    iconClick: _angular_core.OutputEmitterRef<void>;
    get cssClasses(): string;
    set cssClasses(value: string);
    protected _readonly: string | null;
    protected _icon: ComponentRef<EuiIconSvgComponent>;
    private _euiUFlexWrapper;
    private _cssClasses;
    private _elementRef;
    private _viewContainerRef;
    private _renderer;
    private listeners;
    private clickable;
    private icon;
    private iconColour;
    private readonly DEFAULT_ICON_COLOUR;
    constructor();
    ngOnDestroy(): void;
    /**
     * create a flex wrapper for the input to hold the icon
     *
     * @private
     */
    private createFlexWrapper;
    /**
     * checks if the parent has a flexWrapper. This is used to avoid creating multiple flexWrappers
     *
     * @private
     */
    private doesParentHasAFlexWrapper;
    /**
     * removes the flexWrapper while keeping the input element intact
     *
     * @private
     */
    private removeFlexWrapper;
    private registerIconClickListener;
    /**
     * creates the icon component
     *
     * @private
     */
    private createIcon;
    /**
     * @description
     * Handles the click event on the icon.
     */
    private onIconClicked;
    /**
     * removes the icon component
     *
     * @private
     */
    private removeIcon;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<EuiIconDirective, never>;
    static ɵdir: _angular_core.ɵɵDirectiveDeclaration<EuiIconDirective, "input[euiInputText][euiIcon]", never, { "euiIcon": { "alias": "euiIcon"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "iconClick": "iconClick"; }, never, never, true, never>;
}

declare const EUI_INPUT_TEXT: readonly [typeof EuiInputTextComponent];

export { EUI_INPUT_TEXT, EuiIconDirective, EuiInputTextComponent };
export type { InputIconMetadata };
//# sourceMappingURL=eui-components-eui-input-text.d.ts.map
