import { createVElement , VElement , VAttributes , VNode , VLifecycle , isVElement , merge } from './dom' ; import { combineLifecycles } from './lifecycle' ; import { style , types } from 'typestyle' ; import { NestedCSSProperties } from 'typestyle/lib/types' ; export type HAttributeValue = undefined | string | number | ( ( ev : any ) => any ) | NestedCSSProperties ; export interface HAttributes extends VAttributes , KnownHtmlAttributes { [ key ] : HAttributeValue ; } export type HValue = VNode | HAttributes | VLifecycle | null | undefined ; export type HValues = HValue | VNode [ ] ; function typeStyleize ( attrs ? ) { if ( attrs && typeof ( attrs . style ) === 'object' ) { attrs . class = ! attrs . class ? style ( attrs . style ) : attrs . class + " " + style ( attrs . style ) ; attrs . style = undefined ; } } /** Merges two attribute structures, where style structures are converted to classes using style style,
 * classes are combined, and lifecycle hooks are combined. */ export function mergeAttrs ( dominant , recessive ) { return mergeAttrsMutate ( { ... dominant } , { ... recessive } ) ; } function mergeAttrsMutate ( dominant , recessive ) { typeStyleize ( dominant ) ; typeStyleize ( recessive ) ; if ( ! dominant ) return recessive ; else if ( ! recessive ) return dominant ; if ( dominant . class && recessive . class ) dominant . class = dominant . class + " " + recessive . class ; dominant = < HAttributes > combineLifecycles ( dominant , recessive ) ; dominant = < HAttributes > merge ( dominant , recessive ) ; return dominant ; } function isAttribute ( a ? ) { return a != null && typeof a == "object" && ! isVElement ( < any > a ) && ! Array . isArray ( a ) ; } export function h ( tag , ... values ) { var attrs ; while ( values . length > 0 ) { var head = values [ 0 ] ; if ( isAttribute ( head ) ) { attrs = mergeAttrsMutate ( attrs , head ) ; values . shift ( ) ; } else if ( head == null ) values . shift ( ) ; else break ; } return createVElement ( tag , attrs || { } , ... values ) ; } export function a ( ... values ) { return h ( "a" , ... values ) ; } export function abbr ( ... values ) { return h ( "abbr" , ... values ) ; } export function address ( ... values ) { return h ( "address" , ... values ) ; } export function area ( ... values ) { return h ( "area" , ... values ) ; } export function article ( ... values ) { return h ( "article" , ... values ) ; } export function aside ( ... values ) { return h ( "aside" , ... values ) ; } export function audio ( ... values ) { return h ( "audio" , ... values ) ; } export function b ( ... values ) { return h ( "b" , ... values ) ; } export function bdi ( ... values ) { return h ( "bdi" , ... values ) ; } export function bdo ( ... values ) { return h ( "bdo" , ... values ) ; } export function blockquote ( ... values ) { return h ( "blockquote" , ... values ) ; } export function br ( ... values ) { return h ( "br" , ... values ) ; } export function button ( ... values ) { return h ( "button" , ... values ) ; } export function canvas ( ... values ) { return h ( "canvas" , ... values ) ; } export function caption ( ... values ) { return h ( "caption" , ... values ) ; } export function cite ( ... values ) { return h ( "cite" , ... values ) ; } export function code ( ... values ) { return h ( "code" , ... values ) ; } export function col ( ... values ) { return h ( "col" , ... values ) ; } export function colgroup ( ... values ) { return h ( "colgroup" , ... values ) ; } export function data ( ... values ) { return h ( "data" , ... values ) ; } export function datalist ( ... values ) { return h ( "datalist" , ... values ) ; } export function dd ( ... values ) { return h ( "dd" , ... values ) ; } export function del ( ... values ) { return h ( "del" , ... values ) ; } export function details ( ... values ) { return h ( "details" , ... values ) ; } export function dfn ( ... values ) { return h ( "dfn" , ... values ) ; } export function dialog ( ... values ) { return h ( "dialog" , ... values ) ; } export function div ( ... values ) { return h ( "div" , ... values ) ; } export function dl ( ... values ) { return h ( "dl" , ... values ) ; } export function dt ( ... values ) { return h ( "dt" , ... values ) ; } export function em ( ... values ) { return h ( "em" , ... values ) ; } export function embed ( ... values ) { return h ( "embed" , ... values ) ; } export function fieldset ( ... values ) { return h ( "fieldset" , ... values ) ; } export function figcaption ( ... values ) { return h ( "figcaption" , ... values ) ; } export function figure ( ... values ) { return h ( "figure" , ... values ) ; } export function footer ( ... values ) { return h ( "footer" , ... values ) ; } export function form ( ... values ) { return h ( "form" , ... values ) ; } export function h1 ( ... values ) { return h ( "h1" , ... values ) ; } export function h2 ( ... values ) { return h ( "h2" , ... values ) ; } export function h3 ( ... values ) { return h ( "h3" , ... values ) ; } export function h4 ( ... values ) { return h ( "h4" , ... values ) ; } export function h5 ( ... values ) { return h ( "h5" , ... values ) ; } export function h6 ( ... values ) { return h ( "h6" , ... values ) ; } export function header ( ... values ) { return h ( "header" , ... values ) ; } export function hr ( ... values ) { return h ( "hr" , ... values ) ; } export function i ( ... values ) { return h ( "i" , ... values ) ; } export function iframe ( ... values ) { return h ( "iframe" , ... values ) ; } export function img ( ... values ) { return h ( "img" , ... values ) ; } export function input ( ... values ) { return h ( "input" , ... values ) ; } export function ins ( ... values ) { return h ( "ins" , ... values ) ; } export function kbd ( ... values ) { return h ( "kbd" , ... values ) ; } export function label ( ... values ) { return h ( "label" , ... values ) ; } export function legend ( ... values ) { return h ( "legend" , ... values ) ; } export function li ( ... values ) { return h ( "li" , ... values ) ; } export function main ( ... values ) { return h ( "main" , ... values ) ; } export function map ( ... values ) { return h ( "map" , ... values ) ; } export function mark ( ... values ) { return h ( "mark" , ... values ) ; } export function menu ( ... values ) { return h ( "menu" , ... values ) ; } export function menuitem ( ... values ) { return h ( "menuitem" , ... values ) ; } export function meter ( ... values ) { return h ( "meter" , ... values ) ; } export function nav ( ... values ) { return h ( "nav" , ... values ) ; } export function object ( ... values ) { return h ( "object" , ... values ) ; } export function ol ( ... values ) { return h ( "ol" , ... values ) ; } export function optgroup ( ... values ) { return h ( "optgroup" , ... values ) ; } export function option ( ... values ) { return h ( "option" , ... values ) ; } export function output ( ... values ) { return h ( "output" , ... values ) ; } export function p ( ... values ) { return h ( "p" , ... values ) ; } export function param ( ... values ) { return h ( "param" , ... values ) ; } export function pre ( ... values ) { return h ( "pre" , ... values ) ; } export function progress ( ... values ) { return h ( "progress" , ... values ) ; } export function q ( ... values ) { return h ( "q" , ... values ) ; } export function rp ( ... values ) { return h ( "rp" , ... values ) ; } export function rt ( ... values ) { return h ( "rt" , ... values ) ; } export function rtc ( ... values ) { return h ( "rtc" , ... values ) ; } export function ruby ( ... values ) { return h ( "ruby" , ... values ) ; } export function s ( ... values ) { return h ( "s" , ... values ) ; } export function samp ( ... values ) { return h ( "samp" , ... values ) ; } export function section ( ... values ) { return h ( "section" , ... values ) ; } export function select ( ... values ) { return h ( "select" , ... values ) ; } export function small ( ... values ) { return h ( "small" , ... values ) ; } export function source ( ... values ) { return h ( "source" , ... values ) ; } export function span ( ... values ) { return h ( "span" , ... values ) ; } export function strong ( ... values ) { return h ( "strong" , ... values ) ; } export function sub ( ... values ) { return h ( "sub" , ... values ) ; } export function summary ( ... values ) { return h ( "summary" , ... values ) ; } export function sup ( ... values ) { return h ( "sup" , ... values ) ; } export function svg ( ... values ) { return h ( "svg" , ... values ) ; } export function table ( ... values ) { return h ( "table" , ... values ) ; } export function tbody ( ... values ) { return h ( "tbody" , ... values ) ; } export function td ( ... values ) { return h ( "td" , ... values ) ; } export function textarea ( ... values ) { return h ( "textarea" , ... values ) ; } export function tfoot ( ... values ) { return h ( "tfoot" , ... values ) ; } export function th ( ... values ) { return h ( "th" , ... values ) ; } export function thead ( ... values ) { return h ( "thead" , ... values ) ; } export function time ( ... values ) { return h ( "time" , ... values ) ; } export function tr ( ... values ) { return h ( "tr" , ... values ) ; } export function track ( ... values ) { return h ( "track" , ... values ) ; } export function u ( ... values ) { return h ( "u" , ... values ) ; } export function ul ( ... values ) { return h ( "ul" , ... values ) ; } export function video ( ... values ) { return h ( "video" , ... values ) ; } export function vvar ( ... values ) { return h ( "vvar" , ... values ) ; } export function wbr ( ... values ) { return h ( "wbr" , ... values ) ; } export interface KnownHtmlAttributes { accept ? : string ; accesskey ? : string ; action ? : string ; align ? : string ; alt ? : string ; async ? : string ; autocapitalize ? : string ; autocomplete ? : string ; autofocus ? : string ; autoplay ? : string ; bgcolor ? : string ; border ? : string ; buffered ? : string ; challenge ? : string ; charset ? : string ; checked ? : string ; cite ? : string ; class ? : string ; code ? : string ; codebase ? : string ; color ? : string ; cols ? : number ; colspan ? : number ; content ? : string ; contenteditable ? : string ; contextmenu ? : string ; controls ? : string ; coords ? : string ; crossorigin ? : string ; data ? : string ; datetime ? : string ; default ? : string ; defer ? : string ; dir ? : string ; dirname ? : string ; disabled ? : string ; download ? : string ; draggable ? : string ; dropzone ? : string ; enctype ? : string ; for ? : string ; form ? : string ; formaction ? : string ; headers ? : string ; height ? : string | number ; hidden ? : string ; high ? : number ; href ? : string ; hreflang ? : string ; http ? : string ; icon ? : string ; id ? : string ; integrity ? : string ; ismap ? : string ; itemprop ? : string ; keytype ? : string ; kind ? : string ; label ? : string ; lang ? : string ; language ? : string ; list ? : string ; loop ? : string ; low ? : number ; manifest ? : string ; max ? : number ; maxlength ? : number ; minlength ? : number ; media ? : string ; method ? : string ; min ? : number ; multiple ? : string ; muted ? : string ; name ? : string ; novalidate ? : string ; open ? : string ; optimum ? : string ; pattern ? : string ; ping ? : string ; placeholder ? : string ; poster ? : string ; preload ? : string ; radiogroup ? : string ; readonly ? : string ; rel ? : string ; required ? : string ; reversed ? : string ; rows ? : number ; rowspan ? : number ; sandbox ? : string ; scope ? : string ; scoped ? : string ; seamless ? : string ; selected ? : string ; shape ? : string ; size ? : number ; sizes ? : string ; slot ? : string ; span ? : string ; spellcheck ? : string ; src ? : string ; srcdoc ? : string ; srclang ? : string ; srcset ? : string ; start ? : string ; step ? : number ; style ? : string | types . NestedCSSProperties ; summary ? : string ; tabindex ? : number ; target ? : string ; title ? : string ; type ? : string ; usemap ? : string ; value ? : string | number ; width ? : string | number ; wrap ? : string ; onabort ? : ( ev : UIEvent ) => any ; onanimationcancel ? : ( ev : AnimationEvent ) => any ; onanimationend ? : ( ev : AnimationEvent ) => any ; onanimationiteration ? : ( ev : AnimationEvent ) => any ; onanimationstart ? : ( ev : AnimationEvent ) => any ; onauxclick ? : ( ev : Event ) => any ; param ev onblur ? : ( ev : FocusEvent ) => any ; oncancel ? : ( ev : Event ) => any ; param ev oncanplay ? : ( ev : Event ) => any ; oncanplaythrough ? : ( ev : Event ) => any ; param ev onchange ? : ( ev : Event ) => any ; param ev onclick ? : ( ev : MouseEvent ) => any ; onclose ? : ( ev : Event ) => any ; param ev oncontextmenu ? : ( ev : MouseEvent ) => any ; oncuechange ? : ( ev : Event ) => any ; param ev ondblclick ? : ( ev : MouseEvent ) => any ; param ev ondrag ? : ( ev : DragEvent ) => any ; param ev ondragend ? : ( ev : DragEvent ) => any ; param ev ondragenter ? : ( ev : DragEvent ) => any ; ondragexit ? : ( ev : Event ) => any ; param ev ondragleave ? : ( ev : DragEvent ) => any ; param ev ondragover ? : ( ev : DragEvent ) => any ; param ev ondragstart ? : ( ev : DragEvent ) => any ; ondrop ? : ( ev : DragEvent ) => any ; param ev ondurationchange ? : ( ev : Event ) => any ; param ev onemptied ? : ( ev : Event ) => any ; param ev onended ? : ( ev : Event ) => any ; param ev onfocus ? : ( ev : FocusEvent ) => any ; ongotpointercapture ? : ( ev : PointerEvent ) => any ; oninput ? : ( ev : Event ) => any ; oninvalid ? : ( ev : Event ) => any ; param ev onkeydown ? : ( ev : KeyboardEvent ) => any ; param ev onkeypress ? : ( ev : KeyboardEvent ) => any ; param ev onkeyup ? : ( ev : KeyboardEvent ) => any ; param ev onload ? : ( ev : Event ) => any ; param ev onloadeddata ? : ( ev : Event ) => any ; param ev onloadedmetadata ? : ( ev : Event ) => any ; onloadend ? : ( ev : ProgressEvent ) => any ; param ev onloadstart ? : ( ev : Event ) => any ; onlostpointercapture ? : ( ev : PointerEvent ) => any ; param ev onmousedown ? : ( ev : MouseEvent ) => any ; onmouseenter ? : ( ev : MouseEvent ) => any ; onmouseleave ? : ( ev : MouseEvent ) => any ; param ev onmousemove ? : ( ev : MouseEvent ) => any ; param ev onmouseout ? : ( ev : MouseEvent ) => any ; param ev onmouseover ? : ( ev : MouseEvent ) => any ; param ev onmouseup ? : ( ev : MouseEvent ) => any ; param ev onpause ? : ( ev : Event ) => any ; param ev onplay ? : ( ev : Event ) => any ; param ev onplaying ? : ( ev : Event ) => any ; onpointercancel ? : ( ev : PointerEvent ) => any ; onpointerdown ? : ( ev : PointerEvent ) => any ; onpointerenter ? : ( ev : PointerEvent ) => any ; onpointerleave ? : ( ev : PointerEvent ) => any ; onpointermove ? : ( ev : PointerEvent ) => any ; onpointerout ? : ( ev : PointerEvent ) => any ; onpointerover ? : ( ev : PointerEvent ) => any ; onpointerup ? : ( ev : PointerEvent ) => any ; param ev onprogress ? : ( ev : ProgressEvent ) => any ; param ev onratechange ? : ( ev : Event ) => any ; param ev onreset ? : ( ev : Event ) => any ; onresize ? : ( ev : UIEvent ) => any ; param ev onscroll ? : ( ev : UIEvent ) => any ; onsecuritypolicyviolation ? : ( ev : SecurityPolicyViolationEvent ) => any ; param ev onseeked ? : ( ev : Event ) => any ; param ev onseeking ? : ( ev : Event ) => any ; param ev onselect ? : ( ev : UIEvent ) => any ; param ev onstalled ? : ( ev : Event ) => any ; onsubmit ? : ( ev : Event ) => any ; param ev onsuspend ? : ( ev : Event ) => any ; param ev ontimeupdate ? : ( ev : Event ) => any ; ontoggle ? : ( ev : Event ) => any ; ontouchcancel ? : ( ev : TouchEvent ) => any ; ontouchend ? : ( ev : TouchEvent ) => any ; ontouchmove ? : ( ev : TouchEvent ) => any ; ontouchstart ? : ( ev : TouchEvent ) => any ; ontransitioncancel ? : ( ev : TransitionEvent ) => any ; ontransitionend ? : ( ev : TransitionEvent ) => any ; ontransitionrun ? : ( ev : TransitionEvent ) => any ; ontransitionstart ? : ( ev : TransitionEvent ) => any ; param ev onvolumechange ? : ( ev : Event ) => any ; param ev onwaiting ? : ( ev : Event ) => any ; onwheel ? : ( ev : WheelEvent ) => any ; }