-
Notifications
You must be signed in to change notification settings - Fork 1
Closed
Description
Overview
Dialog system is COMPLETELY MISSING. We need modal dialogs for confirmations, inputs, and selections.
What Exists
- ❌ NO dialog system
- ❌ NO confirmation dialogs
- ❌ NO input prompts
- ❌ NO modal management
Objective
Create a production-ready dialog system similar to VS Crush, with:
- Dialog stacking (multiple dialogs)
- Focus management
- Layer-based rendering
- Common dialog types
Tasks
1. Create Dialog Manager
// internal/tui/dialogs/manager.go
type DialogModel interface {
Component
Sizeable
Position() (int, int)
ID() DialogID
}
type DialogManager struct {
dialogs []DialogModel
idMap map[DialogID]int
width, height int
}
func (d *DialogManager) Open(dialog DialogModel) tea.Cmd
func (d *DialogManager) Close() tea.Cmd
func (d *DialogManager) CloseAll() tea.Cmd
func (d *DialogManager) GetLayers() []*lipgloss.Layer2. Implement Common Dialog Types
Confirmation Dialog
// internal/tui/dialogs/confirm.go
type ConfirmDialog struct {
title string
message string
onYes func() tea.Msg
onNo func() tea.Msg
selected int // 0 = Yes, 1 = No
}Input Dialog
// internal/tui/dialogs/input.go
type InputDialog struct {
title string
placeholder string
input textinput.Model
onSubmit func(string) tea.Msg
onCancel func() tea.Msg
}Selection Dialog
// internal/tui/dialogs/select.go
type SelectDialog struct {
title string
items []SelectItem
selected int
onSelect func(SelectItem) tea.Msg
searchable bool
}3. Dialog Messages
// internal/tui/dialogs/messages.go
type OpenDialogMsg struct {
Model DialogModel
}
type CloseDialogMsg struct{}
type DialogResultMsg struct {
DialogID DialogID
Result interface{}
}Deliverables
-
internal/tui/dialogs/manager.go- Dialog stack manager -
internal/tui/dialogs/confirm.go- Confirmation dialog -
internal/tui/dialogs/input.go- Text input dialog -
internal/tui/dialogs/select.go- Selection dialog -
internal/tui/dialogs/messages.go- Dialog messages -
internal/tui/dialogs/styles.go- Dialog styling - Unit tests for each dialog type
- Integration test with main model
Files to Update
internal/tui/model.go- Add DialogManager fieldinternal/tui/update.go- Handle dialog messagesinternal/tui/view.go- Render dialog layersinternal/cmd/setup.go- Use dialogs for prompts
Example Usage
// Open confirmation dialog
return m, util.CmdHandler(dialogs.OpenDialogMsg{
Model: dialogs.NewConfirmDialog(
"Quit?",
"Are you sure you want to quit?",
func() tea.Msg { return tea.Quit() },
func() tea.Msg { return nil },
),
})
// Open input dialog
return m, util.CmdHandler(dialogs.OpenDialogMsg{
Model: dialogs.NewInputDialog(
"Enter Session Name",
"My Session",
func(name string) tea.Msg {
return CreateSessionMsg{Name: name}
},
),
})Success Criteria
- ✅ 3 dialog types working (confirm, input, select)
- ✅ Dialog stacking works (multiple dialogs)
- ✅ Focus management correct
- ✅ ESC closes dialog
- ✅ No memory leaks
Dependencies
- Issue [Phase 1.1] Extract Component Interfaces from Existing Systems #131 (Component Interfaces)
Estimated Effort
4-5 days
Reference
- Gap Analysis:
docs/gap-analysis/BUBBLETEA_UI_UX_GAP_ANALYSIS.mdsection 4 - VS Crush Example:
vs-crush/internal/tui/components/dialogs/
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels