@@ -35,6 +35,8 @@ import Reflex.EventWriter
3535import Reflex.PerformEvent.Class
3636import Reflex.PostBuild.Base
3737import Reflex.Requester.Base
38+import Reflex.Query.Base
39+import Reflex.Query.Class
3840
3941import qualified Control.Category
4042import Control.Lens hiding (element)
@@ -598,6 +600,27 @@ instance Reflex t => HasDomEvent t (TextAreaElement EventResult d t) en where
598600instance DomBuilder t m => DomBuilder t (ReaderT r m) where
599601 type DomBuilderSpace (ReaderT r m) = DomBuilderSpace m
600602
603+instance (DomBuilder t m, MonadFix m, MonadHold t m, Group q, Query q, Additive q) => DomBuilder t (QueryT t q m) where
604+ type DomBuilderSpace (QueryT t q m) = DomBuilderSpace m
605+ textNode = liftTextNode
606+ element elementTag cfg (QueryT child) = QueryT $ do
607+ s <- get
608+ let cfg' = cfg
609+ { _elementConfig_eventSpec = _elementConfig_eventSpec cfg }
610+ (e, (a, newS)) <- lift $ element elementTag cfg' $ runStateT child s
611+ put newS
612+ return (e, a)
613+
614+ inputElement = lift . inputElement
615+ textAreaElement = lift . textAreaElement
616+ selectElement cfg (QueryT child) = QueryT $ do
617+ s <- get
618+ (e, (a, newS)) <- lift $ selectElement cfg $ runStateT child s
619+ put newS
620+ return (e, a)
621+ placeRawElement = lift . placeRawElement
622+ wrapRawElement e = lift . wrapRawElement e
623+
601624type LiftDomBuilder t f m =
602625 ( Reflex t
603626 , MonadTransControlStateless f
@@ -650,6 +673,7 @@ deriving instance DomRenderHook t m => DomRenderHook t (EventWriterT t w m)
650673deriving instance DomRenderHook t m => DomRenderHook t (RequesterT t req rsp m)
651674#endif
652675deriving instance DomRenderHook t m => DomRenderHook t (PostBuildT t m)
676+deriving instance DomRenderHook t m => DomRenderHook t (QueryT t q m)
653677
654678{-# DEPRECATED liftElementConfig "Use 'id' instead; this function is no longer necessary" #-}
655679liftElementConfig :: ElementConfig er t s -> ElementConfig er t s