5acac804a1
Replace fragile 20-iteration retry loop with proper Vue lifecycle management. Changes: - Create PDFViewer.vue component (~200 lines) with: - Proper mounted/beforeUnmount lifecycle hooks - Loading/error/content states - Page navigation controls - PDF document cleanup - User-friendly error messages - Simplify App.vue by removing ~120 lines: - Remove loadPdf() and renderPdfPage() methods - Remove manual DOM polling with $nextTick() loops - Replace PDF template with <PDFViewer> component - Add pdfjs-dist@4.0.379 dependency Result: Canvas found on first attempt instead of requiring 20 retries. Follows patterns from Nextcloud's production files_pdfviewer app and 2025 Vue.js + PDF.js best practices. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>