summaryrefslogtreecommitdiff
path: root/internal/client/ui/layouts
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2024-11-25 21:48:02 +0200
committerKyren223 <Kyren223@proton.me>2024-11-25 21:48:02 +0200
commit4220143b0412974a3668836fedf8af09d58caa99 (patch)
tree1a868f941dba9bfac41e3e2754a38491bb8167a7 /internal/client/ui/layouts
parentad1ce2249347f61fed7c760f38f6dfac07441b50 (diff)
Implemented basic horizontal/vertical layout
Diffstat (limited to 'internal/client/ui/layouts')
-rw-r--r--internal/client/ui/layouts/flex/flex.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/internal/client/ui/layouts/flex/flex.go b/internal/client/ui/layouts/flex/flex.go
new file mode 100644
index 0000000..48a3090
--- /dev/null
+++ b/internal/client/ui/layouts/flex/flex.go
@@ -0,0 +1,56 @@
+package flex
+
+import (
+ tea "github.com/charmbracelet/bubbletea"
+ "github.com/charmbracelet/lipgloss"
+)
+
+type Model struct {
+ Style lipgloss.Style
+ ItemStyle lipgloss.Style
+
+ contents []string
+
+ Position lipgloss.Position
+ Gap int
+ Vertical bool
+}
+
+func New() Model {
+ return Model{}
+}
+
+func (m Model) Init() tea.Cmd {
+ return nil
+}
+
+func (m Model) View() string {
+ contents := make([]string, len(m.contents))
+ for i, content := range contents {
+ content = m.ItemStyle.Render(content)
+ if i != 0 {
+ if m.Vertical {
+ contents[i] = lipgloss.NewStyle().PaddingTop(m.Gap).Render(content)
+ } else {
+ contents[i] = lipgloss.NewStyle().PaddingLeft(m.Gap).Render(content)
+ }
+ }
+ }
+
+ var result string
+ if m.Vertical {
+ result = lipgloss.JoinVertical(m.Position, contents...)
+ } else {
+ result = lipgloss.JoinHorizontal(m.Position, contents...)
+ }
+
+ return m.Style.Render(result)
+}
+
+func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) {
+ return m, nil
+}
+
+func (m *Model) SetContents(contents []string) {
+ m.contents = contents
+}