fix: lock stored selection during modal - prevents mouseup from resetting on Replace click
Some checks failed
CI — Test & Build / Test & Build (push) Failing after 44s

This commit is contained in:
Forge
2026-03-06 14:15:41 +08:00
parent a3072dadfb
commit 1936d6a7b5
2 changed files with 7 additions and 0 deletions

View File

@@ -16,9 +16,13 @@ export default defineContentScript({
let storedElement: HTMLTextAreaElement | HTMLInputElement | null = null;
let storedRange: Range | null = null;
// Lock flag — prevents mouseup from resetting stored selection while modal is open
let selectionLocked = false;
// ─── Selection capture (called immediately on mouseup) ────────────────────
function captureSelectionNow(): boolean {
if (selectionLocked) return true; // selection is locked — don't reset
const el = document.activeElement;
// 1) textarea / input — grab positions while they're still valid
@@ -247,6 +251,7 @@ export default defineContentScript({
async function runAction(action: string) {
if (!selectedText) return;
const textToProcess = selectedText;
selectionLocked = true; // lock stored selection — modal interaction won't reset it
// Guard: extension may have been reloaded/updated
if (!isExtensionValid()) {
@@ -404,6 +409,7 @@ export default defineContentScript({
replaceBtn.addEventListener('mousedown', (e) => e.preventDefault()); // keep stored selection intact
replaceBtn.addEventListener('click', () => {
replaceText(resultText);
selectionLocked = false; // unlock after replace
overlay.remove();
modal!.remove();
modal = null;
@@ -443,6 +449,7 @@ export default defineContentScript({
cursor: 'pointer',
});
dismissBtn.addEventListener('click', () => {
selectionLocked = false; // unlock on dismiss
overlay.remove();
modal!.remove();
modal = null;

Binary file not shown.