1package styles23import (4 "image/color"56 "charm.land/lipgloss/v2"7)89// XXX: For now, this is in its own package so that it can be shared between10// different packages without incurring an illegal import cycle.1112// Styles defines styles for the UI.13type Styles struct {14 ActiveBorderColor color.Color15 InactiveBorderColor color.Color1617 App lipgloss.Style18 ServerName lipgloss.Style19 TopLevelNormalTab lipgloss.Style20 TopLevelActiveTab lipgloss.Style21 TopLevelActiveTabDot lipgloss.Style2223 MenuItem lipgloss.Style24 MenuLastUpdate lipgloss.Style2526 RepoSelector struct {27 Normal struct {28 Base lipgloss.Style29 Title lipgloss.Style30 Desc lipgloss.Style31 Command lipgloss.Style32 Updated lipgloss.Style33 }34 Active struct {35 Base lipgloss.Style36 Title lipgloss.Style37 Desc lipgloss.Style38 Command lipgloss.Style39 Updated lipgloss.Style40 }41 }4243 Repo struct {44 Base lipgloss.Style45 Title lipgloss.Style46 Command lipgloss.Style47 Body lipgloss.Style48 Header lipgloss.Style49 HeaderName lipgloss.Style50 HeaderDesc lipgloss.Style51 }5253 Footer lipgloss.Style54 Branch lipgloss.Style55 HelpKey lipgloss.Style56 HelpValue lipgloss.Style57 HelpDivider lipgloss.Style58 URLStyle lipgloss.Style5960 Error lipgloss.Style61 ErrorTitle lipgloss.Style62 ErrorBody lipgloss.Style6364 LogItem struct {65 Normal struct {66 Base lipgloss.Style67 Hash lipgloss.Style68 Title lipgloss.Style69 Desc lipgloss.Style70 Keyword lipgloss.Style71 }72 Active struct {73 Base lipgloss.Style74 Hash lipgloss.Style75 Title lipgloss.Style76 Desc lipgloss.Style77 Keyword lipgloss.Style78 }79 }8081 Log struct {82 Commit lipgloss.Style83 CommitHash lipgloss.Style84 CommitAuthor lipgloss.Style85 CommitDate lipgloss.Style86 CommitBody lipgloss.Style87 CommitStatsAdd lipgloss.Style88 CommitStatsDel lipgloss.Style89 Paginator lipgloss.Style90 }9192 Ref struct {93 Normal struct {94 Base lipgloss.Style95 Item lipgloss.Style96 ItemTag lipgloss.Style97 ItemDesc lipgloss.Style98 ItemHash lipgloss.Style99 }100 Active struct {101 Base lipgloss.Style102 Item lipgloss.Style103 ItemTag lipgloss.Style104 ItemDesc lipgloss.Style105 ItemHash lipgloss.Style106 }107 ItemSelector lipgloss.Style108 Paginator lipgloss.Style109 Selector lipgloss.Style110 }111112 Tree struct {113 Normal struct {114 FileName lipgloss.Style115 FileDir lipgloss.Style116 FileMode lipgloss.Style117 FileSize lipgloss.Style118 }119 Active struct {120 FileName lipgloss.Style121 FileDir lipgloss.Style122 FileMode lipgloss.Style123 FileSize lipgloss.Style124 }125 Selector lipgloss.Style126 FileContent lipgloss.Style127 Paginator lipgloss.Style128 Blame struct {129 Hash lipgloss.Style130 Message lipgloss.Style131 Who lipgloss.Style132 }133 }134135 Stash struct {136 Normal struct {137 Message lipgloss.Style138 }139 Active struct {140 Message lipgloss.Style141 }142 Title lipgloss.Style143 Selector lipgloss.Style144 }145146 Spinner lipgloss.Style147 SpinnerContainer lipgloss.Style148149 NoContent lipgloss.Style150151 StatusBar lipgloss.Style152 StatusBarKey lipgloss.Style153 StatusBarValue lipgloss.Style154 StatusBarInfo lipgloss.Style155 StatusBarBranch lipgloss.Style156 StatusBarHelp lipgloss.Style157158 Tabs lipgloss.Style159 TabInactive lipgloss.Style160 TabActive lipgloss.Style161 TabSeparator lipgloss.Style162163 Code struct {164 LineDigit lipgloss.Style165 LineBar lipgloss.Style166 }167}168169// DefaultStyles returns default styles for the UI.170func DefaultStyles() *Styles {171 highlightColor := lipgloss.Color("210")172 highlightColorDim := lipgloss.Color("174")173 selectorColor := lipgloss.Color("167")174 hashColor := lipgloss.Color("185")175176 s := new(Styles)177178 s.ActiveBorderColor = lipgloss.Color("62")179 s.InactiveBorderColor = lipgloss.Color("241")180181 s.App = lipgloss.NewStyle().182 Margin(1, 2)183184 s.ServerName = lipgloss.NewStyle().185 Height(1).186 MarginLeft(1).187 MarginBottom(1).188 Padding(0, 1).189 Background(lipgloss.Color("57")).190 Foreground(lipgloss.Color("229")).191 Bold(true)192193 s.TopLevelNormalTab = lipgloss.NewStyle().194 MarginRight(2)195196 s.TopLevelActiveTab = s.TopLevelNormalTab.197 Foreground(lipgloss.Color("36"))198199 s.TopLevelActiveTabDot = lipgloss.NewStyle().200 Foreground(lipgloss.Color("36"))201202 s.RepoSelector.Normal.Base = lipgloss.NewStyle().203 PaddingLeft(1).204 Border(lipgloss.Border{Left: " "}, false, false, false, true).205 Height(3)206207 s.RepoSelector.Normal.Title = lipgloss.NewStyle().Bold(true)208209 s.RepoSelector.Normal.Desc = lipgloss.NewStyle().210 Foreground(lipgloss.Color("243"))211212 s.RepoSelector.Normal.Command = lipgloss.NewStyle().213 Foreground(lipgloss.Color("132"))214215 s.RepoSelector.Normal.Updated = lipgloss.NewStyle().216 Foreground(lipgloss.Color("243"))217218 s.RepoSelector.Active.Base = s.RepoSelector.Normal.Base.219 BorderStyle(lipgloss.Border{Left: "┃"}).220 BorderForeground(lipgloss.Color("176"))221222 s.RepoSelector.Active.Title = s.RepoSelector.Normal.Title.223 Foreground(lipgloss.Color("212"))224225 s.RepoSelector.Active.Desc = s.RepoSelector.Normal.Desc.226 Foreground(lipgloss.Color("246"))227228 s.RepoSelector.Active.Updated = s.RepoSelector.Normal.Updated.229 Foreground(lipgloss.Color("212"))230231 s.RepoSelector.Active.Command = s.RepoSelector.Normal.Command.232 Foreground(lipgloss.Color("204"))233234 s.MenuItem = lipgloss.NewStyle().235 PaddingLeft(1).236 Border(lipgloss.Border{237 Left: " ",238 }, false, false, false, true).239 Height(3)240241 s.MenuLastUpdate = lipgloss.NewStyle().242 Foreground(lipgloss.Color("241")).243 Align(lipgloss.Right)244245 s.Repo.Base = lipgloss.NewStyle()246247 s.Repo.Title = lipgloss.NewStyle().248 Padding(0, 2)249250 s.Repo.Command = lipgloss.NewStyle().251 Foreground(lipgloss.Color("168"))252253 s.Repo.Body = lipgloss.NewStyle().254 Margin(1, 0)255256 s.Repo.Header = lipgloss.NewStyle().257 MaxHeight(2).258 Border(lipgloss.NormalBorder(), false, false, true, false).259 BorderForeground(lipgloss.Color("236"))260261 s.Repo.HeaderName = lipgloss.NewStyle().262 Foreground(lipgloss.Color("212")).263 Bold(true)264265 s.Repo.HeaderDesc = lipgloss.NewStyle().266 Foreground(lipgloss.Color("243"))267268 s.Footer = lipgloss.NewStyle().269 MarginTop(1).270 Padding(0, 1).271 Height(1)272273 s.Branch = lipgloss.NewStyle().274 Foreground(lipgloss.Color("203")).275 Background(lipgloss.Color("236")).276 Padding(0, 1)277278 s.HelpKey = lipgloss.NewStyle().279 Foreground(lipgloss.Color("241"))280281 s.HelpValue = lipgloss.NewStyle().282 Foreground(lipgloss.Color("239"))283284 s.HelpDivider = lipgloss.NewStyle().285 Foreground(lipgloss.Color("237")).286 SetString(" • ")287288 s.URLStyle = lipgloss.NewStyle().289 MarginLeft(1).290 Foreground(lipgloss.Color("168"))291292 s.Error = lipgloss.NewStyle().293 MarginTop(2)294295 s.ErrorTitle = lipgloss.NewStyle().296 Foreground(lipgloss.Color("230")).297 Background(lipgloss.Color("204")).298 Bold(true).299 Padding(0, 1)300301 s.ErrorBody = lipgloss.NewStyle().302 Foreground(lipgloss.Color("252")).303 MarginLeft(2)304305 s.LogItem.Normal.Base = lipgloss.NewStyle().306 Border(lipgloss.Border{307 Left: " ",308 }, false, false, false, true).309 PaddingLeft(1)310311 s.LogItem.Active.Base = s.LogItem.Normal.Base.312 Border(lipgloss.Border{313 Left: "┃",314 }, false, false, false, true).315 BorderForeground(selectorColor)316317 s.LogItem.Active.Hash = s.LogItem.Normal.Hash.318 Foreground(hashColor)319320 s.LogItem.Active.Hash = lipgloss.NewStyle().321 Bold(true).322 Foreground(highlightColor)323324 s.LogItem.Normal.Title = lipgloss.NewStyle().325 Foreground(lipgloss.Color("105"))326327 s.LogItem.Active.Title = lipgloss.NewStyle().328 Foreground(highlightColor).329 Bold(true)330331 s.LogItem.Normal.Desc = lipgloss.NewStyle().332 Foreground(lipgloss.Color("246"))333334 s.LogItem.Active.Desc = lipgloss.NewStyle().335 Foreground(lipgloss.Color("95"))336337 s.LogItem.Active.Keyword = s.LogItem.Active.Desc.338 Foreground(highlightColorDim)339340 s.LogItem.Normal.Hash = lipgloss.NewStyle().341 Foreground(hashColor)342343 s.LogItem.Active.Hash = lipgloss.NewStyle().344 Foreground(highlightColor)345346 s.Log.Commit = lipgloss.NewStyle().347 Margin(0, 2)348349 s.Log.CommitHash = lipgloss.NewStyle().350 Foreground(hashColor).351 Bold(true)352353 s.Log.CommitBody = lipgloss.NewStyle().354 MarginTop(1).355 MarginLeft(2)356357 s.Log.CommitStatsAdd = lipgloss.NewStyle().358 Foreground(lipgloss.Color("42")).359 Bold(true)360361 s.Log.CommitStatsDel = lipgloss.NewStyle().362 Foreground(lipgloss.Color("203")).363 Bold(true)364365 s.Log.Paginator = lipgloss.NewStyle().366 Margin(0).367 Align(lipgloss.Center)368369 s.Ref.Normal.Item = lipgloss.NewStyle()370371 s.Ref.ItemSelector = lipgloss.NewStyle().372 Foreground(selectorColor).373 SetString("> ")374375 s.Ref.Active.Item = lipgloss.NewStyle().376 Foreground(highlightColorDim)377378 s.Ref.Normal.Base = lipgloss.NewStyle()379380 s.Ref.Active.Base = lipgloss.NewStyle()381382 s.Ref.Normal.ItemTag = lipgloss.NewStyle().383 Foreground(lipgloss.Color("39"))384385 s.Ref.Active.ItemTag = lipgloss.NewStyle().386 Bold(true).387 Foreground(highlightColor)388389 s.Ref.Active.Item = lipgloss.NewStyle().390 Bold(true).391 Foreground(highlightColor)392393 s.Ref.Normal.ItemDesc = lipgloss.NewStyle().394 Faint(true)395396 s.Ref.Active.ItemDesc = lipgloss.NewStyle().397 Foreground(highlightColor).398 Faint(true)399400 s.Ref.Normal.ItemHash = lipgloss.NewStyle().401 Foreground(hashColor).402 Bold(true)403404 s.Ref.Active.ItemHash = lipgloss.NewStyle().405 Foreground(highlightColor).406 Bold(true)407408 s.Ref.Paginator = s.Log.Paginator409410 s.Ref.Selector = lipgloss.NewStyle()411412 s.Tree.Selector = s.Tree.Normal.FileName.413 Width(1).414 Foreground(selectorColor)415416 s.Tree.Normal.FileName = lipgloss.NewStyle().417 MarginLeft(1)418419 s.Tree.Active.FileName = s.Tree.Normal.FileName.420 Bold(true).421 Foreground(highlightColor)422423 s.Tree.Normal.FileDir = lipgloss.NewStyle().424 Foreground(lipgloss.Color("39"))425426 s.Tree.Active.FileDir = lipgloss.NewStyle().427 Foreground(highlightColor)428429 s.Tree.Normal.FileMode = s.Tree.Active.FileName.430 Width(10).431 Foreground(lipgloss.Color("243"))432433 s.Tree.Active.FileMode = s.Tree.Normal.FileMode.434 Foreground(highlightColorDim)435436 s.Tree.Normal.FileSize = s.Tree.Normal.FileName.437 Foreground(lipgloss.Color("243"))438439 s.Tree.Active.FileSize = s.Tree.Normal.FileName.440 Foreground(highlightColorDim)441442 s.Tree.FileContent = lipgloss.NewStyle()443444 s.Tree.Paginator = s.Log.Paginator445446 s.Tree.Blame.Hash = lipgloss.NewStyle().447 Foreground(hashColor).448 Bold(true)449450 s.Tree.Blame.Message = lipgloss.NewStyle()451452 s.Tree.Blame.Who = lipgloss.NewStyle().453 Faint(true)454455 s.Spinner = lipgloss.NewStyle().456 MarginTop(1).457 MarginLeft(2).458 Foreground(lipgloss.Color("205"))459460 s.SpinnerContainer = lipgloss.NewStyle()461462 s.NoContent = lipgloss.NewStyle().463 MarginTop(1).464 MarginLeft(2).465 Foreground(lipgloss.Color("242"))466467 s.StatusBar = lipgloss.NewStyle().468 Height(1)469470 s.StatusBarKey = lipgloss.NewStyle().471 Bold(true).472 Padding(0, 1).473 Background(lipgloss.Color("206")).474 Foreground(lipgloss.Color("228"))475476 s.StatusBarValue = lipgloss.NewStyle().477 Padding(0, 1).478 Background(lipgloss.Color("235")).479 Foreground(lipgloss.Color("243"))480481 s.StatusBarInfo = lipgloss.NewStyle().482 Padding(0, 1).483 Background(lipgloss.Color("212")).484 Foreground(lipgloss.Color("230"))485486 s.StatusBarBranch = lipgloss.NewStyle().487 Padding(0, 1).488 Background(lipgloss.Color("62")).489 Foreground(lipgloss.Color("230"))490491 s.StatusBarHelp = lipgloss.NewStyle().492 Padding(0, 1).493 Background(lipgloss.Color("237")).494 Foreground(lipgloss.Color("243"))495496 s.Tabs = lipgloss.NewStyle().497 Height(1)498499 s.TabInactive = lipgloss.NewStyle()500501 s.TabActive = lipgloss.NewStyle().502 Underline(true).503 Foreground(lipgloss.Color("36"))504505 s.TabSeparator = lipgloss.NewStyle().506 SetString("│").507 Padding(0, 1).508 Foreground(lipgloss.Color("238"))509510 s.Code.LineDigit = lipgloss.NewStyle().Foreground(lipgloss.Color("239"))511512 s.Code.LineBar = lipgloss.NewStyle().Foreground(lipgloss.Color("236"))513514 s.Stash.Normal.Message = lipgloss.NewStyle().MarginLeft(1)515516 s.Stash.Active.Message = s.Stash.Normal.Message.Foreground(selectorColor)517518 s.Stash.Title = lipgloss.NewStyle().519 Foreground(hashColor).520 Bold(true)521522 s.Stash.Selector = lipgloss.NewStyle().523 Width(1).524 Foreground(selectorColor)525526 return s527}