import { vnode , VNode , VNodeData } from "./vnode" ; import * as is from "./is" ; export type VNodes = VNode [ ] ; export type VNodeChildElement = VNode | string | number | String | Number | undefined | null ; export type ArrayOrElement < T > = T | T [ ] ; export type VNodeChildren = ArrayOrElement < VNodeChildElement > ; function addNS ( data , children , sel ) { data . ns = "http://www.w3.org/2000/svg" ; if ( sel !== "foreignObject" && children !== undefined ) { for ( let i = 0 ; i < children . length ; ++ i ) { const childData = children [ i ] . data ; if ( childData !== undefined ) { addNS ( childData , children [ i ] . children as VNodes , children [ i ] . sel ) ; } } } } export function h ( sel ) ; export function h ( sel , data ) ; export function h ( sel , children ) ; export function h ( sel , data , children ) ; export function h ( sel , b ? , c ? ) { let data = { } ; let children ; let text ; let i ; if ( c !== undefined ) { if ( b !== null ) { data = b ; } if ( is . array ( c ) ) { children = c ; } else if ( is . primitive ( c ) ) { text = c . toString ( ) ; } else if ( c && c . sel ) { children = [ c ] ; } } else if ( b !== undefined && b !== null ) { if ( is . array ( b ) ) { children = b ; } else if ( is . primitive ( b ) ) { text = b . toString ( ) ; } else if ( b && b . sel ) { children = [ b ] ; } else { data = b ; } } if ( children !== undefined ) { for ( i = 0 ; i < children . length ; ++ i ) { if ( is . primitive ( children [ i ] ) ) children [ i ] = vnode ( undefined , undefined , undefined , children [ i ] , undefined ) ; } } if ( sel [ 0 ] === "s" && sel [ 1 ] === "v" && sel [ 2 ] === "g" && ( sel . length === 3 || sel [ 3 ] === "." || sel [ 3 ] === "#" ) ) { addNS ( data , children , sel ) ; } return vnode ( sel , data , children , text , undefined ) ; } experimental export function fragment ( children ) { let c ; let text ; if ( is . array ( children ) ) { c = children ; } else if ( is . primitive ( c ) ) { text = children ; } else if ( c && c . sel ) { c = [ children ] ; } if ( c !== undefined ) { for ( let i = 0 ; i < c . length ; ++ i ) { if ( is . primitive ( c [ i ] ) ) c [ i ] = vnode ( undefined , undefined , undefined , c [ i ] , undefined ) ; } } return vnode ( undefined , { } , c , text , undefined ) ; }