import type { Ref } from 'vue';
import type { Direction } from '../shared/types';
import type { PrimitiveProps } from '../Primitive';
export type AcceptableValue = string | number | boolean | object;
type ArrayOrWrapped<T> = T extends any[] ? T : Array<T>;
type ComboboxRootContext<T> = {
    modelValue: Ref<T | Array<T>>;
    onValueChange: (val: T) => void;
    searchTerm: Ref<string>;
    multiple: Ref<boolean>;
    disabled: Ref<boolean>;
    open: Ref<boolean>;
    onOpenChange: (value: boolean) => void;
    isUserInputted: Ref<boolean>;
    filteredOptions: Ref<Array<T>>;
    contentId: string;
    contentElement: Ref<HTMLElement | undefined>;
    onContentElementChange: (el: HTMLElement) => void;
    inputElement: Ref<HTMLInputElement | undefined>;
    onInputElementChange: (el: HTMLInputElement) => void;
    onInputNavigation: (dir: 'up' | 'down' | 'home' | 'end') => void;
    onInputEnter: () => void;
    selectedValue: Ref<T | undefined>;
    onSelectedValueChange: (val: T) => void;
    parentElement: Ref<HTMLElement | undefined>;
};
export declare const injectComboboxRootContext: <T extends ComboboxRootContext<AcceptableValue> | null | undefined = ComboboxRootContext<AcceptableValue>>(fallback?: T | undefined) => T extends null ? ComboboxRootContext<AcceptableValue> | null : ComboboxRootContext<AcceptableValue>, provideComboboxRootContext: (contextValue: ComboboxRootContext<AcceptableValue>) => ComboboxRootContext<AcceptableValue>;
export type ComboboxRootEmits<T = AcceptableValue> = {
    'update:modelValue': [value: T];
    'update:open': [value: boolean];
    'update:searchTerm': [value: string];
};
export interface ComboboxRootProps<T = AcceptableValue> extends PrimitiveProps {
    modelValue?: T;
    defaultValue?: T;
    open?: boolean;
    defaultOpen?: boolean;
    searchTerm?: string;
    multiple?: boolean;
    disabled?: boolean;
    name?: string;
    dir?: Direction;
    filterFunction?: (val: ArrayOrWrapped<T>, term: string) => ArrayOrWrapped<T>;
    displayValue?: (val: T) => string;
}
declare const _default: <T extends AcceptableValue = AcceptableValue>(__VLS_props: {
    dir?: Direction | undefined;
    disabled?: boolean | undefined;
    multiple?: boolean | undefined;
    name?: string | undefined;
    asChild?: boolean | undefined;
    as?: import('../Primitive').AsTag | import("vue").Component | undefined;
    defaultOpen?: boolean | undefined;
    open?: boolean | undefined;
    "onUpdate:open"?: ((value: boolean) => any) | undefined;
    defaultValue?: T | undefined;
    modelValue?: T | undefined;
    "onUpdate:modelValue"?: ((value: T) => any) | undefined;
    searchTerm?: string | undefined;
    filterFunction?: ((val: ArrayOrWrapped<T>, term: string) => ArrayOrWrapped<T>) | undefined;
    displayValue?: ((val: T) => string) | undefined;
    "onUpdate:searchTerm"?: ((value: string) => any) | undefined;
} & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, __VLS_ctx?: {
    slots: {
        default?(_: {
            activeIndex: number;
            open: boolean;
            value: (([{
                type: import("vue").PropType<__VLS_NonUndefinedable<T>>;
            }] extends [import("vue").Prop<infer V, infer D>] ? unknown extends V ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : {
                type: import("vue").PropType<__VLS_NonUndefinedable<T>>;
            }) | undefined) & T;
        }): any;
    };
    attrs: any;
    emit: ((evt: "update:open", value: boolean) => void) & ((evt: "update:modelValue", value: T) => void) & ((evt: "update:searchTerm", value: string) => void);
} | undefined, __VLS_expose?: ((exposed: import('vue').ShallowUnwrapRef<{}>) => void) | undefined, __VLS_setup?: Promise<{
    props: {
        dir?: Direction | undefined;
        disabled?: boolean | undefined;
        multiple?: boolean | undefined;
        name?: string | undefined;
        asChild?: boolean | undefined;
        as?: import('../Primitive').AsTag | import("vue").Component | undefined;
        defaultOpen?: boolean | undefined;
        open?: boolean | undefined;
        "onUpdate:open"?: ((value: boolean) => any) | undefined;
        defaultValue?: T | undefined;
        modelValue?: T | undefined;
        "onUpdate:modelValue"?: ((value: T) => any) | undefined;
        searchTerm?: string | undefined;
        filterFunction?: ((val: ArrayOrWrapped<T>, term: string) => ArrayOrWrapped<T>) | undefined;
        displayValue?: ((val: T) => string) | undefined;
        "onUpdate:searchTerm"?: ((value: string) => any) | undefined;
    } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
    expose(exposed: import('vue').ShallowUnwrapRef<{}>): void;
    attrs: any;
    slots: {
        default?(_: {
            activeIndex: number;
            open: boolean;
            value: (([{
                type: import("vue").PropType<__VLS_NonUndefinedable<T>>;
            }] extends [import("vue").Prop<infer V, infer D>] ? unknown extends V ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : {
                type: import("vue").PropType<__VLS_NonUndefinedable<T>>;
            }) | undefined) & T;
        }): any;
    };
    emit: ((evt: "update:open", value: boolean) => void) & ((evt: "update:modelValue", value: T) => void) & ((evt: "update:searchTerm", value: string) => void);
}>) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
    [key: string]: any;
}> & {
    __ctx?: {
        props: {
            dir?: Direction | undefined;
            disabled?: boolean | undefined;
            multiple?: boolean | undefined;
            name?: string | undefined;
            asChild?: boolean | undefined;
            as?: import('../Primitive').AsTag | import("vue").Component | undefined;
            defaultOpen?: boolean | undefined;
            open?: boolean | undefined;
            "onUpdate:open"?: ((value: boolean) => any) | undefined;
            defaultValue?: T | undefined;
            modelValue?: T | undefined;
            "onUpdate:modelValue"?: ((value: T) => any) | undefined;
            searchTerm?: string | undefined;
            filterFunction?: ((val: ArrayOrWrapped<T>, term: string) => ArrayOrWrapped<T>) | undefined;
            displayValue?: ((val: T) => string) | undefined;
            "onUpdate:searchTerm"?: ((value: string) => any) | undefined;
        } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps;
        expose(exposed: import('vue').ShallowUnwrapRef<{}>): void;
        attrs: any;
        slots: {
            default?(_: {
                activeIndex: number;
                open: boolean;
                value: (([{
                    type: import("vue").PropType<__VLS_NonUndefinedable<T>>;
                }] extends [import("vue").Prop<infer V, infer D>] ? unknown extends V ? import('../../node_modules/@vue/shared').IfAny<V, V, D> : V : {
                    type: import("vue").PropType<__VLS_NonUndefinedable<T>>;
                }) | undefined) & T;
            }): any;
        };
        emit: ((evt: "update:open", value: boolean) => void) & ((evt: "update:modelValue", value: T) => void) & ((evt: "update:searchTerm", value: string) => void);
    } | undefined;
};
export default _default;
type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
