on main help sign in
chore: change the layout package location
168fb7dKujtim Hoxha
internal/tui/components/chat/chat.go+1−1
@@ -12,7 +12,7 @@ import (
12 "github.com/charmbracelet/crush/internal/session"
12 "github.com/charmbracelet/crush/internal/session"
13 "github.com/charmbracelet/crush/internal/tui/components/chat/messages"
13 "github.com/charmbracelet/crush/internal/tui/components/chat/messages"
14 "github.com/charmbracelet/crush/internal/tui/components/core/list"
14 "github.com/charmbracelet/crush/internal/tui/components/core/list"
15− "github.com/charmbracelet/crush/internal/tui/layout"
15+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
16 "github.com/charmbracelet/crush/internal/tui/util"
16 "github.com/charmbracelet/crush/internal/tui/util"
17 "github.com/charmbracelet/lipgloss/v2"
17 "github.com/charmbracelet/lipgloss/v2"
18)
18)
internal/tui/components/chat/editor/editor.go−8
@@ -21,7 +21,6 @@ import (
21 "github.com/charmbracelet/crush/internal/tui/components/dialogs"
21 "github.com/charmbracelet/crush/internal/tui/components/dialogs"
22 "github.com/charmbracelet/crush/internal/tui/components/dialogs/filepicker"
22 "github.com/charmbracelet/crush/internal/tui/components/dialogs/filepicker"
23 "github.com/charmbracelet/crush/internal/tui/components/dialogs/quit"
23 "github.com/charmbracelet/crush/internal/tui/components/dialogs/quit"
24− "github.com/charmbracelet/crush/internal/tui/layout"
25 "github.com/charmbracelet/crush/internal/tui/styles"
24 "github.com/charmbracelet/crush/internal/tui/styles"
26 "github.com/charmbracelet/crush/internal/tui/util"
25 "github.com/charmbracelet/crush/internal/tui/util"
27 "github.com/charmbracelet/lipgloss/v2"
26 "github.com/charmbracelet/lipgloss/v2"
@@ -327,13 +326,6 @@ func (m *editorCmp) attachmentsContent() string {
327 return content
326 return content
328}
327}
329
328
330−func (m *editorCmp) BindingKeys() []key.Binding {
331− bindings := []key.Binding{}
332− bindings = append(bindings, layout.KeyMapToSlice(m.keyMap)...)
333− bindings = append(bindings, layout.KeyMapToSlice(DeleteKeyMaps)...)
334− return bindings
335−}
336−
337func (m *editorCmp) SetPosition(x, y int) tea.Cmd {
329func (m *editorCmp) SetPosition(x, y int) tea.Cmd {
338 m.x = x
330 m.x = x
339 m.y = y
331 m.y = y
internal/tui/components/chat/editor/keys.go+1−1
@@ -2,7 +2,7 @@ package editor
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type EditorKeyMap struct {
8type EditorKeyMap struct {
internal/tui/components/chat/messages/messages.go+1−1
@@ -14,7 +14,7 @@ import (
14 "github.com/charmbracelet/crush/internal/message"
14 "github.com/charmbracelet/crush/internal/message"
15 "github.com/charmbracelet/crush/internal/tui/components/anim"
15 "github.com/charmbracelet/crush/internal/tui/components/anim"
16 "github.com/charmbracelet/crush/internal/tui/components/core"
16 "github.com/charmbracelet/crush/internal/tui/components/core"
17− "github.com/charmbracelet/crush/internal/tui/layout"
17+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
18 "github.com/charmbracelet/crush/internal/tui/styles"
18 "github.com/charmbracelet/crush/internal/tui/styles"
19 "github.com/charmbracelet/crush/internal/tui/util"
19 "github.com/charmbracelet/crush/internal/tui/util"
20)
20)
internal/tui/components/chat/messages/tool.go+1−1
@@ -7,7 +7,7 @@ import (
7 tea "github.com/charmbracelet/bubbletea/v2"
7 tea "github.com/charmbracelet/bubbletea/v2"
8 "github.com/charmbracelet/crush/internal/message"
8 "github.com/charmbracelet/crush/internal/message"
9 "github.com/charmbracelet/crush/internal/tui/components/anim"
9 "github.com/charmbracelet/crush/internal/tui/components/anim"
10− "github.com/charmbracelet/crush/internal/tui/layout"
10+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
11 "github.com/charmbracelet/crush/internal/tui/styles"
11 "github.com/charmbracelet/crush/internal/tui/styles"
12 "github.com/charmbracelet/crush/internal/tui/util"
12 "github.com/charmbracelet/crush/internal/tui/util"
13 "github.com/charmbracelet/lipgloss/v2"
13 "github.com/charmbracelet/lipgloss/v2"
internal/tui/components/chat/sidebar/sidebar.go+1−1
@@ -11,7 +11,7 @@ import (
11 "github.com/charmbracelet/crush/internal/tui/components/chat"
11 "github.com/charmbracelet/crush/internal/tui/components/chat"
12 "github.com/charmbracelet/crush/internal/tui/components/core"
12 "github.com/charmbracelet/crush/internal/tui/components/core"
13 "github.com/charmbracelet/crush/internal/tui/components/logo"
13 "github.com/charmbracelet/crush/internal/tui/components/logo"
14− "github.com/charmbracelet/crush/internal/tui/layout"
14+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
15 "github.com/charmbracelet/crush/internal/tui/styles"
15 "github.com/charmbracelet/crush/internal/tui/styles"
16 "github.com/charmbracelet/crush/internal/tui/util"
16 "github.com/charmbracelet/crush/internal/tui/util"
17 "github.com/charmbracelet/crush/internal/version"
17 "github.com/charmbracelet/crush/internal/version"
internal/tui/components/completions/item.go+1−1
@@ -5,7 +5,7 @@ import (
5
5
6 tea "github.com/charmbracelet/bubbletea/v2"
6 tea "github.com/charmbracelet/bubbletea/v2"
7 "github.com/charmbracelet/crush/internal/tui/components/core/list"
7 "github.com/charmbracelet/crush/internal/tui/components/core/list"
8− "github.com/charmbracelet/crush/internal/tui/layout"
8+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
9 "github.com/charmbracelet/crush/internal/tui/styles"
9 "github.com/charmbracelet/crush/internal/tui/styles"
10 "github.com/charmbracelet/crush/internal/tui/util"
10 "github.com/charmbracelet/crush/internal/tui/util"
11 "github.com/charmbracelet/lipgloss/v2"
11 "github.com/charmbracelet/lipgloss/v2"
internal/tui/components/completions/keys.go+1−1
@@ -2,7 +2,7 @@ package completions
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type KeyMap struct {
8type KeyMap struct {
internal/tui/layout/container.go → internal/tui/components/core/layout/container.gorenamed+6−6
@@ -1,7 +1,7 @@
1package layout
1package layout
2
2
3import (
3import (
4− "github.com/charmbracelet/bubbles/v2/key"
4+ "github.com/charmbracelet/bubbles/v2/help"
5 tea "github.com/charmbracelet/bubbletea/v2"
5 tea "github.com/charmbracelet/bubbletea/v2"
6 "github.com/charmbracelet/crush/internal/tui/styles"
6 "github.com/charmbracelet/crush/internal/tui/styles"
7 "github.com/charmbracelet/crush/internal/tui/util"
7 "github.com/charmbracelet/crush/internal/tui/util"
@@ -11,7 +11,7 @@ import (
11type Container interface {
11type Container interface {
12 util.Model
12 util.Model
13 Sizeable
13 Sizeable
14− Bindings
14+ Help
15 Positionable
15 Positionable
16 Focusable
16 Focusable
17}
17}
@@ -157,11 +157,11 @@ func (c *container) SetPosition(x, y int) tea.Cmd {
157 return nil
157 return nil
158}
158}
159
159
160−func (c *container) BindingKeys() []key.Binding {
160+func (c *container) Help() help.KeyMap {
161− if b, ok := c.content.(Bindings); ok {
161+ if b, ok := c.content.(Help); ok {
162− return b.BindingKeys()
162+ return b.Help()
163 }
163 }
164− return []key.Binding{}
164+ return nil
165}
165}
166
166
167// Blur implements Container.
167// Blur implements Container.
internal/tui/layout/layout.go → internal/tui/components/core/layout/layout.gorenamed+2−6
@@ -19,18 +19,14 @@ type Sizeable interface {
19 GetSize() (int, int)
19 GetSize() (int, int)
20}
20}
21
21
22−type Bindings interface {
22+type Help interface {
23− BindingKeys() []key.Binding
23+ Help() help.KeyMap
24}
24}
25
25
26type Positionable interface {
26type Positionable interface {
27 SetPosition(x, y int) tea.Cmd
27 SetPosition(x, y int) tea.Cmd
28}
28}
29
29
30−type Help interface {
31− Help() help.KeyMap
32−}
33−
34func KeyMapToSlice(t any) (bindings []key.Binding) {
30func KeyMapToSlice(t any) (bindings []key.Binding) {
35 typ := reflect.TypeOf(t)
31 typ := reflect.TypeOf(t)
36 if typ.Kind() != reflect.Struct {
32 if typ.Kind() != reflect.Struct {
internal/tui/layout/split.go → internal/tui/components/core/layout/split.gorenamed+10−11
@@ -1,7 +1,7 @@
1package layout
1package layout
2
2
3import (
3import (
4− "github.com/charmbracelet/bubbles/v2/key"
4+ "github.com/charmbracelet/bubbles/v2/help"
5 tea "github.com/charmbracelet/bubbletea/v2"
5 tea "github.com/charmbracelet/bubbletea/v2"
6 "github.com/charmbracelet/crush/internal/tui/styles"
6 "github.com/charmbracelet/crush/internal/tui/styles"
7 "github.com/charmbracelet/crush/internal/tui/util"
7 "github.com/charmbracelet/crush/internal/tui/util"
@@ -19,7 +19,7 @@ const (
19type SplitPaneLayout interface {
19type SplitPaneLayout interface {
20 util.Model
20 util.Model
21 Sizeable
21 Sizeable
22− Bindings
22+ Help
23 SetLeftPanel(panel Container) tea.Cmd
23 SetLeftPanel(panel Container) tea.Cmd
24 SetRightPanel(panel Container) tea.Cmd
24 SetRightPanel(panel Container) tea.Cmd
25 SetBottomPanel(panel Container) tea.Cmd
25 SetBottomPanel(panel Container) tea.Cmd
@@ -269,24 +269,23 @@ func (s *splitPaneLayout) ClearBottomPanel() tea.Cmd {
269 return nil
269 return nil
270}
270}
271
271
272−func (s *splitPaneLayout) BindingKeys() []key.Binding {
272+func (s *splitPaneLayout) Help() help.KeyMap {
273− keys := []key.Binding{}
274 if s.leftPanel != nil {
273 if s.leftPanel != nil {
275− if b, ok := s.leftPanel.(Bindings); ok {
274+ if b, ok := s.leftPanel.(Help); ok && s.leftPanel.IsFocused() {
276− keys = append(keys, b.BindingKeys()...)
275+ return b.Help()
277 }
276 }
278 }
277 }
279 if s.rightPanel != nil {
278 if s.rightPanel != nil {
280− if b, ok := s.rightPanel.(Bindings); ok {
279+ if b, ok := s.rightPanel.(Help); ok && s.rightPanel.IsFocused() {
281− keys = append(keys, b.BindingKeys()...)
280+ return b.Help()
282 }
281 }
283 }
282 }
284 if s.bottomPanel != nil {
283 if s.bottomPanel != nil {
285− if b, ok := s.bottomPanel.(Bindings); ok {
284+ if b, ok := s.bottomPanel.(Help); ok && s.bottomPanel.IsFocused() {
286− keys = append(keys, b.BindingKeys()...)
285+ return b.Help()
287 }
286 }
288 }
287 }
289− return keys
288+ return nil
290}
289}
291
290
292func (s *splitPaneLayout) FocusPanel(panel LayoutPanel) tea.Cmd {
291func (s *splitPaneLayout) FocusPanel(panel LayoutPanel) tea.Cmd {
internal/tui/components/core/list/keys.go+1−1
@@ -2,7 +2,7 @@ package list
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type KeyMap struct {
8type KeyMap struct {
internal/tui/components/core/list/list.go+1−1
@@ -11,7 +11,7 @@ import (
11 "github.com/charmbracelet/bubbles/v2/textinput"
11 "github.com/charmbracelet/bubbles/v2/textinput"
12 tea "github.com/charmbracelet/bubbletea/v2"
12 tea "github.com/charmbracelet/bubbletea/v2"
13 "github.com/charmbracelet/crush/internal/tui/components/anim"
13 "github.com/charmbracelet/crush/internal/tui/components/anim"
14− "github.com/charmbracelet/crush/internal/tui/layout"
14+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
15 "github.com/charmbracelet/crush/internal/tui/styles"
15 "github.com/charmbracelet/crush/internal/tui/styles"
16 "github.com/charmbracelet/crush/internal/tui/util"
16 "github.com/charmbracelet/crush/internal/tui/util"
17 "github.com/charmbracelet/lipgloss/v2"
17 "github.com/charmbracelet/lipgloss/v2"
internal/tui/components/core/status/keys.go+1−1
@@ -2,7 +2,7 @@ package status
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type KeyMap struct {
8type KeyMap struct {
internal/tui/components/dialogs/commands/item.go+1−1
@@ -4,7 +4,7 @@ import (
4 tea "github.com/charmbracelet/bubbletea/v2"
4 tea "github.com/charmbracelet/bubbletea/v2"
5 "github.com/charmbracelet/crush/internal/tui/components/core"
5 "github.com/charmbracelet/crush/internal/tui/components/core"
6 "github.com/charmbracelet/crush/internal/tui/components/core/list"
6 "github.com/charmbracelet/crush/internal/tui/components/core/list"
7− "github.com/charmbracelet/crush/internal/tui/layout"
7+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
8 "github.com/charmbracelet/crush/internal/tui/styles"
8 "github.com/charmbracelet/crush/internal/tui/styles"
9 "github.com/charmbracelet/crush/internal/tui/util"
9 "github.com/charmbracelet/crush/internal/tui/util"
10 "github.com/charmbracelet/x/ansi"
10 "github.com/charmbracelet/x/ansi"
internal/tui/components/dialogs/commands/keys.go+1−1
@@ -2,7 +2,7 @@ package commands
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type CommandsDialogKeyMap struct {
8type CommandsDialogKeyMap struct {
internal/tui/components/dialogs/compact/keys.go+1−1
@@ -2,7 +2,7 @@ package compact
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8// KeyMap defines the key bindings for the compact dialog.
8// KeyMap defines the key bindings for the compact dialog.
internal/tui/components/dialogs/filepicker/keys.go+1−1
@@ -2,7 +2,7 @@ package filepicker
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8// KeyMap defines keyboard bindings for dialog management.
8// KeyMap defines keyboard bindings for dialog management.
internal/tui/components/dialogs/init/keys.go+1−1
@@ -2,7 +2,7 @@ package init
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type KeyMap struct {
8type KeyMap struct {
internal/tui/components/dialogs/keys.go+1−1
@@ -2,7 +2,7 @@ package dialogs
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8// KeyMap defines keyboard bindings for dialog management.
8// KeyMap defines keyboard bindings for dialog management.
internal/tui/components/dialogs/models/keys.go+1−1
@@ -2,7 +2,7 @@ package models
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type KeyMap struct {
8type KeyMap struct {
internal/tui/components/dialogs/permissions/keys.go+1−1
@@ -2,7 +2,7 @@ package permissions
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type KeyMap struct {
8type KeyMap struct {
internal/tui/components/dialogs/quit/keys.go+1−1
@@ -2,7 +2,7 @@ package quit
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8// KeyMap defines the keyboard bindings for the quit dialog.
8// KeyMap defines the keyboard bindings for the quit dialog.
internal/tui/components/dialogs/quit/quit.go−6
@@ -4,7 +4,6 @@ import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5 tea "github.com/charmbracelet/bubbletea/v2"
5 tea "github.com/charmbracelet/bubbletea/v2"
6 "github.com/charmbracelet/crush/internal/tui/components/dialogs"
6 "github.com/charmbracelet/crush/internal/tui/components/dialogs"
7− "github.com/charmbracelet/crush/internal/tui/layout"
8 "github.com/charmbracelet/crush/internal/tui/styles"
7 "github.com/charmbracelet/crush/internal/tui/styles"
9 "github.com/charmbracelet/crush/internal/tui/util"
8 "github.com/charmbracelet/crush/internal/tui/util"
10 "github.com/charmbracelet/lipgloss/v2"
9 "github.com/charmbracelet/lipgloss/v2"
@@ -18,7 +17,6 @@ const (
18// QuitDialog represents a confirmation dialog for quitting the application.
17// QuitDialog represents a confirmation dialog for quitting the application.
19type QuitDialog interface {
18type QuitDialog interface {
20 dialogs.DialogModel
19 dialogs.DialogModel
21− layout.Bindings
22}
20}
23
21
24type quitDialogCmp struct {
22type quitDialogCmp struct {
@@ -107,10 +105,6 @@ func (q *quitDialogCmp) View() tea.View {
107 )
105 )
108}
106}
109
107
110−func (q *quitDialogCmp) BindingKeys() []key.Binding {
111− return layout.KeyMapToSlice(q.keymap)
112−}
113−
114func (q *quitDialogCmp) Position() (int, int) {
108func (q *quitDialogCmp) Position() (int, int) {
115 row := q.wHeight / 2
109 row := q.wHeight / 2
116 row -= 7 / 2
110 row -= 7 / 2
internal/tui/components/dialogs/sessions/keys.go+1−1
@@ -2,7 +2,7 @@ package sessions
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type KeyMap struct {
8type KeyMap struct {
internal/tui/components/logs/details.go+1−7
@@ -5,11 +5,10 @@ import (
5 "strings"
5 "strings"
6 "time"
6 "time"
7
7
8− "github.com/charmbracelet/bubbles/v2/key"
9 "github.com/charmbracelet/bubbles/v2/viewport"
8 "github.com/charmbracelet/bubbles/v2/viewport"
10 tea "github.com/charmbracelet/bubbletea/v2"
9 tea "github.com/charmbracelet/bubbletea/v2"
11 "github.com/charmbracelet/crush/internal/logging"
10 "github.com/charmbracelet/crush/internal/logging"
12− "github.com/charmbracelet/crush/internal/tui/layout"
11+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
13 "github.com/charmbracelet/crush/internal/tui/styles"
12 "github.com/charmbracelet/crush/internal/tui/styles"
14 "github.com/charmbracelet/crush/internal/tui/util"
13 "github.com/charmbracelet/crush/internal/tui/util"
15 "github.com/charmbracelet/lipgloss/v2"
14 "github.com/charmbracelet/lipgloss/v2"
@@ -18,7 +17,6 @@ import (
18type DetailComponent interface {
17type DetailComponent interface {
19 util.Model
18 util.Model
20 layout.Sizeable
19 layout.Sizeable
21− layout.Bindings
22}
20}
23
21
24type detailCmp struct {
22type detailCmp struct {
@@ -172,10 +170,6 @@ func (i *detailCmp) SetSize(width int, height int) tea.Cmd {
172 return nil
170 return nil
173}
171}
174
172
175−func (i *detailCmp) BindingKeys() []key.Binding {
176− return layout.KeyMapToSlice(i.viewport.KeyMap)
177−}
178−
179func NewLogsDetails() DetailComponent {
173func NewLogsDetails() DetailComponent {
180 return &detailCmp{
174 return &detailCmp{
181 viewport: viewport.New(),
175 viewport: viewport.New(),
internal/tui/components/logs/table.go+1−7
@@ -5,12 +5,11 @@ import (
5 "slices"
5 "slices"
6 "strings"
6 "strings"
7
7
8− "github.com/charmbracelet/bubbles/v2/key"
9 "github.com/charmbracelet/bubbles/v2/table"
8 "github.com/charmbracelet/bubbles/v2/table"
10 tea "github.com/charmbracelet/bubbletea/v2"
9 tea "github.com/charmbracelet/bubbletea/v2"
11 "github.com/charmbracelet/crush/internal/logging"
10 "github.com/charmbracelet/crush/internal/logging"
12 "github.com/charmbracelet/crush/internal/pubsub"
11 "github.com/charmbracelet/crush/internal/pubsub"
13− "github.com/charmbracelet/crush/internal/tui/layout"
12+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
14 "github.com/charmbracelet/crush/internal/tui/styles"
13 "github.com/charmbracelet/crush/internal/tui/styles"
15 "github.com/charmbracelet/crush/internal/tui/util"
14 "github.com/charmbracelet/crush/internal/tui/util"
16 "github.com/charmbracelet/lipgloss/v2"
15 "github.com/charmbracelet/lipgloss/v2"
@@ -19,7 +18,6 @@ import (
19type TableComponent interface {
18type TableComponent interface {
20 util.Model
19 util.Model
21 layout.Sizeable
20 layout.Sizeable
22− layout.Bindings
23}
21}
24
22
25type tableCmp struct {
23type tableCmp struct {
@@ -136,10 +134,6 @@ func (i *tableCmp) SetSize(width int, height int) tea.Cmd {
136 return nil
134 return nil
137}
135}
138
136
139−func (i *tableCmp) BindingKeys() []key.Binding {
140− return layout.KeyMapToSlice(i.table.KeyMap)
141−}
142−
143func (i *tableCmp) setRows() {
137func (i *tableCmp) setRows() {
144 rows := []table.Row{}
138 rows := []table.Row{}
145
139
internal/tui/keys.go+1−1
@@ -2,7 +2,7 @@ package tui
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type KeyMap struct {
8type KeyMap struct {
internal/tui/page/chat/chat.go+1−1
@@ -14,7 +14,7 @@ import (
14 "github.com/charmbracelet/crush/internal/tui/components/chat/editor"
14 "github.com/charmbracelet/crush/internal/tui/components/chat/editor"
15 "github.com/charmbracelet/crush/internal/tui/components/chat/sidebar"
15 "github.com/charmbracelet/crush/internal/tui/components/chat/sidebar"
16 "github.com/charmbracelet/crush/internal/tui/components/dialogs/commands"
16 "github.com/charmbracelet/crush/internal/tui/components/dialogs/commands"
17− "github.com/charmbracelet/crush/internal/tui/layout"
17+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
18 "github.com/charmbracelet/crush/internal/tui/page"
18 "github.com/charmbracelet/crush/internal/tui/page"
19 "github.com/charmbracelet/crush/internal/tui/util"
19 "github.com/charmbracelet/crush/internal/tui/util"
20)
20)
internal/tui/page/chat/keys.go+1−1
@@ -2,7 +2,7 @@ package chat
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type KeyMap struct {
8type KeyMap struct {
internal/tui/page/logs/keys.go+1−1
@@ -2,7 +2,7 @@ package logs
2
2
3import (
3import (
4 "github.com/charmbracelet/bubbles/v2/key"
4 "github.com/charmbracelet/bubbles/v2/key"
5− "github.com/charmbracelet/crush/internal/tui/layout"
5+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
6)
6)
7
7
8type KeyMap struct {
8type KeyMap struct {
internal/tui/page/logs/logs.go+1−1
@@ -5,7 +5,7 @@ import (
5 tea "github.com/charmbracelet/bubbletea/v2"
5 tea "github.com/charmbracelet/bubbletea/v2"
6 "github.com/charmbracelet/crush/internal/tui/components/core"
6 "github.com/charmbracelet/crush/internal/tui/components/core"
7 logsComponents "github.com/charmbracelet/crush/internal/tui/components/logs"
7 logsComponents "github.com/charmbracelet/crush/internal/tui/components/logs"
8− "github.com/charmbracelet/crush/internal/tui/layout"
8+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
9 "github.com/charmbracelet/crush/internal/tui/page"
9 "github.com/charmbracelet/crush/internal/tui/page"
10 "github.com/charmbracelet/crush/internal/tui/page/chat"
10 "github.com/charmbracelet/crush/internal/tui/page/chat"
11 "github.com/charmbracelet/crush/internal/tui/styles"
11 "github.com/charmbracelet/crush/internal/tui/styles"
internal/tui/tui.go+1−1
@@ -24,7 +24,7 @@ import (
24 "github.com/charmbracelet/crush/internal/tui/components/dialogs/permissions"
24 "github.com/charmbracelet/crush/internal/tui/components/dialogs/permissions"
25 "github.com/charmbracelet/crush/internal/tui/components/dialogs/quit"
25 "github.com/charmbracelet/crush/internal/tui/components/dialogs/quit"
26 "github.com/charmbracelet/crush/internal/tui/components/dialogs/sessions"
26 "github.com/charmbracelet/crush/internal/tui/components/dialogs/sessions"
27− "github.com/charmbracelet/crush/internal/tui/layout"
27+ "github.com/charmbracelet/crush/internal/tui/components/core/layout"
28 "github.com/charmbracelet/crush/internal/tui/page"
28 "github.com/charmbracelet/crush/internal/tui/page"
29 "github.com/charmbracelet/crush/internal/tui/page/chat"
29 "github.com/charmbracelet/crush/internal/tui/page/chat"
30 "github.com/charmbracelet/crush/internal/tui/page/logs"
30 "github.com/charmbracelet/crush/internal/tui/page/logs"
todos.md+24−26
@@ -1,29 +1,27 @@
1−# Chat Page
1+## TODOs before release
2−
3−## Landing page
4−
5−- [x] Implement the logo landing page
6−- [x] Add cwd improved
7−- [x] Implement Active LSPs
8−- [x] Implement Active MCPs
9−
10−## Dialogs
11−
12−- [x] Cleanup Commands
13−- [x] Sessions dialog
14−- [x] Models
15−- [x] Move sessions and model dialog to the commands
16−- [x] Add sessions shortuct
17−- [ ] Add all posible actions to the commands
18−
19−## Investigate
20
2
3+- [~] Implement help
4+ - [ ] Show full help
5+ - [ ] Make help dependent on the focused pane and page
21- [ ] Events when tool error
6- [ ] Events when tool error
22−- [ ] Fancy Spinner
23−
24−## Messages
25−
26- [ ] Fix issue with numbers (padding)
7- [ ] Fix issue with numbers (padding)
8+- [ ] Fancy Spinner
9+- [ ] Add all possible actions to the commands
10+- [ ] Parallel tool calls and permissions
27−- [ ] Run tools in parallel and add the responses in parallel
11+ - [ ] Run the tools in parallel and add results in parallel
28−- [ ] Handle parallel permission calls
12+ - [ ] Show multiple permissions dialogs
13+- [ ] Investigate messages issues
29−- [ ] Weird behavior sometimes the message does not update
14+ - [ ] Weird behavior sometimes the message does not update
15+ - [ ] Message length (I saw the message go beyond the correct length when there are errors)
16+ - [ ] Address UX issues
17+- [ ] Implement current model in the sidebar
18+- [ ] Implement changed files
19+- [ ] Implement responsive mode
20+- [ ] Revisit the core list component
21+ - [ ] This component has become super complex we might need to fix this.
22+- [ ] General cleanup and documentation
23+- [ ] Update the readme
24+
25+## Maybe
26+
27+- [ ] Revisit the provider/model/configs