From 0e6de87e828b133993a9a98a70dc1b2c33287668 Mon Sep 17 00:00:00 2001 From: Dolev Hadar Date: Sat, 12 Oct 2024 20:43:25 +0300 Subject: [PATCH 1/4] chore(examples): tree fix: comments --- examples/go.mod | 4 + examples/go.sum | 6 +- examples/tree-default/main.go | 62 +++++++++++++ examples/tree-file-system/main.go | 142 ++++++++++++++++++++++++++++++ examples/tree-long/main.go | 63 +++++++++++++ examples/tree-toc/main.go | 120 +++++++++++++++++++++++++ 6 files changed, 392 insertions(+), 5 deletions(-) create mode 100644 examples/tree-default/main.go create mode 100644 examples/tree-file-system/main.go create mode 100644 examples/tree-long/main.go create mode 100644 examples/tree-toc/main.go diff --git a/examples/go.mod b/examples/go.mod index 3ab2229ead..7b9ac5a025 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -44,3 +44,7 @@ require ( golang.org/x/sys v0.31.0 // indirect golang.org/x/text v0.23.0 // indirect ) + +replace github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1 => ../../lipgloss + +replace github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1 => ../../bubbles diff --git a/examples/go.sum b/examples/go.sum index 05d6aeff85..631881d3c6 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -12,16 +12,12 @@ github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWp github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1 h1:swACzss0FjnyPz1enfX56GKkLiuKg5FlyVmOLIlU2kE= -github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1/go.mod h1:6HamsBKWqEC/FVHuQMHgQL+knPyvHH55HwJDHl/adMw= github.com/charmbracelet/colorprofile v0.3.0 h1:KtLh9uuu1RCt+Hml4s6Hz+kB1PfV3wi++1h5ia65yKQ= github.com/charmbracelet/colorprofile v0.3.0/go.mod h1:oHJ340RS2nmG1zRGPmhJKJ/jf4FPNNk0P39/wBPA1G0= -github.com/charmbracelet/glamour/v2 v2.0.0-20250327182525-cd9a02a87169 h1:e7EonUlg7tnyBROD7J+C6bI3ndLF7Zh62UGd7d60ORM= +github.com/charmbracelet/glamour/v2 v2.0.0-20250327182525-cd9a02a87169 h1:iYcV8iYgPqnil9uK1Y1VmMTjEnOjjQD9SbYn4sejMRs= github.com/charmbracelet/glamour/v2 v2.0.0-20250327182525-cd9a02a87169/go.mod h1:4iwRPRwCj2jWI3odZnAPqc1nyCXDuBlnfkGavmjl9NI= 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 h1:D9AJJuYTN5pvz6mpIGO1ijLKpfTYSHOtKGgwoTQ4Gog= -github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1/go.mod h1:tRlx/Hu0lo/j9viunCN2H+Ze6JrmdjQlXUQvvArgaOc= 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.14-0.20250326144200-0875329e71da h1:8MGKD5WBtuzfXglq0CnyzVSwGojv57X+H46OL9OUyRA= diff --git a/examples/tree-default/main.go b/examples/tree-default/main.go new file mode 100644 index 0000000000..0de020b0f3 --- /dev/null +++ b/examples/tree-default/main.go @@ -0,0 +1,62 @@ +package main + +import ( + "fmt" + "os" + + "github.com/charmbracelet/bubbles/v2/tree" + tea "github.com/charmbracelet/bubbletea/v2" +) + +type model struct { + tree tree.Model +} + +func (m model) Init() tea.Cmd { + return nil +} + +func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + var cmd tea.Cmd + switch msg := msg.(type) { + case tea.KeyPressMsg: + switch msg.String() { + case "q", "ctrl+c": + return m, tea.Quit + } + } + m.tree, cmd = m.tree.Update(msg) + return m, cmd +} + +func (m model) View() string { + return m.tree.View() +} + +func main() { + t := tree.New(tree.Root("~/charm"). + Child( + "ayman", + tree.Root("bash"). + Child( + tree.Root("tools"). + Child("zsh", + "doom-emacs", + ), + ), + tree.Root("carlos"). + Child( + tree.Root("emotes"). + Child( + "chefkiss.png", + "kekw.png", + ), + ), + "maas", + ), 70, 13) + + if _, err := tea.NewProgram(model{tree: t}).Run(); err != nil { + fmt.Println("Oh no:", err) + os.Exit(1) + } +} diff --git a/examples/tree-file-system/main.go b/examples/tree-file-system/main.go new file mode 100644 index 0000000000..fffd95ab3c --- /dev/null +++ b/examples/tree-file-system/main.go @@ -0,0 +1,142 @@ +package main + +import ( + "fmt" + "os" + + "github.com/charmbracelet/bubbles/v2/key" + "github.com/charmbracelet/bubbles/v2/tree" + tea "github.com/charmbracelet/bubbletea/v2" + "github.com/charmbracelet/lipgloss/v2" + ltree "github.com/charmbracelet/lipgloss/v2/tree" + "github.com/charmbracelet/x/ansi" +) + +type model struct { + tree tree.Model + choice *tree.Node +} + +func (m model) Init() tea.Cmd { + return nil +} + +func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + var cmd tea.Cmd + switch msg := msg.(type) { + case tea.KeyPressMsg: + switch msg.String() { + case "e": + m.choice = m.tree.NodeAtCurrentOffset() + return m, tea.Quit + case "q", "ctrl+c": + return m, tea.Quit + } + } + m.tree, cmd = m.tree.Update(msg) + m.updateStyles() + + return m, cmd +} + +func (m *model) updateStyles() { + dimmed := lipgloss.Color("239") + base := lipgloss.NewStyle() + m.tree.SetStyles(tree.Styles{ + TreeStyle: base. + Padding(1). + Border(lipgloss.RoundedBorder()). + BorderForeground(lipgloss.Color("236")). + BorderBackground(base.GetBackground()), + RootNodeStyle: base, + NodeStyle: base, + ParentNodeStyle: base, + OpenIndicatorStyle: base, + SelectedNodeStyle: base.Bold(true).Background(lipgloss.Color("8")), + HelpStyle: base.MarginTop(1), + EnumeratorStyle: base.Foreground(dimmed), + IndenterStyle: base.Foreground(dimmed), + }) +} + +func (m model) View() string { + return m.tree.View() +} + +type file struct { + name string + color string +} + +func (f file) String() string { + return "⌯ " + lipgloss.NewStyle().Foreground(lipgloss.Color(f.color)).Render(f.name) +} + +type dir struct { + name string +} + +func (d dir) String() string { + return lipgloss.NewStyle().Foreground(lipgloss.Color("4")).Render(d.name) +} + +const ( + width = 50 + height = 21 + enumeratorWidth = 3 +) + +func main() { + t := tree.New( + tree.Root(dir{"charmbracelet/lipgloss"}). + Indenter(func(_ ltree.Children, _ int) string { + return "│ " + }). + Enumerator(func(_ ltree.Children, _ int) string { + return "│ " + }). + Child( + tree.Root(dir{"tree"}). + Child(file{"tree.go", "6"}). + Child(file{"renderer.go", "6"}), + ). + Child( + tree.Root(dir{"table"}). + Child( + tree.Root(dir{"utils"}). + Child(file{"utils.go", "6"}), + ), + ). + Child(tree.Root(dir{"list"}).Child(lipgloss.NewStyle().Faint(true).Render("(empty)"))). + Child(file{"README.md", "3"}). + Child(file{"go.mod", "255"}). + Child(file{"go.sum", "255"}). + Child(file{".gitignore", "255"}), + width, + height, + ) + t.SetCursorCharacter("") + t.SetOpenCharacter("📂") + t.SetClosedCharacter("📁") + kb := []key.Binding{ + key.NewBinding(key.WithKeys("e"), key.WithHelp("e", "select")), + } + t.AdditionalShortHelpKeys = func() []key.Binding { + return kb + } + t.AdditionalFullHelpKeys = func() []key.Binding { + return kb + } + + p := tea.NewProgram(model{tree: t}) + m, err := p.Run() + if err != nil { + fmt.Println("Oh no:", err) + os.Exit(1) + } + + // Assert the final tea.Model to our local model and print the choice. + if m, ok := m.(model); ok && m.choice != nil { + fmt.Printf("---\nYou chose %s!\n", ansi.Strip(m.choice.Value())) + } +} diff --git a/examples/tree-long/main.go b/examples/tree-long/main.go new file mode 100644 index 0000000000..b9a54c2c08 --- /dev/null +++ b/examples/tree-long/main.go @@ -0,0 +1,63 @@ +package main + +import ( + "fmt" + "os" + "time" + + "github.com/charmbracelet/bubbles/v2/tree" + tea "github.com/charmbracelet/bubbletea/v2" + "github.com/charmbracelet/lipgloss/v2" +) + +type model struct { + tree tree.Model +} + +func (m model) Init() tea.Cmd { + return nil +} + +func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + var cmd tea.Cmd + switch msg := msg.(type) { + case tea.KeyPressMsg: + switch msg.String() { + case "q", "ctrl+c": + return m, tea.Quit + } + } + m.tree, cmd = m.tree.Update(msg) + return m, cmd +} + +func (m model) View() string { + return m.tree.View() +} + +func main() { + root := tree.Root("🛂 Passport expiration date") + thisYear := time.Now().Year() + for year := thisYear; year < thisYear+10; year++ { + yRoot := tree.Root(fmt.Sprintf("%d", year)).Close() + for month := 1; month <= 12; month++ { + mRoot := tree.Root(time.Month(month).String()).Close().RootStyle(lipgloss.NewStyle().Foreground(lipgloss.Color("1"))) + for day := 1; day < daysIn(time.Month(month), year); day++ { + mRoot.Child(fmt.Sprintf("%d", day)) + } + yRoot.Child(mRoot) + } + root.Child(yRoot) + } + + t := tree.New(root, 80, 30) + + if _, err := tea.NewProgram(model{tree: t}).Run(); err != nil { + fmt.Println("Oh no:", err) + os.Exit(1) + } +} + +func daysIn(m time.Month, year int) int { + return time.Date(year, m+1, 0, 0, 0, 0, 0, time.UTC).Day() +} diff --git a/examples/tree-toc/main.go b/examples/tree-toc/main.go new file mode 100644 index 0000000000..d5db297b0c --- /dev/null +++ b/examples/tree-toc/main.go @@ -0,0 +1,120 @@ +package main + +import ( + "fmt" + "os" + + "github.com/charmbracelet/bubbles/v2/tree" + tea "github.com/charmbracelet/bubbletea/v2" + "github.com/charmbracelet/lipgloss/v2" + ltree "github.com/charmbracelet/lipgloss/v2/tree" +) + +type model struct { + tree tree.Model +} + +func (m model) Init() tea.Cmd { + return nil +} + +func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + var cmd tea.Cmd + switch msg := msg.(type) { + case tea.KeyPressMsg: + switch msg.String() { + case "q", "ctrl+c": + return m, tea.Quit + } + } + m.tree, cmd = m.tree.Update(msg) + m.updateStyles() + + return m, cmd +} + +func (m *model) updateStyles() { + m.tree.SetStyles(tree.Styles{ + RootNodeStyle: lipgloss.NewStyle().Foreground(lipgloss.Color("205")), + SelectedNodeStyle: lipgloss.NewStyle().Foreground(lipgloss.Color("#EE6FF8")).Bold(true), + CursorStyle: lipgloss.NewStyle().Foreground(lipgloss.Color("#EE6FF8")).Bold(true), + HelpStyle: lipgloss.NewStyle().MarginTop(1), + }) +} + +func (m model) View() string { + pageNumbers := make([]string, len(m.tree.AllNodes())) + for i, node := range m.tree.AllNodes() { + v := node.GivenValue() + if page, ok := v.(page); ok { + num := fmt.Sprintf("%d", page.page) + if i == m.tree.YOffset() { + num = lipgloss.NewStyle().Foreground(lipgloss.Color("#EE6FF8")).Bold(true).Render(num) + } else { + num = lipgloss.NewStyle().Foreground(lipgloss.Color("245")).Render(num) + } + pageNumbers[i] = num + } + } + return lipgloss.NewStyle().Padding(1).Render( + lipgloss.JoinHorizontal( + lipgloss.Top, + m.tree.View(), + lipgloss.JoinVertical(lipgloss.Left, pageNumbers...)), + ) +} + +const ( + width = 60 + height = 12 + enumeratorWidth = 3 +) + +func enumerator(_ ltree.Children, _ int) string { + return " " +} + +func indenter(_ ltree.Children, _ int) string { + return " " +} + +type page struct { + title string + page int +} + +func (p page) String() string { + return p.title +} + +func main() { + t := tree.New( + tree.Root(page{"Go Mistakes", 1}). + Enumerator(enumerator). + Indenter(indenter). + Child( + tree.Root(page{"Code and Project Organization", 2}). + Child(page{"Unintended variable shadowing", 12}). + Child(page{"Unnecessary nested code", 22}), + ). + Child( + tree.Root(page{"Data Types", 23}). + Child(page{"Creating confusion with octal literals", 28}). + Child(page{"Neglecting integer overflows", 52}), + ). + Child( + tree.Root(page{"Strings", 53}). + Child(page{"Not understaing the concept of rune", 59}). + Child(page{"Misusing trim functions", 61}), + ), + width, + height, + ) + t.SetClosedCharacter("📘") + t.SetOpenCharacter("📖") + + if _, err := tea.NewProgram(model{tree: t}).Run(); err != nil { + fmt.Println("Oh no:", err) + os.Exit(1) + } +} From 9f096b6e61d1c8e2a74925488188b50f4280f720 Mon Sep 17 00:00:00 2001 From: Dolev Hadar Date: Fri, 18 Apr 2025 13:32:03 +0300 Subject: [PATCH 2/4] refactor --- examples/tree-file-system/main.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/tree-file-system/main.go b/examples/tree-file-system/main.go index fffd95ab3c..f5e878a721 100644 --- a/examples/tree-file-system/main.go +++ b/examples/tree-file-system/main.go @@ -121,12 +121,12 @@ func main() { kb := []key.Binding{ key.NewBinding(key.WithKeys("e"), key.WithHelp("e", "select")), } - t.AdditionalShortHelpKeys = func() []key.Binding { + t.SetAdditionalShortHelpKeys(func() []key.Binding { return kb - } - t.AdditionalFullHelpKeys = func() []key.Binding { + }) + t.SetAdditionalFullHelpKeys(func() []key.Binding { return kb - } + }) p := tea.NewProgram(model{tree: t}) m, err := p.Run() From caadfeb19cb288c4d82926a40061e1dfcc5a1121 Mon Sep 17 00:00:00 2001 From: Dolev Hadar Date: Sat, 2 Aug 2025 13:40:51 +0300 Subject: [PATCH 3/4] chore: update go.sum --- examples/go.sum | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/examples/go.sum b/examples/go.sum index 631881d3c6..3e748dde8e 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -12,26 +12,32 @@ github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWp github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/charmbracelet/colorprofile v0.3.0 h1:KtLh9uuu1RCt+Hml4s6Hz+kB1PfV3wi++1h5ia65yKQ= -github.com/charmbracelet/colorprofile v0.3.0/go.mod h1:oHJ340RS2nmG1zRGPmhJKJ/jf4FPNNk0P39/wBPA1G0= -github.com/charmbracelet/glamour/v2 v2.0.0-20250327182525-cd9a02a87169 h1:iYcV8iYgPqnil9uK1Y1VmMTjEnOjjQD9SbYn4sejMRs= -github.com/charmbracelet/glamour/v2 v2.0.0-20250327182525-cd9a02a87169/go.mod h1:4iwRPRwCj2jWI3odZnAPqc1nyCXDuBlnfkGavmjl9NI= +github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL3m+AxCzDz40= +github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0= +github.com/charmbracelet/glamour/v2 v2.0.0-20250513163904-eeeced3bb3c6 h1:AKhOV8dSRU3KpqMgpGME9JU7ouumB2S6hMmD6PRJeTc= +github.com/charmbracelet/glamour/v2 v2.0.0-20250513163904-eeeced3bb3c6/go.mod h1:7xBAUTCSADx9mHG0uBf4NDoVpYxMzIQ2j/NMLGdFsFM= 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/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.14-0.20250326144200-0875329e71da h1:8MGKD5WBtuzfXglq0CnyzVSwGojv57X+H46OL9OUyRA= -github.com/charmbracelet/x/cellbuf v0.0.14-0.20250326144200-0875329e71da/go.mod h1:xe0nKWGd3eJgtqZRaN9RjMtK7xUYchjzPr7q6kcvCCs= +github.com/charmbracelet/ultraviolet v0.0.0-20250721205647-f6ac6eda5d42 h1:Zqw2oP9Wo8VzMijVJbtIJcAaZviYyU07stvmCFCfn0Y= +github.com/charmbracelet/ultraviolet v0.0.0-20250721205647-f6ac6eda5d42/go.mod h1:XrrgNFfXLrFAyd9DUmrqVc3yQFVv8Uk+okj4PsNNzpc= +github.com/charmbracelet/x/ansi v0.9.3 h1:BXt5DHS/MKF+LjuK4huWrC6NCvHtexww7dMayh6GXd0= +github.com/charmbracelet/x/ansi v0.9.3/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE= +github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa h1:lphz0Z3rsiOtMYiz8axkT24i9yFiueDhJbzyNUADmME= +github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa/go.mod h1:xBlh2Yi3DL3zy/2n15kITpg0YZardf/aa/hgUaIM6Rk= +github.com/charmbracelet/x/exp/charmtone v0.0.0-20250602192518-9e722df69bbb h1:oTM8tZxV7FY0ehvYjFuICouuhzE08UZYNqUIp/lDQdY= +github.com/charmbracelet/x/exp/charmtone v0.0.0-20250602192518-9e722df69bbb/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0= github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a h1:FsHEJ52OC4VuTzU8t+n5frMjLvpYWEznSr/u8tnkCYw= github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U= +github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf h1:rLG0Yb6MQSDKdB52aGX55JT1oi0P0Kuaj7wi1bLUpnI= +github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf/go.mod h1:B3UgsnsBZS/eX42BlaNiJkD1pPOUa+oF1IYC6Yd2CEU= github.com/charmbracelet/x/exp/teatest/v2 v2.0.0-20250324105510-c72bdbf70572 h1:8lt/mbzcrAmtDfJPNggwlWkmSpKZgWlzdEhQ5VUU12I= github.com/charmbracelet/x/exp/teatest/v2 v2.0.0-20250324105510-c72bdbf70572/go.mod h1:+YwVr/3RyFizScyyGUY3tOpQgcNe52Je5wGv8gxzoLA= -github.com/charmbracelet/x/input v0.3.4 h1:Mujmnv/4DaitU0p+kIsrlfZl/UlmeLKw1wAP3e1fMN0= -github.com/charmbracelet/x/input v0.3.4/go.mod h1:JI8RcvdZWQIhn09VzeK3hdp4lTz7+yhiEdpEQtZN+2c= github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= -github.com/charmbracelet/x/windows v0.2.0 h1:ilXA1GJjTNkgOm94CLPeSz7rar54jtFatdmoiONPuEw= -github.com/charmbracelet/x/windows v0.2.0/go.mod h1:ZibNFR49ZFqCXgP76sYanisxRyC+EYrBE7TTknD8s1s= +github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY= +github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo= +github.com/charmbracelet/x/windows v0.2.1 h1:3x7vnbpQrjpuq/4L+I4gNsG5htYoCiA5oe9hLjAij5I= +github.com/charmbracelet/x/windows v0.2.1/go.mod h1:ptZp16h40gDYqs5TSawSVW+yiLB13j4kSMA0lSCHL0M= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -59,6 +65,8 @@ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/sahilm/fuzzy v0.1.1 h1:ceu5RHF8DGgoi+/dR5PsECjCDH1BE3Fnmpo7aVXOdRA= github.com/sahilm/fuzzy v0.1.1/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= +github.com/segmentio/ksuid v1.0.4 h1:sBo2BdShXjmcugAMwjugoGUdUV0pcxY5mW4xKRn3v4c= +github.com/segmentio/ksuid v1.0.4/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= @@ -68,12 +76,12 @@ github.com/yuin/goldmark-emoji v1.0.5 h1:EMVWyCGPlXJfUXBXpuMu+ii3TIaxbVBnEX9uaDC github.com/yuin/goldmark-emoji v1.0.5/go.mod h1:tTkZEbwu5wkPmgTcitqddVxY9osFZiavD+r4AzQrh1U= golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= -golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= -golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= +golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= From 89703329c2453f70c29465ffa877b3ea473c430a Mon Sep 17 00:00:00 2001 From: Dolev Hadar Date: Wed, 19 Nov 2025 20:59:08 +0200 Subject: [PATCH 4/4] chore: rebase --- examples/go.mod | 4 +-- examples/go.sum | 59 ++++++++++++++++--------------- examples/tree-default/main.go | 8 ++--- examples/tree-file-system/main.go | 14 ++++---- examples/tree-long/main.go | 13 +++---- examples/tree-toc/main.go | 19 +++++----- 6 files changed, 60 insertions(+), 57 deletions(-) diff --git a/examples/go.mod b/examples/go.mod index 7ea9b53f9b..30c87a0448 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -48,6 +48,6 @@ require ( golang.org/x/text v0.24.0 // indirect ) -replace github.com/charmbracelet/lipgloss/v2 v2.0.0-beta.1 => ../../lipgloss +replace charm.land/lipgloss/v2 v2.0.0-beta.3.0.20251114160003-3248589b24c9 => ../../lipgloss -replace github.com/charmbracelet/bubbles/v2 v2.0.0-beta.1 => ../../bubbles +replace charm.land/bubbles/v2 v2.0.0-beta.1.0.20251110211018-84a82dfeeed8 => ../../bubbles diff --git a/examples/go.sum b/examples/go.sum index 3e748dde8e..0532d55117 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -8,36 +8,38 @@ github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWpi6yML8= -github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA= +github.com/aymanbagabas/go-udiff v0.3.1 h1:LV+qyBQ2pqe0u42ZsUEtPiCaUoqgA9gYRDs3vj1nolY= +github.com/aymanbagabas/go-udiff v0.3.1/go.mod h1:G0fsKmG+P6ylD0r6N/KgQD/nWzgfnl8ZBcNLgcbrw8E= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= -github.com/charmbracelet/colorprofile v0.3.1 h1:k8dTHMd7fgw4bnFd7jXTLZrSU/CQrKnL3m+AxCzDz40= -github.com/charmbracelet/colorprofile v0.3.1/go.mod h1:/GkGusxNs8VB/RSOh3fu0TJmQ4ICMMPApIIVn0KszZ0= -github.com/charmbracelet/glamour/v2 v2.0.0-20250513163904-eeeced3bb3c6 h1:AKhOV8dSRU3KpqMgpGME9JU7ouumB2S6hMmD6PRJeTc= -github.com/charmbracelet/glamour/v2 v2.0.0-20250513163904-eeeced3bb3c6/go.mod h1:7xBAUTCSADx9mHG0uBf4NDoVpYxMzIQ2j/NMLGdFsFM= +github.com/charmbracelet/colorprofile v0.3.3 h1:DjJzJtLP6/NZ8p7Cgjno0CKGr7wwRJGxWUwh2IyhfAI= +github.com/charmbracelet/colorprofile v0.3.3/go.mod h1:nB1FugsAbzq284eJcjfah2nhdSLppN2NqvfotkfRYP4= +github.com/charmbracelet/glamour/v2 v2.0.0-20251106195642-800eb8175930 h1:+47Z2jVAWPSLGjPRbfZizW3OpcAYsu7EUk2DR+66FyM= +github.com/charmbracelet/glamour/v2 v2.0.0-20251106195642-800eb8175930/go.mod h1:izs11tnkYaT3DTEH2E0V/lCb18VGZ7k9HLYEGuvgXGA= 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/ultraviolet v0.0.0-20250721205647-f6ac6eda5d42 h1:Zqw2oP9Wo8VzMijVJbtIJcAaZviYyU07stvmCFCfn0Y= -github.com/charmbracelet/ultraviolet v0.0.0-20250721205647-f6ac6eda5d42/go.mod h1:XrrgNFfXLrFAyd9DUmrqVc3yQFVv8Uk+okj4PsNNzpc= -github.com/charmbracelet/x/ansi v0.9.3 h1:BXt5DHS/MKF+LjuK4huWrC6NCvHtexww7dMayh6GXd0= -github.com/charmbracelet/x/ansi v0.9.3/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE= -github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa h1:lphz0Z3rsiOtMYiz8axkT24i9yFiueDhJbzyNUADmME= -github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa/go.mod h1:xBlh2Yi3DL3zy/2n15kITpg0YZardf/aa/hgUaIM6Rk= +github.com/charmbracelet/ultraviolet v0.0.0-20251116181749-377898bcce38 h1:7Rs87fbKJoIIxsQS8YKJYGYa0tlsDwwb0twQjV1KB+g= +github.com/charmbracelet/ultraviolet v0.0.0-20251116181749-377898bcce38/go.mod h1:6lfcr3MNP+kZR25sF1nQwJFuQnNYBlFy3PGX5rvslXc= +github.com/charmbracelet/x/ansi v0.11.1 h1:iXAC8SyMQDJgtcz9Jnw+HU8WMEctHzoTAETIeA3JXMk= +github.com/charmbracelet/x/ansi v0.11.1/go.mod h1:M49wjzpIujwPceJ+t5w3qh2i87+HRtHohgb5iTyepL0= github.com/charmbracelet/x/exp/charmtone v0.0.0-20250602192518-9e722df69bbb h1:oTM8tZxV7FY0ehvYjFuICouuhzE08UZYNqUIp/lDQdY= github.com/charmbracelet/x/exp/charmtone v0.0.0-20250602192518-9e722df69bbb/go.mod h1:T9jr8CzFpjhFVHjNjKwbAD7KwBNyFnj2pntAO7F2zw0= -github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a h1:FsHEJ52OC4VuTzU8t+n5frMjLvpYWEznSr/u8tnkCYw= -github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U= +github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f h1:pk6gmGpCE7F3FcjaOEKYriCvpmIN4+6OS/RD0vm4uIA= +github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f/go.mod h1:IfZAMTHB6XkZSeXUqriemErjAWCCzT0LwjKFYCZyw0I= github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf h1:rLG0Yb6MQSDKdB52aGX55JT1oi0P0Kuaj7wi1bLUpnI= github.com/charmbracelet/x/exp/slice v0.0.0-20250327172914-2fdc97757edf/go.mod h1:B3UgsnsBZS/eX42BlaNiJkD1pPOUa+oF1IYC6Yd2CEU= -github.com/charmbracelet/x/exp/teatest/v2 v2.0.0-20250324105510-c72bdbf70572 h1:8lt/mbzcrAmtDfJPNggwlWkmSpKZgWlzdEhQ5VUU12I= -github.com/charmbracelet/x/exp/teatest/v2 v2.0.0-20250324105510-c72bdbf70572/go.mod h1:+YwVr/3RyFizScyyGUY3tOpQgcNe52Je5wGv8gxzoLA= -github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ= -github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg= +github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= +github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI= github.com/charmbracelet/x/termios v0.1.1 h1:o3Q2bT8eqzGnGPOYheoYS8eEleT5ZVNYNy8JawjaNZY= github.com/charmbracelet/x/termios v0.1.1/go.mod h1:rB7fnv1TgOPOyyKRJ9o+AsTU/vK5WHJ2ivHeut/Pcwo= -github.com/charmbracelet/x/windows v0.2.1 h1:3x7vnbpQrjpuq/4L+I4gNsG5htYoCiA5oe9hLjAij5I= -github.com/charmbracelet/x/windows v0.2.1/go.mod h1:ptZp16h40gDYqs5TSawSVW+yiLB13j4kSMA0lSCHL0M= +github.com/charmbracelet/x/windows v0.2.2 h1:IofanmuvaxnKHuV04sC0eBy/smG6kIKrWG2/jYn2GuM= +github.com/charmbracelet/x/windows v0.2.2/go.mod h1:/8XtdKZzedat74NQFn0NGlGL4soHB0YQZrETF96h75k= +github.com/clipperhouse/displaywidth v0.5.0 h1:AIG5vQaSL2EKqzt0M9JMnvNxOCRTKUc4vUnLWGgP89I= +github.com/clipperhouse/displaywidth v0.5.0/go.mod h1:R+kHuzaYWFkTm7xoMmK1lFydbci4X2CicfbGstSGg0o= +github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= +github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= +github.com/clipperhouse/uax29/v2 v2.3.0 h1:SNdx9DVUqMoBuBoW3iLOj4FQv3dN5mDtuqwuhIGpJy4= +github.com/clipperhouse/uax29/v2 v2.3.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -50,17 +52,16 @@ github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUq github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag= +github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= +github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk= github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/sahilm/fuzzy v0.1.1 h1:ceu5RHF8DGgoi+/dR5PsECjCDH1BE3Fnmpo7aVXOdRA= @@ -78,10 +79,10 @@ golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= -golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= -golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA= -golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= diff --git a/examples/tree-default/main.go b/examples/tree-default/main.go index 0de020b0f3..ca5d824c82 100644 --- a/examples/tree-default/main.go +++ b/examples/tree-default/main.go @@ -4,8 +4,8 @@ import ( "fmt" "os" - "github.com/charmbracelet/bubbles/v2/tree" - tea "github.com/charmbracelet/bubbletea/v2" + "charm.land/bubbles/v2/tree" + tea "charm.land/bubbletea/v2" ) type model struct { @@ -29,8 +29,8 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, cmd } -func (m model) View() string { - return m.tree.View() +func (m model) View() tea.View { + return tea.NewView(m.tree.View()) } func main() { diff --git a/examples/tree-file-system/main.go b/examples/tree-file-system/main.go index f5e878a721..6d36e07d3f 100644 --- a/examples/tree-file-system/main.go +++ b/examples/tree-file-system/main.go @@ -4,11 +4,11 @@ import ( "fmt" "os" - "github.com/charmbracelet/bubbles/v2/key" - "github.com/charmbracelet/bubbles/v2/tree" - tea "github.com/charmbracelet/bubbletea/v2" - "github.com/charmbracelet/lipgloss/v2" - ltree "github.com/charmbracelet/lipgloss/v2/tree" + "charm.land/bubbles/v2/key" + "charm.land/bubbles/v2/tree" + tea "charm.land/bubbletea/v2" + "charm.land/lipgloss/v2" + ltree "charm.land/lipgloss/v2/tree" "github.com/charmbracelet/x/ansi" ) @@ -59,8 +59,8 @@ func (m *model) updateStyles() { }) } -func (m model) View() string { - return m.tree.View() +func (m model) View() tea.View { + return tea.NewView(m.tree.View()) } type file struct { diff --git a/examples/tree-long/main.go b/examples/tree-long/main.go index b9a54c2c08..4b8aaa36a4 100644 --- a/examples/tree-long/main.go +++ b/examples/tree-long/main.go @@ -5,9 +5,9 @@ import ( "os" "time" - "github.com/charmbracelet/bubbles/v2/tree" - tea "github.com/charmbracelet/bubbletea/v2" - "github.com/charmbracelet/lipgloss/v2" + "charm.land/bubbles/v2/tree" + tea "charm.land/bubbletea/v2" + "charm.land/lipgloss/v2" ) type model struct { @@ -31,8 +31,8 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, cmd } -func (m model) View() string { - return m.tree.View() +func (m model) View() tea.View { + return tea.NewView(m.tree.View()) } func main() { @@ -41,7 +41,8 @@ func main() { for year := thisYear; year < thisYear+10; year++ { yRoot := tree.Root(fmt.Sprintf("%d", year)).Close() for month := 1; month <= 12; month++ { - mRoot := tree.Root(time.Month(month).String()).Close().RootStyle(lipgloss.NewStyle().Foreground(lipgloss.Color("1"))) + mRoot := tree.Root(time.Month(month).String()).Close().RootStyle( + lipgloss.NewStyle().Foreground(lipgloss.Color("1"))) for day := 1; day < daysIn(time.Month(month), year); day++ { mRoot.Child(fmt.Sprintf("%d", day)) } diff --git a/examples/tree-toc/main.go b/examples/tree-toc/main.go index d5db297b0c..1a3556dd12 100644 --- a/examples/tree-toc/main.go +++ b/examples/tree-toc/main.go @@ -4,10 +4,10 @@ import ( "fmt" "os" - "github.com/charmbracelet/bubbles/v2/tree" - tea "github.com/charmbracelet/bubbletea/v2" - "github.com/charmbracelet/lipgloss/v2" - ltree "github.com/charmbracelet/lipgloss/v2/tree" + "charm.land/bubbles/v2/tree" + tea "charm.land/bubbletea/v2" + "charm.land/lipgloss/v2" + ltree "charm.land/lipgloss/v2/tree" ) type model struct { @@ -42,7 +42,7 @@ func (m *model) updateStyles() { }) } -func (m model) View() string { +func (m model) View() tea.View { pageNumbers := make([]string, len(m.tree.AllNodes())) for i, node := range m.tree.AllNodes() { v := node.GivenValue() @@ -56,18 +56,19 @@ func (m model) View() string { pageNumbers[i] = num } } - return lipgloss.NewStyle().Padding(1).Render( + v := lipgloss.NewStyle().Padding(1).Render( lipgloss.JoinHorizontal( lipgloss.Top, m.tree.View(), lipgloss.JoinVertical(lipgloss.Left, pageNumbers...)), ) + + return tea.NewView(v) } const ( - width = 60 - height = 12 - enumeratorWidth = 3 + width = 60 + height = 12 ) func enumerator(_ ltree.Children, _ int) string {