From 36c6ff8046b60e2a85bea89abc4a00c7f5fbe18e Mon Sep 17 00:00:00 2001 From: hyungi Date: Sun, 7 Jun 2026 17:15:27 +0900 Subject: [PATCH] =?UTF-8?q?feat(ui):=20=EB=AC=B8=EC=84=9C=20/documents=20D?= =?UTF-8?q?EVONthink=20=EC=BB=AC=EB=9F=BC=20=EB=B8=8C=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=EC=A0=80=20=EC=A0=84=EB=A9=B4=20=EC=9E=AC=EC=9E=91=EC=84=B1=20?= =?UTF-8?q?(3-pane=20+=20=EC=9D=B8=EC=8A=A4=ED=8E=99=ED=84=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 확정 시안 documents-confirmed-column-browser 대로 세로 split → 가로 3-pane 재구조화. - 좌: 리스트 컬럼(제목+도메인 / 형식 배지 / 수정일, 제목·수정 정렬, zebra, 선택강조) - 중앙: 리더(DocumentViewer 재사용) + 상단 ⓘ 인스펙터 토글·모바일 뒤로가기 - 우: 인스펙터 인라인(정보 KV · 태그 · See Also · AI 분류, ⓘ 토글) - 모바일: 흐름형(리스트 → 풀스크린 리더 → 정보 Drawer 시트) 기존 검색·모드·AI답변·필터칩·일괄작업(도메인/태그/삭제)·키보드내비·업로드·페이지네이션 전부 흡수. See Also(벡터 유사도)는 엔드포인트 부재(코드 TODO)로 degrade — eid 세션 후 백엔드. Co-Authored-By: Claude Opus 4.8 (1M context) --- frontend/src/routes/documents/+page.svelte | 881 ++++++++------------- 1 file changed, 331 insertions(+), 550 deletions(-) diff --git a/frontend/src/routes/documents/+page.svelte b/frontend/src/routes/documents/+page.svelte index 567708c..bc187f4 100644 --- a/frontend/src/routes/documents/+page.svelte +++ b/frontend/src/routes/documents/+page.svelte @@ -1,13 +1,15 @@ -
- -
- -
- +
+ + +
- -
+ +
{ e.stopPropagation(); toggleRowSelect(doc.id, e.currentTarget.checked); }} + class="mt-1 shrink-0 accent-accent {selectedIds.size > 0 ? 'opacity-100' : 'opacity-0 group-hover:opacity-100'} transition-opacity" + aria-label="선택" + /> + +
+
{doc.title || '제목 없음'}
+
+ {domainLabel(doc.ai_domain)} + {shortDate(doc.updated_at || doc.created_at)} +
+
+ {badge.label} +
+ {/each} + + {#if !searchResults && totalPages > 1} +
+ {#each Array(totalPages) as _, i} + + {/each} +
+ {/if} + {/if} +
+
+ + +
+ {#if selectedDoc} + +
+
- - - +
- {/if} - - -
- - {#if !loading} -
- {total}건 +
+
- {/if} - - - {#if showAskCard} -
+ {:else if showAskCard} +
{ askDismissed = true; }} />
- {/if} - - - {#if loading} -
- {#each Array(5) as _} -
- {/each} -
- {:else if items.length === 0} -
- {#if searchQuery} -

'{searchQuery}'에 대한 결과가 없습니다

- - {:else if hasActiveFilters} -

이 분류에 문서가 없습니다

- - {:else} -

등록된 문서가 없습니다

- {/if} -
{:else} - {#if viewMode === 'table'} - - {:else} -
- {#each items as doc} -
- -
- {/each} -
- {/if} - - {#if !searchResults && totalPages > 1} -
- {#each Array(totalPages) as _, i} - - {/each} -
- {/if} + {/if} -
- - {#if selectedDoc} -
- -
- {/if} -
- - - - {#if selectedDoc} -
- + {#if selectedDoc} - ui.closeDrawer()} - ondelete={handleDocDelete} - /> +
{@render inspector(selectedDoc)}
{/if}
- +

{selectionCount}건의 문서에 새 도메인을 지정합니다.

- {#snippet footer()} - + {/snippet}

{selectionCount}건의 문서에 태그를 추가합니다. 이미 같은 태그가 있으면 건너뜁니다.

- + {#snippet footer()} - + {/snippet}
@@ -918,3 +648,54 @@ loading={bulkBusy} onconfirm={bulkDelete} /> + + +{#snippet inspector(doc)} + {@const fmt = formatBadge(doc.file_format)} + {@const size = fileSizeLabel(doc.file_size)} +
+ +
+
정보
+
+
종류{fmt.label}
+ {#if doc.ai_domain}
도메인{domainLabel(doc.ai_domain)}
{/if} + {#if doc.ai_sub_group}
하위{doc.ai_sub_group}
{/if} +
수정{shortDate(doc.updated_at || doc.created_at)}
+ {#if size}
원본{size}
{/if} + {#if doc.md_status}
md 상태{doc.md_status}
{/if} + {#if doc.read_count}
읽음{doc.read_count}회
{/if} +
+
+ + + {#if doc.ai_tags && doc.ai_tags.length > 0} +
+
태그
+
+ {#each doc.ai_tags as t} + + {/each} +
+
+ {/if} + + +
+
See Also (관련 문서)
+

벡터 유사도 기반 관련 문서 — 준비 중

+
+ + + {#if doc.ai_domain} +
+
AI 분류
+
+ 도메인 {domainLabel(doc.ai_domain)}{#if doc.ai_sub_group} · 하위 {doc.ai_sub_group}{/if} + {#if doc.ai_confidence != null}
신뢰도 {doc.ai_confidence.toFixed(2)}{/if} + {#if doc.ai_analysis_tier}· {doc.ai_analysis_tier}{/if} +
+
+ {/if} +
+{/snippet}