From 305ae9b322d200faaaa7127419938ca84c8a5f04 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Thu, 16 Apr 2026 12:35:04 +0900 Subject: [PATCH] =?UTF-8?q?feat(ui):=20Phase=20D.6~D.7=20=E2=80=94=20Analy?= =?UTF-8?q?sisPanel=20+=20=EB=AC=B8=EC=84=9C=20=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit D.6: AnalysisPanel 컴포넌트 — 기본 접힌 상태 + '이 문서 분석' 버튼 - POST /documents/{id}/analyze 호출 - docId 변경 시 state 완전 리셋 ($effect) - 층별 렌더 (근거/해설/사례/요약, 없는 층 생략) - 에러 통일 문구 + 재시도/재분석 버튼 D.7: 문서 상세 페이지 우측 editors stack에 Card 래핑으로 삽입 - AIClassificationEditor 다음, FileInfoView 이전 - DocumentViewer / PreviewPanel 변경 없음 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/lib/components/AnalysisPanel.svelte | 120 ++++++++++++++++++ .../src/routes/documents/[id]/+page.svelte | 4 + 2 files changed, 124 insertions(+) create mode 100644 frontend/src/lib/components/AnalysisPanel.svelte diff --git a/frontend/src/lib/components/AnalysisPanel.svelte b/frontend/src/lib/components/AnalysisPanel.svelte new file mode 100644 index 0000000..8181dc5 --- /dev/null +++ b/frontend/src/lib/components/AnalysisPanel.svelte @@ -0,0 +1,120 @@ + + + +
+
+

+ + 이드 분석 +

+ {#if data?.cached} + 캐시 + {/if} +
+ + {#if !data && !loading && !error} + + +

+ 약 10초 소요. 문서 전문을 Gemma 4로 구조화합니다. +

+ {:else if loading} +
+ + + + +
+

+ + 분석 중… +

+ {:else if error} +

{error}

+ + {:else if data} +
+ {#each data.layers as layer} +
+

+ {layer.title} +

+

+ {layer.content} +

+
+ {/each} +
+ {#if data.truncated} +

+ 원문이 15,000자를 초과하여 앞부분만 분석했습니다. +

+ {/if} +
+ + {Math.round(data.elapsed_ms)}ms · {data.layers.length}개 층 + + +
+ {/if} +
diff --git a/frontend/src/routes/documents/[id]/+page.svelte b/frontend/src/routes/documents/[id]/+page.svelte index 34f8e85..dabd921 100644 --- a/frontend/src/routes/documents/[id]/+page.svelte +++ b/frontend/src/routes/documents/[id]/+page.svelte @@ -22,6 +22,7 @@ import ProcessingStatusView from '$lib/components/editors/ProcessingStatusView.svelte'; import LibraryPathEditor from '$lib/components/editors/LibraryPathEditor.svelte'; import DocumentDangerZone from '$lib/components/editors/DocumentDangerZone.svelte'; + import AnalysisPanel from '$lib/components/AnalysisPanel.svelte'; marked.use({ mangle: false, headerIds: false }); function renderMd(text) { @@ -244,6 +245,9 @@ + + +