import { useState } from "react"; import { ChevronDown, ChevronUp, Loader2 } from "lucide-react"; import { Button } from "../ui/button"; import { Popover, PopoverContent, PopoverTrigger } from "../ui/popover"; import { ModelSelectorPicker } from "./ModelSelectorPicker"; import type { ACPClient } from "../../src/acp/client"; import type { ModelInfo } from "../../src/acp/types"; import { useModels } from "../../src/hooks/useModels"; interface ModelSelectorPopoverProps { /** ACPClient instance for model state management */ client: ACPClient; /** Callback when a model is selected */ onModelSelect?: (modelId: string) => void; } /** * Model selector popover component. * Reference: Zed's AcpModelSelectorPopover that shows current model and allows switching. */ export function ModelSelectorPopover({ client, onModelSelect, }: ModelSelectorPopoverProps) { const [open, setOpen] = useState(false); const { supportsModelSelection, availableModels, currentModel, setModel, isLoading, } = useModels(client); // Always show the button — disable dropdown when no models available const hasModels = supportsModelSelection && availableModels.length > 0; // Check if we're on a mobile device (touch-only) const isMobile = typeof window !== "undefined" && window.matchMedia("(hover: none) and (pointer: coarse)").matches; const handleSelect = async (model: ModelInfo) => { try { await setModel(model.modelId); onModelSelect?.(model.modelId); setOpen(false); } catch (error) { console.error("[ModelSelector] Failed to set model:", error); } }; return ( ); }