메인페이지 탭이동
Deploy Frontend / deploy (push) Successful in 2m54s

This commit is contained in:
2026-10-02 21:52:10 +09:00
parent ff45d1a875
commit 68a800cdfc
3 changed files with 47 additions and 6 deletions
@@ -78,6 +78,15 @@
opacity: 1; opacity: 1;
} }
.svgContainer :global(svg) :global(.basin:focus-visible) {
opacity: 1;
}
.svgContainer :global(svg) :global(.basin:focus-visible) :global(path) {
stroke: #111827;
stroke-width: 2.5;
}
.svgContainer :global(svg) :global(.basin) :global(path), .svgContainer :global(svg) :global(.basin) :global(path),
.svgContainer :global(svg) :global(.basin) :global(polygon), .svgContainer :global(svg) :global(.basin) :global(polygon),
.svgContainer :global(svg) :global(.basin) :global(polyline) { .svgContainer :global(svg) :global(.basin) :global(polyline) {
@@ -265,20 +265,44 @@ export function useNationalAsMap(basinDocPrgrsList: BasinDocPrgrsResponseDto[] |
}; };
groups.forEach((group) => { groups.forEach((group) => {
addListener(group, "mouseenter", () => { group.setAttribute("role", "button");
group.setAttribute("tabindex", "0");
group.setAttribute(
"aria-label",
`${resolveBasinName(group)} 행정지원 현황 보기`,
);
const activateGroup = () => {
clearActive?.(); clearActive?.();
group.classList.add("active"); group.classList.add("active");
revealGroup(group); revealGroup(group);
};
const clearGroupIfInactive = () => {
if (!group.matches(":hover") && document.activeElement !== group) {
clearActive?.();
}
};
addListener(group, "mouseenter", () => {
activateGroup();
}); });
addListener(group, "mousemove", () => { addListener(group, "mousemove", () => {
if (group.classList.contains("active")) revealGroup(group); if (group.classList.contains("active")) revealGroup(group);
}); });
addListener(group, "mouseleave", () => clearActive?.()); addListener(group, "mouseleave", clearGroupIfInactive);
addListener(group, "focus", activateGroup);
addListener(group, "blur", clearGroupIfInactive);
addListener(group, "click", (event) => { addListener(group, "click", (event) => {
event.stopPropagation(); event.stopPropagation();
clearActive?.(); activateGroup();
group.classList.add("active"); });
revealGroup(group); addListener(group, "keydown", (event) => {
const keyboardEvent = event as KeyboardEvent;
if (keyboardEvent.key !== "Enter" && keyboardEvent.key !== " ") {
return;
}
keyboardEvent.preventDefault();
activateGroup();
}); });
}); });
@@ -58,8 +58,16 @@ function DataTable<T>({
<TableRow <TableRow
key={row.id} key={row.id}
onClick={() => onRowClick?.(row.original)} onClick={() => onRowClick?.(row.original)}
onKeyDown={(event) => {
if (event.target !== event.currentTarget) return;
if (event.key !== "Enter" && event.key !== " ") return;
event.preventDefault();
onRowClick?.(row.original);
}}
tabIndex={onRowClick ? 0 : undefined}
className={cn( className={cn(
onRowClick && "cursor-pointer hover:bg-accent", onRowClick &&
"cursor-pointer hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary",
isSelectedRow && "!bg-primary-transparent", isSelectedRow && "!bg-primary-transparent",
)} )}
> >