| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package models
- import (
- "charm.land/bubbles/v2/key"
- )
- type KeyMap struct {
- Select,
- Next,
- Previous,
- Choose,
- Tab,
- Close key.Binding
- isAPIKeyHelp bool
- isAPIKeyValid bool
- isClaudeAuthChoiceHelp bool
- isClaudeOAuthHelp bool
- isClaudeOAuthURLState bool
- isClaudeOAuthHelpComplete bool
- }
- func DefaultKeyMap() KeyMap {
- return KeyMap{
- Select: key.NewBinding(
- key.WithKeys("enter", "ctrl+y"),
- key.WithHelp("enter", "choose"),
- ),
- Next: key.NewBinding(
- key.WithKeys("down", "ctrl+n"),
- key.WithHelp("↓", "next item"),
- ),
- Previous: key.NewBinding(
- key.WithKeys("up", "ctrl+p"),
- key.WithHelp("↑", "previous item"),
- ),
- Choose: key.NewBinding(
- key.WithKeys("left", "right", "h", "l"),
- key.WithHelp("←→", "choose"),
- ),
- Tab: key.NewBinding(
- key.WithKeys("tab"),
- key.WithHelp("tab", "toggle type"),
- ),
- Close: key.NewBinding(
- key.WithKeys("esc", "alt+esc"),
- key.WithHelp("esc", "exit"),
- ),
- }
- }
- // KeyBindings implements layout.KeyMapProvider
- func (k KeyMap) KeyBindings() []key.Binding {
- return []key.Binding{
- k.Select,
- k.Next,
- k.Previous,
- k.Tab,
- k.Close,
- }
- }
- // FullHelp implements help.KeyMap.
- func (k KeyMap) FullHelp() [][]key.Binding {
- m := [][]key.Binding{}
- slice := k.KeyBindings()
- for i := 0; i < len(slice); i += 4 {
- end := min(i+4, len(slice))
- m = append(m, slice[i:end])
- }
- return m
- }
- // ShortHelp implements help.KeyMap.
- func (k KeyMap) ShortHelp() []key.Binding {
- if k.isClaudeAuthChoiceHelp {
- return []key.Binding{
- key.NewBinding(
- key.WithKeys("left", "right", "h", "l"),
- key.WithHelp("←→", "choose"),
- ),
- key.NewBinding(
- key.WithKeys("enter"),
- key.WithHelp("enter", "accept"),
- ),
- key.NewBinding(
- key.WithKeys("esc"),
- key.WithHelp("esc", "back"),
- ),
- }
- }
- if k.isClaudeOAuthHelp {
- if k.isClaudeOAuthHelpComplete {
- return []key.Binding{
- key.NewBinding(
- key.WithKeys("enter"),
- key.WithHelp("enter", "close"),
- ),
- }
- }
- enterHelp := "submit"
- if k.isClaudeOAuthURLState {
- enterHelp = "open"
- }
- bindings := []key.Binding{
- key.NewBinding(
- key.WithKeys("enter"),
- key.WithHelp("enter", enterHelp),
- ),
- }
- if k.isClaudeOAuthURLState {
- bindings = append(bindings, key.NewBinding(
- key.WithKeys("c"),
- key.WithHelp("c", "copy url"),
- ))
- }
- bindings = append(bindings, key.NewBinding(
- key.WithKeys("esc"),
- key.WithHelp("esc", "back"),
- ))
- return bindings
- }
- if k.isAPIKeyHelp && !k.isAPIKeyValid {
- return []key.Binding{
- key.NewBinding(
- key.WithKeys("enter"),
- key.WithHelp("enter", "submit"),
- ),
- k.Close,
- }
- } else if k.isAPIKeyValid {
- return []key.Binding{
- k.Select,
- }
- }
- return []key.Binding{
- key.NewBinding(
- key.WithKeys("down", "up"),
- key.WithHelp("↑↓", "choose"),
- ),
- k.Tab,
- k.Select,
- k.Close,
- }
- }
|