@* DxPdfViewer — zoom fixed to 1.0 for reliable coordinate mapping *@
+ CssClass="sender-editor-pdf-viewer" />
@* Transparent overlay for click capture (active only in placement mode) *@
{
+ const page = currentWrapper.querySelector(".dxbrv-report-preview-content");
+ if (page) {
+ return page;
+ }
+
+ return currentWrapper.querySelector(".dxbrv-report-preview-content-img") ||
+ currentWrapper.querySelector("img.dxbrv-report-preview-content-img") ||
+ currentWrapper.querySelector(".dxbrv-document-surface img");
+ };
+
+ const sync = () => {
+ const currentWrapper = document.getElementById(wrapperId);
+ const currentOverlay = document.getElementById(overlayId);
+
+ if (!currentWrapper || !currentOverlay) {
+ return;
+ }
+
+ const target = findTarget(currentWrapper);
+ if (!target) {
+ currentOverlay.style.left = "0px";
+ currentOverlay.style.top = "0px";
+ currentOverlay.style.width = "0px";
+ currentOverlay.style.height = "0px";
+ return;
+ }
+
+ const wrapperRect = currentWrapper.getBoundingClientRect();
+ const targetRect = target.getBoundingClientRect();
+
+ currentOverlay.style.left = `${targetRect.left - wrapperRect.left + currentWrapper.scrollLeft}px`;
+ currentOverlay.style.top = `${targetRect.top - wrapperRect.top + currentWrapper.scrollTop}px`;
+ currentOverlay.style.width = `${targetRect.width}px`;
+ currentOverlay.style.height = `${targetRect.height}px`;
+ };
+
+ const scheduleSync = () => requestAnimationFrame(sync);
+
+ const observer = new MutationObserver(scheduleSync);
+ observer.observe(wrapper, { childList: true, subtree: true, attributes: true });
+
+ wrapper.addEventListener("scroll", scheduleSync, { passive: true });
+ window.addEventListener("resize", scheduleSync);
+
+ window.envelopeEditor._overlaySyncState[overlayId] = {
+ sync,
+ observer
+ };
+
+ sync();
+ setTimeout(sync, 50);
+ setTimeout(sync, 150);
+ setTimeout(sync, 400);
}
};