From c53e8c4e41aa88566b101431bcd104ebf7b34312 Mon Sep 17 00:00:00 2001 From: T Date: Wed, 6 Aug 2025 16:00:05 -0600 Subject: TUI fixes, and WIP modal dialog rendering --- internal/tui/modal.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 internal/tui/modal.go (limited to 'internal/tui/modal.go') diff --git a/internal/tui/modal.go b/internal/tui/modal.go new file mode 100644 index 0000000..3a57880 --- /dev/null +++ b/internal/tui/modal.go @@ -0,0 +1,59 @@ +package tui + +import "github.com/charmbracelet/lipgloss/v2" + +type ModalType int + +const ( + ModalTypeSearch ModalType = iota + ModalTypeClient + ModalTypeProject + ModalTypeDeleteConfirmation + ModalTypeEntry +) + +type ModalBoxModel struct { + Active bool + + Type ModalType +} + +func (m ModalBoxModel) RenderCenteredOver(mainContent string, app AppModel) string { + if !m.Active { + return mainContent + } + + modalContent := m.Render() + + base := lipgloss.NewLayer(mainContent) + + overlayWidth := 60 + overlayHeight := 5 + overlayLeft := (app.width - overlayWidth) / 2 + overlayTop := (app.height - overlayHeight) / 2 + + overlayStyle := lipgloss.NewStyle().Height(overlayHeight).Width(overlayWidth).Border(lipgloss.RoundedBorder()).BorderForeground(lipgloss.Color("238")) + + overlay := lipgloss.NewLayer(overlayStyle.Render(modalContent)).Width(overlayWidth).Height(overlayHeight) + + canvas := lipgloss.NewCanvas( + base.Z(0), + overlay.X(overlayLeft).Y(overlayTop).Z(1), + ) + + return canvas.Render() +} + +func (m ModalBoxModel) Render() string { + switch m.Type { + case ModalTypeSearch: + return "SEARCH BOX" + default: // REMOVE ME + return "DEFAULT CONTENT" + } +} + +func (m *ModalBoxModel) activate(t ModalType) { + m.Active = true + m.Type = t +} -- cgit v1.2.3