@dvcol/neo-svelte
Version:
Neomorphic ui library for svelte 5
44 lines (43 loc) • 1.95 kB
TypeScript
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;