/* Copyright 2026 Marimo. All rights reserved. */ import { useDebounce } from "@uidotdev/usehooks"; import { SearchIcon } from "lucide-react"; import React, { useEffect, useState } from "react"; import useEvent from "react-use-event-hook"; import { cn } from "@/utils/cn"; import { Spinner } from "../icons/spinner"; interface SearchBarProps { hidden: boolean; value: string; handleSearch: (query: string) => void; onHide: () => void; reloading?: boolean; } export const SearchBar = ({ hidden, value, handleSearch, onHide, reloading, }: SearchBarProps) => { const [internalValue, setInternalValue] = useState(value); const debouncedSearch = useDebounce(internalValue, 500); const onSearch = useEvent(handleSearch); const ref = React.useRef(null); useEffect(() => { onSearch(debouncedSearch); }, [debouncedSearch, onSearch]); useEffect(() => { if (hidden) { setInternalValue(""); } else { ref.current?.focus(); } }, [hidden]); return ( ); };