feat: PDF support + Split View (P1 roadmap items)

#74 — Support PDF complet:
- backend/pdf_reader.py — pymupdf/pypdf text extraction
- .pdf added to SUPPORTED_EXTENSIONS in indexer.py
- PDF-aware file view API endpoint (metadata, text preview)
- Streaming endpoint /api/file/{vault}/pdf/stream
- Frontend PDF viewer with iframe, toolbar, download
- CSS for PDF viewer container

#75 — Split View (PaneManager):
- New module frontend/js/pane-manager.js — ES module
- 1-4 pane CSS grid with resize handles
- Split right/down via keyboard (Ctrl+Alt+\) or PaneManager API
- Persistence in localStorage (obsigate-panes)
- Collapse to single pane, per-pane active state

285 tests passent
This commit is contained in:
2026-07-23 17:33:51 -04:00
parent 5b956f8d95
commit 93d0bda627
8 changed files with 506 additions and 19 deletions
+57
View File
@@ -8428,3 +8428,60 @@ body.popup-mode .content-area {
font-size: 0.62rem; color: var(--text-muted); opacity: 0.5;
}
.about-copy code { font-family: var(--mono); font-size: 0.58rem; }
/* ── PDF Viewer ── */
.pdf-viewer-container {
display: flex;
flex-direction: column;
height: 100%;
}
.pdf-toolbar {
display: flex;
align-items: center;
gap: 8px;
padding: 8px 16px;
background: var(--surface1);
border-bottom: 1px solid var(--border);
font-size: 0.85rem;
flex-shrink: 0;
}
.pdf-info {
flex: 1;
color: var(--text-dim);
}
.pdf-iframe {
flex: 1;
width: 100%;
border: none;
min-height: 70vh;
}
/* ── PaneManager — Split View ── */
.pane-grid {
display: grid;
height: 100%;
overflow: hidden;
}
.pane-container {
display: flex;
flex-direction: column;
overflow: hidden;
position: relative;
}
.pane-container.pane-active {
outline: 2px solid var(--accent);
outline-offset: -2px;
z-index: 1;
}
.pane-tab-bar { flex-shrink: 0; }
.pane-content { flex: 1; overflow-y: auto; }
.pane-resize-handle {
background: var(--border);
transition: background 150ms;
min-width: 4px;
min-height: 4px;
z-index: 2;
}
.pane-resize-handle:hover {
background: var(--accent);
}