import { Link } from 'react-router-dom' import { Archive, CheckCircle, ChevronRight, ChevronUp, Edit2, LayoutGrid, List, Play, Plus, RefreshCw, Sliders, Star, Trash2, Upload, XCircle } from 'lucide-react' import { Button, Card, FormItem, Input, Modal, Switch, Table, Textarea } from '../../../shared/components' import type { TableColumn } from '../../../shared/components/Table' import type { BrowserCore, BrowserCoreInput, BrowserGroupWithCount, BrowserProxy, BrowserSettings } from '../types' import { InstanceFilterBar } from './InstanceFilterBar' import type { InstanceFilters } from './InstanceFilterBar' export type BrowserViewMode = 'card' | 'table' interface BrowserListHeaderProps { profileCount: number filteredProfileCount: number runningCount: number headerCollapsed: boolean viewMode: BrowserViewMode proxies: BrowserProxy[] cores: BrowserCore[] groups: BrowserGroupWithCount[] allTags: string[] filters: InstanceFilters onFiltersChange: (next: InstanceFilters) => void onToggleHeaderCollapsed: () => void onRefresh: () => void onOpenSettings: () => void onOpenTrash: () => void onImportProfiles: () => void onOpenBackup: () => void importingProfiles?: boolean onViewModeChange: (next: BrowserViewMode) => void } export function BrowserListHeader({ profileCount, filteredProfileCount, runningCount, headerCollapsed, viewMode, proxies, cores, groups, allTags, filters, onFiltersChange, onToggleHeaderCollapsed, onRefresh, onOpenSettings, onOpenTrash, onImportProfiles, onOpenBackup, importingProfiles = false, onViewModeChange, }: BrowserListHeaderProps) { const statItems = [ { label: '总数', value: profileCount }, { label: '运行', value: runningCount }, { label: '停止', value: Math.max(0, profileCount - runningCount) }, ] return ( <>

实例列表

{statItems.map((item) => (
{item.label} {item.value}
))} {filteredProfileCount !== profileCount && (
筛选 {filteredProfileCount}
)}
{!headerCollapsed && ( )} ) } interface BrowserListSettingsModalProps { open: boolean settings: BrowserSettings fingerprintText: string launchText: string startUrlsText: string savingSettings: boolean cores: BrowserCore[] onClose: () => void onSave: () => void onSettingsChange: (patch: Partial) => void onFingerprintTextChange: (next: string) => void onLaunchTextChange: (next: string) => void onStartUrlsTextChange: (next: string) => void onAddCore: () => void onEditCore: (core: BrowserCore) => void onDeleteCore: (coreId: string) => void onSetDefaultCore: (coreId: string) => void } export function BrowserListSettingsModal({ open, settings, fingerprintText, launchText, startUrlsText, savingSettings, cores, onClose, onSave, onSettingsChange, onFingerprintTextChange, onLaunchTextChange, onStartUrlsTextChange, onAddCore, onEditCore, onDeleteCore, onSetDefaultCore, }: BrowserListSettingsModalProps) { const coreColumns: TableColumn[] = [ { key: 'coreName', title: '名称' }, { key: 'corePath', title: '路径' }, { key: 'isDefault', title: '默认', render: (value) => (value ? : null), }, { key: 'actions', title: '操作', align: 'right', render: (_, record) => (
{!record.isDefault && ( )}
), }, ] return ( } >
内核管理
onSettingsChange({ userDataRoot: event.target.value })} placeholder="data" />