Full keyboard support is required for accessibility.
Expected behavior:
- ↓/↑: Move highlight through suggestions
- Enter: Select highlighted suggestion
- Escape: Close suggestions, clear highlight
- Tab: Select and move focus (or close)
State needed:
const [highlightedIndex, setHighlightedIndex] = useState(-1);
Edge cases:
- Wrap around (↓ at bottom goes to top)
- Reset highlight when suggestions change
- Scroll highlighted item into view
ARIA: Use aria-activedescendant to indicate highlighted option.