fix(deps): update module github.com/charmbracelet/bubbles to v0.21.0
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
| github.com/charmbracelet/bubbles | v0.16.1 -> v0.21.0 |
Release Notes
charmbracelet/bubbles (github.com/charmbracelet/bubbles)
v0.21.0
Viewport improvements
Finally, viewport finally has horizontal scrolling ✨![^v1]
To enable it, use SetHorizontalStep (default in v2 will be 6).
You can also scroll manually with ScrollLeft and ScrollRight, and use
SetXOffset to scroll to a specific position (or 0 to reset):
vp := viewport.New()
vp.SetHorizontalStep(10) // how many columns to scroll on each key press
vp.ScrollRight(30) // pan 30 columns to the right!
vp.ScrollLeft(10) // pan 10 columns to the left!
vp.SetXOffset(0) // back to the left edge
To make the API more consistent, vertical scroll functions were also renamed, and the old ones were deprecated (and will be removed in v2):
// Scroll n lines up/down:
func (m Model) LineUp(int) // deprecated
func (m Model) ScrollUp(int) // new!
func (m Model) LineDown(int) // deprecated
func (m Model) ScrollDown(int) // new!
// Scroll half page up/down:
func (m Model) HalfViewUp() []string // deprecated
func (m Model) HalfPageUp() []string // new!
func (m Model) HalfViewDown() []string // deprecated
func (m Model) HalfPageDown() []string // new!
// Scroll a full page up/down:
func (m Model) ViewUp(int) []string // deprecated
func (m Model) PageUp(int) []string // new!
func (m Model) ViewDown(int) []string // deprecated
func (m Model) PageDown(int) []string // new!
[!NOTE] In v2, these functions will not return
lines []stringanymore, as it is no longer needed due toHighPerformanceRenderingbeing deprecated as well.
Other improvements
The list bubble got a couple of new functions: SetFilterText,
SetFilterState, and GlobalIndex - which you can use to get the index of the
item in the unfiltered, original item list.
On textinput, you can now get the matched suggestions and more with
MatchedSuggestions and CurrentSuggestionIndex.
To put the cherry on top, this release also includes numerous bug fixes. You can read about each of them in the linked commits/PRs below.
[^v1]: It is disabled by default in v1, but will be enabled in v2.
Changelog
New Features
d019ed3: feat(list): add SetFilterText and SetFilterState (#​335) (@​taigrr)171a9d6: feat(list): implement GlobalIndex helper (#​574) (@​nobe4)4382fdf: feat(textinput): expose matched suggestions and index (@​luevano)2d53a61: feat(viewport): horizontal scroll (#​240) (@​tty2)ea344ab: feat(viewport): horizontal scroll with mouse wheel (#​761) (@​UnseenBook)
Bug fixes
f2434c3: Revert "fix(viewport): normalize method names" (@​caarlos0)8101a34: fix(ci): add lint and lint-sync workflows and update golangci.yml (#​651) (@​aymanbagabas)54f28b6: fix(filepicker): properly scrolling filepicker (#​753) (@​caarlos0)81d444a: fix(help): wrong full help sep rendering (@​luevano)f439d83: fix(textarea): max height should not determine max lines (@​meowgorithm)8b55efb: fix(textarea): placeholder with chinese chars (#​767) (@​caarlos0)8624776: fix(textinput): slicing outside cap (#​532) (@​MikaelFangel)c7f889e: fix(viewport): normalize method names (@​caarlos0)39668ec: fix(viewport): normalize method names (#​763) (@​caarlos0)7ab08fb: fix(viewport): scroll to last line when borders (#​706) (@​caarlos0)730f5a2: fix: debounce stopwatch and timer (@​meowgorithm)bd2a5b0: fix: golangci-lint 2 fixes (#​769) (@​caarlos0)9589cbc: fix: lint issues and disable predeclared linter (#​614) (@​aymanbagabas)398e92c: fix: remove default character limit (@​meowgorithm)1bdd4c6: fix: stopwatch.Start() (#​707) (@​bevicted)9a262e9: fix: use atomic for ids (#​634) (@​caarlos0)
Dependency updates
1797ac2: feat(deps): bump github.com/charmbracelet/bubbletea from 1.1.0 to 1.1.1 (#​611) (@​dependabot[bot])a9b780a: feat(deps): bump github.com/charmbracelet/lipgloss from 0.13.0 to 0.13.1 (@​dependabot[bot])db3514c: feat(deps): bump github.com/charmbracelet/lipgloss from 0.13.1 to 1.0.0 (#​655) (@​dependabot[bot])43aa82c: feat(deps): bump github.com/charmbracelet/x/ansi (#​716) (@​dependabot[bot])c1199d7: feat(deps): bump github.com/charmbracelet/x/ansi from 0.2.3 to 0.3.0 (#​613) (@​dependabot[bot])d3ac47d: feat(deps): bump github.com/charmbracelet/x/ansi from 0.3.0 to 0.3.1 (#​615) (@​dependabot[bot])ed14316: feat(deps): bump github.com/charmbracelet/x/ansi from 0.3.1 to 0.3.2 (#​618) (@​dependabot[bot])
Documentation updates
cf3f46a: docs(list): fix grammar in doc comment and README (#​627) (@​oahshtsua)9e5365e: docs: add example for ValidateFunc (#​705) (@​bashbunni)87a4e45: docs: additional bubbles (#​583) (@​caarlos0)e3ce11a: docs: update charm & friends blurb (#​703) (@​bashbunni)178590b: docs: update contributing guidelines (#​640) (@​bashbunni)
Other work
0f9e38c: Don't render suggestions when textinput is not focused. (@​elProxy)e5296a2: ci: fix goreleaser config (#​668) (@​caarlos0)76433f7: ci: fix linting on windows (@​andreynering)d91c9aa: ci: rm .golangci-soft.yml (@​caarlos0)2f49443: ci: sync dependabot config (#​734) (@​charmcli)7a6b190: ci: sync dependabot config (#​736) (@​charmcli)d58217b: ci: sync golangci-lint config (#​750) (@​github-actions[bot])cce8481: ci: sync golangci-lint config (#​770) (@​github-actions[bot])0305695: ci: test on oldstable and stable go versions, automerge dependabot (#​755) (@​caarlos0)
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.20.0
Focus. Breathe.
This features support for Bubble Tea's new focus-blur feature as well as a quality-of-life update to paginator. Enjoy!
Focus
You heard that right. Focus-blur window events are now enabled for textinput and textarea which were recently added to Bubble Tea v1.1.0. As long as WithReportFocus is enabled in your Program you'll automatically get nicer inputs.
To enable focus reporting:
p := tea.NewProgram(model{}, tea.WithReportFocus())
Remember to stay focused and hydrated!
Paginator opts
Speaking of functional arguments, paginator also received some some new quality-of-life startup options, courtesy @​nervo.
p := paginator.New(
paginator.WithPerPage(42),
paginator.WithTotalPages(42),
)
Of course, you can still set the values on the model directly too:
p := paginator.New()
p.PerPage = 42
p.TotalPages = 24
Happy paging!
Changelog
New!
d3bd075: feat(cursor): focus/blur support (#​581) (@​caarlos0)5110925: feat: Introduce paginator options (@​nervo)
Deps
3eaf8da: feat(deps): bump github.com/charmbracelet/bubbletea from 0.27.0 to 1.0.0 (#​604) (@​dependabot[bot])6fc27e9: feat(deps): bump github.com/charmbracelet/bubbletea from 1.0.0 to 1.1.0 (#​607) (@​dependabot[bot])
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.19.0
Bugs? Squashed (along with a few nice lil’ features).
Community-Driven Development?! Yep, the majority of the changes in this release were done by the community. Thank you all for your contributions that made this release possible.
Progress: custom chars
You can now customize the filled and empty characters of the progress bar.
p := progress.New(progress.WithFillCharacters('>', '.'))
Table improvements
Help is on the way
Table now includes a short and full help view so it's easier than ever to tell your users how to interact with the table.
// Render a table with its help.
t := table.New()
view := t.View() + "\n" + t.HelpView()
Accessing columns
You can also now get the table's columns (this already existed for rows).
package table
// Columns returns the current columns.
func (m Model) Columns() []Column
List: page navigation is fixed!
Previously, list.NextPage() and list.PrevPage() didn't work because the methods did not have pointer receivers. We've fixed this…by making them pointer receivers!
⚠️ Note that this is a minor API change and you might need to update your app to pass a pointer receiver to your model rather than a copy. Details in #​458.
package progress
// NextPage moves to the next page, if available.
func (m *Model) NextPage()
// PrevPage moves to the previous page, if available.
func (m *Model) PrevPage()
What’s Changed
Changed
- Textarea: Improve setting width by @​mikelorant in #​496
- Textinput: fix out of range panic if no matched suggestions by @​rdnt in #​473
- List: Fix no-op list pagination functions by @​nekopy in #​458
- Table: Clarify position constant in JoinHorizontal by @​aditipatelpro in #​577
- Progress: make full/empty fill characters configurable by @​rwinkhart in #​409
- Dependencies: switch to x/ansi for text manipulation by @​aymanbagabas in #​505
Added
- Textarea: add help to textarea key bindings by @​TravisYeah in #​418
- Textarea: Add multiline placeholder by @​mikelorant in #​302
- Table: Add column return function by @​abeleinin in #​369
- Table: Implement help.Keymap interface and add quit mapping by @​prgres in #​440
- Ctrl+Left/Right for WordForward/Backward by @​maaslalani in #​387
- Use goreleaser for releases by @​aymanbagabas in #​526
Fixed
- Table: Render Row Tests by @​maaslalani in #​487
- Table: Only render columns with a positive width by @​fabio42 in #​465
- Table: Fix inheritence of SelectedStyle in StyleFunc by @​gabrielfu in #​539
- Table: Don't include header height in the total table size by @​prgres in #​434
- Table: Fix premature viewport scroll by @​dzeleniak in #​429
- Textarea: Fix end of buffer character by @​mikelorant in #​491
- Textarea: Set textarea default EndOfBufferCharacter to ' ' by @​blvrd in #​510
- Textarea: End of Buffer alignment by @​maaslalani in #​486
- Textinput: don't block input on validation by @​GabrielNagy in #​185
- Viewport: Fix division by zero in scrollpercentage by @​zMoooooritz in #​494
- Help: Fix centering by @​gabe565 in #​516
- Progress: Stop spring defaults from overriding WithStringOptions by @​nervo in #​540
- Cursor: Make SetMode method in cursor library handle invalid mode values correctly by @​anirudhaCodes in #​477
Test coverage :white_check_mark:
- Add tests for textarea view by @​mikelorant in #​485
- Add tests for paginator by @​anirudhaCodes in #​480
- Add tests for textInput Tests by @​KevM in #​500
- Improve textarea tests by @​mikelorant in #​490
New Contributors
- @​rdnt made their first contribution in #​473
- @​rwinkhart made their first contribution in #​409
- @​mikelorant made their first contribution in #​485
- @​anirudhaCodes made their first contribution in #​480
- @​nekopy made their first contribution in #​458
- @​TravisYeah made their first contribution in #​418
- @​abeleinin made their first contribution in #​369
- @​fabio42 made their first contribution in #​465
- @​prgres made their first contribution in #​440
- @​zMoooooritz made their first contribution in #​494
- @​dzeleniak made their first contribution in #​429
- @​KevM made their first contribution in #​500
- @​gabe565 made their first contribution in #​516
- @​blvrd made their first contribution in #​510
- @​nervo made their first contribution in #​540
- @​gabrielfu made their first contribution in #​539
- @​aditipatelpro made their first contribution in #​577
Full Changelog: https://github.com/charmbracelet/bubbles/compare/v0.18.0...v0.19.0
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.18.0
Textarea, but faster
This release features several fixes and big performance improvements for the textarea bubble.
What's Changed
New
- Optional File Permissions and File Size by @​maaslalani in #​471
- Add Paginator OnFirstPage method by @​maaslalani in #​463
Improved
- Implement Memoization to Speed Up Textarea Rendering by @​wesen in #​427
- refactor(textinput): reduce allocations by @​naglis in #​413
- Use
uniseg.StringWidthby @​maaslalani in #​462
Fixed
- fix(textarea): correctly trim incoming paste by @​muesli in #​469
- fix(textinput): Placeholder No Longer Changes Width + Paste Calculation by @​hopefulTex in #​451
- fix(viewport): pad width to contentWidth by @​ivanvc in #​388
New Contributors
- @​seanbanko made their first contribution in #​442
- @​hopefulTex made their first contribution in #​451
- @​ivanvc made their first contribution in #​388
- @​wesen made their first contribution in #​427
Full Changelog: https://github.com/charmbracelet/bubbles/compare/v0.17.1...v0.18.0
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.17.1
Bumping Bubble Tea
This is just a little update to update to the latest version of Bubble Tea.
What's Changed
- feat: upgrade bubbletea and remove deprecated code by @​aymanbagabas in #​448
Full Changelog: https://github.com/charmbracelet/bubbles/compare/v0.17.0...v0.17.1
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
v0.17.0
Text input autocompletions and various improvements
Autocompletion in Text Input
So @​toadle wanted textinputs to support autocompletion in a ghost-text kind of a way. Rather than wait for us to do it he did what any dedicated open source developer would: he sent a PR! And now we can all benefit from his hard work.
Autocompletion is super easy to use:
ti := textinput.New()
ti.SetSuggestions([]string{"meow", "purr"})
By default you can press ctrl+n and ctrl+p to cycle through suggestions, but those keybindings can be changed as you, the application developer, see fit. For details check out textinput.SetSuggestions and the corresponding KeyMap in the docs.
Is the progress bar done yet?
@​yrashk acutely noticed that to nicely transition from one state to another after an animated progress bar fills up it's helpful to know when the animated has finished animating before transitioning. To solve for this he added an IsAnimating method to the progress model. Thanks, @​yrashk!
Changelog
New!
- Support suggestions and autocompletion in textinput by @​toadle in #​407
- Add method for determining if progress bar is animating by @​yrashk in #​386
Improved
- Update fuzzy library by @​caarlos0 in #​379
- Reduce allocations in
filterItemsby @​naglis in #​396 - Improve message when list is empty by @​maaslalani in #​393
Fixed
- Fix unicode character encoding error by @​lc-1010 in #​421
Full Changelog: https://github.com/charmbracelet/bubbles/compare/v0.16.1...v0.17.0
New Contributors
- @​yrashk made their first contribution in #​386
- @​naglis made their first contribution in #​391
- @​lc-1010 made their first contribution in #​421
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, The Fediverse, or on Discord.
Configuration
đź“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
â™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
- [ ] If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.
ℹ Artifact update notice
File name: go.mod
In order to perform the update(s) described in the table above, Renovate ran the go get command, which resulted in the following additional change(s):
- 8 additional dependencies were updated
Details:
| Package | Change |
|---|---|
github.com/charmbracelet/bubbletea |
v0.24.2 -> v1.1.0 |
github.com/charmbracelet/lipgloss |
v0.8.0 -> v0.13.0 |
github.com/mattn/go-runewidth |
v0.0.15 -> v0.0.16 |
golang.org/x/sync |
v0.3.0 -> v0.8.0 |
github.com/mattn/go-isatty |
v0.0.18 -> v0.0.20 |
github.com/muesli/ansi |
v0.0.0-20211018074035-2e021307bc4b -> v0.0.0-20230316100256-276c6243b2f6 |
github.com/rivo/uniseg |
v0.2.0 -> v0.4.7 |
golang.org/x/sys |
v0.7.0 -> v0.24.0 |

