export function initSelectionListener(dotNetHelper, container) { if (!container) return; console.log("[SelectionHandler] Initializing..."); const handleSelection = () => { const selection = window.getSelection(); const text = selection.toString().trim(); if (text.length > 3) { const range = selection.getRangeAt(0); // Look for the closest block-wrapper let node = range.commonAncestorContainer; if (node.nodeType !== 1) node = node.parentElement; const blockNode = node.closest('[id]'); if (blockNode) { const rect = range.getBoundingClientRect(); console.log("[SelectionHandler] Selection at screen coords:", rect.top, rect.left); dotNetHelper.invokeMethodAsync('HandleTextSelected', text, blockNode.id, { Top: rect.top, Left: rect.left, Width: rect.width }); } } else { dotNetHelper.invokeMethodAsync('HandleSelectionCleared'); } }; // Use multiple triggers for maximum reliability document.addEventListener('selectionchange', handleSelection); container.addEventListener('mouseup', () => setTimeout(handleSelection, 10)); }