"use client" import * as React from "react" import { LoaderCircleIcon, SearchIcon } from "lucide-react" import { ClearableInput, type ClearableInputProps } from "./clearable" export type SearchInputProps = Omit & { searchIcon?: React.ReactNode loading?: boolean loadingLabel?: string resultCount?: number shortcut?: React.ReactNode debounceMs?: number showMetaOnClear?: boolean onValueChange?: (value: string) => void onDebouncedValueChange?: (value: string) => void } /** * @deprecated Prefer `Input` with `type="search"` and search-related props for new usage. */ const SearchInput = React.forwardRef( ( { searchIcon, loading = false, loadingLabel = "Searching", resultCount, shortcut, debounceMs, value, onValueChange, onDebouncedValueChange, placeholder = "Search...", inputMode = "search", trailing, showMetaOnClear = false, disabled, ...props }, ref ) => { const stringValue = value == null ? "" : String(value) React.useEffect(() => { if (debounceMs == null || !onDebouncedValueChange) return const timeoutId = window.setTimeout(() => onDebouncedValueChange(stringValue), debounceMs) return () => window.clearTimeout(timeoutId) }, [debounceMs, onDebouncedValueChange, stringValue]) const meta = ( {loading ? ( ) : null} {typeof resultCount === "number" ? {resultCount} : null} {shortcut ? {shortcut} : null} {trailing} ) return ( } trailing={meta} replaceTrailingWhenClear={!showMetaOnClear} onValueChange={onValueChange} {...props} /> ) } ) SearchInput.displayName = "SearchInput" export { SearchInput }