Fix CLI interactivity issue by eliminating multiple useKeypress hook conflicts

Co-authored-by: pomelo-nwu <10703060+pomelo-nwu@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-08-26 12:00:12 +00:00
parent b03daebbc1
commit f5ee3df219
3 changed files with 33 additions and 22 deletions

View File

@@ -34,6 +34,10 @@ export interface RadioButtonSelectProps<T> {
onSelect: (value: T) => void;
/** Function called when an item is highlighted. Receives the `value` of the selected item. */
onHighlight?: (value: T) => void;
/** Function called when escape key is pressed. */
onEscape?: () => void;
/** Function called when Ctrl+C is pressed. */
onCancel?: () => void;
/** Whether this select input is currently focused and should respond to input. */
isFocused?: boolean;
/** Whether to show the scroll arrows. */
@@ -55,6 +59,8 @@ export function RadioButtonSelect<T>({
initialIndex = 0,
onSelect,
onHighlight,
onEscape,
onCancel,
isFocused,
showScrollArrows = false,
maxItemsToShow = 10,
@@ -91,6 +97,18 @@ export function RadioButtonSelect<T>({
const { sequence, name } = key;
const isNumeric = showNumbers && /^[0-9]$/.test(sequence);
// Handle escape key
if (name === 'escape') {
onEscape?.();
return;
}
// Handle Ctrl+C
if (key.ctrl && name === 'c') {
onCancel?.();
return;
}
// Any key press that is not a digit should clear the number input buffer.
if (!isNumeric && numberInputTimer.current) {
clearTimeout(numberInputTimer.current);