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
Some checks failed
CI — Test & Build / Test & Build (push) Failing after 44s
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user