-- | Similar to `Halogen.HTML as HH` but contains SVG elements.
-- | We recommend importing this module via the `SE` module alias:
-- | ```
-- | import Halogen.Svg.Elements as SE
-- | ```
module Halogen.Svg.Elements
  ( element
  , svg
  , g
  , circle
  , image
  , ellipse
  , rect
  , path
  , pattern_
  , line
  , polyline
  , polygon
  , text
  , foreignObject
  , defs
  , mask
  , marker
  , animate
  , animateMotion
  , circleNode
  , mpath
  , title
  , use
  )
where

-- Like Halogen.HTML.Elements

import Halogen.HTML.Core (ElemName (..), HTML, Namespace (..))
import Halogen.HTML.Elements (Leaf, Node, elementNS)
import Halogen.HTML.Properties (IProp)
import Halogen.Svg.Indexed qualified as I
import Protolude hiding (mask)

-- | This `element` rather than `Halogen.HTML.Elements.element` must be used
-- | because all SVG elements created via JavaScript must have the svg namespace:
-- | `"http://www.w3.org/2000/svg"`
element :: forall r w i. ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element :: forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element = Namespace
-> ElemName -> Array (IProp r i) -> Array (HTML w i) -> HTML w i
forall (r :: Row (*)) w i.
Namespace
-> ElemName -> Array (IProp r i) -> Array (HTML w i) -> HTML w i
elementNS (Text -> Namespace
Namespace Text
"http://www.w3.org/2000/svg")

svg :: forall p i. Node I.SVGsvg p i
svg :: forall p i. Node SVGsvg p i
svg = ElemName -> [IProp SVGsvg i] -> [HTML p i] -> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (ElemName -> [IProp SVGsvg i] -> [HTML p i] -> HTML p i)
-> ElemName -> [IProp SVGsvg i] -> [HTML p i] -> HTML p i
forall a b. (a -> b) -> a -> b
$ Text -> ElemName
ElemName Text
"svg"

g :: forall p i. Node I.SVGg p i
g :: forall p i. Node SVGg p i
g = ElemName -> [IProp SVGg i] -> [HTML p i] -> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (ElemName -> [IProp SVGg i] -> [HTML p i] -> HTML p i)
-> ElemName -> [IProp SVGg i] -> [HTML p i] -> HTML p i
forall a b. (a -> b) -> a -> b
$ Text -> ElemName
ElemName Text
"g"

circle :: forall p i. Leaf I.SVGcircle p i
circle :: forall p i. Leaf SVGcircle p i
circle [IProp SVGcircle i]
props = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "cx" ':-> Double, "cy" ':-> Double,
           "fill" ':-> Text, "fillOpacity" ':-> Double, "id" ':-> Text,
           "lang" ':-> Text, "markerEnd" ':-> Text, "markerMid" ':-> Text,
           "markerStart" ':-> Text, "mask" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "r" ':-> Double, "stroke" ':-> Text, "strokeDashArray" ':-> Text,
           "strokeDashOffset" ':-> Double, "strokeOpacity" ':-> Double,
           "strokeWidth" ':-> Double, "style" ':-> Text, "tabIndex" ':-> Int,
           "transform" ':-> Text])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"circle") [IProp SVGcircle i]
[IProp
   ('R
      '["class" ':-> Text, "cx" ':-> Double, "cy" ':-> Double,
        "fill" ':-> Text, "fillOpacity" ':-> Double, "id" ':-> Text,
        "lang" ':-> Text, "markerEnd" ':-> Text, "markerMid" ':-> Text,
        "markerStart" ':-> Text, "mask" ':-> Text,
        "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
        "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
        "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
        "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
        "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
        "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
        "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
        "r" ':-> Double, "stroke" ':-> Text, "strokeDashArray" ':-> Text,
        "strokeDashOffset" ':-> Double, "strokeOpacity" ':-> Double,
        "strokeWidth" ':-> Double, "style" ':-> Text, "tabIndex" ':-> Int,
        "transform" ':-> Text])
   i]
props []

image :: forall p i. Leaf I.SVGimage p i
image :: forall p i. Leaf SVGimage p i
image [IProp SVGimage i]
props = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "height" ':-> Double, "href" ':-> Text,
           "id" ':-> Text, "lang" ':-> Text, "onClick" ':-> MouseEvent,
           "onContextMenu" ':-> MouseEvent, "onDoubleClick" ':-> MouseEvent,
           "onKeyDown" ':-> KeyboardEvent, "onKeyPress" ':-> KeyboardEvent,
           "onKeyUp" ':-> KeyboardEvent, "onMouseDown" ':-> MouseEvent,
           "onMouseEnter" ':-> MouseEvent, "onMouseLeave" ':-> MouseEvent,
           "onMouseMove" ':-> MouseEvent, "onMouseOut" ':-> MouseEvent,
           "onMouseOver" ':-> MouseEvent, "onMouseUp" ':-> MouseEvent,
           "onWheel" ':-> WheelEvent, "preserveAspectRatio" ':-> Text,
           "style" ':-> Text, "tabIndex" ':-> Int, "width" ':-> Double,
           "x" ':-> Double, "y" ':-> Double])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"image") [IProp SVGimage i]
