import React, { useState, useCallback, useMemo, useRef } from 'react'; import PreviewZoomOverlay from './components/PreviewZoomOverlay'; import type { Document } from '../types/documents'; import type { Identifier } from '../types/identifiers'; import { createSafeContext } from '../utils/createSafeContext'; interface PreviewContextType { openPreview: (doc: Document) => void; closePreview: () => void; } const [PreviewContext, usePreviewContext] = createSafeContext('Preview'); interface PreviewProviderProps { children: React.ReactNode; onNavigate?: (documentId: Identifier) => void; } export const PreviewProvider: React.FC = ({ children, onNavigate }) => { const [previewDoc, setPreviewDoc] = useState(null); const lastFocusedElement = useRef(null); const openPreview = useCallback((doc: Document) => { if (!lastFocusedElement.current) { lastFocusedElement.current = document.activeElement as HTMLElement; } setPreviewDoc(doc); }, []); const closePreview = useCallback(() => { setPreviewDoc(null); if (lastFocusedElement.current) { lastFocusedElement.current.focus(); lastFocusedElement.current = null; } }, []); const handleMaximize = useCallback(() => { if (previewDoc && onNavigate) { onNavigate(previewDoc.id); closePreview(); } }, [previewDoc, onNavigate, closePreview]); const value = useMemo(() => ({ openPreview, closePreview, }), [openPreview, closePreview]); return ( {children} ); }; export { usePreviewContext };