diff --git a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte index 7dd38dec8e..9e907d928d 100644 --- a/src/lib/components/layout/Sidebar/RecursiveFolder.svelte +++ b/src/lib/components/layout/Sidebar/RecursiveFolder.svelte @@ -586,6 +586,26 @@ setFolderItems(); } + const shouldIgnoreRowClick = (target) => { + return target instanceof Element && !!target.closest('button, a, input, [role="menu"]'); + }; + + const openFolderHandler = async () => { + const folder = await getFolderById(localStorage.token, folderId).catch((error) => { + toast.error(`${error}`); + return null; + }); + + if (folder) { + await selectedFolder.set({ ...folders[folderId], ...folder }); + } + + await goto(`/folders/${folderId}`); + + if ($mobile) { + showSidebar.set(!$showSidebar); + } + }; $: if (!open && chats !== null) { chats = null; chatsPage = 1; @@ -729,30 +749,27 @@ } renameHandler(); }} + role="button" + tabindex="0" on:click={async (e) => { + if (shouldIgnoreRowClick(e.target)) return; if (clickTimer) { clearTimeout(clickTimer); clickTimer = null; } clickTimer = setTimeout(async () => { - const folder = await getFolderById(localStorage.token, folderId).catch((error) => { - toast.error(`${error}`); - return null; - }); - - if (folder) { - await selectedFolder.set({ ...folders[folderId], ...folder }); - } - - await goto(`/folders/${folderId}`); - - if ($mobile) { - showSidebar.set(!$showSidebar); - } + await openFolderHandler(); clickTimer = null; }, 100); // 100ms delay (typical double-click threshold) }} + on:keydown={(e) => { + if (e.currentTarget !== e.target) return; + if (e.key === 'Enter' || e.key === ' ') { + e.preventDefault(); + openFolderHandler(); + } + }} on:pointerup={(e) => { e.stopPropagation(); }}