-----------------------------------------------------------------------------
-- |
-- Module      :  Miso.Subscription
-- Copyright   :  (C) 2016-2026 David M. Johnson
-- License     :  BSD3-style (see the file LICENSE)
-- Maintainer  :  David M. Johnson <code@dmj.io>
-- Stability   :  experimental
-- Portability :  non-portable
--
-- = Overview
--
-- "Miso.Subscription" is the re-export hub for all of miso's built-in
-- 'Miso.Effect.Sub' subscriptions. A subscription is a long-running 'IO'
-- action of type @'Miso.Effect.Sink' action -> IO ()@ that delivers
-- external events — mouse moves, key presses, URL changes, animation
-- frames — into the update loop by calling its 'Miso.Effect.Sink'.
--
-- Register subscriptions in the 'Miso.Types.subs' field of a
-- 'Miso.Types.Component':
--
-- @
-- import "Miso"
-- import "Miso.Subscription"
--
-- myComponent = ('Miso.component' model update view)
--   { 'Miso.Types.subs' =
--       [ 'mouseSub'    MouseMoved
--       , 'keyboardSub' KeyPressed
--       , 'uriSub'      UrlChanged
--       , 'rAFSub'      Tick
--       ]
--   }
-- @
--
-- = Subscription catalogue
--
-- ['mouseSub'] global @pointermove@ — "Miso.Subscription.Mouse"
-- ['keyboardSub'] global @keydown@ \/ @keyup@ — "Miso.Subscription.Keyboard"
-- ['arrowsSub', 'wasdSub', 'directionSub'] arrow or WASD keys held — "Miso.Subscription.Keyboard"
-- ['uriSub'] browser @popstate@ (back\/forward\/pushState) — "Miso.Subscription.History"
-- ['routerSub'] same, decoded via 'Miso.Router.Router' — "Miso.Subscription.History"
-- ['windowCoordsSub'] global window @pointermove@ — "Miso.Subscription.Window"
-- ['windowPointerMoveSub'] global window @pointermove@ — "Miso.Subscription.Window"
-- ['windowSubWithOptions'] any window event — "Miso.Subscription.Window"
-- ['onLineSub'] @online@ \/ @offline@ change — "Miso.Subscription.OnLine"
-- ['rAFSub'] every @requestAnimationFrame@ tick — "Miso.Subscription.RAF"
--
-- = History helpers
--
-- The "Miso.Subscription.History" module also exports imperative
-- navigation functions usable from within 'Miso.Effect.Effect':
--
-- @
-- update GoHome = 'Miso.Effect.io_' ('pushURI' ('Miso.Router.toURI' Home))
-- update GoBack = 'Miso.Effect.io_' 'back'
-- @
--
-- = See also
--
-- * "Miso.Effect" — 'Miso.Effect.Sub', 'Miso.Effect.Sink', 'Miso.Effect.mapSub'
-- * "Miso.Subscription.Util" — 'Miso.Subscription.Util.createSub' for custom subscriptions
-- * "Miso.Router" — 'Miso.Router.Router' typeclass used by 'routerSub'
----------------------------------------------------------------------------
module Miso.Subscription
  ( -- ** Mouse
    module Miso.Subscription.Mouse
    -- ** Keyboard
  , module Miso.Subscription.Keyboard
    -- ** History
  , module Miso.Subscription.History
    -- ** Window
  , module Miso.Subscription.Window
    -- ** OnLine
  , module Miso.Subscription.OnLine
    -- ** requestForAnimationFrame
  , module Miso.Subscription.RAF
  ) where
-----------------------------------------------------------------------------
import Miso.Subscription.Mouse
import Miso.Subscription.Keyboard
import Miso.Subscription.History
import Miso.Subscription.Window
import Miso.Subscription.OnLine
import Miso.Subscription.RAF
-----------------------------------------------------------------------------