packages feed

monomer-1.5.1.0: src/Monomer/Core/Themes/BaseTheme.hs

{-|
Module      : Monomer.Core.Themes.BaseTheme
Copyright   : (c) 2018 Francisco Vallarino
License     : BSD-3-Clause (see the LICENSE file)
Maintainer  : fjvallarino@gmail.com
Stability   : experimental
Portability : non-portable

Provides a base theme, with fixed sizes and padding but configurable colors.
-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}

module Monomer.Core.Themes.BaseTheme (
  BaseThemeColors(..),
  baseTheme
) where

import Control.Lens ((&), (^.), (.~), (?~), non)
import Data.Default

import Monomer.Core.Combinators
import Monomer.Core.Style
import Monomer.Graphics.Types

import qualified Monomer.Core.Lens as L
import qualified Monomer.Graphics.Lens as L

-- | Creates a theme using the provided colors.
baseTheme :: BaseThemeColors -> Theme
baseTheme themeMod = Theme {
  _themeClearColor = clearColor themeMod,
  _themeSectionColor = sectionColor themeMod,
  _themeUserColorMap = def,
  _themeBasic = baseBasic themeMod,
  _themeHover = baseHover themeMod,
  _themeFocus = baseFocus themeMod,
  _themeFocusHover = baseFocusHover themeMod,
  _themeActive = baseActive themeMod,
  _themeDisabled = baseDisabled themeMod
}

-- | Customizable colors for the theme.
data BaseThemeColors = BaseThemeColors {
  clearColor :: Color,
  sectionColor :: Color,
  btnFocusBorder :: Color,
  btnBgBasic :: Color,
  btnBgHover :: Color,
  btnBgFocus :: Color,
  btnBgActive :: Color,
  btnBgDisabled :: Color,
  btnText :: Color,
  btnTextDisabled :: Color,
  btnMainFocusBorder :: Color,
  btnMainBgBasic :: Color,
  btnMainBgHover :: Color,
  btnMainBgFocus :: Color,
  btnMainBgActive :: Color,
  btnMainBgDisabled :: Color,
  btnMainText :: Color,
  btnMainTextDisabled :: Color,
  dialogBg :: Color,
  dialogBorder :: Color,
  dialogText :: Color,
  dialogTitleText :: Color,
  emptyOverlay :: Color,
  shadow :: Color,
  externalLinkBasic :: Color,
  externalLinkHover :: Color,
  externalLinkFocus :: Color,
  externalLinkActive :: Color,
  externalLinkDisabled :: Color,
  iconFg :: Color,
  iconBg :: Color,
  inputIconFg :: Color,
  inputBorder :: Color,
  inputFocusBorder :: Color,
  inputBgBasic :: Color,
  inputBgHover :: Color,
  inputBgFocus :: Color,
  inputBgActive :: Color,
  inputBgDisabled :: Color,
  inputFgBasic :: Color,
  inputFgHover :: Color,
  inputFgFocus :: Color,
  inputFgActive :: Color,
  inputFgDisabled :: Color,
  inputSndBasic :: Color,
  inputSndHover :: Color,
  inputSndFocus :: Color,
  inputSndActive :: Color,
  inputSndDisabled :: Color,
  inputHlBasic :: Color,
  inputHlHover :: Color,
  inputHlFocus :: Color,
  inputHlActive :: Color,
  inputHlDisabled :: Color,
  inputSelBasic :: Color,
  inputSelFocus :: Color,
  inputText :: Color,
  inputTextDisabled :: Color,
  labelText :: Color,
  scrollBarBasic :: Color,
  scrollThumbBasic :: Color,
  scrollBarHover :: Color,
  scrollThumbHover :: Color,
  slMainBg :: Color,
  slNormalBgBasic :: Color,
  slNormalBgHover :: Color,
  slNormalText :: Color,
  slNormalFocusBorder :: Color,
  slSelectedBgBasic :: Color,
  slSelectedBgHover :: Color,
  slSelectedText :: Color,
  slSelectedFocusBorder :: Color,
  tooltipBorder :: Color,
  tooltipBg :: Color,
  tooltipText :: Color
} deriving (Eq, Show)

