"use client"; import { Popover } from "@base-ui/react/popover"; import { Check, ChevronDown } from "lucide-react"; import { useId, useState } from "react"; import type { KeyboardEvent } from "react"; import type { PublicLanguageModel } from "@/lib/public-models"; type ModelSelectorProps = { readonly models: readonly PublicLanguageModel[]; readonly selectedModelId: string; readonly disabled?: boolean; readonly onSelect: (modelId: string) => void; }; export function ModelSelector({ models, selectedModelId, disabled = false, onSelect, }: ModelSelectorProps) { const [open, setOpen] = useState(false); const groupName = useId(); const selectedModel = models.find((model) => model.id === selectedModelId); const unavailable = models.length === 0; function moveRadioSelection(event: KeyboardEvent, index: number) { const step = event.key === "ArrowDown" || event.key === "ArrowRight" ? 1 : event.key === "ArrowUp" || event.key === "ArrowLeft" ? -1 : 0; if (step === 0 || models.length < 2) return; event.preventDefault(); const nextIndex = (index + step + models.length) % models.length; const nextModel = models[nextIndex]; if (!nextModel) return; onSelect(nextModel.id); setOpen(false); } return ( {selectedModel?.label ?? "暂不可用"} 选择模型
选择当前对话使用的模型 {models.map((model, index) => ( ))}
); }