feat: Phase 1C — 프리뷰 패널 (문서 선택 시 우측 표시)

- PreviewPanel: AI 요약, 태그, 메타 정보, 처리 상태 표시
- DocumentCard: 선택 모드 지원 (클릭→프리뷰, 더블클릭 불필요)
- 3-pane 완성: sidebar | document list | preview panel
- 필터 변경 시 선택 자동 해제
- 데스크톱만 표시 (모바일은 detail 페이지로 이동)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-04-03 09:11:13 +09:00
parent f4a0229f15
commit a15208f0cf
3 changed files with 153 additions and 7 deletions

View File

@@ -2,7 +2,7 @@
import FormatIcon from './FormatIcon.svelte';
import TagPill from './TagPill.svelte';
let { doc, showDomain = true } = $props();
let { doc, showDomain = true, selected = false, onselect = null } = $props();
function formatDate(dateStr) {
if (!dateStr) return '';
@@ -23,9 +23,13 @@
}
</script>
<a
href="/documents/{doc.id}"
class="flex items-start gap-3 p-3 bg-[var(--surface)] border border-[var(--border)] rounded-lg hover:border-[var(--accent)] transition-colors group"
{@const Tag = onselect ? 'button' : 'a'}
<svelte:element
this={Tag}
href={onselect ? undefined : `/documents/${doc.id}`}
onclick={onselect ? (e) => { e.preventDefault(); onselect(doc); } : undefined}
class="flex items-start gap-3 p-3 bg-[var(--surface)] border rounded-lg hover:border-[var(--accent)] transition-colors group w-full text-left
{selected ? 'border-[var(--accent)] bg-[var(--accent)]/5' : 'border-[var(--border)]'}"
>
<!-- 포맷 아이콘 -->
<div class="shrink-0 mt-0.5 text-[var(--text-dim)] group-hover:text-[var(--accent)]">
@@ -76,4 +80,4 @@
<span class="text-[var(--text-dim)]">{formatSize(doc.file_size)}</span>
{/if}
</div>
</a>
</svelte:element>