fix(table): fix cursor and offset handling

This commit is contained in:
Andrey Nering
2025-05-30 16:34:35 -03:00
parent f0f84c81f4
commit bf386dbad5
3 changed files with 17 additions and 10 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ require (
github.com/atotto/clipboard v0.1.4
github.com/charmbracelet/bubbletea/v2 v2.0.0-beta.1
github.com/charmbracelet/harmonica v0.2.0
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250529185650-1c5efe71d7cb
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250530192739-0ec908265ee6
github.com/charmbracelet/x/ansi v0.8.0
github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a
github.com/dustin/go-humanize v1.0.1
+2 -2
View File
@@ -10,8 +10,8 @@ github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL
github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0=
github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ=
github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao=
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250529185650-1c5efe71d7cb h1:KwmuaT+M/PFOEgOoYI7x3dOP6gGBXUGrb6Jy+XH/aL8=
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250529185650-1c5efe71d7cb/go.mod h1:EJWvaCrhOhNGVZMvcjc0yVryl4qqpMs8tz0r9WyEkdQ=
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250530192739-0ec908265ee6 h1:xvkno6nNCinMEhpHwnOTvasaFSeLVMw5DDaJZaDm4iM=
github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1.0.20250530192739-0ec908265ee6/go.mod h1:EJWvaCrhOhNGVZMvcjc0yVryl4qqpMs8tz0r9WyEkdQ=
github.com/charmbracelet/x/ansi v0.8.0 h1:9GTq3xq9caJW8ZrBTe0LIe2fvfLR/bYXKTx2llXn7xE=
github.com/charmbracelet/x/ansi v0.8.0/go.mod h1:wdYl/ONOLHLIVmQaxbIYEC/cRKOQyjTkowiI4blgS9Q=
github.com/charmbracelet/x/cellbuf v0.0.13 h1:/KBBKHuVRbq1lYx5BzEHBAFBP8VcQzJejZ/IA3iR28k=
+14 -7
View File
@@ -19,7 +19,6 @@ type Model struct {
cursor int
focus bool
styles Styles
yOffset int
useStyleFunc bool
table *table.Table
@@ -317,8 +316,12 @@ func (m *Model) SetWidth(w int) *Model {
// SetYOffset sets the YOffset position in the table.
func (m *Model) SetYOffset(n int) *Model {
m.yOffset = clamp(n, 0, m.RowCount()-1)
m.table.YOffset(m.yOffset)
var (
minimum = 0
maximum = m.RowCount() - m.table.VisibleRows()
yOffset = clamp(n, minimum, maximum)
)
m.table.YOffset(yOffset)
return m
}
@@ -513,16 +516,20 @@ func (m Model) SelectedRow() []string {
// It can not go above the first row.
func (m *Model) MoveUp(n int) {
m.SetCursor(m.cursor - n)
m.SetYOffset(m.yOffset - n)
m.table.YOffset(m.yOffset)
if m.cursor < m.table.FirstVisibleRowIndex() {
m.SetYOffset(m.table.GetYOffset() - n)
}
}
// MoveDown moves the selection down by any number of rows.
// It can not go below the last row.
func (m *Model) MoveDown(n int) {
m.SetCursor(m.cursor + n)
m.SetYOffset(m.yOffset + n)
m.table.YOffset(m.yOffset)
if m.cursor > m.table.LastVisibleRowIndex() {
m.SetYOffset(m.table.GetYOffset() + n)
}
}
// GotoTop moves the selection to the first row.