{-# LANGUAGE FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, ScopedTypeVariables, TypeFamilies, UndecidableInstances, ViewPatterns #-}
module Text.Reform.Lucid.Text
    ( 
      inputText
    , inputPassword
    , inputSubmit
    , inputReset
    , inputHidden
    , inputButton
    , C.inputCheckbox
    , C.inputCheckboxes
    , C.inputRadio
    , C.inputFile
      
    , textarea
      
    , buttonSubmit
    , C.buttonReset
    , C.button
      
    , C.select
    , C.selectMultiple
      
    , C.label
      
    , C.errorList
    , C.childErrorList
      
    , C.br
    , C.fieldset
    , C.ol
    , C.ul
    , C.li
    , C.formGenGET
    , C.formGenPOST
    ) where
import Data.Text (Text, empty)
import Lucid (ToHtml, HtmlT)
import Text.Reform
import qualified Text.Reform.Lucid.Common as C
inputText :: (Monad m, FormInput input, FormError error, ErrorInputType error ~ input, Applicative f) =>
               Text 
            -> Form m input error (HtmlT f ()) () Text
inputText initialValue = C.inputText getInputText initialValue
inputPassword :: (Monad m, FormInput input, FormError error, ErrorInputType error ~ input, Applicative f) =>
                 Form m input error (HtmlT f ()) () Text
inputPassword = C.inputPassword getInputText empty
inputSubmit :: (Monad m, FormInput input, FormError error, ErrorInputType error ~ input, Applicative f) =>
               Text 
            -> Form m input error (HtmlT f ()) () (Maybe Text)
inputSubmit initialValue = C.inputSubmit getInputText initialValue
inputReset :: (Monad m, FormInput input, FormError error, ErrorInputType error ~ input, Applicative f) =>
              Text 
           -> Form m input error (HtmlT f ()) () ()
inputReset = C.inputReset
inputHidden :: (Monad m, FormInput input, FormError error, ErrorInputType error ~ input, Applicative f) =>
               Text 
            -> Form m input error (HtmlT f ()) () Text
inputHidden initialValue = C.inputHidden getInputText initialValue
inputButton :: (Monad m, FormInput input, FormError error, ErrorInputType error ~ input, Applicative f) =>
               Text 
            -> Form m input error (HtmlT f ()) () ()
inputButton label = C.inputButton label
textarea :: (Monad m, FormInput input, FormError error, ErrorInputType error ~ input, Monad f) =>
            Int    
         -> Int    
         -> Text 
         -> Form m input error (HtmlT f ()) () Text
textarea rows cols initialValue = C.textarea getInputText rows cols initialValue
buttonSubmit :: ( Monad m, FormError error, FormInput input, ErrorInputType error ~ input, ToHtml children, Monad f) =>
                Text 
             -> children 
             -> Form m input error (HtmlT f ()) () (Maybe Text)
buttonSubmit = C.buttonSubmit getInputText