import { type IClearable } from '../../../Behaviors/Clearable';
import { IDropDownable } from '../../../Behaviors/DropDownable';
import { type IInvalidable } from '../../../Behaviors/Invalidable';
import { SelectorElement } from '../../Selectors/Abstracts/Selector/SelectorElement';
import type { ISelectElementProps } from './ISelectElementProps';
import { SelectItemElement } from './SelectItemElement';
import { TextAlignment } from '../../../Types/TextAlignment';
import { ISlottable } from '../../../Behaviors/Slottable';
import { SelectElementIntl } from './SelectElementIntl';
declare const SelectElement_base: import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<import("../../../../Index").ControlBehaviorReturn<(abstract new (...args: Array<any>) => import("../../../Behaviors/Themeable").IThemeableProps) & (abstract new (...args: Array<any>) => import("../../../Behaviors/Filterable").IFilterableProps) & (abstract new () => SelectorElement<any>) & import("../../../Behaviors/Themeable").IThemeableCtor, import("../../../Behaviors/Valueable").IValueableProps<unknown>>, import("../../../Behaviors/Disableable").IDisableableProps>, IInvalidable & import("../../../Behaviors/Invalidable").IInvalidableProps<unknown>>, import("../../../Behaviors/Clearable").IClearableProps & import("../../../Behaviors/Clearable").IClearableEvents & IClearable>, import("../../../Behaviors/Labelable").ILabelableProps>, import("../../../Behaviors/Variantable").IVariantableProps>, import("../../../Behaviors/Appearanceable").IAppearanceableProps>, import("../../../Behaviors/DropDownable").IDropDownableProps & IDropDownable>, import("../../../Behaviors/Slottable").ISlottableProps & ISlottable>;
/**
 * Select - A UI element used for choosing from a list of options.
 *
 * @element mosaik-select
 *
 * @category Forms
 *
 * @fires cleared - Fired when the value is cleared.
 * @fires selectionChanged - Fired when the selection has changed.
 * @fires itemsChanged - Fired when the items has changed.
 *
 * @slot - The default menu slot.
 * @slot prefix - The prefix slot.
 * @slot suffix - The suffix slot.
 * @slot filter - The filter slot.
 *
 * @keyhandle UpArrow - Selects the previous item.
 * @keyhandle DownArrow - Selects the next item.
 * @keyhandle Space - Toggles the dropdown.
 * @keyhandle Enter - Toggles the dropdown.
 * @keyhandle Escape - Closes the dropdown if it is open, otherwise clears the value.
 * @keyhandle Tab - Closes the dropdown.
 *
 * @dependency {SelectItemElement} mosaik-select-item - SelectItemElement
 * @dependency {SelectItemGroupElement} mosaik-select-item-group - SelectItemGroupElement
 * @dependency {TextBoxElement} mosaik-text-box - TextBoxElement
 * @dependency {ButtonElement} mosaik-button - ButtonElement
 * @dependency {FloatingElement} mosaik-floating - FloatingElement
 * @dependency {PortalElement} mosaik-portal - PortalElement
 * @dependency {EmptyStateElement} mosaik-empty-state - EmptyStateElement
 *
 * @example
 * ```html
 * <mosaik-select label="Select a fruit">
 *     <mosaik-select-item value="apple" label="Apple"></mosaik-select-item>
 *     <mosaik-select-item value="banana" label="Banana"></mosaik-select-item>
 *     <mosaik-select-item value="cherry" label="Cherry"></mosaik-select-item>
 * </mosaik-select>
 * ```
 *
 * @public
 */
export declare class SelectElement extends SelectElement_base implements ISelectElementProps, IClearable, IInvalidable, IDropDownable, ISlottable {
    private _inputElement;
    private _floatingElement;
    private readonly _clickOutsideController;
    private readonly _intlController;
    private readonly _projectionController;
    private readonly _itemsClickSubscriptions;
    private _isEditable;
    private _isReadOnly;
    private _value;
    private _placeholder;
    private _required;
    private _textAlign;
    /**
     * @public
     */
    constructor();
    /**
     * Returns the `{@link is}` property.
     * The `{@link is}` property represents natural name of this element.
     *
     * @public
     * @static
     * @readonly
     */
    static get is(): string;
    /**
     * Gets or sets the `isEditable` property.
     *
     * @public
     * @attr
     */
    get isEditable(): boolean;
    set isEditable(value: boolean);
    /**
     * Gets or sets the `isReadOnly` property.
     *
     * @public
     * @attr
     */
    get isReadOnly(): boolean;
    set isReadOnly(value: boolean);
    /**
     * Gets or sets the `value` property.
     *
     * @public
     * @override
     */
    get value(): string | null;
    set value(value: string | null);
    /**
     * Gets or sets the `placeholder` property.
     *
     * @public
     */
    get placeholder(): string;
    set placeholder(value: string);
    /**
     * Determines whether the component is required or not.
     * If `true`, the component will require a value when submitted.
     *
     * @public
     * @attr
     */
    get required(): boolean;
    set required(value: boolean);
    /**
     * Determines the text alignment of the component.
     *
     * @public
     * @attr
     */
    get textAlign(): TextAlignment;
    set textAlign(value: TextAlignment);
    /**
     * Gets the items of the Select.
     *
     * @remark
     * It is important to override the base class property to ensure that only
     * {@link SelectItemElement} instances are returned.
     *
     * @public
     * @readonly
     * @ignore
     */
    get items(): Array<SelectItemElement>;
    /**
     * Returns the `intl` property.
     *
     * @public
     * @readonly
     */
    get intl(): SelectElementIntl;
    /**
     * Resets the value, all kinds of validation and errors.
     *
     * @public
     */
    reset(): void;
    /**
     * Checks the validity of the element and returns `true` if it is valid; otherwise, `false`.
     *
     * @public
     * @override
     */
    checkValidity(): boolean;
    /**
     * Clears the value of the element but not the validation.
     *
     * @public
     * @override
     */
    clear(force?: boolean): boolean;
    /**
     * @public
     * @override
     */
    connectedCallback(): void;
    /**
     * @protected
     * @template
     *
     * @param active - A value indicating whether the floating is active.
     */
    onFloatingActiveChanged(active: boolean): void;
    /**
     * @protected
     * @override
     */
    protected onApplyTemplate(): void;
    /**
     * @protected
     * @override
     */
    protected onItemsChanged(): void;
    /**
     * @protected
     * @override
     */
    protected onSelectionChanged(oldIndex: number, newIndex: number): void;
    /**
     * @protected
     */
    protected onValuePropertyChanged(_prev?: string | null, next?: string | null): void;
    /**
     * @protected
     */
    protected onDisabledPropertyChanged(_prev?: boolean, next?: boolean): void;
    /**
     * @protected
     */
    protected onIsDropDownOpenPropertyChanged(_prev?: boolean, next?: boolean): void;
    /**
     * @protected
     */
    protected onFilterPropertyChanged(_?: string, next?: string): void;
    /**
     * @private
     *
     * @param item - The item to select.
     * @param force - A value indicating whether to force the selection.
     */
    private onSelectItem;
    /**
     * @private
     */
    private initialSelection;
}
/**
 * @public
 */
export declare namespace SelectElement {
    type Props = ISelectElementProps;
}
/**
 * @public
 */
declare global {
    interface HTMLElementTagNameMap {
        'mosaik-select': SelectElement;
    }
}
export {};
//# sourceMappingURL=SelectElement.d.ts.map