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 (
>
}
>
)
}
interface BrowserCoreEditorModalProps {
open: boolean
coreForm: BrowserCoreInput
coreValidation: { valid: boolean; message: string } | null
savingCore: boolean
onClose: () => void
onSave: () => void
onValidate: () => void
onCoreFormChange: (patch: Partial) => void
}
export function BrowserCoreEditorModal({
open,
coreForm,
coreValidation,
savingCore,
onClose,
onSave,
onValidate,
onCoreFormChange,
}: BrowserCoreEditorModalProps) {
return (
>
}
>
)
}