import * as i0 from '@angular/core';
import { OnInit, OnChanges, AfterContentInit, OnDestroy, ElementRef, Renderer2, AfterViewInit, EventEmitter, ChangeDetectorRef } from '@angular/core';
import * as i1 from '@fundamental-ngx/cdk/forms';
import { FormStates, CvaControl, CvaDirective } from '@fundamental-ngx/cdk/forms';
import { CssClassBuilder, Nullable } from '@fundamental-ngx/cdk/utils';
import { ContentDensityObserver } from '@fundamental-ngx/core/content-density';
import { Observable } from 'rxjs';
import { FormItemControl } from '@fundamental-ngx/core/form';
import { IconFont } from '@fundamental-ngx/core/icon';

type InputGroupPlacement = 'before' | 'after';

declare class InputGroupInputDirective implements CssClassBuilder, OnInit, OnChanges, OnDestroy {
    readonly elementRef: ElementRef;
    /** user's custom classes */
    class: string;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    constructor(elementRef: ElementRef, _contentDensityObserver: ContentDensityObserver);
    /** @hidden
     * CssClassBuilder interface implementation
     * function must return single string
     * function is responsible for order which css classes are applied
     */
    buildComponentCssClass(): string[];
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngOnChanges(): void;
    /** @hidden */
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<InputGroupInputDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<InputGroupInputDirective, "[fdInputGroupInput], [fd-input-group-input]", never, { "class": { "alias": "class"; "required": false; }; }, {}, never, never, true, never>;
}
declare class InputGroupTextareaDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<InputGroupTextareaDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<InputGroupTextareaDirective, "[fdTextareaGroupInput], [fd-textarea-group-input]", never, {}, {}, never, never, true, never>;
}
declare class InputGroupAddOnDirective implements OnInit, OnChanges, CssClassBuilder, AfterContentInit, OnDestroy {
    readonly elementRef: ElementRef;
    private readonly renderer;
    /** user's custom classes */
    class: string;
    /** @hidden */
    fdInputGroupAddonClass: boolean;
    /**
     * The placement of the add-on. Options include *before* and *after*
     */
    placement: InputGroupPlacement;
    /**
     * The placement of the add-on. Options include *before* and *after*
     */
    type: string;
    /**
     *  The state of the form control - applies css classes.
     *  Can be `success`, `error`, `warning`, `information` or blank for default.
     */
    state?: FormStates;
    /**
     * Whether the icon add-on or the text add-on is a button.
     */
    button: boolean;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    constructor(elementRef: ElementRef, renderer: Renderer2, _contentDensityObserver: ContentDensityObserver);
    /** @hidden
     * CssClassBuilder interface implementation
     * function must return single string
     * function is responsible for order which css classes are applied
     */
    buildComponentCssClass(): string[];
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngOnChanges(): void;
    /** @hidden */
    ngAfterContentInit(): void;
    /** @hidden */
    ngOnDestroy(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<InputGroupAddOnDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<InputGroupAddOnDirective, "[fdInputGroupAddon], [fd-input-group-addon]", never, { "class": { "alias": "class"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "type": { "alias": "type"; "required": false; }; "state": { "alias": "state"; "required": false; }; "button": { "alias": "button"; "required": false; }; }, {}, never, never, true, never>;
}
declare class InputGroupAddonButtonDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<InputGroupAddonButtonDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<InputGroupAddonButtonDirective, "[fdInputGroupAddonButton], [fd-input-group-addon-button]", never, {}, {}, never, never, true, never>;
}

/**
 * The component that represents an input group.
 * The input group includes form inputs with add-ons that allow the user to better understand the information being entered.
 *
 * ```html
 * <fd-input-group placement="after" addOnText="$" placeholder="Amount">
 * </fd-input-group>
 * ```
 */
declare class InputGroupComponent implements AfterViewInit, FormItemControl, OnInit {
    readonly _cvaControl: CvaControl<string | number>;
    readonly elementRef: ElementRef;
    private readonly _changeDetectorRef;
    private _contentDensityObserver;
    private readonly _cva;
    /**
     * The placement of the add-on.
     * Options include *before* and *after*
     */
    placement: InputGroupPlacement;
    /** If it is mandatory field */
    required: boolean;
    /** Whether the input group is inline. */
    inline: boolean;
    /** The text for the add-on. */
    addOnText: string;
    /** Whether AddOn Button should be focusable */
    buttonFocusable: boolean;
    /** The type of the input, used in Input Group. By default, value is set to 'text' */
    type: string;
    /** The icon value for the add-on. */
    glyph: Nullable<string>;
    /** Glyph font family */
    glyphFont: IconFont;
    /** Whether the icon add-on or the text add-on is a button. */
    button: boolean;
    /**
     * Whether the input group is a popover control
     */
    isControl: boolean;
    /**
     * Whether should show focus outline
     */
    showFocus: boolean;
    /** @hidden */
    isExpanded: boolean;
    /** Label applied to button with glyph element. */
    glyphAriaLabel: Nullable<string>;
    /**
     * Whether the input group addon button should be aria-hidden
     * Useful in cases when the title is already applied on the
     * input group parent component
     **/
    addonButtonAriaHidden: Nullable<boolean>;
    /** @deprecated Title attributes are being removed from the library. */
    iconTitle: Nullable<string>;
    /** the associated ids for the input aria-labelledby field */
    ariaLabelledBy: Nullable<string>;
    /** aria-label for the input field */
    ariaLabel: Nullable<string>;
    /** Event emitted when the add-on button is clicked. */
    addOnButtonClicked: EventEmitter<Event>;
    /**
     * Event emitted when the native clear button is clicked, or when native search is executed.
     * Works only for native search for input[type="search"]
     */
    search: EventEmitter<Event>;
    /** @hidden */
    inputElement: InputGroupInputDirective;
    /** @hidden */
    localInputElement: InputGroupInputDirective;
    /** @hidden */
    addOnElement: InputGroupAddOnDirective;
    /** @hidden */
    private readonly _localButtonElement;
    /** @hidden */
    _inputTextValue: string;
    /** @hidden */
    _inputId: string;
    /** @hidden */
    _addOnNonButtonId: string;
    /** @hidden */
    _addOnButtonId: string;
    /** @hidden */
    _inputFocused$: Observable<boolean>;
    /**
     * Whether the input group is in the shellbar. Only for internal use by combobox component.
     * @hidden
     */
    inShellbar: boolean;
    /** An RxJS Subject that will kill the stream upon component’s destruction (for unsubscribing)  */
    private readonly _destroyRef;
    /** Value of the text input. */
    set inputText(value: string);
    get inputText(): string;
    /** @hidden
     *  Calculate the correct ids for input aria-labelledby
     */
    get _inputAriaLabelledBy(): string;
    /** @hidden */
    constructor(_cvaControl: CvaControl<string | number>, elementRef: ElementRef, _changeDetectorRef: ChangeDetectorRef, _contentDensityObserver: ContentDensityObserver, _cva: CvaDirective);
    /** @hidden */
    protected _focusOut(event: FocusEvent): void;
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    setDisabledState(isDisabled: boolean): void;
    /** @hidden */
    setInShellbar(value: boolean): void;
    /** @hidden */
    _buttonClicked(event: Event): void;
    /** @hidden */
    _onSearchEvent(event: Event): void;
    /** @hidden */
    _preventFocus(event: MouseEvent): void;
    /** @hidden */
    private _listenInputFocus;
    static ɵfac: i0.ɵɵFactoryDeclaration<InputGroupComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<InputGroupComponent, "fd-input-group", never, { "placement": { "alias": "placement"; "required": false; }; "required": { "alias": "required"; "required": false; }; "inline": { "alias": "inline"; "required": false; }; "addOnText": { "alias": "addOnText"; "required": false; }; "buttonFocusable": { "alias": "buttonFocusable"; "required": false; }; "type": { "alias": "type"; "required": false; }; "glyph": { "alias": "glyph"; "required": false; }; "glyphFont": { "alias": "glyphFont"; "required": false; }; "button": { "alias": "button"; "required": false; }; "isControl": { "alias": "isControl"; "required": false; }; "showFocus": { "alias": "showFocus"; "required": false; }; "isExpanded": { "alias": "isExpanded"; "required": false; }; "glyphAriaLabel": { "alias": "glyphAriaLabel"; "required": false; }; "addonButtonAriaHidden": { "alias": "addonButtonAriaHidden"; "required": false; }; "iconTitle": { "alias": "iconTitle"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, { "addOnButtonClicked": "addOnButtonClicked"; "search": "search"; }, ["inputElement", "addOnElement"], ["*"], true, [{ directive: typeof i1.CvaDirective; inputs: { "placeholder": "placeholder"; "disabled": "disabled"; "readonly": "readonly"; "state": "state"; "name": "name"; "stateMessage": "stateMessage"; "type": "type"; }; outputs: {}; }]>;
}

/**
 * @deprecated
 * Use direct imports of components and directives.
 */
declare class InputGroupModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<InputGroupModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<InputGroupModule, never, [typeof InputGroupComponent, typeof InputGroupInputDirective, typeof InputGroupTextareaDirective, typeof InputGroupAddOnDirective, typeof InputGroupAddonButtonDirective], [typeof InputGroupComponent, typeof InputGroupInputDirective, typeof InputGroupTextareaDirective, typeof InputGroupAddOnDirective, typeof InputGroupAddonButtonDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<InputGroupModule>;
}

export { InputGroupAddOnDirective, InputGroupAddonButtonDirective, InputGroupComponent, InputGroupInputDirective, InputGroupModule, InputGroupTextareaDirective };
export type { InputGroupPlacement };