btnBorderFocus :: BaseThemeColors -> Border
btnBorderFocus themeMod = border 1 (btnFocusBorder themeMod)

btnMainBorderFocus :: BaseThemeColors -> Border
btnMainBorderFocus themeMod = border 1 (btnMainFocusBorder themeMod)

inputBorderFocus :: BaseThemeColors -> Border
inputBorderFocus themeMod = border 1 (inputFocusBorder themeMod)

normalFont :: TextStyle
normalFont = def
  & L.font ?~ Font "Regular"
  & L.fontSize ?~ FontSize 16
  & L.fontSpaceV ?~ FontSpace 2

titleFont :: TextStyle
titleFont = def
  & L.font ?~ Font "Bold"
  & L.fontSize ?~ FontSize 20
  & L.fontSpaceV ?~ FontSpace 2

colorPopupStyle :: BaseThemeColors -> StyleState
colorPopupStyle themeMod = popupStyle where
  sectionBg = sectionColor themeMod
  popupStyle = mconcat [width 400, padding 10, bgColor sectionBg, radius 4]

dialogMsgBodyFont :: BaseThemeColors -> TextStyle
dialogMsgBodyFont themeMod = fontStyle where
  fontStyle = normalFont
    & L.fontColor ?~ dialogText themeMod

externalLinkFont :: BaseThemeColors -> TextStyle
externalLinkFont themeMod = fontStyle where
  fontStyle = normalFont
    & L.fontColor ?~ externalLinkBasic themeMod

labelFont :: BaseThemeColors -> TextStyle
labelFont themeMod = fontStyle <> textLeft where
  fontStyle = normalFont
    & L.fontColor ?~ labelText themeMod

btnStyle :: BaseThemeColors -> StyleState
btnStyle themeMod = def
  & L.text ?~ (normalFont & L.fontColor ?~ btnText themeMod) <> textCenter
  & L.bgColor ?~ btnBgBasic themeMod
  & L.border ?~ border 1 (btnBgBasic themeMod)
  & L.padding ?~ padding 8
  & L.radius ?~ radius 4

btnMainStyle :: BaseThemeColors -> StyleState
btnMainStyle themeMod = btnStyle themeMod
  & L.text . non def . L.fontColor ?~ btnMainText themeMod
  & L.bgColor ?~ btnMainBgBasic themeMod
  & L.border ?~ border 1 (btnMainBgBasic themeMod)

textInputStyle :: BaseThemeColors -> StyleState
textInputStyle themeMod = style where
  textStyle = normalFont
    & L.fontColor ?~ inputText themeMod
  style = def
    & L.text ?~ textStyle
    & L.bgColor ?~ inputBgBasic themeMod
    & L.fgColor ?~ inputFgBasic themeMod
    & L.sndColor ?~ (inputSndBasic themeMod & L.a .~ 0.6)
    & L.hlColor ?~ inputSelBasic themeMod
    & L.border ?~ border 1 (inputBorder themeMod)
    & L.radius ?~ radius 4
    & L.padding ?~ padding 8

numericInputStyle :: BaseThemeColors -> StyleState
numericInputStyle themeMod = textInputStyle themeMod
  & L.text . non def . L.alignH ?~ ATRight

dateInputStyle :: BaseThemeColors -> StyleState
dateInputStyle themeMod = textInputStyle themeMod
  & L.text . non def . L.alignH ?~ ATRight

timeInputStyle :: BaseThemeColors -> StyleState
timeInputStyle themeMod = textInputStyle themeMod
  & L.text . non def . L.alignH ?~ ATRight

