Initial project baseline

This commit is contained in:
2026-07-04 02:40:45 +08:00
commit d5d8caef2f
86 changed files with 15590 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
import { SSEProgress } from '../types';
import { IconCross, IconCheckmark, IconGear } from './Icons';
interface ProgressPanelProps {
progress: SSEProgress | null;
visible: boolean;
}
export default function ProgressPanel({ progress, visible }: ProgressPanelProps) {
if (!visible || !progress) return null;
const isFailed = progress.stage === '生成失败' || progress.stage === '错误';
const isDone = progress.stage === '完成';
return (
<div className="progress-panel" style={isFailed ? { borderColor: 'var(--danger)' } : {}}>
<div className="progress-title">
{isFailed ? <><IconCross /> </> : isDone ? <><IconCheckmark /> </> : <><IconGear /> </>}
</div>
<div className="progress-stage" style={isFailed ? { color: 'var(--danger)' } : {}}>
{progress.stage}
</div>
{!isFailed && (
<div className="progress-bar-track">
<div
className="progress-bar-fill"
style={{
width: `${Math.max(0, Math.min(100, progress.percent))}%`,
background: isDone ? 'var(--success)' : 'var(--accent)',
}}
/>
</div>
)}
<div
className="progress-message"
style={{
color: isFailed ? 'var(--danger)' : 'var(--text-muted)',
whiteSpace: 'pre-wrap',
wordBreak: 'break-all',
lineHeight: 1.5,
marginTop: isFailed ? 8 : 0,
}}
>
{progress.message}
</div>
</div>
);
}