@@ -1,6 +1,7 @@
1package models
1package models
6 tea "github.com/charmbracelet/bubbletea/v2"
7 tea "github.com/charmbracelet/bubbletea/v2"
@@ -9,6 +10,7 @@ import (
9 "github.com/charmbracelet/crush/internal/tui/components/completions"
10 "github.com/charmbracelet/crush/internal/tui/components/completions"
10 "github.com/charmbracelet/crush/internal/tui/components/core/list"
11 "github.com/charmbracelet/crush/internal/tui/components/core/list"
11 "github.com/charmbracelet/crush/internal/tui/components/dialogs/commands"
12 "github.com/charmbracelet/crush/internal/tui/components/dialogs/commands"
13+ "github.com/charmbracelet/crush/internal/tui/styles"
12 "github.com/charmbracelet/crush/internal/tui/util"
14 "github.com/charmbracelet/crush/internal/tui/util"
13 "github.com/charmbracelet/lipgloss/v2"
15 "github.com/charmbracelet/lipgloss/v2"
@@ -18,11 +20,12 @@ type ModelListComponent struct {
18 modelType int
20 modelType int
21−func NewModelListComponent(keyMap list.KeyMap, inputStyle lipgloss.Style) *ModelListComponent {
23+func NewModelListComponent(keyMap list.KeyMap, inputStyle lipgloss.Style, inputPlaceholder string) *ModelListComponent {
22 modelList := list.New(
24 modelList := list.New(
23 list.WithFilterable(true),
25 list.WithFilterable(true),
24 list.WithKeyMap(keyMap),
26 list.WithKeyMap(keyMap),
25 list.WithInputStyle(inputStyle),
27 list.WithInputStyle(inputStyle),
28+ list.WithFilterPlaceholder(inputPlaceholder),
26 list.WithWrapNavigation(true),
29 list.WithWrapNavigation(true),
@@ -59,6 +62,7 @@ func (m *ModelListComponent) SelectedIndex() int {
61func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
64func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
65+ t := styles.CurrentTheme()
62 m.modelType = modelType
66 m.modelType = modelType
64 providers, err := config.Providers()
68 providers, err := config.Providers()
@@ -77,6 +81,9 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
77 currentModel = cfg.Models[config.SelectedModelTypeSmall]
81 currentModel = cfg.Models[config.SelectedModelTypeSmall]
84+ configuredIcon := t.S().Base.Foreground(t.Success).Render(styles.CheckIcon)
85+ configured := fmt.Sprintf("%s %s", configuredIcon, t.S().Subtle.Render("Configured"))
80 // Create a map to track which providers we've already added
87 // Create a map to track which providers we've already added
81 addedProviders := make(map[string]bool)
88 addedProviders := make(map[string]bool)
@@ -120,7 +127,9 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
120 if name == "" {
127 if name == "" {
121 name = string(configProvider.ID)
128 name = string(configProvider.ID)
123− modelItems = append(modelItems, commands.NewItemSection(name))
130+ section := commands.NewItemSection(name)
131+ section.SetInfo(configured)
132+ modelItems = append(modelItems, section)
124 for _, model := range configProvider.Models {
133 for _, model := range configProvider.Models {
125 modelItems = append(modelItems, completions.NewCompletionItem(model.Name, ModelOption{
134 modelItems = append(modelItems, completions.NewCompletionItem(model.Name, ModelOption{
126 Provider: configProvider,
135 Provider: configProvider,
@@ -150,7 +159,12 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
150 if name == "" {
159 if name == "" {
151 name = string(provider.ID)
160 name = string(provider.ID)
153− modelItems = append(modelItems, commands.NewItemSection(name))
163+ section := commands.NewItemSection(name)
164+ if _, ok := cfg.Providers[string(provider.ID)]; ok {
165+ section.SetInfo(configured)
167+ modelItems = append(modelItems, section)
154 for _, model := range provider.Models {
168 for _, model := range provider.Models {
155 modelItems = append(modelItems, completions.NewCompletionItem(model.Name, ModelOption{
169 modelItems = append(modelItems, completions.NewCompletionItem(model.Name, ModelOption{
156 Provider: provider,
170 Provider: provider,
@@ -169,3 +183,7 @@ func (m *ModelListComponent) SetModelType(modelType int) tea.Cmd {
169func (m *ModelListComponent) GetModelType() int {
183func (m *ModelListComponent) GetModelType() int {
170 return m.modelType
184 return m.modelType
187+func (m *ModelListComponent) SetInputPlaceholder(placeholder string) {
188+ m.list.SetFilterPlaceholder(placeholder)