selectListItemStyle :: BaseThemeColors -> StyleState
selectListItemStyle themeMod = def
  & L.text ?~ (normalFont & L.fontColor ?~ slNormalText themeMod)
  & L.text . non def . L.alignH ?~ ATLeft
  & L.bgColor ?~ slNormalBgBasic themeMod
  & L.border ?~ border 1 (slNormalBgBasic themeMod)
  & L.padding ?~ padding 8

selectListItemSelectedStyle :: BaseThemeColors -> StyleState
selectListItemSelectedStyle themeMod = selectListItemStyle themeMod
  & L.text . non def . L.fontColor ?~ slSelectedText themeMod
  & L.bgColor ?~ slSelectedBgBasic themeMod
  & L.border ?~ border 1 (slSelectedBgBasic themeMod)

tooltipStyle :: BaseThemeColors -> StyleState
tooltipStyle themeMod = def
  & L.text . non def . L.font ?~ Font "Regular"
  & L.text . non def . L.fontSize ?~ FontSize 14
  & L.text . non def . L.fontColor ?~ tooltipText themeMod
  & L.bgColor ?~ tooltipBg themeMod
  & L.border ?~ border 1 (tooltipBorder themeMod)
  & L.padding ?~ padding 6
  & L.radius ?~ radius 4

baseBasic :: BaseThemeColors -> ThemeState
baseBasic themeMod = def
  & L.emptyOverlayStyle .~ bgColor (emptyOverlay themeMod)
  & L.emptyOverlayStyle . L.padding ?~ padding 8
  & L.shadowColor .~ shadow themeMod
  & L.btnStyle .~ btnStyle themeMod
  & L.btnMainStyle .~ btnMainStyle themeMod
  & L.colorPopupStyle .~ colorPopupStyle themeMod
  & L.checkboxWidth .~ 20
  & L.checkboxStyle . L.fgColor ?~ inputFgBasic themeMod
  & L.checkboxStyle . L.hlColor ?~ inputHlBasic themeMod
  & L.checkboxStyle . L.radius ?~ radius 4
  & L.dateFieldStyle .~ dateInputStyle themeMod
  & L.dialWidth .~ 50
  & L.dialStyle . L.fgColor ?~ inputFgBasic themeMod
  & L.dialStyle . L.sndColor ?~ inputSndBasic themeMod
  & L.dialogTitleStyle . L.text ?~ (titleFont & L.fontColor ?~ dialogTitleText themeMod)
  & L.dialogTitleStyle . L.padding ?~ padding 10
  & L.dialogFrameStyle . L.padding ?~ padding 5
  & L.dialogFrameStyle . L.radius ?~ radius 10
  & L.dialogFrameStyle . L.bgColor ?~ dialogBg themeMod
  & L.dialogFrameStyle . L.border ?~ border 1 (dialogBorder themeMod)
  & L.dialogCloseIconStyle . L.bgColor ?~ iconBg themeMod
  & L.dialogCloseIconStyle . L.fgColor ?~ iconFg themeMod
  & L.dialogCloseIconStyle . L.padding ?~ padding 4
  & L.dialogCloseIconStyle . L.radius ?~ radius 8
  & L.dialogCloseIconStyle . L.sizeReqW ?~ width 16
  & L.dialogCloseIconStyle . L.sizeReqH ?~ width 16
  & L.dialogButtonsStyle . L.padding ?~ padding 20 <> paddingT 10
  & L.dialogMsgBodyStyle . L.padding ?~ padding 20
  & L.dialogMsgBodyStyle . L.text ?~ dialogMsgBodyFont themeMod
  & L.dialogMsgBodyStyle . L.sizeReqW ?~ maxWidth 600
  & L.dropdownStyle .~ textInputStyle themeMod
  & L.dropdownStyle . L.fgColor ?~ inputIconFg themeMod
  & L.dropdownStyle . L.text . non def . L.alignH ?~ ATLeft
  & L.dropdownMaxHeight .~ 200
  & L.dropdownListStyle . L.bgColor ?~ slMainBg themeMod
  & L.dropdownItemStyle .~ selectListItemStyle themeMod
  & L.dropdownItemSelectedStyle .~ selectListItemSelectedStyle themeMod
  & L.externalLinkStyle . L.text ?~ externalLinkFont themeMod
  & L.labelStyle . L.text ?~ labelFont themeMod
  & L.numericFieldStyle .~ numericInputStyle themeMod
  & L.optionBtnOnStyle .~ btnMainStyle themeMod
  & L.optionBtnOffStyle .~ btnStyle themeMod
  & L.selectListStyle . L.bgColor ?~ slMainBg themeMod
  & L.selectListStyle . L.border ?~ border 1 (slMainBg themeMod)
  & L.selectListItemStyle .~ selectListItemStyle themeMod
  & L.selectListItemSelectedStyle .~ selectListItemSelectedStyle themeMod
  & L.radioWidth .~ 20
  & L.radioStyle . L.fgColor ?~ inputFgBasic themeMod
  & L.radioStyle . L.hlColor ?~ inputHlBasic themeMod
  & L.scrollOverlay .~ False
  & L.scrollFollowFocus .~ True
  & L.scrollBarColor .~ scrollBarBasic themeMod
  & L.scrollThumbColor .~ scrollThumbBasic themeMod
  & L.scrollBarWidth .~ 8
  & L.scrollThumbWidth .~ 8
  & L.scrollThumbMinSize .~ 25
  & L.scrollThumbRadius .~ 4
  & L.scrollWheelRate .~ 10
  & L.separatorLineWidth .~ 1
  & L.separatorLineStyle . L.fgColor ?~ inputSndBasic themeMod
  & L.sliderRadius ?~ 2
  & L.sliderThumbFactor .~ 1.25
  & L.sliderWidth .~ 10
  & L.sliderStyle . L.fgColor ?~ inputFgBasic themeMod
  & L.sliderStyle . L.hlColor ?~ inputHlBasic themeMod
  & L.sliderStyle . L.sndColor ?~ inputSndBasic themeMod
  & L.textAreaStyle .~ textInputStyle themeMod
  & L.textFieldStyle .~ textInputStyle themeMod
  & L.timeFieldStyle .~ timeInputStyle themeMod
  & L.toggleBtnOnStyle .~ btnMainStyle themeMod
  & L.toggleBtnOffStyle .~ btnStyle themeMod
  & L.tooltipStyle .~ tooltipStyle themeMod

