From c08302b47a4fc68e4efda8f722e87e3018601bd8 Mon Sep 17 00:00:00 2001 From: jhapate0704 Date: Fri, 3 Jul 2026 22:58:28 +0530 Subject: [PATCH 1/2] fix(vscode): reset scroll position on diff change Fixes #10231 --- .changeset/reset-diff-scroll.md | 5 +++++ .../webview-ui/diff-virtual/DiffVirtualApp.tsx | 17 +++++++++++++++-- .../src/components/chat/PermissionDiff.tsx | 18 ++++++++++++++++-- 3 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 .changeset/reset-diff-scroll.md diff --git a/.changeset/reset-diff-scroll.md b/.changeset/reset-diff-scroll.md new file mode 100644 index 0000000000..c5efe834f8 --- /dev/null +++ b/.changeset/reset-diff-scroll.md @@ -0,0 +1,5 @@ +--- +"kilo-code": patch +--- + +Fix scroll position not resetting when switching between diff files in the chat and virtual diff viewer diff --git a/packages/kilo-vscode/webview-ui/diff-virtual/DiffVirtualApp.tsx b/packages/kilo-vscode/webview-ui/diff-virtual/DiffVirtualApp.tsx index a9ccfdc103..33661a4f60 100644 --- a/packages/kilo-vscode/webview-ui/diff-virtual/DiffVirtualApp.tsx +++ b/packages/kilo-vscode/webview-ui/diff-virtual/DiffVirtualApp.tsx @@ -1,4 +1,4 @@ -import { createMemo, createSignal, onCleanup, Show } from "solid-js" +import { createMemo, createSignal, onCleanup, Show, createEffect, on } from "solid-js" import type { Component } from "solid-js" import { CodeComponentProvider } from "@kilocode/kilo-ui/context/code" import { DiffComponentProvider } from "@kilocode/kilo-ui/context/diff" @@ -32,6 +32,19 @@ const DiffVirtualContent: Component = () => { const [diff, setDiff] = createSignal(null) const [style, setStyle] = createSignal("unified") const [markdown, setMarkdown] = createSignal(false) + let scrollerRef: HTMLDivElement | undefined + + createEffect( + on( + diff, + () => { + if (scrollerRef) { + scrollerRef.scrollTop = 0 + } + }, + { defer: true }, + ), + ) const handler = (event: MessageEvent) => { const msg = event.data as { @@ -112,7 +125,7 @@ const DiffVirtualContent: Component = () => { -
+
(scrollerRef = el)}> {(v) => ( = (props) => { const vscode = useVSCode() + let scrollerRef: HTMLDivElement | undefined + + createEffect( + on( + () => props.filediff, + () => { + if (scrollerRef) { + scrollerRef.scrollTop = 0 + } + }, + { defer: true }, + ), + ) + const filename = createMemo(() => { const parts = props.filediff.file.split("/") return parts[parts.length - 1] ?? props.filediff.file @@ -71,7 +85,7 @@ export const PermissionDiff: Component = (props) => {
-
+
(scrollerRef = el)}> Diff preview unavailable for this file.
} From 725200270d120514fa1af10a677dcbec61ff68d7 Mon Sep 17 00:00:00 2001 From: jhapate0704 Date: Fri, 3 Jul 2026 23:21:17 +0530 Subject: [PATCH 2/2] refactor(vscode): remove dead scroll-reset code from PermissionDiff PermissionDock unmounts PermissionDiff instances on change, so scroll resets naturally. The fix belongs purely in DiffVirtualApp. Addresses review bot feedback --- .../src/components/chat/PermissionDiff.tsx | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDiff.tsx b/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDiff.tsx index d5e5eb0973..3136bdf086 100644 --- a/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDiff.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/chat/PermissionDiff.tsx @@ -1,4 +1,4 @@ -import { Show, type Component, createMemo, createEffect, on } from "solid-js" +import { Show, type Component, createMemo } from "solid-js" import { Diff } from "@kilocode/kilo-ui/diff" import { DiffChanges } from "@kilocode/kilo-ui/diff-changes" import { IconButton } from "@kilocode/kilo-ui/icon-button" @@ -13,20 +13,6 @@ interface PermissionDiffProps { export const PermissionDiff: Component = (props) => { const vscode = useVSCode() - let scrollerRef: HTMLDivElement | undefined - - createEffect( - on( - () => props.filediff, - () => { - if (scrollerRef) { - scrollerRef.scrollTop = 0 - } - }, - { defer: true }, - ), - ) - const filename = createMemo(() => { const parts = props.filediff.file.split("/") return parts[parts.length - 1] ?? props.filediff.file @@ -85,7 +71,7 @@ export const PermissionDiff: Component = (props) => {
-
(scrollerRef = el)}> +
Diff preview unavailable for this file.
}