package Ġcom . github . ro ug sig . flow mar bles . core Ċ Ċ import Ġorg . w 3 c . dom . Element Ċ import Ġorg . w 3 c . dom . events . Event Ċ import Ġkotlin . browser . document Ċ import Ġkotlin . dom . append Text Ċ Ċ open Ġclass ĠComponent Builder ( tag : ĠString , Ġprivate Ġval ĠcreateElement : Ġ( String ) Ġ-> ĠElement ) Ġ{ ĊĠ Ġprivate Ġval Ġelement Ġ= ĠcreateElement ( tag ) ĊĠ Ġprivate Ġvar Ġattrs : ĠMap < String , ĠString > Ġ= Ġempty Map () ĊĠ Ġvar Ġtext : ĠString ? Ġ= Ġnull ĊĠ Ġvar Ġclick Listener : Ġ(( Event ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠ Ġfun Ġattr ( attr : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġattrs Ġ+= Ġattr Ġto Ġvalue . trim () ĊĠ Ġ} ĊĊĠ Ġfun Ġtag ( tag : ĠString , Ġblock : ĠComponent Builder . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġelement . appendChild ( Component Builder ( tag , ĠcreateElement ). also ( block ). build ()) ĊĠ Ġ} ĊĊĠ Ġfun Ġcomponent ( component : ĠComponent ) Ġ{ ĊĠĠĠ Ġelement . appendChild ( component . root Node ) ĊĠ Ġ} ĊĊĠ Ġfun Ġelement ( element : ĠElement ) Ġ{ ĊĠĠĠ Ġthis . element . appendChild ( element ) ĊĠ Ġ} ĊĊĠ Ġfun Ġbuild (): ĠElement Ġ{ ĊĠĠĠ Ġelement . append Text ( text Ġ?: Ġ"") ĊĠĠĠ Ġattrs . forEach Ġ{ Ġ( n , Ġv ) Ġ-> Ġelement . setAttribute ( n , Ġv ) Ġ} ĊĠĠĠ Ġclick Listener ?. let Ġ{ Ġelement . addEventListener (" click ", Ġit ) Ġ} ĊĠĠĠ Ġreturn Ġelement ĊĠ Ġ} Ċ } Ċ Ċ fun Ġhtml ( tag : ĠString , Ġblock : ĠComponent Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠElement Ġ{ ĊĠ Ġreturn ĠComponent Builder ( tag ) Ġ{ Ġdocument . createElement ( it ) Ġ} ĊĠĠĠ Ġ. also ( block ) ĊĠĠĠ Ġ. build () Ċ } Ċ Ċ fun Ġsvg ( tag : ĠString , Ġblock : ĠComponent Builder . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠElement Ġ{ ĊĠ Ġreturn ĠComponent Builder ( tag ) Ġ{ Ġdocument . createElement NS (" http :// www . w 3 . org / 2 0 0 0 / svg ", Ġit ) Ġ} ĊĠĠĠ Ġ. also ( block ) ĊĠĠĠ Ġ. build () Ċ } Ċ