baseHover :: BaseThemeColors -> ThemeState
baseHover themeMod = baseBasic themeMod
  & L.btnStyle . L.bgColor ?~ btnBgHover themeMod
  & L.btnStyle . L.border ?~ border 1 (btnBgHover themeMod)
  & L.btnStyle . L.cursorIcon ?~ CursorHand
  & L.btnMainStyle . L.bgColor ?~ btnMainBgHover themeMod
  & L.btnMainStyle . L.border ?~ border 1 (btnMainBgHover themeMod)
  & L.btnMainStyle . L.cursorIcon ?~ CursorHand
  & L.checkboxStyle . L.fgColor ?~ inputFgHover themeMod
  & L.checkboxStyle . L.hlColor ?~ inputHlHover themeMod
  & L.checkboxStyle . L.cursorIcon ?~ CursorHand
  & L.dateFieldStyle . L.cursorIcon ?~ CursorIBeam
  & L.dialStyle . L.fgColor ?~ inputFgHover themeMod
  & L.dialStyle . L.sndColor ?~ inputSndHover themeMod
  & L.dialStyle . L.cursorIcon ?~ CursorSizeV
  & L.dialogCloseIconStyle . L.cursorIcon ?~ CursorHand
  & L.dropdownStyle . L.bgColor ?~ inputBgHover themeMod
  & L.dropdownStyle . L.cursorIcon ?~ CursorHand
  & L.dropdownListStyle . L.border ?~ border 1 (slMainBg themeMod)
  & L.dropdownItemStyle . L.bgColor ?~ slNormalBgHover themeMod
  & L.dropdownItemStyle . L.border ?~ border 1 (slNormalBgHover themeMod)
  & L.dropdownItemStyle . L.cursorIcon ?~ CursorHand
  & L.dropdownItemSelectedStyle . L.bgColor ?~ slSelectedBgHover themeMod
  & L.dropdownItemSelectedStyle . L.border ?~ border 1 (slSelectedBgHover themeMod)
  & L.dropdownItemSelectedStyle . L.cursorIcon ?~ CursorHand
  & L.externalLinkStyle . L.text . non def . L.fontColor ?~ externalLinkHover themeMod
  & L.externalLinkStyle . L.text . non def . L.underline ?~ True
  & L.externalLinkStyle . L.cursorIcon ?~ CursorHand
  & L.numericFieldStyle . L.cursorIcon ?~ CursorIBeam
  & L.optionBtnOnStyle . L.bgColor ?~ btnMainBgHover themeMod
  & L.optionBtnOnStyle . L.border ?~ border 1 (btnMainBgHover themeMod)
  & L.optionBtnOnStyle . L.cursorIcon ?~ CursorHand
  & L.optionBtnOffStyle . L.bgColor ?~ btnBgHover themeMod
  & L.optionBtnOffStyle . L.border ?~ border 1 (btnBgHover themeMod)
  & L.optionBtnOffStyle . L.cursorIcon ?~ CursorHand
  & L.selectListItemStyle . L.bgColor ?~ slNormalBgHover themeMod
  & L.selectListItemStyle . L.border ?~ border 1 (slNormalBgHover themeMod)
  & L.selectListItemStyle . L.cursorIcon ?~ CursorHand
  & L.selectListItemSelectedStyle . L.bgColor ?~ slSelectedBgHover themeMod
  & L.selectListItemSelectedStyle . L.border ?~ border 1 (slSelectedBgHover themeMod)
  & L.selectListItemSelectedStyle . L.cursorIcon ?~ CursorHand
  & L.radioStyle . L.fgColor ?~ inputFgHover themeMod
  & L.radioStyle . L.hlColor ?~ inputHlHover themeMod
  & L.radioStyle . L.cursorIcon ?~ CursorHand
  & L.scrollBarColor .~ scrollBarHover themeMod
  & L.scrollThumbColor .~ scrollThumbHover themeMod
  & L.sliderStyle . L.fgColor ?~ inputFgHover themeMod
  & L.sliderStyle . L.hlColor ?~ inputHlHover themeMod
  & L.sliderStyle . L.sndColor ?~ inputSndHover themeMod
  & L.sliderStyle . L.cursorIcon ?~ CursorHand
  & L.textAreaStyle . L.cursorIcon ?~ CursorIBeam
  & L.textFieldStyle . L.cursorIcon ?~ CursorIBeam
  & L.timeFieldStyle . L.cursorIcon ?~ CursorIBeam
  & L.toggleBtnOnStyle . L.bgColor ?~ btnMainBgHover themeMod
  & L.toggleBtnOnStyle . L.border ?~ border 1 (btnMainBgHover themeMod)
  & L.toggleBtnOnStyle . L.cursorIcon ?~ CursorHand
  & L.toggleBtnOffStyle . L.bgColor ?~ btnBgHover themeMod
  & L.toggleBtnOffStyle . L.border ?~ border 1 (btnBgHover themeMod)
  & L.toggleBtnOffStyle . L.cursorIcon ?~ CursorHand