[IProp
   ('R
      '["class" ':-> Text, "height" ':-> Double, "href" ':-> Text,
        "id" ':-> Text, "lang" ':-> Text, "onClick" ':-> MouseEvent,
        "onContextMenu" ':-> MouseEvent, "onDoubleClick" ':-> MouseEvent,
        "onKeyDown" ':-> KeyboardEvent, "onKeyPress" ':-> KeyboardEvent,
        "onKeyUp" ':-> KeyboardEvent, "onMouseDown" ':-> MouseEvent,
        "onMouseEnter" ':-> MouseEvent, "onMouseLeave" ':-> MouseEvent,
        "onMouseMove" ':-> MouseEvent, "onMouseOut" ':-> MouseEvent,
        "onMouseOver" ':-> MouseEvent, "onMouseUp" ':-> MouseEvent,
        "onWheel" ':-> WheelEvent, "preserveAspectRatio" ':-> Text,
        "style" ':-> Text, "tabIndex" ':-> Int, "width" ':-> Double,
        "x" ':-> Double, "y" ':-> Double])
   i]
props []

ellipse :: forall p i. Leaf I.SVGellipse p i
ellipse :: forall p i. Leaf SVGellipse p i
ellipse [IProp SVGellipse i]
props = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "cx" ':-> Double, "cy" ':-> Double,
           "fill" ':-> Text, "fillOpacity" ':-> Double, "id" ':-> Text,
           "lang" ':-> Text, "markerEnd" ':-> Text, "markerMid" ':-> Text,
           "markerStart" ':-> Text, "mask" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "rx" ':-> Double, "ry" ':-> Double, "stroke" ':-> Text,
           "strokeDashArray" ':-> Text, "strokeDashOffset" ':-> Double,
           "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
           "style" ':-> Text, "tabIndex" ':-> Int, "transform" ':-> Text])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"ellipse") [IProp SVGellipse i]
