diff --git a/src/widgets/virtual_list/state.zig b/src/widgets/virtual_list/state.zig index 87129d3..325849c 100644 --- a/src/widgets/virtual_list/state.zig +++ b/src/widgets/virtual_list/state.zig @@ -219,8 +219,13 @@ pub const VirtualListState = struct { if (window_idx + 1 < self.current_window.len) { self.selectByWindowIndex(window_idx + 1); - // Si la nueva selección está cerca del final visible, scroll - if (window_idx + 1 >= visible_rows - 1) { + // Calcular posición en pantalla de la nueva selección + const window_offset = self.scroll_offset -| self.window_start; + const new_screen_pos = (window_idx + 1) -| window_offset; + + // Scroll cuando la nueva posición llega a la ÚLTIMA fila visible + // (visible_rows - 1 es el índice de la última fila, 0-indexed) + if (new_screen_pos >= visible_rows) { self.scroll_offset += 1; } }