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 ( ); }