import React from 'react'; import { DropdownMenu, DropdownMenuContent, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { RiArrowDownSLine, RiFolderLine } from '@remixicon/react'; import { useProjectsStore } from '@/stores/useProjectsStore'; import { isVSCodeRuntime } from '@/lib/desktop'; import { cn } from '@/lib/utils'; const formatProjectLabel = (label: string): string => { return label.replace(/[-_]/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase()); }; export const SettingsProjectSelector: React.FC<{ className?: string }> = ({ className }) => { const projects = useProjectsStore((state) => state.projects); const activeProjectId = useProjectsStore((state) => state.activeProjectId); const setActiveProject = useProjectsStore((state) => state.setActiveProject); const isVSCode = React.useMemo(() => isVSCodeRuntime(), []); const sortedProjects = React.useMemo(() => { return [...projects].sort((a, b) => (a.label || a.path).localeCompare(b.label || b.path)); }, [projects]); const activeProject = React.useMemo(() => { if (sortedProjects.length === 0) { return null; } return sortedProjects.find((p) => p.id === activeProjectId) ?? sortedProjects[0]; }, [activeProjectId, sortedProjects]); if (isVSCode || sortedProjects.length === 0) { return null; } const rawLabel = activeProject?.label && activeProject.label.trim().length > 0 ? activeProject.label : (activeProject?.path.split('/').filter(Boolean).pop() || activeProject?.path || 'Project'); const label = formatProjectLabel(rawLabel); return (