[IProp
   ('R
      '["class" ':-> Text, "cx" ':-> Double, "cy" ':-> Double,
        "fill" ':-> Text, "fillOpacity" ':-> Double, "id" ':-> Text,
        "lang" ':-> Text, "markerEnd" ':-> Text, "markerMid" ':-> Text,
        "markerStart" ':-> Text, "mask" ':-> Text,
        "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
        "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
        "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
        "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
        "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
        "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
        "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
        "rx" ':-> Double, "ry" ':-> Double, "stroke" ':-> Text,
        "strokeDashArray" ':-> Text, "strokeDashOffset" ':-> Double,
        "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
        "style" ':-> Text, "tabIndex" ':-> Int, "transform" ':-> Text])
   i]
props []

rect :: forall p i. Leaf I.SVGrect p i
rect :: forall p i. Leaf SVGrect p i
rect [IProp SVGrect i]
props = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "fill" ':-> Text, "fillOpacity" ':-> Double,
           "height" ':-> Double, "id" ':-> Text, "lang" ':-> Text,
           "markerEnd" ':-> Text, "markerMid" ':-> Text,
           "markerStart" ':-> Text, "mask" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "rx" ':-> Double, "ry" ':-> Double, "stroke" ':-> Text,
           "strokeDashArray" ':-> Text, "strokeDashOffset" ':-> Double,
           "strokeLineJoin" ':-> Text, "strokeMiterLimit" ':-> Text,
           "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
           "style" ':-> Text, "tabIndex" ':-> Int, "transform" ':-> Text,
           "width" ':-> Double, "x" ':-> Double, "y" ':-> Double])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"rect") [IProp SVGrect i]
[IProp
   ('R
      '["class" ':-> Text, "fill" ':-> Text, "fillOpacity" ':-> Double,
        "height" ':-> Double, "id" ':-> Text, "lang" ':-> Text,
        "markerEnd" ':-> Text, "markerMid" ':-> Text,
        "markerStart" ':-> Text, "mask" ':-> Text,
        "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
        "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
        "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
        "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
        "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
        "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
        "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
        "rx" ':-> Double, "ry" ':-> Double, "stroke" ':-> Text,
        "strokeDashArray" ':-> Text, "strokeDashOffset" ':-> Double,
        "strokeLineJoin" ':-> Text, "strokeMiterLimit" ':-> Text,
        "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
        "style" ':-> Text, "tabIndex" ':-> Int, "transform" ':-> Text,
        "width" ':-> Double, "x" ':-> Double, "y" ':-> Double])
   i]
props []

path :: forall p i. Leaf I.SVGpath p i
path :: forall p i. Leaf SVGpath p i
path [IProp SVGpath i]
props = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "d" ':-> Text, "fill" ':-> Text,
           "fillOpacity" ':-> Double, "id" ':-> Text, "lang" ':-> Text,
           "markerEnd" ':-> Text, "markerMid" ':-> Text,
           "markerStart" ':-> Text, "mask" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "stroke" ':-> Text, "strokeDashArray" ':-> Text,
           "strokeDashOffset" ':-> Double, "strokeLineCap" ':-> Text,
           "strokeLineJoin" ':-> Text, "strokeMiterLimit" ':-> Text,
           "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
           "style" ':-> Text, "tabIndex" ':-> Int, "transform" ':-> Text])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"path") [IProp SVGpath i]
[IProp
   ('R
      '["class" ':-> Text, "d" ':-> Text, "fill" ':-> Text,
        "fillOpacity" ':-> Double, "id" ':-> Text, "lang" ':-> Text,
        "markerEnd" ':-> Text, "markerMid" ':-> Text,
        "markerStart" ':-> Text, "mask" ':-> Text,
        "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
        "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
        "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
        "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
        "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
        "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
        "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
        "stroke" ':-> Text, "strokeDashArray" ':-> Text,
        "strokeDashOffset" ':-> Double, "strokeLineCap" ':-> Text,
        "strokeLineJoin" ':-> Text, "strokeMiterLimit" ':-> Text,
        "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
        "style" ':-> Text, "tabIndex" ':-> Int, "transform" ':-> Text])
   i]
props []

pattern_ :: forall p i. Node I.SVGpattern p i
pattern_ :: forall p i. Node SVGpattern p i
pattern_ = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "height" ':-> Double, "href" ':-> Text,
           "id" ':-> Text, "lang" ':-> Text, "onClick" ':-> MouseEvent,
           "onContextMenu" ':-> MouseEvent, "onDoubleClick" ':-> MouseEvent,
           "onKeyDown" ':-> KeyboardEvent, "onKeyPress" ':-> KeyboardEvent,
           "onKeyUp" ':-> KeyboardEvent, "onMouseDown" ':-> MouseEvent,
           "onMouseEnter" ':-> MouseEvent, "onMouseLeave" ':-> MouseEvent,
           "onMouseMove" ':-> MouseEvent, "onMouseOut" ':-> MouseEvent,
           "onMouseOver" ':-> MouseEvent, "onMouseUp" ':-> MouseEvent,
           "onWheel" ':-> WheelEvent, "patternContentUnits" ':-> Text,
           "patternTransform" ':-> Text, "patternUnits" ':-> Text,
           "preserveAspectRatio" ':-> Text, "style" ':-> Text,
           "tabIndex" ':-> Int, "viewBox" ':-> Text, "width" ':-> Double,
           "x" ':-> Double, "xlinkHref" ':-> Text, "y" ':-> Double])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"pattern")

line :: forall p i. Leaf I.SVGline p i
line :: forall p i. Leaf SVGline p i
line [IProp SVGline i]
props = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "id" ':-> Text, "lang" ':-> Text,
           "markerEnd" ':-> Text, "markerMid" ':-> Text,
           "markerStart" ':-> Text, "mask" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "stroke" ':-> Text, "strokeDashArray" ':-> Text,
           "strokeDashOffset" ':-> Double, "strokeLineCap" ':-> Text,
           "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
           "style" ':-> Text, "tabIndex" ':-> Int, "transform" ':-> Text,
           "x1" ':-> Double, "x2" ':-> Double, "y1" ':-> Double,
           "y2" ':-> Double])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"line") [IProp SVGline i]
[IProp
   ('R
      '["class" ':-> Text, "id" ':-> Text, "lang" ':-> Text,
        "markerEnd" ':-> Text, "markerMid" ':-> Text,
        "markerStart" ':-> Text, "mask" ':-> Text,
        "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
        "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
        "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
        "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
        "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
        "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
        "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
        "stroke" ':-> Text, "strokeDashArray" ':-> Text,
        "strokeDashOffset" ':-> Double, "strokeLineCap" ':-> Text,
        "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
        "style" ':-> Text, "tabIndex" ':-> Int, "transform" ':-> Text,
        "x1" ':-> Double, "x2" ':-> Double, "y1" ':-> Double,
        "y2" ':-> Double])
   i]
props []

polyline :: forall p i. Leaf I.SVGpolyline p i
polyline :: forall p i. Leaf SVGpolyline p i
polyline [IProp SVGpolyline i]
props = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "id" ':-> Text, "lang" ':-> Text,
           "markerEnd" ':-> Text, "markerMid" ':-> Text,
           "markerStart" ':-> Text, "mask" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "pathLength" ':-> Double, "points" ':-> Text, "stroke" ':-> Text,
           "strokeDashArray" ':-> Text, "strokeDashOffset" ':-> Double,
           "strokeLineCap" ':-> Text, "strokeOpacity" ':-> Double,
           "strokeWidth" ':-> Double, "style" ':-> Text, "tabIndex" ':-> Int])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"polyline") [IProp SVGpolyline i]
[IProp
   ('R
      '["class" ':-> Text, "id" ':-> Text, "lang" ':-> Text,
        "markerEnd" ':-> Text, "markerMid" ':-> Text,
        "markerStart" ':-> Text, "mask" ':-> Text,
        "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
        "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
        "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
        "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
        "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
        "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
        "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
        "pathLength" ':-> Double, "points" ':-> Text, "stroke" ':-> Text,
        "strokeDashArray" ':-> Text, "strokeDashOffset" ':-> Double,
        "strokeLineCap" ':-> Text, "strokeOpacity" ':-> Double,
        "strokeWidth" ':-> Double, "style" ':-> Text, "tabIndex" ':-> Int])
   i]
props []

polygon :: forall p i. Leaf I.SVGpolygon p i
polygon :: forall p i. Leaf SVGpolyline p i
polygon [IProp SVGpolyline i]
props = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "id" ':-> Text, "lang" ':-> Text,
           "markerEnd" ':-> Text, "markerMid" ':-> Text,
           "markerStart" ':-> Text, "mask" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "pathLength" ':-> Double, "points" ':-> Text, "stroke" ':-> Text,
           "strokeDashArray" ':-> Text, "strokeDashOffset" ':-> Double,
           "strokeLineCap" ':-> Text, "strokeOpacity" ':-> Double,
           "strokeWidth" ':-> Double, "style" ':-> Text, "tabIndex" ':-> Int])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"polygon") [IProp SVGpolyline i]
[IProp
   ('R
      '["class" ':-> Text, "id" ':-> Text, "lang" ':-> Text,
        "markerEnd" ':-> Text, "markerMid" ':-> Text,
        "markerStart" ':-> Text, "mask" ':-> Text,
        "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
        "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
        "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
        "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
        "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
        "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
        "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
        "pathLength" ':-> Double, "points" ':-> Text, "stroke" ':-> Text,
        "strokeDashArray" ':-> Text, "strokeDashOffset" ':-> Double,
        "strokeLineCap" ':-> Text, "strokeOpacity" ':-> Double,
        "strokeWidth" ':-> Double, "style" ':-> Text, "tabIndex" ':-> Int])
   i]
props []

text :: forall p i. Node I.SVGtext p i
text :: forall p i. Node SVGtext p i
text = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "dominantBaseline" ':-> Text,
           "fill" ':-> Text, "fillOpacity" ':-> Double,
           "fontFamily" ':-> Text, "fontSize" ':-> Text,
           "fontSizeAdjust" ':-> Double, "fontStretch" ':-> Text,
           "fontStyle" ':-> Text, "fontVariant" ':-> Text,
           "fontWeight" ':-> Text, "id" ':-> Text, "lang" ':-> Text,
           "mask" ':-> Text, "onClick" ':-> MouseEvent,
           "onContextMenu" ':-> MouseEvent, "onDoubleClick" ':-> MouseEvent,
           "onKeyDown" ':-> KeyboardEvent, "onKeyPress" ':-> KeyboardEvent,
           "onKeyUp" ':-> KeyboardEvent, "onMouseDown" ':-> MouseEvent,
           "onMouseEnter" ':-> MouseEvent, "onMouseLeave" ':-> MouseEvent,
           "onMouseMove" ':-> MouseEvent, "onMouseOut" ':-> MouseEvent,
           "onMouseOver" ':-> MouseEvent, "onMouseUp" ':-> MouseEvent,
           "onWheel" ':-> WheelEvent, "stroke" ':-> Text,
           "strokeDashArray" ':-> Text, "strokeDashOffset" ':-> Double,
           "strokeLineCap" ':-> Text, "strokeLineJoin" ':-> Text,
           "strokeMiterLimit" ':-> Text, "strokeOpacity" ':-> Double,
           "strokeWidth" ':-> Double, "style" ':-> Text, "tabIndex" ':-> Int,
           "textAnchor" ':-> Text, "transform" ':-> Text, "x" ':-> Double,
           "y" ':-> Double])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"text")

use :: forall p i. Leaf I.SVGuse p i
use :: forall p i. Leaf SVGuse p i
use [IProp SVGuse i]
props = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "fill" ':-> Text, "fillOpacity" ':-> Double,
           "fontFamily" ':-> Text, "fontSize" ':-> Text,
           "fontSizeAdjust" ':-> Double, "fontStretch" ':-> Text,
           "fontStyle" ':-> Text, "fontVariant" ':-> Text,
           "fontWeight" ':-> Text, "height" ':-> Double, "href" ':-> Text,
           "id" ':-> Text, "lang" ':-> Text, "mask" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "stroke" ':-> Text, "strokeDashArray" ':-> Text,
           "strokeDashOffset" ':-> Double, "strokeLineCap" ':-> Text,
           "strokeLineJoin" ':-> Text, "strokeMiterLimit" ':-> Text,
           "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
           "style" ':-> Text, "tabIndex" ':-> Int, "transform" ':-> Text,
           "width" ':-> Double, "x" ':-> Double, "y" ':-> Double])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"use") [IProp SVGuse i]
[IProp
   ('R
      '["class" ':-> Text, "fill" ':-> Text, "fillOpacity" ':-> Double,
        "fontFamily" ':-> Text, "fontSize" ':-> Text,
        "fontSizeAdjust" ':-> Double, "fontStretch" ':-> Text,
        "fontStyle" ':-> Text, "fontVariant" ':-> Text,
        "fontWeight" ':-> Text, "height" ':-> Double, "href" ':-> Text,
        "id" ':-> Text, "lang" ':-> Text, "mask" ':-> Text,
        "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
        "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
        "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
        "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
        "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
        "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
        "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
        "stroke" ':-> Text, "strokeDashArray" ':-> Text,
        "strokeDashOffset" ':-> Double, "strokeLineCap" ':-> Text,
        "strokeLineJoin" ':-> Text, "strokeMiterLimit" ':-> Text,
        "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
        "style" ':-> Text, "tabIndex" ':-> Int, "transform" ':-> Text,
        "width" ':-> Double, "x" ':-> Double, "y" ':-> Double])
   i]
props []

foreignObject :: forall p i. Node I.SVGforeignObject p i
foreignObject :: forall p i. Node SVGforeignObject p i
foreignObject = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "fill" ':-> Text, "fillOpacity" ':-> Double,
           "fontFamily" ':-> Text, "fontSize" ':-> Text,
           "fontSizeAdjust" ':-> Double, "fontStretch" ':-> Text,
           "fontStyle" ':-> Text, "fontVariant" ':-> Text,
           "fontWeight" ':-> Text, "height" ':-> Double, "id" ':-> Text,
           "lang" ':-> Text, "markerEnd" ':-> Text, "markerMid" ':-> Text,
           "markerStart" ':-> Text, "mask" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "stroke" ':-> Text, "strokeDashArray" ':-> Text,
           "strokeDashOffset" ':-> Double, "strokeLineCap" ':-> Text,
           "strokeLineJoin" ':-> Text, "strokeMiterLimit" ':-> Text,
           "strokeOpacity" ':-> Double, "strokeWidth" ':-> Double,
           "style" ':-> Text, "tabIndex" ':-> Int, "width" ':-> Double,
           "x" ':-> Double, "y" ':-> Double])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"foreignObject")

defs :: forall p i. Node I.SVGg p i
defs :: forall p i. Node SVGg p i
defs = ElemName -> [IProp SVGg i] -> [HTML p i] -> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (ElemName -> [IProp SVGg i] -> [HTML p i] -> HTML p i)
-> ElemName -> [IProp SVGg i] -> [HTML p i] -> HTML p i
forall a b. (a -> b) -> a -> b
$ Text -> ElemName
ElemName Text
"defs"

mask :: forall p i. Node I.SVGg p i
mask :: forall p i. Node SVGg p i
mask = ElemName -> [IProp SVGg i] -> [HTML p i] -> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (ElemName -> [IProp SVGg i] -> [HTML p i] -> HTML p i)
-> ElemName -> [IProp SVGg i] -> [HTML p i] -> HTML p i
forall a b. (a -> b) -> a -> b
$ Text -> ElemName
ElemName Text
"mask"

marker :: forall p i. Node I.SVGmarker p i
marker :: forall p i. Node SVGmarker p i
marker = ElemName -> [IProp SVGmarker i] -> [HTML p i] -> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (ElemName -> [IProp SVGmarker i] -> [HTML p i] -> HTML p i)
-> ElemName -> [IProp SVGmarker i] -> [HTML p i] -> HTML p i
forall a b. (a -> b) -> a -> b
$ Text -> ElemName
ElemName Text
"marker"

--------------------------------------------------------------------------------

animate :: forall p i. Leaf I.SVGanimate p i
animate :: forall p i. Leaf SVGanimate p i
animate [IProp SVGanimate i]
props = ElemName
-> [IProp
      ('R
         '["attributeName" ':-> Text, "begin" ':-> Text, "class" ':-> Text,
           "dur" ':-> Text, "fill" ':-> Text, "from" ':-> Text,
           "id" ':-> Text, "lang" ':-> Text, "onClick" ':-> MouseEvent,
           "onContextMenu" ':-> MouseEvent, "onDoubleClick" ':-> MouseEvent,
           "onKeyDown" ':-> KeyboardEvent, "onKeyPress" ':-> KeyboardEvent,
           "onKeyUp" ':-> KeyboardEvent, "onMouseDown" ':-> MouseEvent,
           "onMouseEnter" ':-> MouseEvent, "onMouseLeave" ':-> MouseEvent,
           "onMouseMove" ':-> MouseEvent, "onMouseOut" ':-> MouseEvent,
           "onMouseOver" ':-> MouseEvent, "onMouseUp" ':-> MouseEvent,
           "onWheel" ':-> WheelEvent, "repeatCount" ':-> Text,
           "style" ':-> Text, "tabIndex" ':-> Int, "to" ':-> Text])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"animate") [IProp SVGanimate i]
[IProp
   ('R
      '["attributeName" ':-> Text, "begin" ':-> Text, "class" ':-> Text,
        "dur" ':-> Text, "fill" ':-> Text, "from" ':-> Text,
        "id" ':-> Text, "lang" ':-> Text, "onClick" ':-> MouseEvent,
        "onContextMenu" ':-> MouseEvent, "onDoubleClick" ':-> MouseEvent,
        "onKeyDown" ':-> KeyboardEvent, "onKeyPress" ':-> KeyboardEvent,
        "onKeyUp" ':-> KeyboardEvent, "onMouseDown" ':-> MouseEvent,
        "onMouseEnter" ':-> MouseEvent, "onMouseLeave" ':-> MouseEvent,
        "onMouseMove" ':-> MouseEvent, "onMouseOut" ':-> MouseEvent,
        "onMouseOver" ':-> MouseEvent, "onMouseUp" ':-> MouseEvent,
        "onWheel" ':-> WheelEvent, "repeatCount" ':-> Text,
        "style" ':-> Text, "tabIndex" ':-> Int, "to" ':-> Text])
   i]
props []

-- TODO there's also animateTransform, etc
animateMotion :: forall p i. Node I.SVGanimateMotion p i
animateMotion :: forall p i. Node SVGanimateMotion p i
animateMotion = ElemName
-> [IProp
      ('R
         '["begin" ':-> Text, "class" ':-> Text, "dur" ':-> Text,
           "fill" ':-> Text, "from" ':-> Text, "id" ':-> Text,
           "lang" ':-> Text, "onClick" ':-> MouseEvent,
           "onContextMenu" ':-> MouseEvent, "onDoubleClick" ':-> MouseEvent,
           "onKeyDown" ':-> KeyboardEvent, "onKeyPress" ':-> KeyboardEvent,
           "onKeyUp" ':-> KeyboardEvent, "onMouseDown" ':-> MouseEvent,
           "onMouseEnter" ':-> MouseEvent, "onMouseLeave" ':-> MouseEvent,
           "onMouseMove" ':-> MouseEvent, "onMouseOut" ':-> MouseEvent,
           "onMouseOver" ':-> MouseEvent, "onMouseUp" ':-> MouseEvent,
           "onWheel" ':-> WheelEvent, "path" ':-> Text,
           "repeatCount" ':-> Text, "style" ':-> Text, "tabIndex" ':-> Int,
           "to" ':-> Text])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"animateMotion")

circleNode :: forall p i. Node I.SVGcircle p i
circleNode :: forall p i. Node SVGcircle p i
circleNode = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "cx" ':-> Double, "cy" ':-> Double,
           "fill" ':-> Text, "fillOpacity" ':-> Double, "id" ':-> Text,
           "lang" ':-> Text, "markerEnd" ':-> Text, "markerMid" ':-> Text,
           "markerStart" ':-> Text, "mask" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "r" ':-> Double, "stroke" ':-> Text, "strokeDashArray" ':-> Text,
           "strokeDashOffset" ':-> Double, "strokeOpacity" ':-> Double,
           "strokeWidth" ':-> Double, "style" ':-> Text, "tabIndex" ':-> Int,
           "transform" ':-> Text])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"circle")

-- TODO Node or Leaf? mpath :: forall p i. Node I.SVGmpath p i
-- https://developer.mozilla.org/en-US/docs/Web/SVG/Element/mpath
mpath :: forall p i. Leaf I.SVGmpath p i
mpath :: forall p i. Leaf SVGmpath p i
mpath [IProp SVGmpath i]
props = ElemName
-> [IProp ('R '["xlinkHref" ':-> Text]) i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"mpath") [IProp SVGmpath i]
[IProp ('R '["xlinkHref" ':-> Text]) i]
props []

--------------------------------------------------------------------------------

title :: forall p i. Node I.SVGtitle p i
title :: forall p i. Node SVGtitle p i
title = ElemName
-> [IProp
      ('R
         '["class" ':-> Text, "id" ':-> Text, "lang" ':-> Text,
           "onClick" ':-> MouseEvent, "onContextMenu" ':-> MouseEvent,
           "onDoubleClick" ':-> MouseEvent, "onKeyDown" ':-> KeyboardEvent,
           "onKeyPress" ':-> KeyboardEvent, "onKeyUp" ':-> KeyboardEvent,
           "onMouseDown" ':-> MouseEvent, "onMouseEnter" ':-> MouseEvent,
           "onMouseLeave" ':-> MouseEvent, "onMouseMove" ':-> MouseEvent,
           "onMouseOut" ':-> MouseEvent, "onMouseOver" ':-> MouseEvent,
           "onMouseUp" ':-> MouseEvent, "onWheel" ':-> WheelEvent,
           "style" ':-> Text, "tabIndex" ':-> Int])
      i]
-> [HTML p i]
-> HTML p i
forall (r :: Row (*)) w i.
ElemName -> [IProp r i] -> [HTML w i] -> HTML w i
element (Text -> ElemName
ElemName Text
"title")