import {type Component, For, Show, createEffect, on} from "solid-js"; import type { CompletionItem } from "./types"; export interface CommanderInputProps { placeholder?: string; inputValue: () => string; onInput: (e: Event) => void; onKeyDown: (e: KeyboardEvent) => void; onFocus: () => void; onBlur: () => void; onSubmit: () => void; showCompletions: () => boolean; completions: () => CompletionItem[]; selectedCompletion: () => number; onSelectCompletion: (idx: number) => void; onAcceptCompletion: () => void; } export const CommanderInput: Component = (props) => { let containerRef: HTMLDivElement | undefined; // 当选中项变化时自动滚动到可见区域 createEffect( on( () => props.selectedCompletion(), () => { if (containerRef) { const selectedItem = containerRef.querySelector('[data-selected="true"]'); if (selectedItem) { selectedItem.scrollIntoView({ block: "nearest" }); } } }, ), ); const maxVisible = 3; return (
❯ {/* 自动补全下拉框 - 向上弹出 */} 0}>
{(comp, idx) => (
{ props.onSelectCompletion(idx()); props.onAcceptCompletion(); }} >
{comp.type} {comp.label}
{comp.description}
)}
); };