From 1006ad11eaef48dd09ccddd44d28941879b103bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AF=BC=ED=97=8C?= Date: Mon, 13 Jul 2026 22:58:51 +0900 Subject: [PATCH] =?UTF-8?q?style(design):=20FINDING-012=20=E2=80=94=20?= =?UTF-8?q?=EC=A0=91=EA=B7=BC=EC=84=B1=20=ED=86=B5=EC=9D=BC:=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=EB=9D=BC=EB=B2=A8=C2=B7=ED=96=89=20=ED=82=A4?= =?UTF-8?q?=EB=B3=B4=EB=93=9C=20=EC=84=A0=ED=83=9D=C2=B7=EC=9D=B4=EB=AA=A8?= =?UTF-8?q?=EC=A7=80=20=EC=88=A8=EA=B9=80=20[subagent]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Settings 는 label 연결이 모범인데 Jobs/Products 검색 인풋만 접근 가능한 이름이 없었고, Products 목록(button)과 달리 Jobs 행(tr onClick) 은 키보드로 선택 불가였다. aria-label 2곳, tr tabIndex+Enter/Space 핸들러+focus-visible, 장식 이모지(⚠✓🎉) aria-hidden 처리. Co-Authored-By: Claude Fable 5 --- lps-admin/src/pages/Crawl.tsx | 6 +++--- lps-admin/src/pages/Dashboard.tsx | 4 ++-- lps-admin/src/pages/Jobs.tsx | 8 +++++--- lps-admin/src/pages/Products.tsx | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lps-admin/src/pages/Crawl.tsx b/lps-admin/src/pages/Crawl.tsx index 597ce66..64036e7 100644 --- a/lps-admin/src/pages/Crawl.tsx +++ b/lps-admin/src/pages/Crawl.tsx @@ -66,11 +66,11 @@ export default function Crawl() { {ip.data && ( blockCount === 0 ? (

- ✓ 기간 내 차단된 IP 세션 0건 — 요청 예산(선제 회전)이 잘 작동하고 있습니다 + ✓ 기간 내 차단된 IP 세션 0건 — 요청 예산(선제 회전)이 잘 작동하고 있습니다

) : (

- ⚠ 예산 안에서도 차단된 세션 {blockCount}건 — 최소 {ip.data.block_min_requests}회 요청에서 차단됐습니다. + ⚠ 예산 안에서도 차단된 세션 {blockCount}건 — 최소 {ip.data.block_min_requests}회 요청에서 차단됐습니다. 요청 예산을 그보다 낮게 유지하세요(현재 서버 설정은 toml [DecodoConfig].ip_request_budget)

) @@ -139,7 +139,7 @@ export default function Crawl() { {bot.isPending && } {bot.isError && } - {bot.data && bot.data.hourly.length === 0 && 기간 내 차단 없음 🎉} + {bot.data && bot.data.hourly.length === 0 && 기간 내 차단 없음 🎉} {bot.data && bot.data.hourly.length > 0 && ( ({ ...h, x: dateShort(h.bucket) }))} margin={{ top: 6, right: 12, bottom: 0, left: -22 }}> diff --git a/lps-admin/src/pages/Dashboard.tsx b/lps-admin/src/pages/Dashboard.tsx index 09a6b74..2c1c279 100644 --- a/lps-admin/src/pages/Dashboard.tsx +++ b/lps-admin/src/pages/Dashboard.tsx @@ -51,12 +51,12 @@ export default function Dashboard() { {alerts.map((a) => (

- ⚠ {a.msg} + ⚠ {a.msg}

))} {d && alerts.length === 0 && (

- ✓ 모든 지표가 임계 안에 있습니다 + ✓ 모든 지표가 임계 안에 있습니다

)} diff --git a/lps-admin/src/pages/Jobs.tsx b/lps-admin/src/pages/Jobs.tsx index db3b48c..e80ab9f 100644 --- a/lps-admin/src/pages/Jobs.tsx +++ b/lps-admin/src/pages/Jobs.tsx @@ -51,7 +51,7 @@ export default function Jobs() { ))}
{ e.preventDefault(); setQ(qInput.trim()); setPage(0); }}> - setQInput(e.target.value)} placeholder="상품코드·상품명 검색" + setQInput(e.target.value)} placeholder="상품코드·상품명 검색" aria-label="상품코드·상품명 검색" className="w-56 rounded-lg border border-line-200 bg-surface px-3 py-1.5 text-[13px] outline-none focus:border-primary-600" />
@@ -77,8 +77,10 @@ export default function Jobs() { {list.data.items.map((j) => ( - setSelected(j)} - className={`cursor-pointer border-b border-line-100 hover:bg-surface-2 ${selected?.job_id === j.job_id ? "bg-primary-50/60" : ""}`}> + setSelected(j)} tabIndex={0} + onKeyDown={(e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); setSelected(j); } }} + aria-selected={selected?.job_id === j.job_id} + className={`cursor-pointer border-b border-line-100 hover:bg-surface-2 focus-visible:bg-primary-50/60 ${selected?.job_id === j.job_id ? "bg-primary-50/60" : ""}`}>
{j.product_name || "—"}
{j.product_code}
diff --git a/lps-admin/src/pages/Products.tsx b/lps-admin/src/pages/Products.tsx index 55491d3..6823183 100644 --- a/lps-admin/src/pages/Products.tsx +++ b/lps-admin/src/pages/Products.tsx @@ -32,7 +32,7 @@ export default function Products() {

상품·가격

{ e.preventDefault(); setQ(qInput.trim()); }}> - setQInput(e.target.value)} placeholder="상품코드 검색" + setQInput(e.target.value)} placeholder="상품코드 검색" aria-label="상품코드 검색" className="w-64 rounded-lg border border-line-200 bg-surface px-3 py-1.5 text-[13px] outline-none focus:border-primary-600" />