import { useRef, useState, type ReactNode } from 'react' import { useActorSearch } from '../../hooks/useActorSearch' import { usePointerDownOutside } from '../../hooks/usePointerDownOutside' import type { BlueskyActorSearchResult } from '../../lib/bsky/actorSearch' type AccountHandleInputProps = { disabled?: boolean } export function AccountHandleInput({ disabled = false }: AccountHandleInputProps) { const [handleInput, setHandleInput] = useState('') const [isSuggestionsOpen, setIsSuggestionsOpen] = useState(false) const { results, isSearching } = useActorSearch(handleInput) const containerRef = useRef(null) usePointerDownOutside(containerRef, () => setIsSuggestionsOpen(false)) function selectHandle(handle: string) { setHandleInput(handle) setIsSuggestionsOpen(false) } return (
{ setHandleInput(event.target.value) setIsSuggestionsOpen(true) }} onKeyDown={(event) => { if (event.key === 'Escape' || event.key === 'Enter') { setIsSuggestionsOpen(false) } }} className="w-full min-w-0 bg-transparent px-4 py-3 font-mono text-base text-ctp-text outline-none placeholder:text-ctp-overlay-0" /> {isSuggestionsOpen && !disabled && ( )}
) } type AccountSuggestionsProps = { results: BlueskyActorSearchResult[] isSearching: boolean onSelect: (handle: string) => void } function AccountSuggestions({ results, isSearching, onSelect }: AccountSuggestionsProps) { if (isSearching) { return (

Searching…

) } if (results.length === 0) return null return ( ) } function SuggestionPanel({ children }: { children: ReactNode }) { return (
{children}
) }