import type { RemoteQueryFunction } from '$app/server'; /** * Ce que la liste d'un select et `Loading` lisent d'une source. `RemoteQuery` le satisfait * structurellement, ce qui évite d'imposer une remote query à qui n'en a pas. */ export type QueryLike = { readonly current: T | undefined; readonly loading: boolean; readonly error: unknown; readonly ready: boolean; }; /** * Les trois façons d'alimenter un select: * - un tableau déjà chargé — le filtre reste local; * - une fonction, synchrone ou non — elle porte son propre filtre; * - une remote query — le serveur filtre. */ export type ItemsSource = Item[] | ((arg: { search: string; }) => Item[] | Promise) | RemoteQueryFunction<{ search: string; }, Item[]>; export type UseItemsOptions = { source: () => ItemsSource; search: () => string; /** Base du filtre par défaut, et libellé affiché à défaut de snippet. */ getLabel: (item: Item) => string; filter?: () => ((item: Item, search: string) => boolean) | undefined; debounceMs?: number; }; /** `item.id`, puis `item.value`: les deux formes que prennent les items en pratique. */ export declare function defaultGetValue(item: Item): string; /** Un item porteur d'un `label` s'affiche par celui-ci, ce qui rend les options lisibles sans snippet. */ export declare function defaultGetLabel(item: Item, getValue: (item: Item) => string): string; /** * Ramène les trois formes de `ItemsSource` à la seule que lisent les selects et `Loading`. */ export declare function useItems({ source, search, getLabel, filter, debounceMs }: UseItemsOptions): QueryLike;