import * as React from "react" import { cn } from "../core/cn" import { Search, X } from "lucide-react" interface SearchBarProps { /** Called with the debounced search query */ onSearch: (query: string) => void /** Placeholder text */ placeholder?: string /** Debounce delay in ms (default 300) */ debounceMs?: number /** Additional CSS classes for the outer wrapper */ className?: string } function SearchBar({ onSearch, placeholder = "Search...", debounceMs = 300, className, }: SearchBarProps) { const [query, setQuery] = React.useState("") const timerRef = React.useRef | null>(null) const onSearchRef = React.useRef(onSearch) onSearchRef.current = onSearch React.useEffect(() => { if (timerRef.current) clearTimeout(timerRef.current) timerRef.current = setTimeout(() => { onSearchRef.current(query) }, debounceMs) return () => { if (timerRef.current) clearTimeout(timerRef.current) } }, [query, debounceMs]) return (
setQuery(e.target.value)} placeholder={placeholder} className="flex-1 bg-transparent text-sm text-foreground outline-none placeholder:text-muted-foreground" /> {query && ( )}
) } export { SearchBar } export type { SearchBarProps }