module Dashi.Style.Background where

import Dashi.Prelude
import Dashi.Style.Colour
import Dashi.Style.Tokens (Appearance (..), Token (..), ValueToken (..))
import Dashi.Style.Uchu

newtype BackgroundColour = BackgroundColour Appearance
    deriving newtype (BackgroundColour -> BackgroundColour -> Bool
(BackgroundColour -> BackgroundColour -> Bool)
-> (BackgroundColour -> BackgroundColour -> Bool)
-> Eq BackgroundColour
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BackgroundColour -> BackgroundColour -> Bool
== :: BackgroundColour -> BackgroundColour -> Bool
$c/= :: BackgroundColour -> BackgroundColour -> Bool
/= :: BackgroundColour -> BackgroundColour -> Bool
Eq, BackgroundColour
BackgroundColour -> BackgroundColour -> Bounded BackgroundColour
forall a. a -> a -> Bounded a
$cminBound :: BackgroundColour
minBound :: BackgroundColour
$cmaxBound :: BackgroundColour
maxBound :: BackgroundColour
Bounded, Int -> BackgroundColour
BackgroundColour -> Int
BackgroundColour -> [BackgroundColour]
BackgroundColour -> BackgroundColour
BackgroundColour -> BackgroundColour -> [BackgroundColour]
BackgroundColour
-> BackgroundColour -> BackgroundColour -> [BackgroundColour]
(BackgroundColour -> BackgroundColour)
-> (BackgroundColour -> BackgroundColour)
-> (Int -> BackgroundColour)
-> (BackgroundColour -> Int)
-> (BackgroundColour -> [BackgroundColour])
-> (BackgroundColour -> BackgroundColour -> [BackgroundColour])
-> (BackgroundColour -> BackgroundColour -> [BackgroundColour])
-> (BackgroundColour
    -> BackgroundColour -> BackgroundColour -> [BackgroundColour])
-> Enum BackgroundColour
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: BackgroundColour -> BackgroundColour
succ :: BackgroundColour -> BackgroundColour
$cpred :: BackgroundColour -> BackgroundColour
pred :: BackgroundColour -> BackgroundColour
$ctoEnum :: Int -> BackgroundColour
toEnum :: Int -> BackgroundColour
$cfromEnum :: BackgroundColour -> Int
fromEnum :: BackgroundColour -> Int
$cenumFrom :: BackgroundColour -> [BackgroundColour]
enumFrom :: BackgroundColour -> [BackgroundColour]
$cenumFromThen :: BackgroundColour -> BackgroundColour -> [BackgroundColour]
enumFromThen :: BackgroundColour -> BackgroundColour -> [BackgroundColour]
$cenumFromTo :: BackgroundColour -> BackgroundColour -> [BackgroundColour]
enumFromTo :: BackgroundColour -> BackgroundColour -> [BackgroundColour]
$cenumFromThenTo :: BackgroundColour
-> BackgroundColour -> BackgroundColour -> [BackgroundColour]
enumFromThenTo :: BackgroundColour
-> BackgroundColour -> BackgroundColour -> [BackgroundColour]
Enum)

instance Token BackgroundColour where
    tokenName :: forall s. (IsString s, Semigroup s) => BackgroundColour -> s
tokenName (BackgroundColour Appearance
appearance) = s
"background-" s -> s -> s
forall a. Semigroup a => a -> a -> a
<> Appearance -> s
forall s. (IsString s, Semigroup s) => Appearance -> s
forall t s. (Token t, IsString s, Semigroup s) => t -> s
tokenName Appearance
appearance

instance ValueToken BackgroundColour where
    type ValueType BackgroundColour = LightDark (UchuAlpha Milli)
    tokenValue :: BackgroundColour -> ValueType BackgroundColour
