diff --git a/frontend/src/components/viewer/EmbedPdfViewer.tsx b/frontend/src/components/viewer/EmbedPdfViewer.tsx index cd1c5ece4..89eb08738 100644 --- a/frontend/src/components/viewer/EmbedPdfViewer.tsx +++ b/frontend/src/components/viewer/EmbedPdfViewer.tsx @@ -28,7 +28,11 @@ const EmbedPdfViewerContent = ({ const { colorScheme } = useMantineColorScheme(); const viewerRef = React.useRef(null); const [isViewerHovered, setIsViewerHovered] = React.useState(false); - const { isThumbnailSidebarVisible, toggleThumbnailSidebar, zoomActions, spreadActions, panActions: _panActions, rotationActions: _rotationActions } = useViewer(); + const { isThumbnailSidebarVisible, toggleThumbnailSidebar, zoomActions, spreadActions, panActions: _panActions, rotationActions: _rotationActions, getScrollState, getZoomState, getSpreadState } = useViewer(); + + const scrollState = getScrollState(); + const zoomState = getZoomState(); + const spreadState = getSpreadState(); // Get current file from FileContext @@ -71,28 +75,13 @@ const EmbedPdfViewerContent = ({ event.preventDefault(); event.stopPropagation(); -<<<<<<< HEAD if (event.deltaY < 0) { // Scroll up - zoom in zoomActions.zoomIn(); } else { // Scroll down - zoom out zoomActions.zoomOut(); -======= - // Convert smooth scrolling gestures into discrete notches - accumulator += event.deltaY; - const threshold = 10; - const zoomAPI = window.embedPdfZoom; - if (zoomAPI) { - if (accumulator <= -threshold) { - zoomAPI.zoomIn(); - accumulator = 0; - } else if (accumulator >= threshold) { - zoomAPI.zoomOut(); - accumulator = 0; - } ->>>>>>> 81c5d8ff46dcc5fc983109fb2348b6d6dfb129d2 } } }; @@ -131,17 +120,6 @@ const EmbedPdfViewerContent = ({ }; }, [isViewerHovered]); -<<<<<<< HEAD -======= - // Expose toggle functions globally for right rail buttons - React.useEffect(() => { - window.toggleThumbnailSidebar = toggleThumbnailSidebar; - - return () => { - delete window.toggleThumbnailSidebar; - }; - }, [toggleThumbnailSidebar]); ->>>>>>> 81c5d8ff46dcc5fc983109fb2348b6d6dfb129d2 return (
{ // Placeholder - will implement page navigation later console.log('Navigate to page:', page); }} - dualPage={false} + dualPage={spreadState.isDualPage} onDualPageToggle={() => { spreadActions.toggleSpreadMode(); }} - currentZoom={100} + currentZoom={zoomState.zoomPercent} />
diff --git a/frontend/src/components/viewer/LocalEmbedPDF.tsx b/frontend/src/components/viewer/LocalEmbedPDF.tsx index a334badcb..ac090cccd 100644 --- a/frontend/src/components/viewer/LocalEmbedPDF.tsx +++ b/frontend/src/components/viewer/LocalEmbedPDF.tsx @@ -231,16 +231,13 @@ export function LocalEmbedPDF({ file, url, colorScheme }: LocalEmbedPDFProps) { onDrop={(e) => e.preventDefault()} onDragOver={(e) => e.preventDefault()} > - {/* 1. Low-resolution base layer for immediate feedback */} - - - {/* 2. High-resolution tile layer on top */} + {/* High-resolution tile layer */} - {/* 3. Search highlight layer */} + {/* Search highlight layer */} - {/* 4. Selection layer for text interaction */} + {/* Selection layer for text interaction */} diff --git a/frontend/src/components/viewer/PanAPIBridge.tsx b/frontend/src/components/viewer/PanAPIBridge.tsx index 7cff83c98..26e8c73ee 100644 --- a/frontend/src/components/viewer/PanAPIBridge.tsx +++ b/frontend/src/components/viewer/PanAPIBridge.tsx @@ -39,7 +39,7 @@ export function PanAPIBridge() { } }); } - }, [pan, isPanning, registerBridge]); + }, [pan, isPanning]); return null; } diff --git a/frontend/src/components/viewer/PdfViewerToolbar.tsx b/frontend/src/components/viewer/PdfViewerToolbar.tsx index 41a40a7fa..ad7f1e869 100644 --- a/frontend/src/components/viewer/PdfViewerToolbar.tsx +++ b/frontend/src/components/viewer/PdfViewerToolbar.tsx @@ -33,17 +33,24 @@ export function PdfViewerToolbar({ currentZoom: _currentZoom = 100, }: PdfViewerToolbarProps) { const { t } = useTranslation(); - const { getScrollState, getZoomState, scrollActions, zoomActions } = useViewer(); + const { getScrollState, getZoomState, scrollActions, zoomActions, registerImmediateZoomUpdate } = useViewer(); const scrollState = getScrollState(); const zoomState = getZoomState(); const [pageInput, setPageInput] = useState(scrollState.currentPage || currentPage); + const [displayZoomPercent, setDisplayZoomPercent] = useState(zoomState.zoomPercent || 140); // Update page input when scroll state changes useEffect(() => { setPageInput(scrollState.currentPage); }, [scrollState.currentPage]); + // Register for immediate zoom updates and sync with actual zoom state + useEffect(() => { + registerImmediateZoomUpdate(setDisplayZoomPercent); + setDisplayZoomPercent(zoomState.zoomPercent || 140); + }, [zoomState.zoomPercent, registerImmediateZoomUpdate]); + const handleZoomOut = () => { zoomActions.zoomOut(); }; @@ -204,7 +211,7 @@ export function PdfViewerToolbar({ − - {zoomState.zoomPercent}% + {displayZoomPercent}%