content: -- | This module provides attributes and styling for use within the UI.
  module UI.Attributes where
  
  import qualified Brick.AttrMap as A
  import Brick.Util (bg, fg, on)
  import qualified Brick.Widgets.List as L
  import qualified Brick.Widgets.ProgressBar as P
  import qualified Graphics.Vty as V
  
  -- | The main attribute used for styling the UI
  primaryAttr :: A.AttrName
  primaryAttr = A.attrName "primary"
  
  -- | The main color used for styling the UI
  primaryColor :: V.Color
  primaryColor = V.rgbColor 64 122 (82 :: Int)
  
  -- | The secondary attribute used for styling the UI
  secondaryAttr :: A.AttrName
  secondaryAttr = A.attrName "secondary"
  
  -- | The secondary color used for styling the UI
  secondaryColor :: V.Color
  secondaryColor = V.rgbColor 0 100 (66 :: Int)
  
  -- | The attribute for styling correctly typed text
  correctAttr :: A.AttrName
  correctAttr = A.attrName "correct"
  
  -- | The attribute for styling incorrectly typed text
  incorrectAttr :: A.AttrName
  incorrectAttr = A.attrName "incorrect"
  
  -- | Attribute for styling red text
  redAttr :: A.AttrName
  redAttr = A.attrName "red"
  
  -- | Map from an attribute to its corresponding styling for all attributes
  attributeMap :: A.AttrMap
  attributeMap =
    A.attrMap
      V.defAttr
      [ (primaryAttr, fg primaryColor),
        (secondaryAttr, fg secondaryColor),
        (L.listSelectedAttr, fg secondaryColor `V.withStyle` V.bold),
        (P.progressCompleteAttr, V.white `on` primaryColor),
        (correctAttr, fg V.green),
        (incorrectAttr, bg V.red),
        (redAttr, fg (V.rgbColor 195 39 (43 :: Int)))
      ]
  