From d40880de5b57b89f0cac1b2d8b97c80a99ca849e Mon Sep 17 00:00:00 2001 From: th-kim0823 Date: Fri, 15 May 2026 14:22:57 +0900 Subject: [PATCH] =?UTF-8?q?feat(ux):=20NoteCard=20chip=20affordance=20?= =?UTF-8?q?=EA=B0=95=ED=99=94=20+=20=ED=97=A4=EB=8D=94=20=EC=82=AC?= =?UTF-8?q?=EC=9D=B4=EB=93=9C=EB=B0=94=20=ED=86=A0=EA=B8=80=20+=20default?= =?UTF-8?q?=20visible=20+=20=EC=B0=BD=20=ED=81=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dogfood 발견 사항 묶음: - **NotebookChip** 시각 강화 — 청색 배경 + 📓 아이콘 + ▾ caret + dropdown 헤더 '이동할 노트북'. 클릭 시 다른 노트북 dropdown 명확히 발견 가능. 다른 노트북 없으면 disabled state. - **헤더 좌측 ☰ 햄버거 버튼** — 마우스로 사이드바 토글 (Cmd/Ctrl+B 와 동일). - **사이드바 default visible** — settings.getSidebarVisible 의 default false→true, store init 도 동일. 기존 사용자가 명시적으로 false 저장했다면 그 값 유지. - **inboxWindow 기본 크기 확장** — 900×720 → 1200×800. 사이드바 240px 가 default 가시화되므로 main 영역 확보. 851 tests pass + typecheck clean. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/main/services/SettingsService.ts | 2 +- src/main/windows/inboxWindow.ts | 4 ++-- src/renderer/inbox/App.tsx | 11 ++++++++++ src/renderer/inbox/components/NoteCard.tsx | 25 +++++++++++++++------- src/renderer/inbox/store.ts | 4 ++-- tests/unit/App.test.tsx | 4 +++- tests/unit/NoteCard.test.tsx | 3 ++- 7 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/main/services/SettingsService.ts b/src/main/services/SettingsService.ts index 3e164de..cdaf9fe 100644 --- a/src/main/services/SettingsService.ts +++ b/src/main/services/SettingsService.ts @@ -186,7 +186,7 @@ export class SettingsService { // v0.4 Task 15 — sidebar 레이아웃 영속화. async getSidebarVisible(): Promise { const s = await this.load(); - return s.sidebar_visible ?? false; + return s.sidebar_visible ?? true; } async setSidebarVisible(v: boolean): Promise { diff --git a/src/main/windows/inboxWindow.ts b/src/main/windows/inboxWindow.ts index 8b58ca0..11f364a 100644 --- a/src/main/windows/inboxWindow.ts +++ b/src/main/windows/inboxWindow.ts @@ -22,8 +22,8 @@ export function createInboxWindow(opts: { visible?: boolean } = {}): BrowserWind } inboxWindow = new BrowserWindow({ - width: 900, - height: 720, + width: 1200, + height: 800, show: false, webPreferences: { preload: join(__dirname, '../preload/index.js'), diff --git a/src/renderer/inbox/App.tsx b/src/renderer/inbox/App.tsx index 9466a93..da7d069 100644 --- a/src/renderer/inbox/App.tsx +++ b/src/renderer/inbox/App.tsx @@ -118,6 +118,17 @@ export function App(): React.ReactElement {
+

Inkling

{( diff --git a/src/renderer/inbox/components/NoteCard.tsx b/src/renderer/inbox/components/NoteCard.tsx index 70ba98c..c89c842 100644 --- a/src/renderer/inbox/components/NoteCard.tsx +++ b/src/renderer/inbox/components/NoteCard.tsx @@ -115,29 +115,38 @@ function NotebookChip({ current, notebooks, onMove }: { onMove: (id: string) => Promise; }): React.ReactElement { const [open, setOpen] = useState(false); + const others = notebooks.filter((nb) => nb.id !== current.id); + const hasOthers = others.length > 0; return ( - {open && ( + {open && hasOthers && (
- {notebooks.filter((nb) => nb.id !== current.id).map((nb) => ( +
+ 이동할 노트북 +
+ {others.map((nb) => (