tokenValue (BackgroundColour Appearance
Default) = (Uchu -> Milli -> UchuAlpha Milli)
-> Milli -> Uchu -> UchuAlpha Milli
forall a b c. (a -> b -> c) -> b -> a -> c
flip Uchu -> Milli -> UchuAlpha Milli
forall a. Uchu -> a -> UchuAlpha a
UchuAlpha Milli
1 (Uchu -> UchuAlpha Milli)
-> LightDark Uchu -> LightDark (UchuAlpha Milli)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Uchu -> Uchu -> LightDark Uchu
forall c. c -> c -> LightDark c
LightDark Uchu
Yang Uchu
Yin
    tokenValue (BackgroundColour Appearance
Subtle) = (Uchu -> Milli -> UchuAlpha Milli)
-> Milli -> Uchu -> UchuAlpha Milli
forall a b c. (a -> b -> c) -> b -> a -> c
flip Uchu -> Milli -> UchuAlpha Milli
forall a. Uchu -> a -> UchuAlpha a
UchuAlpha Milli
0 (Uchu -> UchuAlpha Milli)
-> LightDark Uchu -> LightDark (UchuAlpha Milli)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Uchu -> Uchu -> LightDark Uchu
forall c. c -> c -> LightDark c
LightDark Uchu
Yang Uchu
Yin
    tokenValue (BackgroundColour Appearance
Primary) = (Uchu -> Milli -> UchuAlpha Milli)
-> Milli -> Uchu -> UchuAlpha Milli
forall a b c. (a -> b -> c) -> b -> a -> c
flip Uchu -> Milli -> UchuAlpha Milli
forall a. Uchu -> a -> UchuAlpha a
UchuAlpha Milli
0.15 (Uchu -> UchuAlpha Milli)
-> LightDark Uchu -> LightDark (UchuAlpha Milli)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Uchu -> LightDark Uchu
forall c. c -> LightDark c
sameLightDark Uchu
Blue
    tokenValue (BackgroundColour Appearance
Success) = (Uchu -> Milli -> UchuAlpha Milli)
-> Milli -> Uchu -> UchuAlpha Milli
forall a b c. (a -> b -> c) -> b -> a -> c
flip Uchu -> Milli -> UchuAlpha Milli
forall a. Uchu -> a -> UchuAlpha a
UchuAlpha Milli
0.15 (Uchu -> UchuAlpha Milli)
-> LightDark Uchu -> LightDark (UchuAlpha Milli)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Uchu -> LightDark Uchu
forall c. c -> LightDark c
sameLightDark Uchu
Green
    tokenValue (BackgroundColour Appearance
Warning) = (Uchu -> Milli -> UchuAlpha Milli)
-> Milli -> Uchu -> UchuAlpha Milli
forall a b c. (a -> b -> c) -> b -> a -> c
flip Uchu -> Milli -> UchuAlpha Milli
forall a. Uchu -> a -> UchuAlpha a
UchuAlpha Milli
0.15 (Uchu -> UchuAlpha Milli)
-> LightDark Uchu -> LightDark (UchuAlpha Milli)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Uchu -> LightDark Uchu
forall c. c -> LightDark c
sameLightDark Uchu
Orange
    tokenValue (BackgroundColour Appearance
Danger) = (Uchu -> Milli -> UchuAlpha Milli)
-> Milli -> Uchu -> UchuAlpha Milli
forall a b c. (a -> b -> c) -> b -> a -> c
flip Uchu -> Milli -> UchuAlpha Milli
forall a. Uchu -> a -> UchuAlpha a
UchuAlpha Milli
0.15 (Uchu -> UchuAlpha Milli)
-> LightDark Uchu -> LightDark (UchuAlpha Milli)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Uchu -> LightDark Uchu
forall c. c -> LightDark c
sameLightDark Uchu
Red
    tokenValue (BackgroundColour Appearance
Discovery) = (Uchu -> Milli -> UchuAlpha Milli)
-> Milli -> Uchu -> UchuAlpha Milli
forall a b c. (a -> b -> c) -> b -> a -> c
flip Uchu -> Milli -> UchuAlpha Milli
forall a. Uchu -> a -> UchuAlpha a
UchuAlpha Milli
0.15 (Uchu -> UchuAlpha Milli)
-> LightDark Uchu -> LightDark (UchuAlpha Milli)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Uchu -> LightDark Uchu
forall c. c -> LightDark c
sameLightDark Uchu
Purple