feat: 11 tipos TUI — componentes Bubble Tea del dominio tui

Tipos producto para ListItem, ListModel, FilteredListModel, SpinnerModel,
SpinnerWithTimeoutModel, ProgressModel, MultiProgressModel, Theme, Styles,
BaseModel y ConfirmModel. Stubs que documentan las definiciones de
devfactory/tui para el registry.
This commit is contained in:
2026-03-28 03:58:08 +01:00
parent c7df092eb8
commit fdcde03382
22 changed files with 308 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
package tui
// BaseModel provee funcionalidad comun a todas las vistas TUI:
// dimensiones de terminal, estilos y manejo de errores.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type BaseModel struct {
Width int
Height int
Styles Styles
Err error
}
+13
View File
@@ -0,0 +1,13 @@
---
name: base_model
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type BaseModel struct { Width int; Height int; Styles Styles; Err error }
description: "Modelo base que provee dimensiones de terminal, estilos y manejo de errores comunes a todas las vistas TUI."
tags: [tui, base, model, component]
uses_types: [styles_go_tui]
file_path: "types/tui/base_model.go"
---
+11
View File
@@ -0,0 +1,11 @@
package tui
// ConfirmModel es un dialogo de confirmacion Si/No interactivo.
// Implementa tea.Model del framework Bubble Tea.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type ConfirmModel struct {
BaseModel
prompt string
selected bool
done bool
}
+13
View File
@@ -0,0 +1,13 @@
---
name: confirm_model
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type ConfirmModel struct { BaseModel; prompt string; selected bool; done bool }
description: "Dialogo de confirmacion Si/No interactivo. Embeds BaseModel. Implementa tea.Model."
tags: [tui, confirm, dialog, component, interactive]
uses_types: [base_model_go_tui]
file_path: "types/tui/confirm_model.go"
---
+10
View File
@@ -0,0 +1,10 @@
package tui
// FilteredListModel extiende ListModel con filtrado por texto en tiempo real.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type FilteredListModel struct {
ListModel
query string
allItems []ListItem
placeholder string
}
+13
View File
@@ -0,0 +1,13 @@
---
name: filtered_list_model
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type FilteredListModel struct { ListModel; query string; allItems []ListItem; placeholder string }
description: "Lista con filtrado por texto en tiempo real. Embeds ListModel y añade busqueda interactiva."
tags: [tui, list, filter, component, interactive]
uses_types: [list_model_go_tui, list_item_go_tui]
file_path: "types/tui/filtered_list_model.go"
---
+9
View File
@@ -0,0 +1,9 @@
package tui
// ListItem representa un item individual en una lista TUI.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type ListItem struct {
Title string
Description string
Value interface{}
}
+13
View File
@@ -0,0 +1,13 @@
---
name: list_item
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type ListItem struct { Title string; Description string; Value interface{} }
description: "Item individual de una lista TUI con titulo, descripcion y valor arbitrario."
tags: [tui, list, component]
uses_types: []
file_path: "types/tui/list_item.go"
---
+15
View File
@@ -0,0 +1,15 @@
package tui
// ListModel es un componente lista seleccionable con cursor, scroll y seleccion.
// Implementa tea.Model del framework Bubble Tea.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type ListModel struct {
items []ListItem
cursor int
selected map[int]struct{}
multi bool
styles Styles
height int
width int
offset int
}
+13
View File
@@ -0,0 +1,13 @@
---
name: list_model
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type ListModel struct { items []ListItem; cursor int; selected map[int]struct{}; multi bool; styles Styles; height int; width int; offset int }
description: "Componente lista seleccionable con cursor, scroll y seleccion simple o multiple. Implementa tea.Model."
tags: [tui, list, component, interactive]
uses_types: [list_item_go_tui, styles_go_tui]
file_path: "types/tui/list_model.go"
---
+9
View File
@@ -0,0 +1,9 @@
package tui
// MultiProgressModel gestiona multiples barras de progreso simultaneas.
// Implementa tea.Model del framework Bubble Tea.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type MultiProgressModel struct {
bars []ProgressModel
styles Styles
}
+13
View File
@@ -0,0 +1,13 @@
---
name: multi_progress_model
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type MultiProgressModel struct { bars []ProgressModel; styles Styles }
description: "Gestor de multiples barras de progreso simultaneas. Implementa tea.Model."
tags: [tui, progress, multi, component]
uses_types: [progress_model_go_tui, styles_go_tui]
file_path: "types/tui/multi_progress_model.go"
---
+21
View File
@@ -0,0 +1,21 @@
package tui
import (
"time"
"github.com/charmbracelet/bubbles/progress"
)
// ProgressModel es una barra de progreso con porcentaje, ETA y tiempo transcurrido.
// Implementa tea.Model del framework Bubble Tea.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type ProgressModel struct {
progress progress.Model
current float64
total float64
label string
styles Styles
showPct bool
showETA bool
started time.Time
}
+13
View File
@@ -0,0 +1,13 @@
---
name: progress_model
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type ProgressModel struct { progress progress.Model; current float64; total float64; label string; styles Styles; showPct bool; showETA bool; started time.Time }
description: "Barra de progreso con porcentaje, ETA y tiempo transcurrido. Implementa tea.Model."
tags: [tui, progress, component, interactive]
uses_types: [styles_go_tui]
file_path: "types/tui/progress_model.go"
---
+16
View File
@@ -0,0 +1,16 @@
package tui
import (
"github.com/charmbracelet/bubbles/spinner"
"github.com/charmbracelet/lipgloss"
)
// SpinnerModel es un indicador de carga animado con mensaje personalizable.
// Implementa tea.Model del framework Bubble Tea.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type SpinnerModel struct {
spinner spinner.Model
message string
style lipgloss.Style
active bool
}
+13
View File
@@ -0,0 +1,13 @@
---
name: spinner_model
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type SpinnerModel struct { spinner spinner.Model; message string; style lipgloss.Style; active bool }
description: "Indicador de carga animado con mensaje personalizable. Implementa tea.Model."
tags: [tui, spinner, loading, component]
uses_types: []
file_path: "types/tui/spinner_model.go"
---
+12
View File
@@ -0,0 +1,12 @@
package tui
import "time"
// SpinnerWithTimeoutModel es un spinner que se auto-detiene tras un timeout.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type SpinnerWithTimeoutModel struct {
SpinnerModel
timeout time.Duration
started time.Time
finished bool
}
+13
View File
@@ -0,0 +1,13 @@
---
name: spinner_with_timeout_model
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type SpinnerWithTimeoutModel struct { SpinnerModel; timeout time.Duration; started time.Time; finished bool }
description: "Spinner que se auto-detiene tras un timeout configurable. Embeds SpinnerModel."
tags: [tui, spinner, timeout, component]
uses_types: [spinner_model_go_tui]
file_path: "types/tui/spinner_with_timeout_model.go"
---
+34
View File
@@ -0,0 +1,34 @@
package tui
import "github.com/charmbracelet/lipgloss"
// Styles contiene todos los estilos lipgloss pre-configurados para una aplicacion TUI.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type Styles struct {
Theme Theme
Title lipgloss.Style
Subtitle lipgloss.Style
Header lipgloss.Style
Label lipgloss.Style
Text lipgloss.Style
Muted lipgloss.Style
Code lipgloss.Style
Success lipgloss.Style
Error lipgloss.Style
Warning lipgloss.Style
Info lipgloss.Style
Border lipgloss.Style
Box lipgloss.Style
List lipgloss.Style
ListItem lipgloss.Style
Selected lipgloss.Style
Unselected lipgloss.Style
Button lipgloss.Style
ButtonActive lipgloss.Style
Input lipgloss.Style
Cursor lipgloss.Style
Container lipgloss.Style
Section lipgloss.Style
Divider lipgloss.Style
StatusBar lipgloss.Style
}
+13
View File
@@ -0,0 +1,13 @@
---
name: styles
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type Styles struct { Theme Theme; Title lipgloss.Style; Subtitle lipgloss.Style; Header lipgloss.Style; Label lipgloss.Style; Text lipgloss.Style; Muted lipgloss.Style; Code lipgloss.Style; Success lipgloss.Style; Error lipgloss.Style; Warning lipgloss.Style; Info lipgloss.Style; Border lipgloss.Style; Box lipgloss.Style; List lipgloss.Style; ListItem lipgloss.Style; Selected lipgloss.Style; Unselected lipgloss.Style; Button lipgloss.Style; ButtonActive lipgloss.Style; Input lipgloss.Style; Cursor lipgloss.Style; Container lipgloss.Style; Section lipgloss.Style; Divider lipgloss.Style; StatusBar lipgloss.Style }
description: "Coleccion completa de estilos lipgloss pre-configurados para tipografia, estados, componentes y layout."
tags: [tui, styles, lipgloss, theme]
uses_types: [theme_go_tui]
file_path: "types/tui/styles.go"
---
+17
View File
@@ -0,0 +1,17 @@
package tui
import "github.com/charmbracelet/lipgloss"
// Theme define una paleta de 9 colores semanticos para terminal.
// Implementation: github.com/lucasdataproyects/devfactory/tui
type Theme struct {
Primary lipgloss.Color
Secondary lipgloss.Color
Success lipgloss.Color
Error lipgloss.Color
Warning lipgloss.Color
Info lipgloss.Color
Muted lipgloss.Color
Text lipgloss.Color
Border lipgloss.Color
}
+13
View File
@@ -0,0 +1,13 @@
---
name: theme
lang: go
domain: tui
version: "1.0.0"
algebraic: product
definition: |
type Theme struct { Primary lipgloss.Color; Secondary lipgloss.Color; Success lipgloss.Color; Error lipgloss.Color; Warning lipgloss.Color; Info lipgloss.Color; Muted lipgloss.Color; Text lipgloss.Color; Border lipgloss.Color }
description: "Paleta de colores para terminal con 9 colores semanticos. Base del sistema de estilos."
tags: [tui, theme, styles, colors]
uses_types: []
file_path: "types/tui/theme.go"
---