import type { NeoInputProps } from '../inputs/common/neo-input.model.js';
import type { HTMLNeoBaseElement, HTMLRefProps } from '../utils/html-element.utils.js';
import { type NeoListContext, type NeoListItemOrSection } from './neo-list.model.js';
export type NeoListSearchFilter = (item: NeoListItemOrSection, search?: string) => boolean;
export type NeoListSearchSort = (a: NeoListItemOrSection, b: NeoListItemOrSection, invert?: boolean) => number;
export type NeoListSearchProps<Tag extends keyof HTMLElementTagNameMap = 'div'> = {
    /**
     * The HTML tag to use for the container.
     * @default 'li'
     */
    tag?: Tag;
    /**
     * Debounce delay in milliseconds before filtering the list.
     *
     * @default 250
     */
    delay?: number;
    /**
     * Whether to invert the sort order of the list.
     */
    invert?: boolean;
    /**
     * Custom filter function to apply to the list (overrides default list filter).
     * Defaults to filtering by label alphabetically based on the list highlight filter.
     * @see NeoListContext.highlight
     */
    filter?: NeoListSearchFilter;
    /**
     * Custom sort function to apply to the list (overrides default list sort).
     * Defaults unsorted and toggles between ascending and descending alphabetical label order.
     */
    sort?: NeoListSearchSort;
    /**
     * List context (used to extract the highlight filter).
     */
    context?: NeoListContext;
    /**
     * Optional props to pass to the input.
     */
    inputProps?: NeoInputProps;
} & HTMLRefProps<HTMLInputElement> & Pick<NeoInputProps, 'value' | 'valid' | 'dirty' | 'touched' | 'hovered' | 'focused' | 'focusin' | 'loading' | 'elevation' | 'hover' | 'placeholder'> & HTMLNeoBaseElement<HTMLElementTagNameMap[Tag]>;
export declare const itemSearchFilter: NeoListSearchFilter;
export declare const itemLabelSort: (a: NeoListItemOrSection, b: NeoListItemOrSection, reverse?: boolean) => number;
