[{"name":"Messenger.Component.InitUpdateComponent","comment":" IU Component\n\n@docs ConcreteIUComponent\n@docs genIUComponent\n\n","unions":[],"aliases":[{"name":"ConcreteIUComponent","comment":" InitUpdateComponent\n","args":["cdata","data","userdata","tar","msg","bdata","scenemsg"],"type":"{ init : Messenger.Component.Component.ComponentInit cdata userdata msg data bdata, initUpdate : Messenger.Component.Component.ComponentUpdate cdata data userdata scenemsg tar msg bdata, update : Messenger.Component.Component.ComponentUpdate cdata data userdata scenemsg tar msg bdata, updaterec : Messenger.Component.Component.ComponentUpdateRec cdata data userdata scenemsg tar msg bdata, view : Messenger.Component.Component.ComponentView cdata userdata data bdata, matcher : Messenger.Component.Component.ComponentMatcher data bdata tar }"}],"values":[{"name":"genIUComponent","comment":" Generate abstract IU component from concrete IU component.\n","type":"Messenger.Component.InitUpdateComponent.ConcreteIUComponent cdata data userdata tar msg bdata scenemsg -> Messenger.Component.Component.ComponentStorage cdata userdata tar msg bdata scenemsg"}],"binops":[]},{"name":"Messenger.Component.PortableComponent","comment":"\n\n\n# Portable components\n\nThese are components that might be provided by an elm package.\n\nThere are some limitations for portable components:\n\n  - They don't have the base data\n  - They cannot get the common data\n  - You need to set the msg and target type for every portable component\n  - You need to provide a codec in the layer to translate the messages and targets\n\n@docs ConcretePortableComponent\n@docs PortableMsgCodec\n@docs PortableTarCodec\n\nYou can generate a general type of component from a concrete portable component, which means you can manage this component with a\nlist of user components.\n\n@docs genPortableComponent\n\n\n## Type sugar\n\n@docs PortableComponentInit, PortableComponentUpdate, PortableComponentUpdateRec, PortableComponentView\n@docs PortableComponentStorage\n\n","unions":[],"aliases":[{"name":"ConcretePortableComponent","comment":" ConcretePortableComponent\n\nUsed when createing a portable component.\n\nUse `translatePortableComponent` to create a `ConcreteUserComponent` from a `ConcretePortableComponent`.\n\nPortable components still keep the scene-message type parameter, so they can pass\nthrough parent/system messages such as `SOMMsg`s after translation.\n\n","args":["data","userdata","tar","msg","scenemsg"],"type":"{ init : Messenger.Component.PortableComponent.PortableComponentInit userdata msg data, update : Messenger.Component.PortableComponent.PortableComponentUpdate data userdata tar msg scenemsg, updaterec : Messenger.Component.PortableComponent.PortableComponentUpdateRec data userdata tar msg scenemsg, view : Messenger.Component.PortableComponent.PortableComponentView userdata data, matcher : Messenger.GeneralModel.Matcher data tar }"},{"name":"PortableComponentInit","comment":" Portable component init type sugar\n","args":["userdata","msg","data"],"type":"Messenger.Base.Runtime -> Messenger.Base.Env () userdata -> msg -> data"},{"name":"PortableComponentStorage","comment":" Portable component storage as a specific component type sugar\n","args":["cdata","userdata","gtar","gmsg","bdata","scenemsg"],"type":"gmsg -> Messenger.Base.Runtime -> Messenger.Base.Env cdata userdata -> Messenger.Component.Component.AbstractComponent cdata userdata gtar gmsg bdata scenemsg"},{"name":"PortableComponentUpdate","comment":" Portable component update type sugar\n","args":["data","userdata","tar","msg","scenemsg"],"type":"Messenger.Base.Runtime -> Messenger.Base.Env () userdata -> Messenger.Base.UserEvent -> data -> ( data, List.List (Messenger.Scene.Scene.MMsg tar msg scenemsg userdata), ( Messenger.Base.Env () userdata, Basics.Bool ) )"},{"name":"PortableComponentUpdateRec","comment":" Portable component updaterec type sugar\n","args":["data","userdata","tar","msg","scenemsg"],"type":"Messenger.Base.Runtime -> Messenger.Base.Env () userdata -> msg -> data -> ( data, List.List (Messenger.Scene.Scene.MMsg tar msg scenemsg userdata), Messenger.Base.Env () userdata )"},{"name":"PortableComponentView","comment":" Portable component view type sugar\n","args":["userdata","data"],"type":"Messenger.Base.Runtime -> Messenger.Base.Env () userdata -> data -> REGL.Common.Renderable"},{"name":"PortableMsgCodec","comment":" Portable Component Message Codec\n","args":["specificmsg","generalmsg"],"type":"{ encode : generalmsg -> specificmsg, decode : specificmsg -> generalmsg }"},{"name":"PortableTarCodec","comment":" Portable Component Target Codec\n","args":["specifictar","generaltar"],"type":"{ encode : generaltar -> specifictar, decode : specifictar -> generaltar }"}],"values":[{"name":"genPortableComponent","comment":" Generate abstract component from concrete component.\n","type":"Messenger.Component.PortableComponent.ConcretePortableComponent data userdata tar msg scenemsg -> Messenger.Component.PortableComponent.PortableTarCodec tar gtar -> Messenger.Component.PortableComponent.PortableMsgCodec msg gmsg -> bdata -> Basics.Int -> Messenger.Component.PortableComponent.PortableComponentStorage cdata userdata gtar gmsg bdata scenemsg"}],"binops":[]},{"name":"Messenger.GlobalComponents.AssetLoading.Model","comment":" Global component configuration module\n\nA Global Component to show initial loading screen.\n\n@docs InitOption, genGC\n\n","unions":[],"aliases":[{"name":"InitOption","comment":" Init Options\n","args":[],"type":"{}"}],"values":[{"name":"genGC","comment":" Generate a global component.\n","type":"Maybe.Maybe Messenger.Scene.Scene.GCTarget -> Messenger.Scene.Scene.GlobalComponentStorage userdata scenemsg"}],"binops":[]},{"name":"Messenger.GlobalComponents.FPS.Model","comment":" Global component configuration module\n\nA Global Component to show FPS at the corner\n\n@docs InitOption, genGC\n\n","unions":[],"aliases":[{"name":"InitOption","comment":" Init Options\n","args":[],"type":"{ fontSize : Basics.Float, font : String.String }"}],"values":[{"name":"genGC","comment":" Generate a global component.\n","type":"Messenger.GlobalComponents.FPS.Model.InitOption -> Maybe.Maybe Messenger.Scene.Scene.GCTarget -> Messenger.Scene.Scene.GlobalComponentStorage userdata scenemsg"}],"binops":[]},{"name":"Messenger.GlobalComponents.Transition.Base","comment":"\n\n\n# Transition Base\n\n@docs Transition, SingleTrans, DoubleTrans\n@docs genMixTransition, genNoMixTransition, nullTransition\n@docs MixTransition, NoMixTransition\n\n","unions":[{"name":"Transition","comment":" Transition\n","args":[],"cases":[["NMTransition",["Messenger.GlobalComponents.Transition.Base.NoMixTransition"]],["MTransition",["Messenger.GlobalComponents.Transition.Base.MixTransition"]]]}],"aliases":[{"name":"DoubleTrans","comment":" Double Transition\n","args":[],"type":"REGL.Common.Renderable -> REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"},{"name":"MixTransition","comment":" Mix Transition\n","args":[],"type":"{ currentTransition : Basics.Float, t : Basics.Float, trans : Messenger.GlobalComponents.Transition.Base.DoubleTrans }"},{"name":"NoMixTransition","comment":" Transition has two stages:\n\n1.  From the old scene to the transition scene\n2.  From the transition scene to the new scene\n\n","args":[],"type":"{ currentTransition : Basics.Float, outT : Basics.Float, inT : Basics.Float, outTrans : Messenger.GlobalComponents.Transition.Base.SingleTrans, inTrans : Messenger.GlobalComponents.Transition.Base.SingleTrans }"},{"name":"SingleTrans","comment":" Single Transition\n","args":[],"type":"REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"}],"values":[{"name":"genMixTransition","comment":" Generate mixed transition\n","type":"( Messenger.GlobalComponents.Transition.Base.DoubleTrans, Duration.Duration ) -> Messenger.GlobalComponents.Transition.Base.Transition"},{"name":"genNoMixTransition","comment":" Generate nomix transition\n","type":"( Messenger.GlobalComponents.Transition.Base.SingleTrans, Duration.Duration ) -> ( Messenger.GlobalComponents.Transition.Base.SingleTrans, Duration.Duration ) -> Messenger.GlobalComponents.Transition.Base.Transition"},{"name":"nullTransition","comment":" Null Transition\n","type":"REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"}],"binops":[]},{"name":"Messenger.GlobalComponents.Transition.Model","comment":"\n\n\n# Transition\n\n@docs InitOption, genGC\n@docs genTransitionSOM, genSequentialTransitionSOM, genMixedTransitionSOM\n\n","unions":[],"aliases":[{"name":"InitOption","comment":" Options\n","args":["scenemsg"],"type":"{ transition : Messenger.GlobalComponents.Transition.Base.Transition, scene : ( String.String, Maybe.Maybe scenemsg ), filterSOM : Basics.Bool }"}],"values":[{"name":"genGC","comment":" Generate a global component.\n","type":"Messenger.GlobalComponents.Transition.Model.InitOption scenemsg -> Maybe.Maybe Messenger.Scene.Scene.GCTarget -> Messenger.Scene.Scene.GlobalComponentStorage userdata scenemsg"},{"name":"genMixedTransitionSOM","comment":" Generate a mixed transition scene output message.\n","type":"( Messenger.GlobalComponents.Transition.Base.DoubleTrans, Duration.Duration ) -> ( String.String, Maybe.Maybe scenemsg ) -> Messenger.Scene.Scene.SceneOutputMsg scenemsg userdata"},{"name":"genSequentialTransitionSOM","comment":" Generate a sequential transition scene output message.\n","type":"( Messenger.GlobalComponents.Transition.Base.SingleTrans, Duration.Duration ) -> ( Messenger.GlobalComponents.Transition.Base.SingleTrans, Duration.Duration ) -> ( String.String, Maybe.Maybe scenemsg ) -> Messenger.Scene.Scene.SceneOutputMsg scenemsg userdata"},{"name":"genTransitionSOM","comment":" Generate a scene output message for a transition.\n","type":"Messenger.GlobalComponents.Transition.Base.Transition -> ( String.String, Maybe.Maybe scenemsg ) -> Basics.Bool -> Messenger.Scene.Scene.SceneOutputMsg scenemsg userdata"}],"binops":[]},{"name":"Messenger.GlobalComponents.Transition.Transitions","comment":"\n\n\n# Builtin Transitions\n\n@docs fadeIn, fadeInWithColor, fadeInWithRenderable, fadeOut, fadeOutWithColor, fadeOutWithRenderable\n@docs fadeMix, fadeImgMix\n@docs fadeOutImg, fadeInImg\n\n","unions":[],"aliases":[],"values":[{"name":"fadeImgMix","comment":" Fading transition based on mask image used in mixed mode.\n","type":"String.String -> Basics.Bool -> REGL.Common.Renderable -> REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"},{"name":"fadeIn","comment":" Fade in transition.\n","type":"REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"},{"name":"fadeInImg","comment":" Fade in transition using mask image.\n","type":"String.String -> Basics.Bool -> REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"},{"name":"fadeInWithColor","comment":" Fade in transition with a color.\n","type":"Color.Color -> REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"},{"name":"fadeInWithRenderable","comment":" Fade in transition with a renderable.\n","type":"REGL.Common.Renderable -> REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"},{"name":"fadeMix","comment":" Fading transition used in mixed mode.\n","type":"REGL.Common.Renderable -> REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"},{"name":"fadeOut","comment":" Fade out transition.\n","type":"REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"},{"name":"fadeOutImg","comment":" Fade out transition using mask image.\n","type":"String.String -> Basics.Bool -> REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"},{"name":"fadeOutWithColor","comment":" Fade out transition with a color.\n","type":"Color.Color -> REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"},{"name":"fadeOutWithRenderable","comment":" Fade out transition with a renderable.\n","type":"REGL.Common.Renderable -> REGL.Common.Renderable -> Basics.Float -> REGL.Common.Renderable"}],"binops":[]},{"name":"Messenger.Layer.LayerExtra","comment":"\n\n\n# Layer extra features\n\n@docs BasicUpdater, Distributor\n\n","unions":[],"aliases":[{"name":"BasicUpdater","comment":" Basic Update Type\n\nA basic updater type used to update the basic data of the layer with event.\n\nUsers can use it as the first step of the update process\n\n","args":["data","cdata","userdata","tar","msg","scenemsg"],"type":"Messenger.Base.Runtime -> Messenger.Base.Env cdata userdata -> Messenger.Base.UserEvent -> data -> ( data, List.List (Messenger.Scene.Scene.MMsg tar msg scenemsg userdata), ( Messenger.Base.Env cdata userdata, Basics.Bool ) )"},{"name":"Distributor","comment":" Distributor Type\n\nA distributor is used to generate several list of Component Msgs for corresponding components list.\n\nThe `cmsgpacker` is a custom type to store the component msgs and their targets. Specifically, a `cmsgpacker` type should be\na record of different `List ( ComponentTarget, ComponentMsg )`.\n\n","args":["data","cdata","userdata","tar","msg","scenemsg","cmsgpacker"],"type":"Messenger.Base.Runtime -> Messenger.Base.Env cdata userdata -> Messenger.Base.UserEvent -> data -> ( data, ( List.List (Messenger.Scene.Scene.MMsg tar msg scenemsg userdata), cmsgpacker ), Messenger.Base.Env cdata userdata )"}],"values":[],"binops":[]},{"name":"Messenger.Misc.KeyCode","comment":" Common key codes\n\n@docs arrowUp, arrowDown, arrowLeft, arrowRight, space, escape, enter, backspace, tab, shift, ctrl, alt, capsLock, mouseLeftButton, mouseMidButton, mouseRightButton\n\n","unions":[],"aliases":[],"values":[{"name":"alt","comment":" keycode\n","type":"Basics.Int"},{"name":"arrowDown","comment":" keycode\n","type":"Basics.Int"},{"name":"arrowLeft","comment":" keycode\n","type":"Basics.Int"},{"name":"arrowRight","comment":" keycode\n","type":"Basics.Int"},{"name":"arrowUp","comment":" keycode\n","type":"Basics.Int"},{"name":"backspace","comment":" keycode\n","type":"Basics.Int"},{"name":"capsLock","comment":" keycode\n","type":"Basics.Int"},{"name":"ctrl","comment":" keycode\n","type":"Basics.Int"},{"name":"enter","comment":" keycode\n","type":"Basics.Int"},{"name":"escape","comment":" keycode\n","type":"Basics.Int"},{"name":"mouseLeftButton","comment":" mouse button\n","type":"Basics.Int"},{"name":"mouseMidButton","comment":" mouse button\n","type":"Basics.Int"},{"name":"mouseRightButton","comment":" mouse button\n","type":"Basics.Int"},{"name":"shift","comment":" keycode\n","type":"Basics.Int"},{"name":"space","comment":" keycode\n","type":"Basics.Int"},{"name":"tab","comment":" keycode\n","type":"Basics.Int"}],"binops":[]},{"name":"Messenger.Misc.RNG","comment":"\n\n\n# RNG module\n\nSample RNG module.\n\nThe seed is often given by the current tick.\n\n@docs genRandomInt, genRandomListInt\n\n","unions":[],"aliases":[],"values":[{"name":"genRandomInt","comment":" Generate a random int in the range [a, b] using the given seed.\n","type":"Basics.Int -> ( Basics.Int, Basics.Int ) -> Basics.Int"},{"name":"genRandomListInt","comment":" Generate a random list of ints in the range [a, b] using the given seed.\n","type":"Basics.Int -> Basics.Int -> ( Basics.Int, Basics.Int ) -> List.List Basics.Int"}],"binops":[]}]