{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoImplicitPrelude #-} module Hero.Look.Typography where import Alpha import Clay import Clay.Stylesheet (key) import Data.Semigroup ((<>)) import qualified Hero.Pack as Pack main :: Css main = fonts -- font modifiers euro, slim, wide, thicc, thinn, norm, lean, smol, lower, upper :: Css euro = fontFamily ["Eurostile"] [sansSerif] -- | stretch slim = fontStretch condensed wide = fontStretch expanded -- | weight thicc = fontWeight bold thinn = fontWeight normal -- | style norm = fontStyle normal lean = fontStyle italic -- | "smallcaps" is already taken by Clay smol = fontVariant smallCaps lower = textTransform lowercase upper = textTransform uppercase -- | font sizing -- | apparently "coat" is a synonym for "size" coat :: Double -> Css coat = fontSize . Clay.rem fontRoot :: Text fontRoot = Pack.cdnEdge <> "/old-assets/fonts/eurostile/Eurostile" -- | font faces fonts :: Css fonts = mconcat $ mkEuro fontStyle normal), ("LTStd-Bold.otf", OpenType, thicc <> norm), ("LTStd-Cn.otf", OpenType, slim <> norm), ("LTStd-Ex2.otf", OpenType, wide <> norm), ("LTStd-BoldCn.otf", OpenType, slim <> thicc), ("LTStd-BoldEx2.otf", OpenType, wide <> thicc) ] where mkEuro :: (Text, FontFaceFormat, Css) -> Css mkEuro (sufx, fmt, extra) = fontFace $ do fontFamily ["Eurostile"] [] fontFaceSrc [FontFaceSrcUrl (fontRoot <> sufx) $ Just fmt] extra -- TODO: add the below to Clay.Font upstream newtype FontStretch = FontStretch Value deriving (Val, Inherit, Normal, Other) expanded :: FontStretch expanded = FontStretch "expanded" condensed :: FontStretch condensed = FontStretch "condensed" fontStretch :: FontStretch -> Css fontStretch = key "font-stretch"