Skip to content

feat: borderfx API, 10+ new widgets, and enhancements to heatmap/linechart/sparkline#385

Merged
mum4k merged 49 commits into
mum4k:develfrom
keithknott26:feature/borderfx
Jun 6, 2026
Merged

feat: borderfx API, 10+ new widgets, and enhancements to heatmap/linechart/sparkline#385
mum4k merged 49 commits into
mum4k:develfrom
keithknott26:feature/borderfx

Conversation

@keithknott26

Copy link
Copy Markdown
Contributor

Hello Jakub,

Overview

This PR adds the BorderCellStyler API (the core of borderfx), introduces ten new
widgets, and extends several existing ones with new options and capabilities.

Infrastructure

  • tcell: fix key mapping alignment, extend mouse and event handling
  • private/draw/border + container: add BorderCellStyler — a per-cell callback
    API that allows callers to override the rune and cell options on individual border
    cells, enabling animated and styled border effects

New Widgets

  • borderfx — animated and styled border effects using the new BorderCellStyler API
  • tab — tabbed container with animated header, active/inactive styling, and a
    color-distinct alarm notification indicator
  • radar — 360° (or partial arc) phosphor-fade sweep with contact blips,
    configurable beam color/width/speed, and mouse hover tooltips
  • checkbox, radio, slider, spinner, dropdown — standard form controls
  • timeline, spectrum — timeline event display and spectrum analyzer
  • threed — basic 3D projection widget

Existing Widget Enhancements

  • heatmap: improved axis rendering, label formatting, and new options
  • linechart: threshold lines, configurable scale precision, data downsampling
  • sparkline: custom spark rune sets, threshold rendering, new options
  • treeview: fix direct field access — use GetExpandedState() throughout

Dependencies

  • Added golang.org/x/image v0.24.0
  • Bumped golang.org/x/text to v0.22.0

All changes pass go test -race ./....

@mum4k

mum4k commented May 19, 2026

Copy link
Copy Markdown
Owner

This looks awesome, thank you @keithknott26.

Could you confirm - does this replace #381?

I'll spin up an agent to review this - can you confirm if there are any breaking changes to the public APIs that we will need to list in the changelog?

@keithknott26

keithknott26 commented May 20, 2026 via email

Copy link
Copy Markdown
Contributor Author

@keithknott26

Copy link
Copy Markdown
Contributor Author

I think thats all commits for now , btw Ive enabled 24bit true color mode so it should make things look a bit more crisp. Let me know if you need me to rework anything. I considered moving borderFX and FX into termdash but i wasnt sure how youd feel about that so i made it a widget instead

@mum4k mum4k left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've run go test and go vet on the full suite. Everything passes! Thanks for the massive contribution and your persistence.

@mum4k mum4k changed the base branch from master to devel June 6, 2026 08:06
@mum4k mum4k merged commit 063927b into mum4k:devel Jun 6, 2026
4 checks passed
mum4k added a commit that referenced this pull request Jun 6, 2026
* Adding Treeview widget and tests

* Updated testing errors to pass

* Updated treeview and tests to guard against race conditions

* Updated tests and treeview with mutex locking

* Minor fixes for linting errors

* Added missing comments to types,  added more tests, changed node to tv, changed Treeview to TreeView

* Added animated gif and updated README

* Added suimon since it went missing in a previous commit

* Implement Pie widget with options and drawing functionality

* Add Pie widget documentation with demo instructions

* Refactor options validation and enhance ColorOption function for pie chart customization

* Refactor pie chart drawing logic to simplify radius calculations and improve arc rendering

* Add test case for drawing a two-slice pie chart with verification

* Refactor pie widget code for improved readability and organization

* Remove unnecessary blank line in pie chart drawing function documentation

* Update README and pie widget documentation for clarity and accuracy

* Add AI agent rules setup

Establishes the .agents/rules/ directory structure with Cursor .mdc
symlinks, following the same pattern used in AirWorthy and open-hangar.

Rules included (adapted for termdash as a Go library):
- 001: Persistent rules (meta-rule for rule format and loading)
- 002: Documentation maintenance
- 005: Git workflow (nvie branching model, devel-based, one-branch policy)
- 006: Go best practices (idiomatic Go, readability-first philosophy)
- 007: No-breakage policy (public API stability)
- 009: Tests and coverage (unit tests, race detector, test helpers)
- 012: Q-prompt read-only mode
- 013: Go table-driven tests
- 014: Compile check (go build + go vet before completing work)

