many fixes

This commit is contained in:
2026-07-03 11:18:40 +07:00
parent d909618ced
commit 79fd200e57
12 changed files with 348 additions and 18 deletions
+14 -7
View File
@@ -330,7 +330,7 @@ export function TaskDetail({ id }: { id: number }) {
<div className="panel">
<span className="panel-label">Run control</span>
<div className="stat-row">
<div className="stat-row" aria-live="polite">
<div className="stat ok">
<span className="val mono-num">{totals.copied}</span>
<span className="lbl">copied</span>
@@ -348,7 +348,7 @@ export function TaskDetail({ id }: { id: number }) {
<span className="lbl">accounts</span>
</div>
</div>
{error && <div className="error-banner">{error}</div>}
{error && <div className="error-banner" role="alert">{error}</div>}
<div className="btn-row" style={{ marginTop: 16 }}>
<button className="btn" onClick={onTest} disabled={busy !== null || accounts.length === 0}>
{busy === 'test' ? 'Testing…' : 'Test connections'}
@@ -415,10 +415,10 @@ export function TaskDetail({ id }: { id: number }) {
<div className="divider-label">or bulk import</div>
<div className="upload-row">
<button className="btn file-btn" disabled={busy !== null}>
<label className={`btn file-btn${busy !== null ? ' is-disabled' : ''}`}>
{busy === 'import' ? 'Importing…' : 'Upload CSV'}
<input ref={fileInputRef} type="file" accept=".csv,text/csv" onChange={onFileChosen} disabled={busy !== null} />
</button>
</label>
<button type="button" className="link-btn" onClick={downloadExampleCSV}>
download example.csv
</button>
@@ -432,7 +432,7 @@ export function TaskDetail({ id }: { id: number }) {
clear log
</button>
)}
<div className="log-pane">
<div className="log-pane" role="log" aria-live="polite" aria-relevant="additions" aria-label="Event log">
{log.length === 0 ? (
<div className="log-empty">awaiting events over websocket</div>
) : (
@@ -501,8 +501,15 @@ export function TaskDetail({ id }: { id: number }) {
const scanning = lv.scanned != null && lv.scanTotal != null && lv.scanned < lv.scanTotal
return (
<div className="acct-progress">
<div className="pbar">
<span className="pbar-fill" style={{ width: `${pct}%` }} />
<div
className="pbar"
role="progressbar"
aria-valuenow={pct}
aria-valuemin={0}
aria-valuemax={100}
aria-label={`Copy progress${lv.folder ? `: ${lv.folder}` : ''}`}
>
<span className="pbar-fill" style={{ transform: `scaleX(${pct / 100})` }} />
</div>
<span className="pmeta mono-num">
{done}/{lv.total} ({pct}%) · {lv.speed >= 1 ? Math.round(lv.speed) : lv.speed.toFixed(1)}/s · ETA {fmtDuration(eta)}