[{"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\nThe `scenemsg` type is replaced by `()` because you cannot send changescene message.\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.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":"Messenger.Base.Env cdata userdata -> gmsg -> 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.Env () userdata -> Messenger.Base.UserEvent -> data -> ( data, List.List (Messenger.GeneralModel.Msg tar msg (Messenger.Scene.Scene.SceneOutputMsg 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.Env () userdata -> msg -> data -> ( data, List.List (Messenger.GeneralModel.Msg tar msg (Messenger.Scene.Scene.SceneOutputMsg scenemsg userdata)), Messenger.Base.Env () userdata )"},{"name":"PortableComponentView","comment":" Portable component view type sugar\n","args":["userdata","data"],"type":"Messenger.Base.Env () userdata -> data -> Canvas.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.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.Env cdata userdata -> Messenger.Base.UserEvent -> data -> ( data, List.List (Messenger.GeneralModel.Msg tar msg (Messenger.Scene.Scene.SceneOutputMsg 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.\n\n","args":["data","cdata","userdata","tar","msg","scenemsg","cmsgpacker"],"type":"Messenger.Base.Env cdata userdata -> Messenger.Base.UserEvent -> data -> ( data, ( List.List (Messenger.GeneralModel.Msg tar msg (Messenger.Scene.Scene.SceneOutputMsg 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":[]}]