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

@@ -4,8 +4,10 @@
import { api } from '$lib/api';
import { addToast } from '$lib/stores/ui';
import DocumentCard from '$lib/components/DocumentCard.svelte';
import PreviewPanel from '$lib/components/PreviewPanel.svelte';
let documents = $state([]);
let selectedDoc = $state(null);
let total = $state(0);
let loading = $state(true);
let searchQuery = $state('');
@@ -29,6 +31,8 @@
searchQuery = urlQ;
searchMode = urlMode;
selectedDoc = null; // 필터 변경 시 선택 해제
if (urlQ) {
doSearch(urlQ, urlMode);
} else {
@@ -112,9 +116,15 @@
let totalPages = $derived(Math.ceil(total / 20));
let items = $derived(searchResults || documents);
let hasActiveFilters = $derived(!!filterDomain || !!filterSubGroup || !!searchQuery);
function selectDoc(doc) {
selectedDoc = selectedDoc?.id === doc.id ? null : doc;
}
</script>
<div class="p-4 lg:p-6">
<div class="flex h-full">
<!-- 문서 목록 영역 -->
<div class="flex-1 overflow-y-auto p-4 lg:p-6">
<!-- 검색바 + 필터 상태 -->
<div class="flex gap-2 mb-4">
<input
@@ -183,7 +193,12 @@
{:else}
<div class="space-y-1.5">
{#each items as doc}
<DocumentCard {doc} showDomain={!filterDomain} />
<DocumentCard
{doc}
showDomain={!filterDomain}
selected={selectedDoc?.id === doc.id}
onselect={selectDoc}
/>
{/each}
</div>
@@ -203,3 +218,11 @@
{/if}
{/if}
</div>
<!-- 프리뷰 패널 (데스크톱만) -->
{#if selectedDoc}
<div class="hidden lg:block shrink-0" style="width: 360px">
<PreviewPanel doc={selectedDoc} onclose={() => selectedDoc = null} />
</div>
{/if}
</div>