baseFocus :: BaseThemeColors -> ThemeState
baseFocus themeMod = baseBasic themeMod
  & L.btnStyle . L.bgColor ?~ btnBgFocus themeMod
  & L.btnStyle . L.border ?~ btnBorderFocus themeMod
  & L.btnMainStyle . L.bgColor ?~ btnMainBgFocus themeMod
  & L.btnMainStyle . L.border ?~ btnMainBorderFocus themeMod
  & L.checkboxStyle . L.fgColor ?~ inputFgFocus themeMod
  & L.checkboxStyle . L.hlColor ?~ inputHlFocus themeMod
  & L.dateFieldStyle . L.border ?~ inputBorderFocus themeMod
  & L.dateFieldStyle . L.hlColor ?~ inputSelFocus themeMod
  & L.dialStyle . L.fgColor ?~ inputFgFocus themeMod
  & L.dialStyle . L.sndColor ?~ inputSndFocus themeMod
  & L.dropdownStyle . L.border ?~ inputBorderFocus themeMod
  & L.dropdownListStyle . L.border ?~ border 1 (slMainBg themeMod)
  & L.dropdownItemStyle . L.border ?~ border 1 (slNormalFocusBorder themeMod)
  & L.dropdownItemSelectedStyle . L.border ?~ border 1 (slSelectedFocusBorder themeMod)
  & L.externalLinkStyle . L.text . non def . L.fontColor ?~ externalLinkFocus themeMod
  & L.numericFieldStyle . L.border ?~ inputBorderFocus themeMod
  & L.numericFieldStyle . L.hlColor ?~ inputSelFocus themeMod
  & L.optionBtnOnStyle . L.bgColor ?~ btnMainBgFocus themeMod
  & L.optionBtnOnStyle . L.border ?~ btnMainBorderFocus themeMod
  & L.optionBtnOffStyle . L.bgColor ?~ btnBgFocus themeMod
  & L.optionBtnOffStyle . L.border ?~ btnBorderFocus themeMod
  & L.selectListStyle . L.border ?~ inputBorderFocus themeMod
  & L.selectListItemStyle . L.border ?~ border 1 (slNormalFocusBorder themeMod)
  & L.selectListItemSelectedStyle . L.border ?~ border 1 (slSelectedFocusBorder themeMod)
  & L.radioStyle . L.fgColor ?~ inputFgFocus themeMod
  & L.radioStyle . L.hlColor ?~ inputHlFocus themeMod
  & L.sliderStyle . L.fgColor ?~ inputFgFocus themeMod
  & L.sliderStyle . L.hlColor ?~ inputHlFocus themeMod
  & L.sliderStyle . L.sndColor ?~ inputSndFocus themeMod
  & L.textAreaStyle . L.border ?~ inputBorderFocus themeMod
  & L.textAreaStyle . L.hlColor ?~ inputSelFocus themeMod
  & L.textFieldStyle . L.border ?~ inputBorderFocus themeMod
  & L.textFieldStyle . L.hlColor ?~ inputSelFocus themeMod
  & L.timeFieldStyle . L.border ?~ inputBorderFocus themeMod
  & L.timeFieldStyle . L.hlColor ?~ inputSelFocus themeMod
  & L.toggleBtnOnStyle . L.bgColor ?~ btnMainBgFocus themeMod
  & L.toggleBtnOnStyle . L.border ?~ btnMainBorderFocus themeMod
  & L.toggleBtnOffStyle . L.bgColor ?~ btnBgFocus themeMod
  & L.toggleBtnOffStyle . L.border ?~ btnBorderFocus themeMod

