diff --git a/go.mod b/go.mod index 5cf8846..a610ded 100644 --- a/go.mod +++ b/go.mod @@ -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 diff --git a/go.sum b/go.sum index 1d43827..cb221ea 100644 --- a/go.sum +++ b/go.sum @@ -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= diff --git a/table/table.go b/table/table.go index 7f1e778..0f1cee5 100644 --- a/table/table.go +++ b/table/table.go @@ -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.