import { matchesKey } from "@earendil-works/pi-tui"; /** The `tui.select.*` keybinding ids the adapter panels resolve. */ export type PanelSelectKeybinding = | "tui.select.up" | "tui.select.down" | "tui.select.confirm"; /** Structural subset of pi-tui's `KeybindingsManager` (which satisfies it). */ export interface PanelKeybindings { matches(data: string, keybinding: PanelSelectKeybinding): boolean; } /** * Key matchers for list navigation: user's `tui.select.*` bindings when a * manager is provided, otherwise the previous hardcoded defaults. */ export interface PanelKeys { selectUp(data: string): boolean; selectDown(data: string): boolean; selectConfirm(data: string): boolean; } export function createPanelKeys(keybindings?: PanelKeybindings): PanelKeys { if (keybindings) { return { selectUp: (data) => keybindings.matches(data, "tui.select.up"), selectDown: (data) => keybindings.matches(data, "tui.select.down"), selectConfirm: (data) => keybindings.matches(data, "tui.select.confirm"), }; } return { selectUp: (data) => matchesKey(data, "up"), selectDown: (data) => matchesKey(data, "down"), selectConfirm: (data) => matchesKey(data, "return"), }; }