mirror of
https://github.com/quartz-community/utils.git
synced 2026-07-22 02:50:27 +00:00
fix: event listeners
This commit is contained in:
parent
61970ce89f
commit
9520e0dcf9
1 changed files with 7 additions and 12 deletions
19
src/dom.ts
19
src/dom.ts
|
|
@ -10,25 +10,20 @@ export function registerEscapeHandler(
|
|||
): () => void {
|
||||
if (!outsideContainer) return () => {};
|
||||
|
||||
const onKeydown = (e: KeyboardEvent) => {
|
||||
if (e.key === "Escape") {
|
||||
e.preventDefault();
|
||||
onEscape();
|
||||
}
|
||||
};
|
||||
|
||||
// Click handler: only trigger when clicking directly on the container backdrop,
|
||||
// not when clicking on children or elements outside
|
||||
const onClick = (e: MouseEvent) => {
|
||||
if (e.target instanceof Node && !outsideContainer.contains(e.target)) {
|
||||
if (e.target === outsideContainer) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
onEscape();
|
||||
}
|
||||
};
|
||||
|
||||
document.addEventListener("keydown", onKeydown);
|
||||
document.addEventListener("click", onClick);
|
||||
outsideContainer.addEventListener("click", onClick);
|
||||
|
||||
return () => {
|
||||
document.removeEventListener("keydown", onKeydown);
|
||||
document.removeEventListener("click", onClick);
|
||||
outsideContainer.removeEventListener("click", onClick);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue