mirror of
https://github.com/anotherhadi/ilovetui.git
synced 2026-08-21 03:55:48 +02:00
v0.2.1
This commit is contained in:
+16
-2
@@ -1,10 +1,13 @@
|
|||||||
package helpbar
|
package helpbar
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
"charm.land/bubbles/v2/help"
|
"charm.land/bubbles/v2/help"
|
||||||
"charm.land/bubbles/v2/key"
|
"charm.land/bubbles/v2/key"
|
||||||
tea "charm.land/bubbletea/v2"
|
tea "charm.land/bubbletea/v2"
|
||||||
"charm.land/lipgloss/v2"
|
"charm.land/lipgloss/v2"
|
||||||
|
"github.com/charmbracelet/x/ansi"
|
||||||
|
|
||||||
"github.com/anotherhadi/ilovetui/bubbles"
|
"github.com/anotherhadi/ilovetui/bubbles"
|
||||||
)
|
)
|
||||||
@@ -59,10 +62,21 @@ func (m Model) View(contextual ...key.Binding) string {
|
|||||||
if len(bindings) == 0 || m.width <= 0 {
|
if len(bindings) == 0 || m.width <= 0 {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
var view string
|
||||||
if !m.ShowAll {
|
if !m.ShowAll {
|
||||||
return m.help.ShortHelpView(bindings)
|
view = m.help.ShortHelpView(bindings)
|
||||||
|
} else {
|
||||||
|
view = m.help.FullHelpView(m.columns(bindings))
|
||||||
}
|
}
|
||||||
return m.help.FullHelpView(m.columns(bindings))
|
return m.clampWidth(view)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Model) clampWidth(view string) string {
|
||||||
|
lines := strings.Split(view, "\n")
|
||||||
|
for i, line := range lines {
|
||||||
|
lines[i] = ansi.Truncate(line, m.width, "")
|
||||||
|
}
|
||||||
|
return strings.Join(lines, "\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m Model) Height(contextual ...key.Binding) int {
|
func (m Model) Height(contextual ...key.Binding) int {
|
||||||
|
|||||||
+9
-2
@@ -4,6 +4,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"charm.land/lipgloss/v2"
|
"charm.land/lipgloss/v2"
|
||||||
|
"github.com/charmbracelet/x/ansi"
|
||||||
)
|
)
|
||||||
|
|
||||||
var borderTypes = map[string]lipgloss.Border{
|
var borderTypes = map[string]lipgloss.Border{
|
||||||
@@ -41,12 +42,18 @@ func RenderWithTitle(border lipgloss.Style, title, content string, width, height
|
|||||||
box := border.BorderTop(false).Width(width).Height(boxH).Render(content)
|
box := border.BorderTop(false).Width(width).Height(boxH).Render(content)
|
||||||
|
|
||||||
boxWidth := lipgloss.Width(strings.SplitN(box, "\n", 2)[0])
|
boxWidth := lipgloss.Width(strings.SplitN(box, "\n", 2)[0])
|
||||||
titleW := lipgloss.Width(title)
|
|
||||||
|
|
||||||
b, _, _, _, _ := border.GetBorder()
|
b, _, _, _, _ := border.GetBorder()
|
||||||
topLeft, top, topRight := b.TopLeft, b.Top, b.TopRight
|
topLeft, top, topRight := b.TopLeft, b.Top, b.TopRight
|
||||||
|
overhead := lipgloss.Width(topLeft) + lipgloss.Width(topRight) + 2
|
||||||
|
|
||||||
fillW := boxWidth - titleW - lipgloss.Width(topLeft) - lipgloss.Width(topRight) - 2
|
maxTitleW := max(boxWidth-overhead, 0)
|
||||||
|
if titleW := lipgloss.Width(title); titleW > maxTitleW {
|
||||||
|
title = ansi.Truncate(title, maxTitleW, "")
|
||||||
|
}
|
||||||
|
titleW := lipgloss.Width(title)
|
||||||
|
|
||||||
|
fillW := boxWidth - titleW - overhead
|
||||||
if fillW < 0 {
|
if fillW < 0 {
|
||||||
fillW = 0
|
fillW = 0
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user