@@ -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",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
|||||||
Reference in New Issue
Block a user