{-# OPTIONS_GHC -Wno-term-variable-capture #-} module Dashi.Style.Tokens where import Clay hiding (Color, FontSize, fontSize) import Dashi.Prelude import Dashi.Util (emptyAttr_, emptyRefinement) import GHC.IsList (IsList (..)) import Miso.Html.Property (class_) class Token t where tokenName :: (IsString s, Semigroup s) => t -> s defaultToken :: Maybe t defaultToken = Maybe t forall a. Maybe a Nothing tokenAttr :: t -> Attribute action default tokenAttr :: (Eq t) => t -> Attribute action tokenAttr t t | t -> Maybe t forall a. a -> Maybe a Just t t Maybe t -> Maybe t -> Bool forall a. Eq a => a -> a -> Bool == Maybe t forall t. Token t => Maybe t defaultToken = Attribute action forall action. Attribute action emptyAttr_ | Bool otherwise = MisoString -> Attribute action forall action. MisoString -> Attribute action class_ (MisoString -> Attribute action) -> MisoString -> Attribute action forall a b. (a -> b) -> a -> b $ t -> MisoString forall s. (IsString s, Semigroup s) => t -> s forall t s. (Token t, IsString s, Semigroup s) => t -> s tokenName t t byToken :: t -> Refinement default byToken :: (Eq t) => t -> Refinement byToken t t | t -> Maybe t forall a. a -> Maybe a Just t t Maybe t -> Maybe t -> Bool forall a. Eq a => a -> a -> Bool == Maybe t forall t. Token t => Maybe t defaultToken = Refinement emptyRefinement | Bool otherwise = MisoString -> Refinement byClass (MisoString -> Refinement) -> MisoString -> Refinement forall a b. (a -> b) -> a -> b $ t -> MisoString forall s. (IsString s, Semigroup s) => t -> s forall t s. (Token t, IsString s, Semigroup s) => t -> s tokenName t t allTokens :: (IsList l, Item l ~ t) => l default allTokens :: (IsList l, Item l ~ t, Bounded t, Enum t) => l allTokens = [Item l] -> l forall l. IsList l => [Item l] -> l fromList [t Item l forall a. Bounded a => a minBound .. t Item l forall a. Bounded a => a maxBound] byTokens :: (Token t) => (t -> Css) -> Css byTokens :: forall t. Token t => (t -> Css) -> Css byTokens t -> Css f = forall (t :: * -> *) (f :: * -> *) a b. (Foldable t, Applicative f) => t a -> (a -> f b) -> f () for_ @[] [t] forall l. (IsList l, Item l ~ t) => l forall t l. (Token t, IsList l, Item l ~ t) => l allTokens \t t -> t -> Refinement forall t. Token t => t -> Refinement byToken t t Refinement -> Css -> Css Clay.& t -> Css f t t nonDefaultTokenName :: (Token t, Eq t, IsString s, Semigroup s) => t -> Maybe s nonDefaultTokenName :: forall t s. (Token t, Eq t, IsString s, Semigroup s) => t -> Maybe s nonDefaultTokenName t t | t -> Maybe t forall a. a -> Maybe a Just t t Maybe t -> Maybe t -> Bool forall a. Eq a => a -> a -> Bool == Maybe t forall t. Token t => Maybe t defaultToken = Maybe s forall a. Maybe a Nothing | Bool otherwise = s -> Maybe s forall a. a -> Maybe a Just (s -> Maybe s) -> s -> Maybe s forall a b. (a -> b) -> a -> b $ t -> s forall s. (IsString s, Semigroup s) => t -> s forall t s. (Token t, IsString s, Semigroup s) => t -> s tokenName t t class (Token t) => ValueToken t where type ValueType t tokenValue :: t -> ValueType t data SizeToken = XSmall | Small | Medium | Large | XLarge deriving stock (SizeToken -> SizeToken -> Bool (SizeToken -> SizeToken -> Bool) -> (SizeToken -> SizeToken -> Bool) -> Eq SizeToken forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: SizeToken -> SizeToken -> Bool == :: SizeToken -> SizeToken -> Bool $c/= :: SizeToken -> SizeToken -> Bool /= :: SizeToken -> SizeToken -> Bool Eq, Eq SizeToken Eq SizeToken => (SizeToken -> SizeToken -> Ordering) -> (SizeToken -> SizeToken -> Bool) -> (SizeToken -> SizeToken -> Bool) -> (SizeToken -> SizeToken -> Bool) -> (SizeToken -> SizeToken -> Bool) -> (SizeToken -> SizeToken -> SizeToken) -> (SizeToken -> SizeToken -> SizeToken) -> Ord SizeToken SizeToken -> SizeToken -> Bool SizeToken -> SizeToken -> Ordering SizeToken -> SizeToken -> SizeToken forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: SizeToken -> SizeToken -> Ordering compare :: SizeToken -> SizeToken -> Ordering $c< :: SizeToken -> SizeToken -> Bool < :: SizeToken -> SizeToken -> Bool $c<= :: SizeToken -> SizeToken -> Bool <= :: SizeToken -> SizeToken -> Bool $c> :: SizeToken -> SizeToken -> Bool > :: SizeToken -> SizeToken -> Bool $c>= :: SizeToken -> SizeToken -> Bool >= :: SizeToken -> SizeToken -> Bool $cmax :: SizeToken -> SizeToken -> SizeToken max :: SizeToken -> SizeToken -> SizeToken $cmin :: SizeToken -> SizeToken -> SizeToken min :: SizeToken -> SizeToken -> SizeToken Ord, SizeToken SizeToken -> SizeToken -> Bounded SizeToken forall a. a -> a -> Bounded a $cminBound :: SizeToken minBound :: SizeToken $cmaxBound :: SizeToken maxBound :: SizeToken Bounded, Int -> SizeToken SizeToken -> Int SizeToken -> [SizeToken] SizeToken -> SizeToken SizeToken -> SizeToken -> [SizeToken] SizeToken -> SizeToken -> SizeToken -> [SizeToken] (SizeToken -> SizeToken) -> (SizeToken -> SizeToken) -> (Int -> SizeToken) -> (SizeToken -> Int) -> (SizeToken -> [SizeToken]) -> (SizeToken -> SizeToken -> [SizeToken]) -> (SizeToken -> SizeToken -> [SizeToken]) -> (SizeToken -> SizeToken -> SizeToken -> [SizeToken]) -> Enum SizeToken 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 :: SizeToken -> SizeToken succ :: SizeToken -> SizeToken $cpred :: SizeToken -> SizeToken pred :: SizeToken -> SizeToken $ctoEnum :: Int -> SizeToken toEnum :: Int -> SizeToken $cfromEnum :: SizeToken -> Int fromEnum :: SizeToken -> Int $cenumFrom :: SizeToken -> [SizeToken] enumFrom :: SizeToken -> [SizeToken] $cenumFromThen :: SizeToken -> SizeToken -> [SizeToken] enumFromThen :: SizeToken -> SizeToken -> [SizeToken] $cenumFromTo :: SizeToken -> SizeToken -> [SizeToken] enumFromTo :: SizeToken -> SizeToken -> [SizeToken] $cenumFromThenTo :: SizeToken -> SizeToken -> SizeToken -> [SizeToken] enumFromThenTo :: SizeToken -> SizeToken -> SizeToken -> [SizeToken] Enum, Int -> SizeToken -> [Char] -> [Char] [SizeToken] -> [Char] -> [Char] SizeToken -> [Char] (Int -> SizeToken -> [Char] -> [Char]) -> (SizeToken -> [Char]) -> ([SizeToken] -> [Char] -> [Char]) -> Show SizeToken forall a. (Int -> a -> [Char] -> [Char]) -> (a -> [Char]) -> ([a] -> [Char] -> [Char]) -> Show a $cshowsPrec :: Int -> SizeToken -> [Char] -> [Char] showsPrec :: Int -> SizeToken -> [Char] -> [Char] $cshow :: SizeToken -> [Char] show :: SizeToken -> [Char] $cshowList :: [SizeToken] -> [Char] -> [Char] showList :: [SizeToken] -> [Char] -> [Char] Show) instance Token SizeToken where tokenName :: forall s. (IsString s, Semigroup s) => SizeToken -> s tokenName SizeToken XSmall = s "xs" tokenName SizeToken Small = s "s" tokenName SizeToken Medium = s "m" tokenName SizeToken Large = s "l" tokenName SizeToken XLarge = s "xl" newtype Space = Space {Space -> SizeToken spaceSize :: SizeToken} deriving newtype (Space -> Space -> Bool (Space -> Space -> Bool) -> (Space -> Space -> Bool) -> Eq Space forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Space -> Space -> Bool == :: Space -> Space -> Bool $c/= :: Space -> Space -> Bool /= :: Space -> Space -> Bool Eq, Eq Space Eq Space => (Space -> Space -> Ordering) -> (Space -> Space -> Bool) -> (Space -> Space -> Bool) -> (Space -> Space -> Bool) -> (Space -> Space -> Bool) -> (Space -> Space -> Space) -> (Space -> Space -> Space) -> Ord Space Space -> Space -> Bool Space -> Space -> Ordering Space -> Space -> Space forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: Space -> Space -> Ordering compare :: Space -> Space -> Ordering $c< :: Space -> Space -> Bool < :: Space -> Space -> Bool $c<= :: Space -> Space -> Bool <= :: Space -> Space -> Bool $c> :: Space -> Space -> Bool > :: Space -> Space -> Bool $c>= :: Space -> Space -> Bool >= :: Space -> Space -> Bool $cmax :: Space -> Space -> Space max :: Space -> Space -> Space $cmin :: Space -> Space -> Space min :: Space -> Space -> Space Ord, Space Space -> Space -> Bounded Space forall a. a -> a -> Bounded a $cminBound :: Space minBound :: Space $cmaxBound :: Space maxBound :: Space Bounded, Int -> Space Space -> Int Space -> [Space] Space -> Space Space -> Space -> [Space] Space -> Space -> Space -> [Space] (Space -> Space) -> (Space -> Space) -> (Int -> Space) -> (Space -> Int) -> (Space -> [Space]) -> (Space -> Space -> [Space]) -> (Space -> Space -> [Space]) -> (Space -> Space -> Space -> [Space]) -> Enum Space 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 :: Space -> Space succ :: Space -> Space $cpred :: Space -> Space pred :: Space -> Space $ctoEnum :: Int -> Space toEnum :: Int -> Space $cfromEnum :: Space -> Int fromEnum :: Space -> Int $cenumFrom :: Space -> [Space] enumFrom :: Space -> [Space] $cenumFromThen :: Space -> Space -> [Space] enumFromThen :: Space -> Space -> [Space] $cenumFromTo :: Space -> Space -> [Space] enumFromTo :: Space -> Space -> [Space] $cenumFromThenTo :: Space -> Space -> Space -> [Space] enumFromThenTo :: Space -> Space -> Space -> [Space] Enum) instance Token Space where tokenName :: forall s. (IsString s, Semigroup s) => Space -> s tokenName = [Char] -> s forall a. IsString a => [Char] -> a fromString ([Char] -> s) -> (Space -> [Char]) -> Space -> s forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . ([Char] "space-" [Char] -> [Char] -> [Char] forall a. Semigroup a => a -> a -> a <>) ([Char] -> [Char]) -> (Space -> [Char]) -> Space -> [Char] forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . SizeToken -> [Char] forall s. (IsString s, Semigroup s) => SizeToken -> s forall t s. (Token t, IsString s, Semigroup s) => t -> s tokenName (SizeToken -> [Char]) -> (Space -> SizeToken) -> Space -> [Char] forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Space -> SizeToken spaceSize spaceEm :: SizeToken -> Number spaceEm :: SizeToken -> Number spaceEm = (Number 0.4 Number -> Number -> Number forall a. Num a => a -> a -> a *) (Number -> Number) -> (SizeToken -> Number) -> SizeToken -> Number forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (Number 1.75 Number -> Int -> Number forall a b. (Num a, Integral b) => a -> b -> a ^) (Int -> Number) -> (SizeToken -> Int) -> SizeToken -> Number forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . SizeToken -> Int forall a. Enum a => a -> Int fromEnum instance ValueToken Space where type ValueType Space = Size LengthUnit tokenValue :: Space -> ValueType Space tokenValue = Number -> Size LengthUnit em (Number -> Size LengthUnit) -> (Space -> Number) -> Space -> Size LengthUnit forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . SizeToken -> Number spaceEm (SizeToken -> Number) -> (Space -> SizeToken) -> Space -> Number forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Space -> SizeToken spaceSize newtype Radius = Radius {Radius -> SizeToken radiusSize :: SizeToken} deriving newtype (Radius -> Radius -> Bool (Radius -> Radius -> Bool) -> (Radius -> Radius -> Bool) -> Eq Radius forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Radius -> Radius -> Bool == :: Radius -> Radius -> Bool $c/= :: Radius -> Radius -> Bool /= :: Radius -> Radius -> Bool Eq, Eq Radius Eq Radius => (Radius -> Radius -> Ordering) -> (Radius -> Radius -> Bool) -> (Radius -> Radius -> Bool) -> (Radius -> Radius -> Bool) -> (Radius -> Radius -> Bool) -> (Radius -> Radius -> Radius) -> (Radius -> Radius -> Radius) -> Ord Radius Radius -> Radius -> Bool Radius -> Radius -> Ordering Radius -> Radius -> Radius forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: Radius -> Radius -> Ordering compare :: Radius -> Radius -> Ordering $c< :: Radius -> Radius -> Bool < :: Radius -> Radius -> Bool $c<= :: Radius -> Radius -> Bool <= :: Radius -> Radius -> Bool $c> :: Radius -> Radius -> Bool > :: Radius -> Radius -> Bool $c>= :: Radius -> Radius -> Bool >= :: Radius -> Radius -> Bool $cmax :: Radius -> Radius -> Radius max :: Radius -> Radius -> Radius $cmin :: Radius -> Radius -> Radius min :: Radius -> Radius -> Radius Ord, Radius Radius -> Radius -> Bounded Radius forall a. a -> a -> Bounded a $cminBound :: Radius minBound :: Radius $cmaxBound :: Radius maxBound :: Radius Bounded, Int -> Radius Radius -> Int Radius -> [Radius] Radius -> Radius Radius -> Radius -> [Radius] Radius -> Radius -> Radius -> [Radius] (Radius -> Radius) -> (Radius -> Radius) -> (Int -> Radius) -> (Radius -> Int) -> (Radius -> [Radius]) -> (Radius -> Radius -> [Radius]) -> (Radius -> Radius -> [Radius]) -> (Radius -> Radius -> Radius -> [Radius]) -> Enum Radius 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 :: Radius -> Radius succ :: Radius -> Radius $cpred :: Radius -> Radius pred :: Radius -> Radius $ctoEnum :: Int -> Radius toEnum :: Int -> Radius $cfromEnum :: Radius -> Int fromEnum :: Radius -> Int $cenumFrom :: Radius -> [Radius] enumFrom :: Radius -> [Radius] $cenumFromThen :: Radius -> Radius -> [Radius] enumFromThen :: Radius -> Radius -> [Radius] $cenumFromTo :: Radius -> Radius -> [Radius] enumFromTo :: Radius -> Radius -> [Radius] $cenumFromThenTo :: Radius -> Radius -> Radius -> [Radius] enumFromThenTo :: Radius -> Radius -> Radius -> [Radius] Enum) instance Token Radius where tokenName :: forall s. (IsString s, Semigroup s) => Radius -> s tokenName = [Char] -> s forall a. IsString a => [Char] -> a fromString ([Char] -> s) -> (Radius -> [Char]) -> Radius -> s forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . ([Char] "radius-" [Char] -> [Char] -> [Char] forall a. Semigroup a => a -> a -> a <>) ([Char] -> [Char]) -> (Radius -> [Char]) -> Radius -> [Char] forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . SizeToken -> [Char] forall s. (IsString s, Semigroup s) => SizeToken -> s forall t s. (Token t, IsString s, Semigroup s) => t -> s tokenName (SizeToken -> [Char]) -> (Radius -> SizeToken) -> Radius -> [Char] forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Radius -> SizeToken radiusSize instance ValueToken Radius where type ValueType Radius = Size LengthUnit tokenValue :: Radius -> ValueType Radius tokenValue = Number -> Size LengthUnit em (Number -> Size LengthUnit) -> (Radius -> Number) -> Radius -> Size LengthUnit forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (Number 0.1 Number -> Number -> Number forall a. Num a => a -> a -> a *) (Number -> Number) -> (Radius -> Number) -> Radius -> Number forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . (Number 2 Number -> Int -> Number forall a b. (Num a, Integral b) => a -> b -> a ^) (Int -> Number) -> (Radius -> Int) -> Radius -> Number forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . SizeToken -> Int forall a. Enum a => a -> Int fromEnum (SizeToken -> Int) -> (Radius -> SizeToken) -> Radius -> Int forall b c a. (b -> c) -> (a -> b) -> a -> c forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k). Category cat => cat b c -> cat a b -> cat a c . Radius -> SizeToken radiusSize newtype FontSize = FontSize SizeToken deriving newtype (FontSize -> FontSize -> Bool (FontSize -> FontSize -> Bool) -> (FontSize -> FontSize -> Bool) -> Eq FontSize forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: FontSize -> FontSize -> Bool == :: FontSize -> FontSize -> Bool $c/= :: FontSize -> FontSize -> Bool /= :: FontSize -> FontSize -> Bool Eq, Eq FontSize Eq FontSize => (FontSize -> FontSize -> Ordering) -> (FontSize -> FontSize -> Bool) -> (FontSize -> FontSize -> Bool) -> (FontSize -> FontSize -> Bool) -> (FontSize -> FontSize -> Bool) -> (FontSize -> FontSize -> FontSize) -> (FontSize -> FontSize -> FontSize) -> Ord FontSize FontSize -> FontSize -> Bool FontSize -> FontSize -> Ordering FontSize -> FontSize -> FontSize forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: FontSize -> FontSize -> Ordering compare :: FontSize -> FontSize -> Ordering $c< :: FontSize -> FontSize -> Bool < :: FontSize -> FontSize -> Bool $c<= :: FontSize -> FontSize -> Bool <= :: FontSize -> FontSize -> Bool $c> :: FontSize -> FontSize -> Bool > :: FontSize -> FontSize -> Bool $c>= :: FontSize -> FontSize -> Bool >= :: FontSize -> FontSize -> Bool $cmax :: FontSize -> FontSize -> FontSize max :: FontSize -> FontSize -> FontSize $cmin :: FontSize -> FontSize -> FontSize min :: FontSize -> FontSize -> FontSize Ord, FontSize FontSize -> FontSize -> Bounded FontSize forall a. a -> a -> Bounded a $cminBound :: FontSize minBound :: FontSize $cmaxBound :: FontSize maxBound :: FontSize Bounded, Int -> FontSize FontSize -> Int FontSize -> [FontSize] FontSize -> FontSize FontSize -> FontSize -> [FontSize] FontSize -> FontSize -> FontSize -> [FontSize] (FontSize -> FontSize) -> (FontSize -> FontSize) -> (Int -> FontSize) -> (FontSize -> Int) -> (FontSize -> [FontSize]) -> (FontSize -> FontSize -> [FontSize]) -> (FontSize -> FontSize -> [FontSize]) -> (FontSize -> FontSize -> FontSize -> [FontSize]) -> Enum FontSize 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 :: FontSize -> FontSize succ :: FontSize -> FontSize $cpred :: FontSize -> FontSize pred :: FontSize -> FontSize $ctoEnum :: Int -> FontSize toEnum :: Int -> FontSize $cfromEnum :: FontSize -> Int fromEnum :: FontSize -> Int $cenumFrom :: FontSize -> [FontSize] enumFrom :: FontSize -> [FontSize] $cenumFromThen :: FontSize -> FontSize -> [FontSize] enumFromThen :: FontSize -> FontSize -> [FontSize] $cenumFromTo :: FontSize -> FontSize -> [FontSize] enumFromTo :: FontSize -> FontSize -> [FontSize] $cenumFromThenTo :: FontSize -> FontSize -> FontSize -> [FontSize] enumFromThenTo :: FontSize -> FontSize -> FontSize -> [FontSize] Enum) instance Token FontSize where tokenName :: forall s. (IsString s, Semigroup s) => FontSize -> s tokenName (FontSize SizeToken fontSize) = [Char] -> s forall a. IsString a => [Char] -> a fromString ([Char] -> s) -> [Char] -> s forall a b. (a -> b) -> a -> b $ [Char] "font-size-" [Char] -> [Char] -> [Char] forall a. Semigroup a => a -> a -> a <> SizeToken -> [Char] forall s. (IsString s, Semigroup s) => SizeToken -> s forall t s. (Token t, IsString s, Semigroup s) => t -> s tokenName SizeToken fontSize instance ValueToken FontSize where type ValueType FontSize = Size Percentage tokenValue :: FontSize -> ValueType FontSize tokenValue (FontSize SizeToken fontSize) = Number -> Size Percentage pct (Number -> Size Percentage) -> Number -> Size Percentage forall a b. (a -> b) -> a -> b $ case SizeToken fontSize of SizeToken XSmall -> Number 60 SizeToken Small -> Number 85 SizeToken Medium -> Number 100 SizeToken Large -> Number 125 SizeToken XLarge -> Number 200 data Appearance = Default | Subtle | Primary | Success | Warning | Danger | Discovery deriving stock (Appearance -> Appearance -> Bool (Appearance -> Appearance -> Bool) -> (Appearance -> Appearance -> Bool) -> Eq Appearance forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Appearance -> Appearance -> Bool == :: Appearance -> Appearance -> Bool $c/= :: Appearance -> Appearance -> Bool /= :: Appearance -> Appearance -> Bool Eq, Appearance Appearance -> Appearance -> Bounded Appearance forall a. a -> a -> Bounded a $cminBound :: Appearance minBound :: Appearance $cmaxBound :: Appearance maxBound :: Appearance Bounded, Int -> Appearance Appearance -> Int Appearance -> [Appearance] Appearance -> Appearance Appearance -> Appearance -> [Appearance] Appearance -> Appearance -> Appearance -> [Appearance] (Appearance -> Appearance) -> (Appearance -> Appearance) -> (Int -> Appearance) -> (Appearance -> Int) -> (Appearance -> [Appearance]) -> (Appearance -> Appearance -> [Appearance]) -> (Appearance -> Appearance -> [Appearance]) -> (Appearance -> Appearance -> Appearance -> [Appearance]) -> Enum Appearance 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 :: Appearance -> Appearance succ :: Appearance -> Appearance $cpred :: Appearance -> Appearance pred :: Appearance -> Appearance $ctoEnum :: Int -> Appearance toEnum :: Int -> Appearance $cfromEnum :: Appearance -> Int fromEnum :: Appearance -> Int $cenumFrom :: Appearance -> [Appearance] enumFrom :: Appearance -> [Appearance] $cenumFromThen :: Appearance -> Appearance -> [Appearance] enumFromThen :: Appearance -> Appearance -> [Appearance] $cenumFromTo :: Appearance -> Appearance -> [Appearance] enumFromTo :: Appearance -> Appearance -> [Appearance] $cenumFromThenTo :: Appearance -> Appearance -> Appearance -> [Appearance] enumFromThenTo :: Appearance -> Appearance -> Appearance -> [Appearance] Enum) instance Token Appearance where tokenName :: forall s. (IsString s, Semigroup s) => Appearance -> s tokenName Appearance Default = s "default" tokenName Appearance Subtle = s "subtle" tokenName Appearance Primary = s "primary" tokenName Appearance Success = s "success" tokenName Appearance Warning = s "warning" tokenName Appearance Danger = s "danger" tokenName Appearance Discovery = s "discovery" defaultToken :: Maybe Appearance defaultToken = Appearance -> Maybe Appearance forall a. a -> Maybe a Just Appearance Default data InputState = DefaultState | HoveredState | ActiveState deriving stock (InputState -> InputState -> Bool (InputState -> InputState -> Bool) -> (InputState -> InputState -> Bool) -> Eq InputState forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: InputState -> InputState -> Bool == :: InputState -> InputState -> Bool $c/= :: InputState -> InputState -> Bool /= :: InputState -> InputState -> Bool Eq, InputState InputState -> InputState -> Bounded InputState forall a. a -> a -> Bounded a $cminBound :: InputState minBound :: InputState $cmaxBound :: InputState maxBound :: InputState Bounded, Int -> InputState InputState -> Int InputState -> [InputState] InputState -> InputState InputState -> InputState -> [InputState] InputState -> InputState -> InputState -> [InputState] (InputState -> InputState) -> (InputState -> InputState) -> (Int -> InputState) -> (InputState -> Int) -> (InputState -> [InputState]) -> (InputState -> InputState -> [InputState]) -> (InputState -> InputState -> [InputState]) -> (InputState -> InputState -> InputState -> [InputState]) -> Enum InputState 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 :: InputState -> InputState succ :: InputState -> InputState $cpred :: InputState -> InputState pred :: InputState -> InputState $ctoEnum :: Int -> InputState toEnum :: Int -> InputState $cfromEnum :: InputState -> Int fromEnum :: InputState -> Int $cenumFrom :: InputState -> [InputState] enumFrom :: InputState -> [InputState] $cenumFromThen :: InputState -> InputState -> [InputState] enumFromThen :: InputState -> InputState -> [InputState] $cenumFromTo :: InputState -> InputState -> [InputState] enumFromTo :: InputState -> InputState -> [InputState] $cenumFromThenTo :: InputState -> InputState -> InputState -> [InputState] enumFromThenTo :: InputState -> InputState -> InputState -> [InputState] Enum) instance Token InputState where tokenName :: forall s. (IsString s, Semigroup s) => InputState -> s tokenName InputState DefaultState = s "default" tokenName InputState HoveredState = s "hovered" tokenName InputState ActiveState = s "active" defaultToken :: Maybe InputState defaultToken = InputState -> Maybe InputState forall a. a -> Maybe a Just InputState DefaultState byToken :: InputState -> Refinement byToken InputState DefaultState = Refinement emptyRefinement byToken InputState HoveredState = Refinement hover byToken InputState ActiveState = Refinement active data BorderWidth = BorderWidth deriving stock (BorderWidth -> BorderWidth -> Bool (BorderWidth -> BorderWidth -> Bool) -> (BorderWidth -> BorderWidth -> Bool) -> Eq BorderWidth forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: BorderWidth -> BorderWidth -> Bool == :: BorderWidth -> BorderWidth -> Bool $c/= :: BorderWidth -> BorderWidth -> Bool /= :: BorderWidth -> BorderWidth -> Bool Eq, BorderWidth BorderWidth -> BorderWidth -> Bounded BorderWidth forall a. a -> a -> Bounded a $cminBound :: BorderWidth minBound :: BorderWidth $cmaxBound :: BorderWidth maxBound :: BorderWidth Bounded, Int -> BorderWidth BorderWidth -> Int BorderWidth -> [BorderWidth] BorderWidth -> BorderWidth BorderWidth -> BorderWidth -> [BorderWidth] BorderWidth -> BorderWidth -> BorderWidth -> [BorderWidth] (BorderWidth -> BorderWidth) -> (BorderWidth -> BorderWidth) -> (Int -> BorderWidth) -> (BorderWidth -> Int) -> (BorderWidth -> [BorderWidth]) -> (BorderWidth -> BorderWidth -> [BorderWidth]) -> (BorderWidth -> BorderWidth -> [BorderWidth]) -> (BorderWidth -> BorderWidth -> BorderWidth -> [BorderWidth]) -> Enum BorderWidth 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 :: BorderWidth -> BorderWidth succ :: BorderWidth -> BorderWidth $cpred :: BorderWidth -> BorderWidth pred :: BorderWidth -> BorderWidth $ctoEnum :: Int -> BorderWidth toEnum :: Int -> BorderWidth $cfromEnum :: BorderWidth -> Int fromEnum :: BorderWidth -> Int $cenumFrom :: BorderWidth -> [BorderWidth] enumFrom :: BorderWidth -> [BorderWidth] $cenumFromThen :: BorderWidth -> BorderWidth -> [BorderWidth] enumFromThen :: BorderWidth -> BorderWidth -> [BorderWidth] $cenumFromTo :: BorderWidth -> BorderWidth -> [BorderWidth] enumFromTo :: BorderWidth -> BorderWidth -> [BorderWidth] $cenumFromThenTo :: BorderWidth -> BorderWidth -> BorderWidth -> [BorderWidth] enumFromThenTo :: BorderWidth -> BorderWidth -> BorderWidth -> [BorderWidth] Enum) instance Token BorderWidth where tokenName :: forall s. (IsString s, Semigroup s) => BorderWidth -> s tokenName BorderWidth BorderWidth = s "border-width" instance ValueToken BorderWidth where type ValueType BorderWidth = Size LengthUnit tokenValue :: BorderWidth -> ValueType BorderWidth tokenValue BorderWidth BorderWidth = Number -> Size LengthUnit Clay.rem Number 0.0625