module Form.Input ( input, ) where import Data.Text qualified as T import Form.Internal import Miso import Miso.String (fromMisoString, toMisoString) input :: String -> Form T.Text T.Text input label = let parse :: T.Text -> Either String T.Text parse i = let i' = T.strip i in if T.null i' then Left "required" else Right i' in Form { view = \i -> [ div_ [] $ [ label_ [] $ [ text (toMisoString label), div_ [] $ [ input_ [ type_ "text", value_ (toMisoString i), onInput fromMisoString ], div_ [] $ [either (text . toMisoString) (\_ -> text "") (parse i)] ] ] ] ], fill = parse }