[
    {
        "name": "Svg.Button",
        "comment": " The `Svg.Button` module makes it easy to create SVG buttons.\n\nCurrently, the buttons are rectangular, with a two-pixel wide black border, containing either text or Svg you provide for their body. They support single clicks or repeated clicks, and work on both regular computer browsers, with a mouse, or portable browsers, with a touch screen.\n\n\n# Types\n\n@docs Button , Content, Location, Size, Msg, MsgWrapper, RepeatTime\n\n\n# Constructors\n\n@docs simpleButton, repeatingButton\n\n\n# Button state accessors\n\n@docs getState, setState\n\n\n# Constants\n\n@docs normalRepeatTime\n\n\n# Rendering\n\n@docs render, renderBorder, renderOverlay\n\n\n# Events\n\n@docs update, checkSubscription\n\n",
        "unions": [
            {
                "name": "Button",
                "comment": " An Svg Button.\n\nCreate one with `simpleButton` or `repeatingButton`.\n\n",
                "args": [
                    "state"
                ],
                "cases": []
            },
            {
                "name": "Content",
                "comment": " Two ways to draw the button content.\n\n`TextContent` encapsulates a `String`, which is sized to half the button height and centered.\n\n`SvgContent` allows you to render any `Svg` you wish.\n\n",
                "args": [
                    "msg"
                ],
                "cases": [
                    [
                        "TextContent",
                        [
                            "String"
                        ]
                    ],
                    [
                        "SvgContent",
                        [
                            "Svg msg"
                        ]
                    ]
                ]
            },
            {
                "name": "Msg",
                "comment": " Opaque internal message.\n\nYou wrap these with the `MsgWrapper` you pass to `render`, and pass them to `update`.\n\n",
                "args": [
                    "msg",
                    "state"
                ],
                "cases": []
            },
            {
                "name": "RepeatTime",
                "comment": " First arg to `repeatingButton`.\n\nThe two `Time` args to `RepeatTimeWithInitialDelay` are the initial delay and the subsequent repeat period.\n\n",
                "args": [],
                "cases": [
                    [
                        "NoRepeat",
                        []
                    ],
                    [
                        "RepeatTime",
                        [
                            "Time"
                        ]
                    ],
                    [
                        "RepeatTimeWithInitialDelay",
                        [
                            "Time",
                            "Time"
                        ]
                    ]
                ]
            }
        ],
        "aliases": [
            {
                "name": "Location",
                "comment": " A two-dimensional location: (x, y)\n",
                "args": [],
                "type": "( Float, Float )"
            },
            {
                "name": "MsgWrapper",
                "comment": " A user message wrapper which turns an Svg.Button.Msg into a user msg.\n",
                "args": [
                    "msg",
                    "state"
                ],
                "type": "Msg msg state -> msg"
            },
            {
                "name": "Size",
                "comment": " A two-dimensional size: (width, height)\n",
                "args": [],
                "type": "( Float, Float )"
            }
        ],
        "values": [
            {
                "name": "checkSubscription",
                "comment": " Subscriptions are one type of message you can get inside your wrapper.\n\nIn order to check if a message is a subscription, call `checkSubscription`. If it returns a time delay and Button message, you need to use that to create a time subscription for your application.\n\nSimple buttons don't need subscriptions. Only repeating buttons use them.\n\n",
                "type": "Msg msg state -> Maybe ( Time, Msg msg state )"
            },
            {
                "name": "getState",
                "comment": " Read a button's `state`.\n",
                "type": "Button state -> state"
            },
            {
                "name": "normalRepeatTime",
                "comment": " This is the usual value used for the repeat time of a repeating button.\n\nIt has an initial delay of 1/2 second and a repeat period of 1/10 second.\n\n",
                "type": "RepeatTime"
            },
            {
                "name": "render",
                "comment": " Render a button's outline, your content, and the mouse-sensitive overlay.\n\nDoes this by sizing an SVG `g` element at the `Location` you pass and the size of the `Button`, and calling `renderBorder`, `renderContent`, and `renderOverlay` inside it.\n\n",
                "type": "Location -> Content msg -> MsgWrapper msg state -> Button state -> Svg msg"
            },
            {
                "name": "renderBorder",
                "comment": " Draw a button's border.\n\nYou won't usually use this, letting `render` call it for you.\n\nYou should call this BEFORE drawing your button, so that its opaque body does not cover your beautiful drawing.\n\n",
                "type": "Button state -> Svg msg"
            },
            {
                "name": "renderOverlay",
                "comment": " Draw a button's transparent, mouse/touch-sensitive overlay.\n\nYou won't usually use this, letting `render` call it for you.\n\nYou should call this AFTER drawing your button, so that the overlay is the last thing drawn. Otherwise, it may not get all the mouse/touch events.\n\n",
                "type": "MsgWrapper msg state -> Button state -> Svg msg"
            },
            {
                "name": "repeatingButton",
                "comment": " Like `simpleButton`, but repeats the click or tap periodically, as long as the mouse or finger is held down.\n",
                "type": "RepeatTime -> Size -> state -> Button state"
            },
            {
                "name": "setState",
                "comment": " Set a button's `state`.\n",
                "type": "state -> Button state -> Button state"
            },
            {
                "name": "simpleButton",
                "comment": " Create a simple, rectanglar button.\n\nIt sends a `msg` when clicked or tapped.\n\nThe `view` function draws a two-pixel wide, black border around it. Your drawing function should leave room for that, or it will be overlaid.\n\n",
                "type": "Size -> state -> Button state"
            },
            {
                "name": "update",
                "comment": " Call this to process a Button message from inside your wrapper.\n\nThe `Bool` in the return value is true if this message should be interpreted as a click on the button. Simple buttons never change the button or return a command you need to care about, but you'll need to call `getState` on the button to figure out what to do (unless your application has only a single button).\n\n",
                "type": "Msg msg state -> ( Bool, Button state, Cmd msg )"
            }
        ],
        "binops": []
    }
]