on main help sign in
refactor: use clamp from /x/exp/ordered (#1236)
commit05457d52a5467a1168676b8bdff802bac9cddd54 authorChristian Rocha <christian@rocha.is> dateWed 15 Oct 2025, 16:00 (1 year ago) parent23e0fd4
5 files changed+10−11
go.mod+2 go.sum+2 internal/tui/components/chat/messages/messages.go+3−2 internal/tui/exp/list/list.go+3−2 internal/tui/util/util.go−7
go.mod+2
@@ -46,6 +46,8 @@ require (
4646 mvdan.cc/sh/v3 v3.12.1-0.20250902163504-3cf4fd5717a5
4747)
4848
49+require github.com/charmbracelet/x/exp/ordered v0.1.0
50+
4951require (
5052 cloud.google.com/go v0.116.0 // indirect
5153 cloud.google.com/go/auth v0.13.0 // indirect
go.sum+2
@@ -102,6 +102,8 @@ github.com/charmbracelet/x/exp/charmtone v0.0.0-20250708181618-a60a724ba6c3 h1:1
102102github.com/charmbracelet/x/exp/charmtone v0.0.0-20250708181618-a60a724ba6c3/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0=
103103github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a h1:FsHEJ52OC4VuTzU8t+n5frMjLvpYWEznSr/u8tnkCYw=
104104github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
105+github.com/charmbracelet/x/exp/ordered v0.1.0 h1:55/qLwjIh0gL0Vni+QAWk7T/qRVP6sBf+2agPBgnOFE=
106+github.com/charmbracelet/x/exp/ordered v0.1.0/go.mod h1:5UHwmG+is5THxMyCJHNPCn2/ecI07aKNrW+LcResjJ8=
105107github.com/charmbracelet/x/exp/slice v0.0.0-20250829135019-44e44e21330d h1:H2oh4WlSsXy8qwLd7I3eAvPd/X3S40aM9l+h47WF1eA=
106108github.com/charmbracelet/x/exp/slice v0.0.0-20250829135019-44e44e21330d/go.mod h1:vI5nDVMWi6veaYH+0Fmvpbe/+cv/iJfMntdh+N0+Tms=
107109github.com/charmbracelet/x/powernap v0.0.0-20250919153222-1038f7e6fef4 h1:ZhDGU688EHQXslD9KphRpXwK0pKP03egUoZAATUDlV0=
internal/tui/components/chat/messages/messages.go+3−2
@@ -12,6 +12,7 @@ import (
1212 "github.com/charmbracelet/catwalk/pkg/catwalk"
1313 "github.com/charmbracelet/lipgloss/v2"
1414 "github.com/charmbracelet/x/ansi"
15+ "github.com/charmbracelet/x/exp/ordered"
1516 "github.com/google/uuid"
1617
1718 "github.com/atotto/clipboard"
@@ -271,7 +272,7 @@ func (m *messageCmp) renderThinkingContent() string {
271272 }
272273 }
273274 fullContent := content.String()
274− height := util.Clamp(lipgloss.Height(fullContent), 1, 10)
275+ height := ordered.Clamp(lipgloss.Height(fullContent), 1, 10)
275276 m.thinkingViewport.SetHeight(height)
276277 m.thinkingViewport.SetWidth(m.textWidth())
277278 m.thinkingViewport.SetContent(fullContent)
@@ -344,7 +345,7 @@ func (m *messageCmp) GetSize() (int, int) {
344345
345346// SetSize updates the width of the message component for text wrapping
346347func (m *messageCmp) SetSize(width int, height int) tea.Cmd {
347− m.width = util.Clamp(width, 1, 120)
348+ m.width = ordered.Clamp(width, 1, 120)
348349 m.thinkingViewport.SetWidth(m.width - 4)
349350 return nil
350351}
internal/tui/exp/list/list.go+3−2
@@ -15,6 +15,7 @@ import (
1515 "github.com/charmbracelet/lipgloss/v2"
1616 uv "github.com/charmbracelet/ultraviolet"
1717 "github.com/charmbracelet/x/ansi"
18+ "github.com/charmbracelet/x/exp/ordered"
1819 "github.com/rivo/uniseg"
1920)
2021
@@ -1283,14 +1284,14 @@ func (l *list[T]) UpdateItem(id string, item T) tea.Cmd {
12831284 newItem, ok := l.renderedItems.Get(item.ID())
12841285 if ok {
12851286 newLines := newItem.height - oldItem.height
1286− l.offset = util.Clamp(l.offset+newLines, 0, lipgloss.Height(l.rendered)-1)
1287+ l.offset = ordered.Clamp(l.offset+newLines, 0, lipgloss.Height(l.rendered)-1)
12871288 }
12881289 }
12891290 } else if hasOldItem && l.offset > oldItem.start {
12901291 newItem, ok := l.renderedItems.Get(item.ID())
12911292 if ok {
12921293 newLines := newItem.height - oldItem.height
1293− l.offset = util.Clamp(l.offset+newLines, 0, lipgloss.Height(l.rendered)-1)
1294+ l.offset = ordered.Clamp(l.offset+newLines, 0, lipgloss.Height(l.rendered)-1)
12941295 }
12951296 }
12961297 }
internal/tui/util/util.go−7
@@ -60,10 +60,3 @@ type (
6060 }
6161 ClearStatusMsg struct{}
6262)
63−
64−func Clamp(v, low, high int) int {
65− if high < low {
66− low, high = high, low
67− }
68− return min(high, max(low, v))
69−}