[
    {
        "name": "Animation.Messenger",
        "comment": " Import this module if you want the ability to send a Msg at any point during your animation.\n\n@docs State, update, send, Step\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "State",
                "comment": " An Animation State that also tracks your `Msg` type.\n",
                "args": [
                    "msg"
                ],
                "type": "Animation msg"
            },
            {
                "name": "Step",
                "comment": " ",
                "args": [
                    "msg"
                ],
                "type": "Step msg"
            }
        ],
        "values": [
            {
                "name": "send",
                "comment": " An animation `Step` which will send a message.  For example\n\n    Animation.interrupt\n        [ Animation.to [Animation.opacity 0]\n        , Animation.send OpacityIsNotZero\n        ]\n\n\n",
                "type": "msg -> Step msg"
            },
            {
                "name": "update",
                "comment": " An update that returns the updated animation as well as any messages sent in `Cmd` form.\n",
                "type": "Tick -> Animation msg -> ( Animation msg, Cmd msg )"
            }
        ],
        "binops": []
    },
    {
        "name": "Animation",
        "comment": " A library for animations.\n\n# Setting up an animation\n@docs State, subscription, Msg, render\n\n# Creating an animation\n@docs interrupt, queue, Step, wait, to, toWith, toWithEach, set, repeat, loop, update, style, styleWith, styleWithEach, Interpolation, spring, easing, speed\n\n# Animatable Properties\n@docs Property, opacity, Length, top, left, right, bottom, width, height, padding, paddingLeft, paddingRight, paddingTop, paddingBottom, margin, marginLeft, marginRight, marginTop, marginBottom, color, backgroundColor, borderColor, borderWidth, borderLeftWidth, borderRightWidth, borderTopWidth, borderBottomWidth, borderRadius, borderTopLeftRadius, borderTopRightRadius, borderBottomLeftRadius, borderBottomRightRadius, shadow, textShadow, insetShadow, display, inline, inlineBlock, flex, inlineFlex, block, none, listItem\n\n# Transforms\n@docs scale, scale3d, Angle, rotate, rotate3d, translate, translate3d, transformOrigin\n\n# Animatable CSS Filters\n@docs filterUrl, blur, brightness, contrast, grayscale, greyscale, hueRotate, invert, saturate, sepia, dropShadow\n\n# Animatable Svg Properties\n@docs viewBox, fill, stroke, strokeWidth, stopColor, offset, x, y, cx, cy, radius, radiusX, radiusY, points\n\n# Constructing an Svg Path\n@docs path, PathStep, move, moveTo, line, lineTo, horizontal, horizontalTo, vertical, verticalTo,  close, QuadraticCurve, curve, curveTo, CubicCurve, curve2, curve2To, arc, Arc\n\n# Units\n@docs px, percent, em, rem, turn, deg, grad, rad\n\n# Advanced\n@docs exactly, custom, custom2, customColor, attr, attr2, attr3, attr4, attrColor\n\n",
        "unions": [
            {
                "name": "Angle",
                "comment": "\n",
                "args": [],
                "cases": []
            },
            {
                "name": "Length",
                "comment": "\n",
                "args": [],
                "cases": []
            }
        ],
        "aliases": [
            {
                "name": "Arc",
                "comment": " ",
                "args": [],
                "type": "{ x : Float, y : Float, radius : Float, startAngle : Float, endAngle : Float, clockwise : Bool }"
            },
            {
                "name": "CubicCurve",
                "comment": " ",
                "args": [],
                "type": "{ control1 : ( Float, Float ), control2 : ( Float, Float ), point : ( Float, Float ) }"
            },
            {
                "name": "Interpolation",
                "comment": " ",
                "args": [],
                "type": "Interpolation"
            },
            {
                "name": "Msg",
                "comment": " ",
                "args": [],
                "type": "Tick"
            },
            {
                "name": "PathStep",
                "comment": " ",
                "args": [],
                "type": "PathCommand"
            },
            {
                "name": "Property",
                "comment": " ",
                "args": [],
                "type": "Property"
            },
            {
                "name": "QuadraticCurve",
                "comment": " ",
                "args": [],
                "type": "{ control : ( Float, Float ), point : ( Float, Float ) }"
            },
            {
                "name": "State",
                "comment": " ",
                "args": [],
                "type": "Animation Never"
            },
            {
                "name": "Step",
                "comment": " ",
                "args": [],
                "type": "Step Never"
            }
        ],
        "values": [
            {
                "name": "arc",
                "comment": "\n",
                "type": "Arc -> PathCommand"
            },
            {
                "name": "attr",
                "comment": " Animate a custom attribute by providing it's name, a float value, and the units it should have.\n\n\n",
                "type": "String -> Float -> String -> Property"
            },
            {
                "name": "attr2",
                "comment": "\n\n",
                "type": "String -> ( Float, String ) -> ( Float, String ) -> Property"
            },
            {
                "name": "attr3",
                "comment": "\n",
                "type": "String -> ( Float, String ) -> ( Float, String ) -> ( Float, String ) -> Property"
            },
            {
                "name": "attr4",
                "comment": "\n",
                "type": "String -> ( Float, String ) -> ( Float, String ) -> ( Float, String ) -> ( Float, String ) -> Property"
            },
            {
                "name": "attrColor",
                "comment": "\n",
                "type": "String -> Color -> Property"
            },
            {
                "name": "backgroundColor",
                "comment": " ",
                "type": "Color -> Property"
            },
            {
                "name": "block",
                "comment": " ",
                "type": "DisplayMode"
            },
            {
                "name": "blur",
                "comment": " Create a CSS blur filter, these stack with other filters.\n",
                "type": "Length -> Property"
            },
            {
                "name": "borderBottomLeftRadius",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "borderBottomRightRadius",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "borderBottomWidth",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "borderColor",
                "comment": " ",
                "type": "Color -> Property"
            },
            {
                "name": "borderLeftWidth",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "borderRadius",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "borderRightWidth",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "borderTopLeftRadius",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "borderTopRightRadius",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "borderTopWidth",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "borderWidth",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "bottom",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "brightness",
                "comment": " Create a CSS brightness filter, these stack with other filters.\n",
                "type": "Float -> Property"
            },
            {
                "name": "close",
                "comment": " Close a Path\n",
                "type": "PathCommand"
            },
            {
                "name": "color",
                "comment": " ",
                "type": "Color -> Property"
            },
            {
                "name": "contrast",
                "comment": " Create a CSS contrast filter, these stack with other filters.\n",
                "type": "Float -> Property"
            },
            {
                "name": "curve",
                "comment": " Create a relative curve with 1 control point and a target point.\nThis is a Quadratic curve in teh svg spec.\n",
                "type": "QuadraticCurve -> PathCommand"
            },
            {
                "name": "curve2",
                "comment": " Create a relative Curve with 2 control points and a target point.\nThis is a Cubic Curve in the svg spec.\n\n",
                "type": "CubicCurve -> PathCommand"
            },
            {
                "name": "curve2To",
                "comment": " Create an absolute Curve with 2 control points and a target point.\nThis is a Cubic Curve in the svg spec.\n\n",
                "type": "CubicCurve -> PathCommand"
            },
            {
                "name": "curveTo",
                "comment": " Create an absolute curve with 1 control point and a target point.\nThis is a Quadratic curve in teh svg spec.\n",
                "type": "QuadraticCurve -> PathCommand"
            },
            {
                "name": "custom",
                "comment": " Animate a custom _style_ property by providing it's name, a float value, and the units it should have.\n",
                "type": "String -> Float -> String -> Property"
            },
            {
                "name": "custom2",
                "comment": "\n",
                "type": "String -> ( Float, String ) -> ( Float, String ) -> Property"
            },
            {
                "name": "customColor",
                "comment": "\n",
                "type": "String -> Color -> Property"
            },
            {
                "name": "cx",
                "comment": " ",
                "type": "Float -> Property"
            },
            {
                "name": "cy",
                "comment": " ",
                "type": "Float -> Property"
            },
            {
                "name": "deg",
                "comment": " ",
                "type": "Float -> Angle"
            },
            {
                "name": "display",
                "comment": " ",
                "type": "DisplayMode -> Property"
            },
            {
                "name": "dropShadow",
                "comment": " Drop shadows will ignore the shadow's `size` value.   This is just one of the bizarre quirks of CSS.\n",
                "type": "Shadow -> Property"
            },
            {
                "name": "easing",
                "comment": " Specify a custom Easing to animate with.  To be used in conjunction with `StyleWith`, `StyleWithEach`, `toWith`, and `toWithEach`.\n\n",
                "type": "{ duration : Time, ease : Float -> Float } -> Interpolation"
            },
            {
                "name": "em",
                "comment": " ",
                "type": "Float -> Length"
            },
            {
                "name": "exactly",
                "comment": " Set a non-numerical to an exact value.  This is generally only used with `Animation.set`.\n\nFor example\n\n```\nAnimation.set\n    [ Animation.exactly \"border-style\" \"dashed\"\n    ]\n```\n\n",
                "type": "String -> String -> Property"
            },
            {
                "name": "fill",
                "comment": " ",
                "type": "Color -> Property"
            },
            {
                "name": "filterUrl",
                "comment": " Create a CSS filter-url\n",
                "type": "String -> Property"
            },
            {
                "name": "flex",
                "comment": " ",
                "type": "DisplayMode"
            },
            {
                "name": "grad",
                "comment": " ",
                "type": "Float -> Angle"
            },
            {
                "name": "grayscale",
                "comment": " Create a CSS grayscale filter, these stack with other filters.\n",
                "type": "Float -> Property"
            },
            {
                "name": "greyscale",
                "comment": " Create a CSS grayscale filter, these stack with other filters.  This is a spelling adjusment.\n",
                "type": "Float -> Property"
            },
            {
                "name": "height",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "horizontal",
                "comment": " ",
                "type": "Float -> PathCommand"
            },
            {
                "name": "horizontalTo",
                "comment": " ",
                "type": "Float -> PathCommand"
            },
            {
                "name": "hueRotate",
                "comment": " Create a CSS hue-rotation filter, these stack with other filters.\n",
                "type": "Angle -> Property"
            },
            {
                "name": "inline",
                "comment": " ",
                "type": "DisplayMode"
            },
            {
                "name": "inlineBlock",
                "comment": " ",
                "type": "DisplayMode"
            },
            {
                "name": "inlineFlex",
                "comment": " ",
                "type": "DisplayMode"
            },
            {
                "name": "insetShadow",
                "comment": " ",
                "type": "Shadow -> Property"
            },
            {
                "name": "interrupt",
                "comment": " Interrupt any running animations with the following animation.\n\n",
                "type": "List (Step msg) -> Animation msg -> Animation msg"
            },
            {
                "name": "invert",
                "comment": " Create a CSS invert filter, these stack with other filters.\n",
                "type": "Float -> Property"
            },
            {
                "name": "left",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "line",
                "comment": " ",
                "type": "Float -> Float -> PathCommand"
            },
            {
                "name": "lineTo",
                "comment": " ",
                "type": "Float -> Float -> PathCommand"
            },
            {
                "name": "listItem",
                "comment": " ",
                "type": "DisplayMode"
            },
            {
                "name": "loop",
                "comment": " Repeat a number of steps until interrupted.\n",
                "type": "List (Step msg) -> Step msg"
            },
            {
                "name": "margin",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "marginBottom",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "marginLeft",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "marginRight",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "marginTop",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "move",
                "comment": "\n",
                "type": "Float -> Float -> PathCommand"
            },
            {
                "name": "moveTo",
                "comment": " ",
                "type": "Float -> Float -> PathCommand"
            },
            {
                "name": "none",
                "comment": " ",
                "type": "DisplayMode"
            },
            {
                "name": "offset",
                "comment": " Used for svg gradients.  Accepts a number between 0 and 1.\n",
                "type": "Float -> Property"
            },
            {
                "name": "opacity",
                "comment": " ",
                "type": "Float -> Property"
            },
            {
                "name": "padding",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "paddingBottom",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "paddingLeft",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "paddingRight",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "paddingTop",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "path",
                "comment": " To be used with the svg path element.  Renders as the d property.\n",
                "type": "List PathCommand -> Property"
            },
            {
                "name": "percent",
                "comment": " ",
                "type": "Float -> Length"
            },
            {
                "name": "points",
                "comment": " Used with the svg polygon element\n",
                "type": "List ( Float, Float ) -> Property"
            },
            {
                "name": "px",
                "comment": " ",
                "type": "Float -> Length"
            },
            {
                "name": "queue",
                "comment": " Add an animation to the queue, execiting once the current animation finishes\n\n",
                "type": "List (Step msg) -> Animation msg -> Animation msg"
            },
            {
                "name": "rad",
                "comment": " ",
                "type": "Float -> Angle"
            },
            {
                "name": "radius",
                "comment": " ",
                "type": "Float -> Property"
            },
            {
                "name": "radiusX",
                "comment": " ",
                "type": "Float -> Property"
            },
            {
                "name": "radiusY",
                "comment": " ",
                "type": "Float -> Property"
            },
            {
                "name": "rem",
                "comment": " ",
                "type": "Float -> Length"
            },
            {
                "name": "render",
                "comment": " Render style properties into the style attribute and render other attributes as needed for svg.\n\nCombine \"transform\" based properties into a single css property.\n\nCombine \"filter\" based properties into a single css property.\n",
                "type": "Animation msgA -> List (Attribute msgB)"
            },
            {
                "name": "repeat",
                "comment": " Repeat a number of steps `n` times.\n",
                "type": "Int -> List (Step msg) -> Step msg"
            },
            {
                "name": "right",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "rotate",
                "comment": " ",
                "type": "Angle -> Property"
            },
            {
                "name": "rotate3d",
                "comment": " ",
                "type": "Angle -> Angle -> Angle -> Property"
            },
            {
                "name": "saturate",
                "comment": " Create a CSS saturate filter, these stack with other filters.\n",
                "type": "Float -> Property"
            },
            {
                "name": "scale",
                "comment": " ",
                "type": "Float -> Property"
            },
            {
                "name": "scale3d",
                "comment": " ",
                "type": "Float -> Float -> Float -> Property"
            },
            {
                "name": "sepia",
                "comment": " Create a CSS sepia filter, these stack with other filters.\n",
                "type": "Float -> Property"
            },
            {
                "name": "set",
                "comment": " Immediately set properties to a value.\n",
                "type": "List Property -> Step msg"
            },
            {
                "name": "shadow",
                "comment": " ",
                "type": "Shadow -> Property"
            },
            {
                "name": "speed",
                "comment": " Specify a speed to animate with.  To be used in conjunction with `StyleWith`, `StyleWithEach`, `toWith`, and `toWithEach`.\n\nGenerally you don't want this.  It's used in the special case of the default interpolation for rotation.\n\nUse `Animation.spring` or `Animation.easing` instead as they are more powerful.\n\n",
                "type": "{ perSecond : Float } -> Interpolation"
            },
            {
                "name": "spring",
                "comment": " Specify a custom Spring to animate with.  To be used in conjunction with `StyleWith`, `StyleWithEach`, `toWith`, and `toWithEach`.\n\nThis should be your preferred interpolation to use.\n\n",
                "type": "{ stiffness : Float, damping : Float } -> Interpolation"
            },
            {
                "name": "stopColor",
                "comment": " Used for svg gradients\n",
                "type": "Color -> Property"
            },
            {
                "name": "stroke",
                "comment": " ",
                "type": "Color -> Property"
            },
            {
                "name": "strokeWidth",
                "comment": " ",
                "type": "Float -> Property"
            },
            {
                "name": "style",
                "comment": " Set an initial style for an animation.\n\nUses standard defaults for interpolation\n\n",
                "type": "List Property -> Animation msg"
            },
            {
                "name": "styleWith",
                "comment": " Set an initial style for an animation and override the standard default for interpolation.\n\n",
                "type": "Interpolation -> List Property -> Animation msg"
            },
            {
                "name": "styleWithEach",
                "comment": " Set an initial style for an animation and specify the interpolation to be used for each property.\n\nAny property not listed will receive interpolation based on the standard defaults.\n",
                "type": "List ( Interpolation, Property ) -> Animation msg"
            },
            {
                "name": "subscription",
                "comment": " Create a subscription to AnimationFrame.times.\n\nIt is throttled based on whether the current animation is running or not.\n\n",
                "type": "(Msg -> msgB) -> List (Animation msgA) -> Sub msgB"
            },
            {
                "name": "textShadow",
                "comment": " Text shadows will ignore the shadow's `size` value.   This is just one of the bizarre quirks of CSS.\n",
                "type": "Shadow -> Property"
            },
            {
                "name": "to",
                "comment": " Animate to a set of target values, using the default interpolation.\n\n",
                "type": "List Property -> Step msg"
            },
            {
                "name": "toWith",
                "comment": " Animate to a set of target values. Use a temporary interpolation instead of the default.\nThe interpolation will revert back to default after this step.\n",
                "type": "Interpolation -> List Property -> Step msg"
            },
            {
                "name": "toWithEach",
                "comment": " Animate to a set of target values. Use a temporary interpolation for each property instead of the default.\nThe interpolation will revert back to default after this step.\n",
                "type": "List ( Interpolation, Property ) -> Step msg"
            },
            {
                "name": "top",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "transformOrigin",
                "comment": " ",
                "type": "Length -> Length -> Length -> Property"
            },
            {
                "name": "translate",
                "comment": " ",
                "type": "Length -> Length -> Property"
            },
            {
                "name": "translate3d",
                "comment": " ",
                "type": "Length -> Length -> Length -> Property"
            },
            {
                "name": "turn",
                "comment": " ",
                "type": "Float -> Angle"
            },
            {
                "name": "update",
                "comment": " Update an animation.\n",
                "type": "Msg -> Animation msg -> Animation msg"
            },
            {
                "name": "vertical",
                "comment": " ",
                "type": "Float -> PathCommand"
            },
            {
                "name": "verticalTo",
                "comment": " ",
                "type": "Float -> PathCommand"
            },
            {
                "name": "viewBox",
                "comment": " ",
                "type": "Float -> Float -> Float -> Float -> Property"
            },
            {
                "name": "wait",
                "comment": " ",
                "type": "Time -> Step msg"
            },
            {
                "name": "width",
                "comment": " ",
                "type": "Length -> Property"
            },
            {
                "name": "x",
                "comment": " ",
                "type": "Float -> Property"
            },
            {
                "name": "y",
                "comment": " ",
                "type": "Float -> Property"
            }
        ],
        "binops": []
    },
    {
        "name": "Animation.Spring.Presets",
        "comment": "\nSpring presets to be used with `Animation.styleWith` and `Animation.toWith`\n\n@docs Spring, zippy, wobbly, stiff\n\n",
        "unions": [],
        "aliases": [
            {
                "name": "Spring",
                "comment": "\n",
                "args": [],
                "type": "{ stiffness : Float, damping : Float }"
            }
        ],
        "values": [
            {
                "name": "stiff",
                "comment": "\n",
                "type": "Spring"
            },
            {
                "name": "wobbly",
                "comment": "\n",
                "type": "Spring"
            },
            {
                "name": "zippy",
                "comment": " The default used by elm-style-animation.\n",
                "type": "Spring"
            }
        ],
        "binops": []
    }
]