From 33dff414e829d10dc6691b1cac7457077fa6799c Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Wed, 19 Aug 2026 16:35:49 -0700 Subject: [PATCH] refac --- package-lock.json | 31 -- package.json | 1 - src/lib/components/channel/Channel.svelte | 45 ++- src/lib/components/chat/Chat.svelte | 29 +- src/lib/components/chat/ChatControls.svelte | 332 +++++++----------- .../common/ResizableSidePanel.svelte | 120 +++++++ src/lib/components/notes/NoteEditor.svelte | 10 +- src/lib/components/notes/NotePanel.svelte | 94 ++--- .../workspace/Knowledge/KnowledgeBase.svelte | 53 --- 9 files changed, 301 insertions(+), 414 deletions(-) create mode 100644 src/lib/components/common/ResizableSidePanel.svelte diff --git a/package-lock.json b/package-lock.json index 8e7a3197dc..f78827475e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,7 +77,6 @@ "mammoth": "^1.11.0", "marked": "^9.1.0", "mermaid": "^11.10.1", - "paneforge": "^0.0.6", "panzoom": "^9.4.3", "pdfjs-dist": "^5.4.149", "prosemirror-collab": "^1.3.1", @@ -11188,24 +11187,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/nanoid": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.7.tgz", - "integrity": "sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -11502,18 +11483,6 @@ "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", "license": "(MIT AND Zlib)" }, - "node_modules/paneforge": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/paneforge/-/paneforge-0.0.6.tgz", - "integrity": "sha512-jYeN/wdREihja5c6nK3S5jritDQ+EbCqC5NrDo97qCZzZ9GkmEcN5C0ZCjF4nmhBwkDKr6tLIgz4QUKWxLXjAw==", - "license": "MIT", - "dependencies": { - "nanoid": "^5.0.4" - }, - "peerDependencies": { - "svelte": "^4.0.0 || ^5.0.0-next.1" - } - }, "node_modules/panzoom": { "version": "9.4.3", "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.3.tgz", diff --git a/package.json b/package.json index 8cdcd7333d..57712f50c5 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,6 @@ "mammoth": "^1.11.0", "marked": "^9.1.0", "mermaid": "^11.10.1", - "paneforge": "^0.0.6", "panzoom": "^9.4.3", "pdfjs-dist": "^5.4.149", "prosemirror-collab": "^1.3.1", diff --git a/src/lib/components/channel/Channel.svelte b/src/lib/components/channel/Channel.svelte index a3606485f7..d552ba89b0 100644 --- a/src/lib/components/channel/Channel.svelte +++ b/src/lib/components/channel/Channel.svelte @@ -1,6 +1,5 @@ @@ -325,8 +323,8 @@ : ''} w-full max-w-full flex flex-col" id="channel-container" > - - +
+
{/if} - +
{#if !largeScreen} {#if threadId !== null} @@ -430,16 +428,13 @@ {/if} {:else if threadId !== null} - -
- - -
-
+ {/if} - +
diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index ed8d94d511..a912960bff 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -1,7 +1,6 @@ + + { + if (!isResizing) return; + resizeHandler(e.clientX); + }} + on:mouseup={resizeEndHandler} +/> + +{#if open} + {#if side === 'right'} + + + {/if} + +
+ +
+ + {#if side === 'left'} + + + {/if} +{/if} diff --git a/src/lib/components/notes/NoteEditor.svelte b/src/lib/components/notes/NoteEditor.svelte index a715c8a03a..45296173fa 100644 --- a/src/lib/components/notes/NoteEditor.svelte +++ b/src/lib/components/notes/NoteEditor.svelte @@ -21,8 +21,6 @@ dayjs.extend(duration); dayjs.extend(relativeTime); - import { PaneGroup, Pane, PaneResizer } from 'paneforge'; - import { compressImage, copyToClipboard, convertHeicToJpeg } from '$lib/utils'; import { WEBUI_BASE_URL } from '$lib/constants'; import { getFileById, uploadFile } from '$lib/apis/files'; @@ -1006,8 +1004,8 @@ ${content} - - +
+
{#if loading}
@@ -1468,7 +1466,7 @@ ${content}
{/if} - +
{#if noteChatLoading}
@@ -1511,4 +1509,4 @@ ${content} /> {/if} - +
diff --git a/src/lib/components/notes/NotePanel.svelte b/src/lib/components/notes/NotePanel.svelte index 4eedea0672..3f0eefc4bd 100644 --- a/src/lib/components/notes/NotePanel.svelte +++ b/src/lib/components/notes/NotePanel.svelte @@ -1,63 +1,27 @@ @@ -69,39 +33,25 @@ show = false; }} > -
+
{/if} -{:else if show} - -
- - - { - show = false; - }} - collapsible={true} - class=" z-10 " - > - {#if show} -
-
- -
+
+
+
- {/if} - +
+ {/if} diff --git a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte index 67b8bdc28b..c66b930ff9 100644 --- a/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte +++ b/src/lib/components/workspace/Knowledge/KnowledgeBase.svelte @@ -2,7 +2,6 @@ import Fuse from 'fuse.js'; import { toast } from 'svelte-sonner'; import { v4 as uuidv4 } from 'uuid'; - import { PaneGroup, Pane, PaneResizer } from 'paneforge'; import { onMount, getContext, onDestroy, tick } from 'svelte'; import type { Writable } from 'svelte/store'; @@ -77,11 +76,6 @@ import Pagination from '$lib/components/common/Pagination.svelte'; import AttachWebpageModal from '$lib/components/chat/MessageInput/AttachWebpageModal.svelte'; - let largeScreen = true; - - let pane; - let showSidepanel = true; - let showAddWebpageModal = false; let showAddTextContentModal = false; let showNewDirectoryModal = false; @@ -92,7 +86,6 @@ let showAccessControlModal = false; let showResetConfirm = false; - let minSize = 0; type DirectoryFileEntry = { path: string; filename: string; file: File }; type DirectoryManifestEntry = DirectoryFileEntry & { checksum: string; size: number }; @@ -917,7 +910,6 @@ }; let debounceTimeout = null; - let mediaQuery; let dragged = false; let isSaving = false; @@ -980,14 +972,6 @@ }, 1000); }; - const handleMediaQuery = async (e) => { - if (e.matches) { - largeScreen = true; - } else { - largeScreen = false; - } - }; - const readDirectoryEntries = async (reader: any) => { const entries: any[] = []; @@ -1096,42 +1080,6 @@ }; onMount(async () => { - // listen to resize 1024px - mediaQuery = window.matchMedia('(min-width: 1024px)'); - - mediaQuery.addEventListener('change', handleMediaQuery); - handleMediaQuery(mediaQuery); - - // Select the container element you want to observe - const container = document.getElementById('collection-container'); - - // initialize the minSize based on the container width - minSize = !largeScreen ? 100 : Math.floor((300 / container.clientWidth) * 100); - - // Create a new ResizeObserver instance - const resizeObserver = new ResizeObserver((entries) => { - for (let entry of entries) { - const width = entry.contentRect.width; - // calculate the percentage of 300 - const percentage = (300 / width) * 100; - // set the minSize to the percentage, must be an integer - minSize = !largeScreen ? 100 : Math.floor(percentage); - - if (showSidepanel) { - if (pane && pane.isExpanded() && pane.getSize() < minSize) { - pane.resize(minSize); - } - } - } - }); - - // Start observing the container's size changes - resizeObserver.observe(container); - - if (pane) { - pane.expand(); - } - id = $page.params.id; const res = await getKnowledgeById(localStorage.token, id).catch((e) => { toast.error(`${e}`); @@ -1160,7 +1108,6 @@ clearInterval(pendingPollTimer); pendingPollTimer = null; } - mediaQuery?.removeEventListener('change', handleMediaQuery); const dropZone = document.querySelector('body'); dropZone?.removeEventListener('dragover', onDragOver); dropZone?.removeEventListener('drop', onDrop);