Skip to content

Commit

Permalink
fix(kit): maskitoCaretGuard should wait for mouseup before execut…
Browse files Browse the repository at this point in the history
…ion (#372)
  • Loading branch information
nsbarsukov authored Jul 18, 2023
1 parent 2250496 commit 8554fea
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions projects/kit/src/lib/plugins/caret-guard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,22 @@ export function maskitoCaretGuard(
): MaskitoPlugin {
return element => {
const document = element.ownerDocument;
let isPointerDown = 0;
const onPointerDown = (): number => isPointerDown++;
const onPointerUp = (): number => isPointerDown--;

const listener = (): void => {
if (getFocused(document) !== element) {
return;
}

if (isPointerDown) {
return document.addEventListener('mouseup', listener, {
once: true,
passive: true,
});
}

const start = element.selectionStart || 0;
const end = element.selectionEnd || 0;
const [fromLimit, toLimit] = guard(element.value, [start, end]);
Expand All @@ -27,8 +38,14 @@ export function maskitoCaretGuard(
}
};

document.addEventListener('selectionchange', listener);
document.addEventListener('selectionchange', listener, {passive: true});
document.addEventListener('mousedown', onPointerDown, {passive: true});
document.addEventListener('mouseup', onPointerUp, {passive: true});

return () => document.removeEventListener('selectionchange', listener);
return () => {
document.removeEventListener('selectionchange', listener);
document.removeEventListener('mousedown', onPointerDown);
document.removeEventListener('mouseup', onPointerUp);
};
};
}

0 comments on commit 8554fea

Please sign in to comment.