summaryrefslogtreecommitdiff
path: root/internal/client/ui/auth/field
diff options
context:
space:
mode:
Diffstat (limited to 'internal/client/ui/auth/field')
-rw-r--r--internal/client/ui/auth/field/field.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/internal/client/ui/auth/field/field.go b/internal/client/ui/auth/field/field.go
new file mode 100644
index 0000000..afc55b1
--- /dev/null
+++ b/internal/client/ui/auth/field/field.go
@@ -0,0 +1,67 @@
+package field
+
+import (
+ "strings"
+
+ "github.com/charmbracelet/bubbles/textinput"
+ tea "github.com/charmbracelet/bubbletea"
+ "github.com/charmbracelet/lipgloss"
+)
+
+
+type Model struct {
+ Input textinput.Model
+ Style lipgloss.Style
+ FocusedStyle lipgloss.Style
+ BlurredStyle lipgloss.Style
+ ErrorStyle lipgloss.Style
+}
+
+func New(width int) Model {
+ t := textinput.New()
+ t.Width = width
+ t.CharLimit = width
+ t.Prompt = ""
+
+ m := Model{
+ Input: t,
+ }
+
+ m.Blur()
+
+ return m
+}
+
+func (m Model) Init() tea.Cmd {
+ return nil
+}
+
+func (m Model) View() string {
+ var builder strings.Builder
+
+ builder.WriteString(m.Style.Render(m.Input.View()))
+ builder.WriteRune('\n')
+ if m.Input.Err != nil {
+ builder.WriteString(m.ErrorStyle.Render(m.Input.Err.Error()))
+ }
+
+ return builder.String()
+}
+
+func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
+ var cmd tea.Cmd
+ m.Input, cmd = m.Input.Update(msg)
+ return m, cmd
+}
+
+func (m *Model) Focus() tea.Cmd {
+ m.Input.PromptStyle = m.FocusedStyle
+ m.Input.TextStyle = m.FocusedStyle
+ return m.Input.Focus()
+}
+
+func (m *Model) Blur() {
+ m.Input.Blur()
+ m.Input.PromptStyle = m.BlurredStyle
+ m.Input.TextStyle = m.BlurredStyle
+}