{"version":3,"file":"use-client-filter.cjs","names":[],"sources":["../../src/hooks/use-client-filter.ts"],"sourcesContent":["import { useMemo } from \"react\";\n\nexport type FilterPredicate<T> = (item: T, search: string) => boolean;\n\n/**\n * Client-side filter helper. Performs a case-insensitive match on the listed\n * keys when no custom predicate is provided.\n *\n * @param items - Source list.\n * @param search - Search string.\n * @param keysOrPredicate - Either a list of keys to match against or a custom predicate.\n * @returns Filtered list (referential identity preserved when search is empty).\n */\nexport function useClientFilter<T extends Record<string, unknown>>(\n    items: T[],\n    search: string,\n    keysOrPredicate: (keyof T)[] | FilterPredicate<T>,\n): T[] {\n    return useMemo(() => {\n        const term = search.trim().toLowerCase();\n        if (!term) return items;\n        if (typeof keysOrPredicate === \"function\") {\n            return items.filter((item) => keysOrPredicate(item, term));\n        }\n        return items.filter((item) =>\n            keysOrPredicate.some((key) => {\n                const value = item[key];\n                return value != null && String(value).toLowerCase().includes(term);\n            }),\n        );\n    }, [items, search, keysOrPredicate]);\n}\n"],"mappings":"uBAaA,SAAgB,EACZ,EACA,EACA,EACG,CACH,OAAA,EAAO,EAAA,QAAA,KAAc,CACjB,IAAM,EAAO,EAAO,KAAK,CAAC,CAAC,YAAY,EAKvC,OAJK,EACD,OAAO,GAAoB,WACpB,EAAM,OAAQ,GAAS,EAAgB,EAAM,CAAI,CAAC,EAEtD,EAAM,OAAQ,GACjB,EAAgB,KAAM,GAAQ,CAC1B,IAAM,EAAQ,EAAK,GACnB,OAAO,GAAS,MAAQ,OAAO,CAAK,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,CAAI,CACrE,CAAC,CACL,EATkB,CAUtB,EAAG,CAAC,EAAO,EAAQ,CAAe,CAAC,CACvC"}