import { AnchoredRegion, ListboxOption, SelectPosition } from '@ni/fast-foundation';
import { DropdownAppearance, type ListOptionOwner } from '../patterns/dropdown/types';
import type { ListOption } from '../list-option';
import { FilterMode } from './types';
import { FormAssociatedSelect } from './models/select-form-associated';
declare global {
    interface HTMLElementTagNameMap {
        'nimble-select': Select;
    }
}
type BooleanOrVoid = boolean | void;
declare const Select_base: (abstract new (...args: any[]) => {
    errorText?: string;
    errorVisible: boolean;
    errorHasOverflow: boolean;
    readonly $fastController: import("@ni/fast-element").Controller;
    $emit(type: string, detail?: any, options?: Omit<CustomEventInit, "detail">): boolean | void;
    connectedCallback(): void;
    disconnectedCallback(): void;
    attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
}) & (abstract new (...args: any[]) => {
    requiredVisible: boolean;
    readonly $fastController: import("@ni/fast-element").Controller;
    $emit(type: string, detail?: any, options?: Omit<CustomEventInit, "detail">): boolean | void;
    connectedCallback(): void;
    disconnectedCallback(): void;
    attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
}) & typeof FormAssociatedSelect;
/**
 * A nimble-styled HTML select.
 */
export declare class Select extends Select_base implements ListOptionOwner {
    appearance: DropdownAppearance;
    appearanceReadOnly: boolean;
    fullBleed: boolean;
    /**
     * Reflects the placement for the listbox when the select is open.
     *
     * @public
     */
    positionAttribute?: SelectPosition;
    filterMode: FilterMode;
    clearable: boolean;
    loadingVisible: boolean;
    /**
     * @internal
     */
    displayPlaceholder: boolean;
    /**
     * @internal
     */
    open: boolean;
    /**
     * Holds the current state for the calculated position of the listbox.
     *
     * @public
     */
    position?: SelectPosition;
    /**
     * The ref to the internal `.control` element.
     *
     * @internal
     */
    control: HTMLElement;
    /**
     * Reference to the internal listbox element.
     *
     * @internal
     */
    listbox: HTMLDivElement;
    /**
     * The unique id for the internal listbox element.
     *
     * @internal
     */
    listboxId: string;
    /**
     * @internal
     */
    scrollableRegion: HTMLElement;
    /**
     * @internal
     */
    filterInput?: HTMLInputElement;
    /**
     * @internal
     */
    anchoredRegion: AnchoredRegion;
    /** @internal */
    hasOverflow: boolean;
    /**
     * @internal
     */
    filteredOptions: ListboxOption[];
    /**
     * @internal
     */
    filter: string;
    /**
     * The space available in the viewport for the listbox when opened.
     *
     * @internal
     */
    availableViewportHeight: number;
    /**
     * The component is collapsible when in single-selection mode with no size attribute.
     *
     * @internal
     */
    get collapsible(): boolean;
    /** @internal */
    labelSlot: HTMLSlotElement;
    /** @internal */
    get labelContent(): string;
    private _value;
    private forcedPosition;
    private openActiveIndex?;
    private readonly selectedOptionObserver?;
    /**
     * @internal
     */
    connectedCallback(): void;
    disconnectedCallback(): void;
    get value(): string;
    set value(next: string);
    /**
     * @internal
     */
    get displayValue(): string;
    /**
     * @internal
     */
    anchoredRegionChanged(_prev: AnchoredRegion | undefined, _next: AnchoredRegion | undefined): void;
    /**
     * @internal
     */
    controlChanged(_prev: HTMLElement | undefined, _next: HTMLElement | undefined): void;
    /**
     * @internal
     */
    slottedOptionsChanged(prev: Element[] | undefined, next: Element[] | undefined): void;
    /**
     * @internal
     */
    clickHandler(e: MouseEvent): BooleanOrVoid;
    /**
     * Updates the value when an option's value changes.
     *
     * @param source - the source object
     * @param propertyName - the property to evaluate
     *
     * @internal
     * @override
     */
    handleChange(source: unknown, propertyName: string): void;
    /**
     * Prevents focus when size is set and a scrollbar is clicked.
     *
     * @param e - the mouse event object
     *
     * @override
     * @internal
     */
    mousedownHandler(e: MouseEvent): BooleanOrVoid;
    /**
     * @internal
     */
    regionLoadedHandler(): void;
    /**
     * Sets the multiple property on the proxy element.
     *
     * @param prev - the previous multiple value
     * @param next - the current multiple value
     */
    multipleChanged(prev: boolean | undefined, next: boolean): void;
    /**
     * @internal
     */
    ignoreClickHandler(e: MouseEvent): void;
    /**
     * @internal
     */
    clearClickHandler(e: MouseEvent): void;
    /**
     * @internal
     */
    updateDisplayValue(): void;
    /**
     * Handle content changes on the control input.
     *
     * @param e - the input event
     * @internal
     */
    inputHandler(e: InputEvent): boolean;
    /**
     * @internal
     */
    focusoutHandler(e: FocusEvent): BooleanOrVoid;
    /**
     * @internal
     */
    keydownHandler(e: KeyboardEvent): BooleanOrVoid;
    /**
     * Updates the proxy value when the selected index changes.
     *
     * @param prev - the previous selected index
     * @param next - the next selected index
     *
     * @internal
     */
    selectedIndexChanged(_: number | undefined, __: number): void;
    /**
     * @internal
     * Fork of Listbox implementation, so that the selectedIndex is not changed while the dropdown
     * is open.
     */
    typeaheadBufferChanged(_: string, __: string): void;
    /**
     * Synchronize the `aria-disabled` property when the `disabled` property changes.
     *
     * @param prev - The previous disabled value
     * @param next - The next disabled value
     *
     * @internal
     */
    disabledChanged(prev: boolean, next: boolean): void;
    /**
     * Reset the element to its first selectable option when its parent form is reset.
     *
     * @internal
     */
    formResetCallback(): void;
    /**
     * @internal
     */
    selectNextOption(): void;
    /**
     * @internal
     */
    selectPreviousOption(): void;
    /**
     * @internal
     */
    selectFirstOption(): void;
    /**
     * @internal
     */
    selectLastOption(): void;
    /**
     * @internal
     */
    registerOption(option: ListOption): void;
    protected setSelectedOptions(): void;
    protected focusAndScrollOptionIntoView(): void;
    protected getTypeaheadMatches(): ListboxOption[];
    protected positionChanged(_: SelectPosition | undefined, next: SelectPosition | undefined): void;
    /**
     * Updates the proxy's size property when the size attribute changes.
     *
     * @param prev - the previous size
     * @param next - the current size
     *
     * @override
     * @internal
     */
    protected sizeChanged(prev: number | undefined, next: number): void;
    protected openChanged(): void;
    /**
     * Updates the selectedness of each option when the list of selected options changes.
     *
     * @param prev - the previous list of selected options
     * @param next - the current list of selected options
     *
     * @override
     * @internal
     */
    protected selectedOptionsChanged(_prev: ListboxOption[] | undefined, next: ListboxOption[]): void;
    /**
     * Sets the selected index to match the first option with the selected attribute, or
     * the first selectable option.
     *
     * @override
     * @internal
     */
    protected setDefaultSelectedOption(): void;
    private getSlottedOptions;
    private setActiveOption;
    private focusAndScrollActiveOptionIntoView;
    private getPlaceholderOption;
    private setPositioning;
    private updateAdjacentSeparatorState;
    private setTopSeparatorState;
    private setBottomSeparatorState;
    private getPreviousVisibleOptionOrGroup;
    private getNextVisibleOptionOrGroup;
    private isOptionHiddenOrFilteredOut;
    private filterMatchesText;
    /**
     * Filter available options by text value.
     *
     * @public
     */
    private filterOptions;
    private getGroupOptions;
    /**
     * Sets the value and display value to match the first selected option.
     *
     * @param shouldEmit - if true, the input and change events will be emitted
     *
     * @internal
     */
    private updateValue;
    private clearSelect;
    /**
     * Resets and fills the proxy to match the component's options.
     *
     * @internal
     */
    private setProxyOptions;
    private filterChanged;
    private emitFilterInputEvent;
    private initializeOpenState;
    private observeSelectedOptionTextContent;
}
export declare const selectTag = "nimble-select";
export {};
