{-# LANGUAGE GADTs #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} -- | Icons with material design module Reflex.Bulmex.Tag.Icon ( icon , iconClass , iconDyn -- * Flask , flask ) where import qualified Data.Map.Strict as Map import qualified Data.Text as Text import Reflex import Reflex.Bulmex.Attr import Reflex.Bulmex.Tag.Odd import qualified Reflex.Dom.Builder.Class as Dom import qualified Reflex.Dom.Widget as Dom import qualified Reflex.Tags as T icon :: (PostBuild t m, Dom.DomBuilder t m) => Text.Text -> m () icon = iconClass "" -- | second is name iconClass :: (PostBuild t m, Dom.DomBuilder t m) => Text.Text -> Text.Text -> m () iconClass wrapClass = iconDyn (constDyn (classAttr wrapClass)) . constDyn . classAttr iconDyn :: (PostBuild t m, Dom.DomBuilder t m) => Dynamic t AttrMap -> Dynamic t AttrMap -> m () iconDyn wrapClass mdiClass = do textSpace T.spanDynAttr (attrUnion (classAttr "icon") <$> wrapClass) $ T.iDynAttr (Map.unionWith (<>) (classAttr "mdi mdi-") <$> mdiClass) $ Dom.blank textSpace flask :: (PostBuild t m, Dom.DomBuilder t m) => m () flask = icon "flask"