baseFocusHover :: BaseThemeColors -> ThemeState
baseFocusHover themeMod = (baseHover themeMod <> baseFocus themeMod)
  & L.btnStyle . L.bgColor ?~ btnBgHover themeMod
  & L.btnMainStyle . L.bgColor ?~ btnMainBgHover themeMod
  & L.dropdownItemStyle . L.bgColor ?~ slNormalBgHover themeMod
  & L.dropdownItemSelectedStyle . L.bgColor ?~ slSelectedBgHover themeMod
  & L.externalLinkStyle . L.text . non def . L.fontColor ?~ externalLinkHover themeMod
  & L.optionBtnOnStyle . L.bgColor ?~ btnMainBgHover themeMod
  & L.optionBtnOffStyle . L.bgColor ?~ btnBgHover themeMod
  & L.toggleBtnOnStyle . L.bgColor ?~ btnMainBgHover themeMod
  & L.toggleBtnOffStyle . L.bgColor ?~ btnBgHover themeMod

baseActive :: BaseThemeColors -> ThemeState
baseActive themeMod = baseFocusHover themeMod
  & L.btnStyle . L.bgColor ?~ btnBgActive themeMod
  & L.btnStyle . L.border ?~ btnBorderFocus themeMod
  & L.btnMainStyle . L.bgColor ?~ btnMainBgActive themeMod
  & L.btnMainStyle . L.border ?~ btnMainBorderFocus themeMod
  & L.checkboxStyle . L.fgColor ?~ inputFgActive themeMod
  & L.checkboxStyle . L.hlColor ?~ inputHlActive themeMod
  & L.dateFieldStyle . L.border ?~ inputBorderFocus themeMod
  & L.dateFieldStyle . L.hlColor ?~ inputSelFocus themeMod
  & L.dialStyle . L.fgColor ?~ inputFgActive themeMod
  & L.dialStyle . L.sndColor ?~ inputSndActive themeMod
  & L.dropdownStyle . L.bgColor ?~ inputBgActive themeMod
  & L.dropdownStyle . L.border ?~ inputBorderFocus themeMod
  & L.externalLinkStyle . L.text . non def . L.fontColor ?~ externalLinkActive themeMod
  & L.numericFieldStyle . L.border ?~ inputBorderFocus themeMod
  & L.numericFieldStyle . L.hlColor ?~ inputSelFocus themeMod
  & L.optionBtnOnStyle . L.bgColor ?~ btnMainBgActive themeMod
  & L.optionBtnOnStyle . L.border ?~ btnMainBorderFocus themeMod
  & L.optionBtnOffStyle . L.bgColor ?~ btnBgActive themeMod
  & L.optionBtnOffStyle . L.border ?~ btnBorderFocus themeMod
  & L.radioStyle . L.fgColor ?~ inputFgActive themeMod
  & L.radioStyle . L.hlColor ?~ inputHlActive themeMod
  & L.sliderStyle . L.fgColor ?~ inputFgActive themeMod
  & L.sliderStyle . L.hlColor ?~ inputHlActive themeMod
  & L.sliderStyle . L.sndColor ?~ inputSndActive themeMod
  & L.textAreaStyle . L.border ?~ inputBorderFocus themeMod
  & L.textAreaStyle . L.hlColor ?~ inputSelFocus themeMod
  & L.textFieldStyle . L.border ?~ inputBorderFocus themeMod
  & L.textFieldStyle . L.hlColor ?~ inputSelFocus themeMod
  & L.timeFieldStyle . L.border ?~ inputBorderFocus themeMod
  & L.timeFieldStyle . L.hlColor ?~ inputSelFocus themeMod
  & L.toggleBtnOnStyle . L.bgColor ?~ btnMainBgActive themeMod
  & L.toggleBtnOnStyle . L.border ?~ btnMainBorderFocus themeMod
  & L.toggleBtnOffStyle . L.bgColor ?~ btnBgActive themeMod
  & L.toggleBtnOffStyle . L.border ?~ btnBorderFocus themeMod

