import type { PropType, Ref } from 'vue'; import type { MaybeRef } from '../util/index.js'; /** * - boolean: match without highlight * - number: single match (index), length already known * - []: single match (start, end) * - [][]: multiple matches (start, end), shouldn't overlap */ export type FilterMatchArraySingle = readonly [number, number]; export type FilterMatchArrayMultiple = readonly FilterMatchArraySingle[]; export type FilterMatchArray = FilterMatchArraySingle | FilterMatchArrayMultiple; export type FilterMatch = boolean | number | FilterMatchArray; export type FilterFunction = (value: string, query: string, item?: InternalItem) => FilterMatch; export type FilterKeyFunctions = Record; export type FilterKeys = string | string[]; export type FilterMode = 'some' | 'every' | 'union' | 'intersection'; export interface FilterProps { customFilter?: FilterFunction; customKeyFilter?: FilterKeyFunctions; filterKeys?: FilterKeys; filterMode?: FilterMode; noFilter?: boolean; } export interface InternalItem { value: any; raw: T; type?: string; } type FilterResult = { index: number; matches: Record; type?: 'divider' | 'subheader'; }; export declare const defaultFilter: FilterFunction; export declare const makeFilterProps: (defaults?: Defaults | undefined) => { customFilter: unknown extends Defaults["customFilter"] ? PropType : { type: PropType; default: unknown extends Defaults["customFilter"] ? FilterFunction : FilterFunction | Defaults["customFilter"]; }; customKeyFilter: unknown extends Defaults["customKeyFilter"] ? PropType : { type: PropType; default: unknown extends Defaults["customKeyFilter"] ? FilterKeyFunctions : FilterKeyFunctions | Defaults["customKeyFilter"]; }; filterKeys: unknown extends Defaults["filterKeys"] ? PropType : { type: PropType; default: unknown extends Defaults["filterKeys"] ? FilterKeys : Defaults["filterKeys"] | NonNullable; }; filterMode: unknown extends Defaults["filterMode"] ? { type: PropType; default: string; } : Omit<{ type: PropType; default: string; }, "default" | "type"> & { type: PropType; default: unknown extends Defaults["filterMode"] ? FilterMode : Defaults["filterMode"] | NonNullable; }; noFilter: unknown extends Defaults["noFilter"] ? BooleanConstructor : { type: PropType; default: unknown extends Defaults["noFilter"] ? boolean : boolean | Defaults["noFilter"]; }; }; export declare function filterItems(items: readonly (readonly [item: InternalItem, transformed: {}])[] | readonly InternalItem[], query: string, options?: { customKeyFilter?: FilterKeyFunctions; default?: FilterFunction; filterKeys?: FilterKeys; filterMode?: FilterMode; noFilter?: boolean; }): FilterResult[]; export declare function useFilter(props: FilterProps, items: MaybeRef, query: Ref | (() => string | undefined), options?: { transform?: (item: T) => {}; customKeyFilter?: MaybeRef; }): { filteredItems: import("vue").ShallowRef; filteredMatches: import("vue").ShallowRef>, Map>>; getMatches: (item: T) => Record | undefined; }; export declare function highlightResult(name: string, text: string, matches: FilterMatchArrayMultiple | undefined): string | JSX.Element[];