Skip to content

Latest commit

 

History

395 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

demo/demo.gif

TUI Compose

License: MIT Latest release Test Documentation Lightweight Examples

Лёгкий путь для создания приложений в терминале на Go.

  • 🍬 22 готовых виджетов — полноценный набор.
    • Базовые:
      • Label, Button, Hyperlink, ColorProgress, TextProgress, InputField, Check, Frame(рамка)
    • Изображения:
      • Canvas(16 цветов), CanvasRGB(True Color)
    • extra:
      • LineChart, BarChart, PieChart, Sparkline, Tree, Table, Tabs, Accordion, Spinner, BlinkLabel, PageIndicator, TextView.
  • 👓 Diff-рендер, low-allocation — без мерцаний и аллокаций
  • ✨ Автоматическое фокус по Tab/Shift+Tab
  • 💎 Минимальный размер: 8500 строк кода, только x/sys + x/term
  • 🎁 Полная поддержка Windows — без WSL
  • 🛠 Детекция data race при вызове методов окна — -tags debug
  • 🎨 Удобная кастомизация через битовые маски Style — быстро и удобно
  • 🔧 Кастомные виджеты — 3-6 методов(зависит от функцонала)
  • 🛒 Контейнеры — не нужно считать координаты вручную
  • 🚀 react-надстройка — пишите реактивные приложения
  • 🏹 Поддержка мыши - клики

go get -u github.com/romanSPB15/tui-compose/v3

Быстрый старт

package main

import (
	"strconv"

	"github.com/romanSPB15/tui-compose/v3"
)

func main() {
	wnd := tui.NewWindow()
	wnd.SetTitle("Моё приложение")

	label := tui.NewStaticLabel("Привет, TUI!").WithStyle(tui.FrCyan)

	btnQuit := tui.NewButton("Выход", func() {
		wnd.Quit()
	})

	v := 0

	btnAdd := tui.NewButton("+", func() {
		v++
		label.SetText(strconv.Itoa(v))
		wnd.Redraw()
	}).WithStyle(tui.BgRed)

	btnSub := tui.NewButton("-", func() {
		if v > 0 {
			v--
			label.SetText(strconv.Itoa(v))
			wnd.Redraw()
		}
	}).WithStyle(tui.BgBlue)

	box := tui.NewVBox(label, tui.NewHBox(btnAdd, btnSub), btnQuit)
	wnd.SetContent(box)

	wnd.Run()
}

Подробная документация доступна в Wiki.
Другие примеры доступны в examples.

Сравнение с gizak/termui

Критерий tui-compose(v3.3.0) termui(v3.1.0)
Размер ✅ ~8500 строк ⚠ 4325 строк + 5393(termbox-go)
Примеры 21 16
Возраст ~3 месяца 12 лет
Набор виджетов ✅ Огромный(22) — от кнопок до графиков ⚠ Средний(12)
Рендеринг ✅ low-allocation, diff-рендер ❌ Полная перерисовка
Кастомизация ✅ Полная(стили, выбор символов) ⚠ Частичная
Зависимости ✅ 2(только x/sys + x/term) ❌ 5+ — termbox-go, x/sys и другие
Тесты ✅ Покрытие низкоуровневых пакетов ❌ Нет
Интерактивность «из коробки» ✅ Есть ❌ Нет(реализовывать вручную)
Композиция ✅ VBox + HBox ⚠ Grid + абсолютные

Лицензия

MIT

⭐ Нравится проект? Поддержи его звездой!

GitHub stars

Releases

Used by

Contributors

Languages