import { type PropType, type Ref, type SetupContext, type WatchSource } from 'vue';
interface SetOptions<T> {
    items: T[];
}
export declare function useSet<T>(options: SetOptions<T>): {
    values: Set<T>;
    add: (item: T) => void;
    toggle: (item: T) => void;
    remove: (item: T) => void;
    clear: () => void;
    updated: Ref<number>;
    equals: (items: T[]) => boolean;
};
export interface SelectOptions<T, V> extends SetOptions<T> {
    multiple?: boolean;
    itemText?: string | ((item: T) => string);
    itemValue?: string | ((item: T) => V);
    cols?: number;
}
export declare function selectProps<T, V>(): {
    modelValue: {
        type: PropType<V | V[]>;
    };
    selection: {
        type: StringConstructor;
    };
    clearable: {
        type: BooleanConstructor;
        default: boolean;
    };
    items: {
        type: PropType<T[]>;
        default: () => never[];
    };
    multiple: {
        type: BooleanConstructor;
        default: boolean;
    };
    cols: {
        type: NumberConstructor;
        default: number;
    };
    itemText: {
        type: PropType<string | ((item: T) => string)>;
        default: string;
    };
    itemValue: {
        type: PropType<string | ((item: T) => V)>;
        default: string;
    };
    disabled: {
        type: BooleanConstructor;
        default: boolean;
    };
};
export declare function useSelect<T, V>(options: SelectOptions<T, V>): {
    select: (item: T) => void;
    selected: Ref<V | V[]>;
    selectedStr: Ref<string>;
    itemRows: (T | null)[][];
    setItems: (items: T[]) => void;
    setValues: (values: V[] | V) => void;
    isEmpty: import("vue").ComputedRef<boolean>;
    has: (item: T | null) => boolean;
    values: Set<T>;
    add: (item: T) => void;
    toggle: (item: T) => void;
    remove: (item: T) => void;
    clear: () => void;
    updated: Ref<number>;
    equals: (items: T[]) => boolean;
};
/**
 * @interface
 */
export type UseSelectReturn<T, V> = ReturnType<typeof useSelect<T, V>>;
export declare function setupSelect<T, V>(options: SelectOptions<T, V>, modelValue: WatchSource<V>, { emit }: SetupContext<['update:model-value']>): UseSelectReturn<T, V>;
export declare const RenderlessSelect: import("vue").DefineComponent<{
    modelValue: {
        type: (ArrayConstructor | StringConstructor | NumberConstructor)[];
    };
    selection: {
        type: StringConstructor;
    };
    clearable: {
        type: BooleanConstructor;
        default: boolean;
    };
    items: {
        type: PropType<any[]>;
        default: () => never[];
    };
    multiple: {
        type: BooleanConstructor;
        default: boolean;
    };
    cols: {
        type: NumberConstructor;
        default: number;
    };
    itemText: {
        type: PropType<string | ((item: any) => string)>;
        default: string;
    };
    itemValue: {
        type: PropType<string | ((item: any) => any)>;
        default: string;
    };
    disabled: {
        type: BooleanConstructor;
        default: boolean;
    };
}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
    [key: string]: any;
}>[] | undefined, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
    modelValue: {
        type: (ArrayConstructor | StringConstructor | NumberConstructor)[];
    };
    selection: {
        type: StringConstructor;
    };
    clearable: {
        type: BooleanConstructor;
        default: boolean;
    };
    items: {
        type: PropType<any[]>;
        default: () => never[];
    };
    multiple: {
        type: BooleanConstructor;
        default: boolean;
    };
    cols: {
        type: NumberConstructor;
        default: number;
    };
    itemText: {
        type: PropType<string | ((item: any) => string)>;
        default: string;
    };
    itemValue: {
        type: PropType<string | ((item: any) => any)>;
        default: string;
    };
    disabled: {
        type: BooleanConstructor;
        default: boolean;
    };
}>> & {
    "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
}, {
    items: any[];
    cols: number;
    disabled: boolean;
    multiple: boolean;
    itemText: string | ((item: any) => string);
    itemValue: string | ((item: any) => any);
    clearable: boolean;
}, {}>;
export {};
//# sourceMappingURL=select.d.ts.map