diff --git a/src-tauri/src/types.rs b/src-tauri/src/types.rs index a49cd84..d0cabaf 100644 --- a/src-tauri/src/types.rs +++ b/src-tauri/src/types.rs @@ -197,6 +197,10 @@ fn default_true() -> bool { true } +fn default_outline_width() -> f64 { + 220.0 +} + fn default_pdf_height() -> u32 { 600 } @@ -298,6 +302,8 @@ pub struct VaultState { pub last_open_note: Option, pub sidebar_width: f64, pub notelist_width: f64, + #[serde(default = "default_outline_width")] + pub outline_width: f64, pub sidebar_collapsed: bool, #[serde(default)] pub notelist_collapsed: bool, @@ -333,6 +339,7 @@ impl Default for VaultState { last_open_note: None, sidebar_width: 220.0, notelist_width: 280.0, + outline_width: default_outline_width(), sidebar_collapsed: false, notelist_collapsed: false, collapsed_notebooks: Vec::new(), diff --git a/src/lib/components/AppLayout.svelte b/src/lib/components/AppLayout.svelte index 7bdfc25..d81093e 100644 --- a/src/lib/components/AppLayout.svelte +++ b/src/lib/components/AppLayout.svelte @@ -14,6 +14,7 @@ import { sidebarWidth, notelistWidth, + outlineWidth, sidebarCollapsed, notelistCollapsed, collapsedNotebooks, @@ -201,6 +202,7 @@ last_open_note: $activeNotePath, sidebar_width: $sidebarWidth, notelist_width: $notelistWidth, + outline_width: $outlineWidth, sidebar_collapsed: $sidebarCollapsed, notelist_collapsed: $notelistCollapsed, collapsed_notebooks: $collapsedNotebooks, @@ -534,6 +536,7 @@ $effect(() => { $sidebarCollapsed; $notelistCollapsed; + $outlineWidth; persistState(); }); @@ -573,6 +576,7 @@ const state = await loadVaultState(); $sidebarWidth = state.sidebar_width; $notelistWidth = state.notelist_width; + if (typeof state.outline_width === 'number') $outlineWidth = state.outline_width; $sidebarCollapsed = state.sidebar_collapsed; $notelistCollapsed = state.notelist_collapsed ?? false; $collapsedNotebooks = state.collapsed_notebooks ?? []; diff --git a/src/lib/components/Editor.svelte b/src/lib/components/Editor.svelte index fb76d26..7d0ca51 100644 --- a/src/lib/components/Editor.svelte +++ b/src/lib/components/Editor.svelte @@ -39,7 +39,7 @@ import { readFile } from '@tauri-apps/plugin-fs'; import { openFile, openUrl, copyFileTo, copyImageToClipboard as copyImageToClipboardCmd, writeBytesTo, copyPngToClipboard } from '$lib/api'; import { save as saveDialog } from '@tauri-apps/plugin-dialog'; - import { activeNote, activeNotePath, appConfig, editorDirty, sourceMode, focusMode, readOnly, quickAccessPaths, notes, navHistory, canGoBack, canGoForward, viewerNote, notebooks } from '$lib/stores/app'; + import { activeNote, activeNotePath, appConfig, editorDirty, sourceMode, focusMode, readOnly, quickAccessPaths, notes, navHistory, canGoBack, canGoForward, viewerNote, notebooks, outlineWidth } from '$lib/stores/app'; import { saveNote, saveImage, saveAttachment, readClipboardImage, addQuickAccess, removeQuickAccess, getQuickAccess, getNoteVersions, getNoteVersionContent, createVersion, aiAsk, getAllNoteTitles, readNote, renameNote } from '$lib/api'; import type { VersionEntry, AiStreamEvent, NoteTitleEntry } from '$lib/types'; import { listen } from '@tauri-apps/api/event'; @@ -50,6 +50,7 @@ import GraphView from './GraphView.svelte'; import TagSuggestInput from './TagSuggestInput.svelte'; import { isMobile, isAndroid } from '$lib/platform'; + import ResizeHandle from './ResizeHandle.svelte'; const modKey = navigator.platform.startsWith('Mac') ? '⌘' : 'Ctrl'; @@ -178,6 +179,10 @@ outlineHeadings = headings; } + function handleOutlineResize(delta: number) { + $outlineWidth = Math.max(160, Math.min(500, $outlineWidth - delta)); + } + function scrollToHeading(pos: number) { if (!editor) return; editor.commands.setTextSelection(pos + 1); @@ -5502,7 +5507,8 @@ {/if} {#if showOutline} -
+ +

Outline