module Language.Ltml.HTML.CSS
    ( -- * Finalizing and Rendering @Css@
      writeCss
    , mainStylesheet
    ) where

import Clay hiding (map)

import Data.Text.Lazy.IO (writeFile)
import Language.Ltml.HTML.CSS.Classes
import Language.Ltml.HTML.Common (EnumStyleMap)
import Language.Ltml.HTML.FormatString (buildCssCounters)
import Prelude hiding (writeFile)

-- | Render @Css@ to given file
writeCss :: Css -> FilePath -> IO ()
writeCss :: Css -> FilePath -> IO ()
writeCss Css
css FilePath
path = FilePath -> Text -> IO ()
writeFile FilePath
path (Css -> Text
render Css
css)

-- | List of all Css Classes defined in 'Language.Ltml.HTML.CSS.Classes'
cssClasses :: [Css]
cssClasses :: [Css]
cssClasses = (Class -> Css) -> [Class] -> [Css]
forall a b. (a -> b) -> [a] -> [b]
map Class -> Css
classStyle [Class
forall a. Bounded a => a
minBound .. Class
forall a. Bounded a => a
maxBound]

-- | Builds CSS Counters and produces final main stylesheet
mainStylesheet :: EnumStyleMap -> Css
mainStylesheet :: EnumStyleMap -> Css
mainStylesheet EnumStyleMap
enumStyleMap = [Css] -> Css
forall a. Monoid a => [a] -> a
mconcat [Css]
cssClasses Css -> Css -> Css
forall a. Semigroup a => a -> a -> a
<> EnumStyleMap -> Css
buildCssCounters EnumStyleMap
enumStyleMap