refactor: stores 분리 — toast / uiState 단일 책임화

UX/UI 개편 Phase A-2. lib/stores/ui.ts에 섞여 있던 toast 시스템과
UI layer 상태(미사용 dead export 포함)를 의미 단위로 분리한다.
한 파일이 비대해지는 시나리오를 처음부터 차단(plan 8대 원칙 #7).

- lib/stores/toast.ts 신규 — toasts/addToast/removeToast (Toast interface export)
- lib/stores/uiState.svelte.ts 신규 — drawer 단일 slot + modal stack 클래스 (5대 원칙 #2)
  · openDrawer/closeDrawer/isDrawerOpen
  · openModal/closeTopModal/isModalOpen/modalIndex/topModal
  · handleEscape (modal stack 우선 → drawer)
- lib/stores/ui.ts 삭제 — sidebarOpen/selectedDocId는 어디서도 import되지 않은 dead export였음
- 11개 파일 import 경로 갱신: \$lib/stores/ui → \$lib/stores/toast

uiState는 아직 어디서도 사용 안 함 — Phase B에서 sidebar/meta drawer가 전환될 때
ui.openDrawer('sidebar') 형태로 채택. 동작 변경 0.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-04-07 08:26:11 +09:00
parent ec36ea3d6d
commit 8742367bc2
13 changed files with 72 additions and 18 deletions

View File

@@ -4,7 +4,7 @@
import { page } from '$app/stores';
import { goto } from '$app/navigation';
import { isAuthenticated, user, tryRefresh, logout } from '$lib/stores/auth';
import { toasts, removeToast } from '$lib/stores/ui';
import { toasts, removeToast } from '$lib/stores/toast';
import Sidebar from '$lib/components/Sidebar.svelte';
import '../app.css';

View File

@@ -2,7 +2,7 @@
import { onMount } from 'svelte';
import { goto } from '$app/navigation';
import { api } from '$lib/api';
import { addToast } from '$lib/stores/ui';
import { addToast } from '$lib/stores/toast';
let dashboard = null;
let loading = true;

View File

@@ -2,7 +2,7 @@
import { page } from '$app/stores';
import { goto } from '$app/navigation';
import { api } from '$lib/api';
import { addToast } from '$lib/stores/ui';
import { addToast } from '$lib/stores/toast';
import { Info } from 'lucide-svelte';
import { List, LayoutGrid } from 'lucide-svelte';
import DocumentCard from '$lib/components/DocumentCard.svelte';

View File

@@ -2,7 +2,7 @@
import { onMount } from 'svelte';
import { page } from '$app/stores';
import { api, getAccessToken } from '$lib/api';
import { addToast } from '$lib/stores/ui';
import { addToast } from '$lib/stores/toast';
import { marked } from 'marked';
import DOMPurify from 'dompurify';
import TagPill from '$lib/components/TagPill.svelte';

View File

@@ -1,7 +1,7 @@
<script>
import { onMount } from 'svelte';
import { api } from '$lib/api';
import { addToast } from '$lib/stores/ui';
import { addToast } from '$lib/stores/toast';
let documents = [];
let loading = true;

View File

@@ -1,7 +1,7 @@
<script>
import { goto } from '$app/navigation';
import { login } from '$lib/stores/auth';
import { addToast } from '$lib/stores/ui';
import { addToast } from '$lib/stores/toast';
let username = '';
let password = '';

View File

@@ -3,7 +3,7 @@
import { page } from '$app/stores';
import { goto } from '$app/navigation';
import { api } from '$lib/api';
import { addToast } from '$lib/stores/ui';
import { addToast } from '$lib/stores/toast';
import { marked } from 'marked';
import DOMPurify from 'dompurify';

View File

@@ -1,7 +1,7 @@
<script>
import { onMount } from 'svelte';
import { api } from '$lib/api';
import { addToast } from '$lib/stores/ui';
import { addToast } from '$lib/stores/toast';
import { user } from '$lib/stores/auth';
let currentPassword = '';