diff --git a/ui_template/ui_template_elements.ts b/ui_template/ui_template_elements.ts index 4bd498b4..40285e34 100644 --- a/ui_template/ui_template_elements.ts +++ b/ui_template/ui_template_elements.ts @@ -318,17 +318,26 @@ export function showConfirmDialog(message: string, confirmLabel = "확인"): Pro const panel = el("div", { className: "ui-confirm__panel" }); const text = el("p", { className: "ui-confirm__message", text: message }); const actions = el("div", { className: "ui-confirm__actions" }); + const back = document.activeElement as HTMLElement | null; // 닫힐 때 초점을 돌려놓을 자리 const done = (result: boolean): void => { overlay.remove(); + if (back?.isConnected && back !== document.body) back.focus({ preventScroll: true }); resolve(result); }; + const cancel = createButton({ label: "취소", variant: "ghost", onClick: () => done(false) }); actions.append( - createButton({ label: "취소", variant: "ghost", onClick: () => done(false) }), + cancel, createButton({ label: confirmLabel, variant: "danger", onClick: () => done(true) }), ); + overlay.addEventListener("keydown", (ev) => { + if (ev.key !== "Escape") return; + ev.stopPropagation(); // 뒤 창 · 페이지 Esc 까지 닫지 않음 + done(false); + }); panel.append(text, actions); overlay.append(panel); document.body.append(overlay); + cancel.focus(); // 창에 초점 — 뒤 칸에 글이 들어가지 않고 Esc 가 먹음 }); }