Rules intentionally excluded as not applicable:
- SwiftUI/iOS rules (tech stack, simulator, SwiftData, accessibility)
- Frontend/React rules (Vite SPA, React Router)
- Cloud/SRE rules (Encore, security, database migrations)
- Domain-specific rules (CRUD patterns, field descriptions)

* Update GitHub Actions workflow to run on all PRs and modernize Go linting

* Restore pull_request branch restrictions for master and devel

* feat: borderfx API, 10+ new widgets, and enhancements to heatmap/linechart/sparkline (#385)

* fix(tcell): fix key mapping alignment and extend mouse/event handling

* chore(deps): add golang.org/x/image, bump golang.org/x/text to v0.22

* feat(border): add BorderCellStyler API for per-cell border customization

* feat(borderfx): add borderfx widget — animated and styled border effects

* fix(treeview): use GetExpandedState() instead of direct field access

* feat(heatmap): extend heatmap with improved axes, labels, and options

* feat(sparkline): add custom spark runes, threshold rendering, and options

* feat(linechart): add threshold lines, scale precision, and data downsampling

* feat(widgets): add checkbox, radio, slider, spinner, and dropdown widgets

* feat(widgets): added timeline, and spectrum analyzer widgets

* feat(widgets): add emoji keyboard picker and 3D projection widget

* feat(tab): add tab widget with animated header and alarm notification color

* feat(radar): add radar widget with phosphor sweep, contacts, and hover tooltips

* feat(slider): add more slider styles and vertical positioning and alignment

* core(README): Added widget descriptions and demos to README

* feat(widgets): Add the modal widget and demo

* Fix: downgrade back to Go 1.20

* Fix: Fixed gofmt errors

* Fix: Fix for more gofmt errors

* Fix: Fix for linting errors

* feat(threed): minor fixes to shading and the threed demo - temporary until a new one is made

* feat(termdashdemo): Updated termdashdemo with 10 widgets and tabs

* feat(threeDemo): Fix for testing error

* feat(termdashdemo): Minor gofmt fix

* feat(fx): Added FX widget for window and text effects'

* feat(threed): Updated threed demo and tests

* feat(modal/fx): updated fxdemo and modal widget

* feat(threed/fx): Updates to ThreeD/FX to make the user API layer easier to us, threed demo update

* feat(threed): Minor golint fix

* feat(core): reverted the removal of tcell encoding as it's needed for compatibility

* feat(termdashdemo): Fix for tabs in termdashdemo and linting in glphmask

* feat(legal/toast): Added toast widget and demo, made sure termdash license was consistent across all widgets

* feat(legal/toast): Added toast widget to termdashdemo - cont'd termdash license consistent across all widgets

* Updatead README.md

* terminal/tcell: restore drag tracking and color support

* widgets/borderfx: add animated border profiles

* widgets/fx: add framed and focus effects

* widgets/threed: simplify API and expand showcase scenes

* widgets/dropdown: improve open list rendering

* widgets/tab: stabilize animated tab decoration

* widgets/timeline: tighten range picker rendering

* widgets/radio: fix demo off indicator

* termdashdemo: expand interactive widget explorer

* docs: add new widget demos

* Fix widget rendering regressions

Clean up threed demo scenes and remove unused threed image dependencies while keeping HUD and emojikeyboard changes out of this commit.

* Remove emojikeyboard from repo

* Minor gofmt change for tabdemo

* Restore threed logging option compatibility

* feat(threed): performance and optimization update

* Bump github.com/mattn/go-runewidth from 0.0.15 to 0.0.16 (#378)

Bumps [github.com/mattn/go-runewidth](https://github.com/mattn/go-runewidth) from 0.0.15 to 0.0.16.
- [Commits](mattn/go-runewidth@v0.0.15...v0.0.16)

---
updated-dependencies:
- dependency-name: github.com/mattn/go-runewidth
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update CHANGELOG.md for v0.21.0 release

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Keith Knott <keith.knott@gmail.com>
Co-authored-by: VincenzoManto <vincmanto@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants