-----------------------------------------------------------------------------
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Miso.Lynx
-- Copyright   :  (C) 2016-2025 David M. Johnson
-- License     :  BSD3-style (see the file LICENSE)
-- Maintainer  :  David M. Johnson <code@dmj.io>
-- Stability   :  experimental
-- Portability :  non-portable
--
-- Example usage:
--
-- @
-- import Miso
-- import Miso.Lynx
--
-- view :: Model -> View Model Action
-- view m =
--   view_
--   []
--   [ view_ [ onTap Increment ] [ text_ [] [ "+" ] ]
--   , text_ [] [ text $ ms (show m) ]
--   , view_ [ onTap Decrement ] [ text_ [] [ "-" ] ]
--   ]
-- @
--
-- More information on how to use miso is available on GitHub
--
-- <http://github.com/dmjio/miso-lynx>
--
----------------------------------------------------------------------------
module Miso.Lynx
   ( -- * Entrypoint
     lynx
     -- * Element
   , module Miso.Lynx.Element
     -- * FFI
   , module Miso.Lynx.FFI
     -- * Event
   , module Miso.Lynx.Event
   ) where
-----------------------------------------------------------------------------
import Miso (renderApp, App, Events)
import Miso.Lynx.Element
import Miso.Lynx.FFI
import Miso.Lynx.Event
-----------------------------------------------------------------------------
import Control.Monad (void)
-----------------------------------------------------------------------------
lynx :: Eq model => Events -> App model action -> IO ()
lynx :: forall model action.
Eq model =>
Events -> App model action -> IO ()
lynx Events
events App model action
vcomp = IO () -> IO ()
forall a. IO a -> IO ()
withJS (Events -> MisoString -> App model action -> IO ()
forall model action.
Eq model =>
Events -> MisoString -> App model action -> IO ()
renderApp Events
events MisoString
"native" App model action
vcomp)
-----------------------------------------------------------------------------
-- | Used when compiling with jsaddle to make miso's JavaScript present in
-- the execution context.
withJS :: IO a -> IO ()
withJS :: forall a. IO a -> IO ()
withJS IO a
action = IO a -> IO ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (IO a -> IO ()) -> IO a -> IO ()
forall a b. (a -> b) -> a -> b
$ do
#ifdef WASM
  $(evalFile "js/miso-lynx.js")
#endif
  action
-----------------------------------------------------------------------------