[
    {
        "name": "DOM",
        "comment": " You read values off the DOM by constructing a JSON decoder.\nSee the `target` value for example use.\n\n# Traversing the DOM\n@docs target, offsetParent, parentElement, childNode, childNodes\n\n# Geometry\nDecoders for reading sizing etc. properties off the DOM. All decoders return\nmeasurements in pixels.\n\nRefer to, e.g.,\n[the Mozilla documentation](https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/Determining_the_dimensions_of_elements)\nfor the precise semantics of these measurements. See also\n[this stackoverflow answer](https://stackoverflow.com/questions/294250/how-do-i-retrieve-an-html-elements-actual-width-and-height).\n\n@docs offsetWidth, offsetHeight\n@docs offsetLeft, offsetTop\n@docs Rectangle, boundingClientRect\n\n# Scroll\n@docs scrollLeft, scrollTop\n\n# Miscellanous\n@docs className\n",
        "unions": [],
        "aliases": [
            {
                "name": "Rectangle",
                "comment": " Types for rectangles.\n",
                "args": [],
                "type": "{ top : Float, left : Float, width : Float, height : Float }"
            }
        ],
        "values": [
            {
                "name": "boundingClientRect",
                "comment": " Approximation of the method\n[getBoundingClientRect](https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Floaterface/nsIDOMClientRect),\nbased off\n[this stackoverflow answer](https://stackoverflow.com/questions/442404/retrieve-the-position-x-y-of-an-html-element).\n\nNB! This decoder is likely computationally expensive and may produce results\nthat differ slightly from `getBoundingClientRect` in browser-dependent ways.\n\n(I don't get to call getBoundingClientRect directly from Elm without going\nnative or using ports; my packages don't get to go native and I can find no\nsolution with ports. So we do it like in the bad old days with an O(lg n)\ntraversal of the DOM, only now through presumably expensive JSON decoders.\nIt's 2007 forever, baby!)\n",
                "type": "Decoder Rectangle"
            },
            {
                "name": "childNode",
                "comment": " Find the ith child of an element. \n",
                "type": "Int -> Decoder a -> Decoder a"
            },
            {
                "name": "childNodes",
                "comment": " Get the children of an element.\n",
                "type": "Decoder a -> Decoder (List a)"
            },
            {
                "name": "className",
                "comment": " Get the class name(s) of an element.\n",
                "type": "Decoder String"
            },
            {
                "name": "offsetHeight",
                "comment": " Get the heigh of an element in pixels. Underlying implementation\nreads `.offsetHeight`.\n",
                "type": "Decoder Float"
            },
            {
                "name": "offsetLeft",
                "comment": " Get the left-offset of the element in the parent element in pixels.\nUnderlying implementation reads `.offsetLeft`.\n",
                "type": "Decoder Float"
            },
            {
                "name": "offsetParent",
                "comment": " Get the offsetParent of the current element. Returns first argument if the current\nelement is already the root; applies the second argument to the parent element\nif not.\n\nTo do traversals of the DOM, exploit that Elm allows recursive values. See\nan example\n[here](https://github.com/debois/elm-dom/blob/master/src/DOM.elm#L165-L176).\n",
                "type": "a -> Decoder a -> Decoder a"
            },
            {
                "name": "offsetTop",
                "comment": " Get the top-offset of the element in the parent element in pixels.\nUnderlying implementation reads `.offsetTop`.\n",
                "type": "Decoder Float"
            },
            {
                "name": "offsetWidth",
                "comment": " Get the width of an element in pixels; underlying implementation\nreads `.offsetWidth`.\n",
                "type": "Decoder Float"
            },
            {
                "name": "parentElement",
                "comment": " Get the parent of an element. \n",
                "type": "Decoder a -> Decoder a"
            },
            {
                "name": "scrollLeft",
                "comment": " Get the amount of left scroll of the element in pixels.\nUnderlying implementation reads `.scrollLeft`.\n",
                "type": "Decoder Float"
            },
            {
                "name": "scrollTop",
                "comment": " Get the amount of top scroll of the element in pixels.\nUnderlying implementation reads `.scrollTop`.\n",
                "type": "Decoder Float"
            },
            {
                "name": "target",
                "comment": " Get the target DOM element of an event. You will usually start with this\ndecoder. E.g., to make a button which when clicked emit an Action that carries\nthe width of the button:\n\n    import DOM exposing (target, offsetWidth)\n\n    type Action = Click Float\n\n    myButton : Signal.Address Action -> Html\n    myButton addr =\n      button\n        [ on \"click\" (target offsetWidth) (Click >> Signal.message addr) ]\n        [ text \"Click me!\" ]\n",
                "type": "Decoder a -> Decoder a"
            }
        ],
        "binops": []
    }
]