(* Element creation *) let h tag ?(attributes = [||]) ?(eventListeners = [||]) ?(children = [||]) () : Dom.element = let element = if tag == "svg" || tag == "path" then Document.createElementNS "http://www.w3.org/2000/svg" tag else Document.createElement tag in let () = Js.Array.forEach (fun (name, value) -> Element.setAttribute element name value) attributes in let () = Js.Array.forEach (fun (name, eventListener) -> Element.addEventListener element name eventListener) eventListeners in let () = Js.Array.forEach (fun child -> Element.appendChild element child) children in element (* Node creation *) let text = Document.createTextNode let div = h "div" let span = h "span" let header = h "header" let button = h "button" let section = h "section" let svg = h "svg" let path = h "path" let form = h "form" let label = h "label" let input_ = h "input" (* Attribute creation *) let id v = ("id", v) let className v = ("class", v) let viewBox v = ("viewBox", v) let d v = ("d", v) let type_ v = ("type", v) let min_ v = ("min", v) let value v = ("value", v) (* Event listeners *) let onClick f = ("click", f) let onInput f = ("input", f) let onSubmit f = ("submit", f)