chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import React, { useState } from "react";
|
||||
import { Box, Text, useInput } from "ink";
|
||||
|
||||
export function MenuSelect({ items = [], onSelect, initial = 0 }) {
|
||||
const [idx, setIdx] = useState(Math.min(initial, Math.max(0, items.length - 1)));
|
||||
|
||||
useInput((input, key) => {
|
||||
if (items.length === 0) return;
|
||||
if (key.upArrow) setIdx((i) => (i - 1 + items.length) % items.length);
|
||||
if (key.downArrow) setIdx((i) => (i + 1) % items.length);
|
||||
if (key.return && onSelect) onSelect(items[idx]);
|
||||
const n = parseInt(input, 10);
|
||||
if (!isNaN(n) && n >= 1 && n <= items.length) {
|
||||
const newIdx = n - 1;
|
||||
setIdx(newIdx);
|
||||
if (onSelect) onSelect(items[newIdx]);
|
||||
}
|
||||
});
|
||||
|
||||
return (
|
||||
<Box flexDirection="column">
|
||||
{items.map((item, i) => (
|
||||
<Box key={i}>
|
||||
<Text bold={i === idx} color={i === idx ? "yellow" : undefined} dimColor={item.disabled}>
|
||||
{i === idx ? "▶ " : " "}
|
||||
{item.label}
|
||||
</Text>
|
||||
{item.hint && (
|
||||
<Text dimColor>
|
||||
{" "}
|
||||
{item.hint}
|
||||
</Text>
|
||||
)}
|
||||
</Box>
|
||||
))}
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user