From 3546c8cefbcdcc2a450168481ef6e93d02711e69 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Fri, 3 Apr 2026 10:05:47 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=A0=88=EC=9D=B4=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=EA=B0=9C=EC=84=A0=20=E2=80=94=2030:70=20=EB=B9=84?= =?UTF-8?q?=EC=9C=A8,=20=EC=82=AC=EC=9D=B4=EB=93=9C=EB=B0=94=20=EC=A0=91?= =?UTF-8?q?=ED=9E=98,=20=EC=A0=95=EB=B3=B4=20=ED=8C=A8=EB=84=90=20drawer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 사이드바: 데스크톱도 기본 접힘, ☰로 오버레이, localStorage 상태 기억 - 상단 30%: 문서 목록 + 검색 (문서 미선택 시 100%) - 하단 70%: 뷰어 전체 너비 (우측 패널 제거) - 정보 패널: ℹ 버튼 → 우측 전체 높이 drawer (ESC/외부 클릭 닫기) - nav 높이 축소, 폰트 크기 최적화 Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/routes/+layout.svelte | 60 ++++++------ frontend/src/routes/documents/+page.svelte | 101 +++++++++++++-------- 2 files changed, 95 insertions(+), 66 deletions(-) diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte index c26491d..a83d540 100644 --- a/frontend/src/routes/+layout.svelte +++ b/frontend/src/routes/+layout.svelte @@ -9,27 +9,36 @@ import '../app.css'; const PUBLIC_PATHS = ['/login', '/setup']; - const NO_SIDEBAR_PATHS = ['/login', '/setup']; + const NO_CHROME_PATHS = ['/login', '/setup']; let authChecked = $state(false); let sidebarOpen = $state(false); onMount(async () => { + // localStorage에서 사이드바 상태 복원 + const saved = localStorage.getItem('sidebarOpen'); + if (saved === 'true') sidebarOpen = true; + if (!$isAuthenticated) { await tryRefresh(); } authChecked = true; }); + // 사이드바 상태 저장 + $effect(() => { + if (browser) { + localStorage.setItem('sidebarOpen', String(sidebarOpen)); + } + }); + $effect(() => { if (browser && authChecked && !$isAuthenticated && !PUBLIC_PATHS.some(p => $page.url.pathname.startsWith(p))) { goto('/login'); } }); - // 사이드바 표시 여부 - let showSidebar = $derived($isAuthenticated && !NO_SIDEBAR_PATHS.some(p => $page.url.pathname.startsWith(p))); + let showChrome = $derived($isAuthenticated && !NO_CHROME_PATHS.some(p => $page.url.pathname.startsWith(p))); - // 키보드 단축키 function handleKeydown(e) { if (e.key === '/' && !['INPUT', 'TEXTAREA'].includes(document.activeElement?.tagName)) { e.preventDefault(); @@ -48,57 +57,52 @@

로딩 중...

{:else if $isAuthenticated || PUBLIC_PATHS.some(p => $page.url.pathname.startsWith(p))} - {#if showSidebar} + {#if showChrome}
-