baseDisabled :: BaseThemeColors -> ThemeState
baseDisabled themeMod = baseBasic themeMod
  & L.btnStyle . L.text . non def . L.fontColor ?~ btnTextDisabled themeMod
  & L.btnStyle . L.bgColor ?~ btnBgDisabled themeMod
  & L.btnStyle . L.border ?~ border 1 (btnBgDisabled themeMod)
  & L.btnMainStyle . L.text . non def . L.fontColor ?~ btnMainTextDisabled themeMod
  & L.btnMainStyle . L.bgColor ?~ btnMainBgDisabled themeMod
  & L.btnMainStyle . L.border ?~ border 1 (btnMainBgDisabled themeMod)
  & L.checkboxStyle . L.fgColor ?~ inputFgDisabled themeMod
  & L.checkboxStyle . L.hlColor ?~ inputHlDisabled themeMod
  & L.dateFieldStyle . L.bgColor ?~ inputBgDisabled themeMod
  & L.dateFieldStyle . L.text . non def . L.fontColor ?~ inputTextDisabled themeMod
  & L.dialStyle . L.fgColor ?~ inputFgDisabled themeMod
  & L.dialStyle . L.sndColor ?~ inputSndDisabled themeMod
  & L.dropdownStyle . L.text . non def . L.fontColor ?~ inputTextDisabled themeMod
  & L.dropdownStyle . L.bgColor ?~ inputBgDisabled themeMod
  & L.dropdownStyle . L.border ?~ border 1 (inputBgDisabled themeMod)
  & L.externalLinkStyle . L.text . non def . L.fontColor ?~ externalLinkDisabled themeMod
  & L.numericFieldStyle . L.bgColor ?~ inputBgDisabled themeMod
  & L.numericFieldStyle . L.text . non def . L.fontColor ?~ inputTextDisabled themeMod
  & L.optionBtnOnStyle . L.text . non def . L.fontColor ?~ btnMainTextDisabled themeMod
  & L.optionBtnOnStyle . L.bgColor ?~ btnMainBgDisabled themeMod
  & L.optionBtnOnStyle . L.border ?~ border 1 (btnMainBgDisabled themeMod)
  & L.optionBtnOffStyle . L.text . non def . L.fontColor ?~ btnTextDisabled themeMod
  & L.optionBtnOffStyle . L.bgColor ?~ btnBgDisabled themeMod
  & L.optionBtnOffStyle . L.border ?~ border 1 (btnBgDisabled themeMod)
  & L.radioStyle . L.fgColor ?~ inputFgDisabled themeMod
  & L.radioStyle . L.hlColor ?~ inputHlDisabled themeMod
  & L.sliderStyle . L.fgColor ?~ inputFgDisabled themeMod
  & L.sliderStyle . L.hlColor ?~ inputHlDisabled themeMod
  & L.sliderStyle . L.sndColor ?~ inputSndDisabled themeMod
  & L.textAreaStyle . L.bgColor ?~ inputBgDisabled themeMod
  & L.textAreaStyle . L.text . non def . L.fontColor ?~ inputTextDisabled themeMod
  & L.textFieldStyle . L.bgColor ?~ inputBgDisabled themeMod
  & L.textFieldStyle . L.text . non def . L.fontColor ?~ inputTextDisabled themeMod
  & L.timeFieldStyle . L.bgColor ?~ inputBgDisabled themeMod
  & L.timeFieldStyle . L.text . non def . L.fontColor ?~ inputTextDisabled themeMod
  & L.toggleBtnOnStyle . L.text . non def . L.fontColor ?~ btnMainTextDisabled themeMod
  & L.toggleBtnOnStyle . L.bgColor ?~ btnMainBgDisabled themeMod
  & L.toggleBtnOnStyle . L.border ?~ border 1 (btnMainBgDisabled themeMod)
  & L.toggleBtnOffStyle . L.text . non def . L.fontColor ?~ btnTextDisabled themeMod
  & L.toggleBtnOffStyle . L.bgColor ?~ btnBgDisabled themeMod
  & L.toggleBtnOffStyle . L.border ?~ border 1 (btnBgDisabled themeMod)