/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 7 - present ĠRobert ĠJar os Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġpl . tre k soft . k vision . form . select Ċ Ċ import Ġcom . github . sn ab bd om . V Node Ċ import Ġpl . tre k soft . k vision . core . Attribute Set Builder Ċ import Ġpl . tre k soft . k vision . core . Class Set Builder Ċ import Ġpl . tre k soft . k vision . core . Container Ċ import Ġpl . tre k soft . k vision . core . String Pair Ċ import Ġpl . tre k soft . k vision . form . Form Input Ċ import Ġpl . tre k soft . k vision . form . Input Size Ċ import Ġpl . tre k soft . k vision . form . Validation Status Ċ import Ġpl . tre k soft . k vision . html . TAG Ċ import Ġpl . tre k soft . k vision . html . Tag Ċ import Ġpl . tre k soft . k vision . panel . Simple Panel Ċ import Ġpl . tre k soft . k vision . state . Observable State Ċ import Ġpl . tre k soft . k vision . state . bind Ċ import Ġpl . tre k soft . k vision . utils . set Ċ Ċ internal Ġconst Ġval ĠK V NULL Ġ= Ġ"# kv null " Ċ Ċ /** Ċ Ġ* ĠSimple Ġselect Ġcomponent . Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* Ġ@ param Ġoptions Ġan Ġoptional Ġlist Ġof Ġoptions Ġ( value Ġto Ġlabel Ġpairs ) Ġfor Ġthe Ġselect Ġcontrol Ċ Ġ* Ġ@ param Ġvalue Ġselect Ġinput Ġvalue Ċ Ġ* Ġ@ param Ġempty Option Ġdetermines Ġif Ġan Ġempty Ġoption Ġis Ġautomatically Ġgenerated Ċ Ġ* Ġ@ param Ġmultiple Ġallows Ġmultiple Ġvalue Ġselection Ġ( multiple Ġvalues Ġare Ġcomma Ġdelimited ) Ċ Ġ* Ġ@ param Ġselect Size Ġthe Ġnumber Ġof Ġvisible Ġoptions Ċ Ġ* Ġ@ param Ġclasses Ġa Ġset Ġof ĠCSS Ġclass Ġnames Ċ Ġ*/ Ċ open Ġclass ĠSimple Select Input ( ĊĠĠĠ Ġoptions : ĠList < String Pair >? Ġ= Ġnull , Ġvalue : ĠString ? Ġ= Ġnull , Ġempty Option : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġmultiple : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġselect Size : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġclasses : ĠSet < String > Ġ= Ġset Of () Ċ ) Ġ: ĠSimple Panel ( classes Ġ+ Ġ" form - control "), ĠForm Input , ĠObservable State < String ?> Ġ{ ĊĊĠĠĠ Ġprotected Ġval Ġob servers Ġ= Ġmutable ListOf <( String ?) Ġ-> ĠUnit >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġlist Ġof Ġoptions Ġ( value Ġto Ġlabel Ġpairs ) Ġfor Ġthe Ġselect Ġcontrol . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġoptions Ġby Ġrefresh On Update ( options ) Ġ{ Ġset Children From Options () Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠText Ġinput Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġvalue Ġby Ġrefresh On Update ( value ) Ġ{ Ġrefresh State (); Ġob servers . forEach Ġ{ Ġob Ġ-> Ġob ( it ) Ġ} Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġof Ġthe Ġselected Ġchild Ġoption . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġvalue Ġis Ġplaced Ġdirectly Ġin Ġthe Ġgenerated ĠHTML Ġcode , Ġwhile Ġthe Ġ[ value ] Ġproperty Ġis Ġdynamically ĊĠĠĠĠ Ġ* Ġbound Ġto Ġthe Ġselect Ġcomponent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġstart Value Ġby Ġrefresh On Update ( value ) Ġ{ Ġthis . value Ġ= Ġit ; Ġselect Option () Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġname Ġattribute Ġof Ġthe Ġgenerated ĠHTML Ġinput Ġelement . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġname : ĠString ? Ġby Ġrefresh On Update () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġfield Ġis Ġdisabled . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġdisabled Ġby Ġrefresh On Update ( false ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġthe Ġtext Ġinput Ġis Ġautomatically Ġfocused . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġautofocus : ĠBoolean ? Ġby Ġrefresh On Update () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġan Ġempty Ġoption Ġis Ġautomatically Ġgenerated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġempty Option Ġby Ġrefresh On Update ( empty Option ) Ġ{ Ġset Children From Options () Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDetermines Ġif Ġmultiple Ġvalue Ġselection Ġis Ġallowed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġmultiple Ġby Ġrefresh On Update ( multiple ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġnumber Ġof Ġvisible Ġoptions . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġselect Size : ĠInt ? Ġby Ġrefresh On Update ( select Size ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġsize Ġof Ġthe Ġinput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġsize : ĠInput Size ? Ġby Ġrefresh On Update () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġvalidation Ġstatus Ġof Ġthe Ġinput . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġvalidation Status : ĠValidation Status ? Ġby Ġrefresh On Update () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġindex Ġof Ġcurrently Ġselected Ġoption Ġor Ġ- 1 Ġif Ġnone . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Unsafe Cast From Dynamic ") ĊĠĠĠ Ġvar Ġselected Index : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġget Element ()?. as Dynamic ()?. selectedIndex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġvalue ?. let Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty Index Ġ= Ġif Ġ( empty Option ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions ?. map ( String Pair :: first )?. indexOf ( v )?. let Ġ{ Ġit Ġ+ Ġempty Index Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ- 1 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Element ()?. as Dynamic ()?. selectedIndex Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġ- 1 ) Ġthis . value Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions ?. get OrNull ( value )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . value Ġ= Ġit . first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Children From Options () ĊĠĠĠĠĠĠĠ Ġthis . set Internal EventListener < Simple Select Input > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġget Element J Query ()?. ` val `() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself . value Ġ= Ġv ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġcalculate Value ( v : ĠAny ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this . multiple ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarr Ġ= Ġv Ġas ? ĠArray < String > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arr Ġ!= Ġnull Ġ&& Ġarr . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarr . filter Ġ{ Ġit Ġ!= Ġ"" Ġ}. join ToString (",") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvs Ġ= Ġv Ġas ĠString ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( vs Ġ!= Ġnull Ġ&& Ġvs Ġ!= Ġ"" Ġ&& Ġvs Ġ!= ĠK V NULL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender (): ĠV Node Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrender (" select ", Ġchildren V Nodes ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Children From Options () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . removeAll () ĊĠĠĠĠĠĠĠ Ġif Ġ( empty Option ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . add ( Tag ( TAG . OPTION , Ġ"", Ġattributes Ġ= Ġmap Of (" value " Ġto ĠK V NULL ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvalue Set Ġ= Ġif Ġ( this . multiple ) Ġvalue ?. split (",") Ġ?: Ġempty Set () Ġelse Ġset Of ( value ) ĊĠĠĠĠĠĠĠ Ġoptions ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġit . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattributes Ġ= Ġif Ġ( value Set . contains ( it . first )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" value " Ġto Ġit . first , Ġ" selected " Ġto Ġ" selected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" value " Ġto Ġit . first ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTag ( TAG . OPTION , Ġit . second , Ġattributes Ġ= Ġattributes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . addAll ( c ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Option () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Set Ġ= Ġif Ġ( this . multiple ) Ġvalue ?. split (",") Ġ?: Ġempty Set () Ġelse Ġset Of ( value ) ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Ġis ĠTag Ġ&& Ġchild . type Ġ== ĠTAG . OPTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Set . contains ( child . getAttribute (" value "))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . setAttribute (" selected ", Ġ" selected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild . removeAttribute (" selected ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Class Set ( class Set Builder : ĠClass Set Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . build Class Set ( class Set Builder ) ĊĠĠĠĠĠĠĠ Ġclass Set Builder . add ( validation Status ) ĊĠĠĠĠĠĠĠ Ġclass Set Builder . add ( size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Attribute Set ( attribute Set Builder : ĠAttributeSet Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . build Attribute Set ( attribute Set Builder ) ĊĠĠĠĠĠĠĠ Ġname ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Set Builder . add (" name ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( multiple ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Set Builder . add (" multiple ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġselect Size ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Set Builder . add (" size ", Ġ"$ it ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġautofocus ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Set Builder . add (" aut of ocus ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( disabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Set Builder . add (" disabled ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter Insert ( node : ĠV Node ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrefresh State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġrefresh State () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . multiple ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Element J Query ()?. ` val `( it . split ("," ). to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Element J Query ()?. ` val `( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġget Element J Query D ()?. ` val `( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMakes Ġthe Ġinput Ġelement Ġfocused . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġfocus () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Element J Query ()?. focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMakes Ġthe Ġinput Ġelement Ġblur . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġblur () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Element J Query ()?. blur () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetState (): ĠString ? Ġ= Ġvalue ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe ( observer : Ġ( String ?) Ġ-> ĠUnit ): Ġ() Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġob servers Ġ+= Ġobserver ĊĠĠĠĠĠĠĠ Ġobserver ( value ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġob servers Ġ-= Ġobserver ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun ĠContainer . simple Select Input ( ĊĠĠĠ Ġoptions : ĠList < String Pair >? Ġ= Ġnull , Ġvalue : ĠString ? Ġ= Ġnull , Ġempty Option : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġmultiple : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġselect Size : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġclasses : ĠSet < String >? Ġ= Ġnull , ĊĠĠĠ ĠclassName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinit : Ġ( Simple Select Input . () Ġ-> ĠUnit )? Ġ= Ġnull Ċ ): ĠSimple Select Input Ġ{ ĊĠĠĠ Ġval Ġsimple Select Input Ġ= ĊĠĠĠĠĠĠĠ ĠSimple Select Input ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Option , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect Size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasses Ġ?: ĠclassName . set ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġinit ?. invoke ( this ) Ġ} ĊĠĠĠ Ġthis . add ( simple Select Input ) ĊĠĠĠ Ġreturn Ġsimple Select Input Ċ } Ċ Ċ /** Ċ Ġ* ĠDSL Ġbuilder Ġextension Ġfunction Ġfor Ġobservable Ġstate . Ċ Ġ* Ċ Ġ* ĠIt Ġtakes Ġthe Ġsame Ġparameters Ġas Ġthe Ġconstructor Ġof Ġthe Ġbuilt Ġcomponent . Ċ Ġ*/ Ċ fun Ġ< S > ĠContainer . simple Select Input ( ĊĠĠĠ Ġstate : ĠObservable State < S >, ĊĠĠĠ Ġoptions : ĠList < String Pair >? Ġ= Ġnull , Ġvalue : ĠString ? Ġ= Ġnull , Ġempty Option : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġmultiple : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġselect Size : ĠInt ? Ġ= Ġnull , ĊĠĠĠ Ġclasses : ĠSet < String >? Ġ= Ġnull , ĊĠĠĠ ĠclassName : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġinit : Ġ( Simple Select Input .( S ) Ġ-> ĠUnit ) Ċ ) Ġ= Ġsimple Select Input ( ĊĠĠĠ Ġoptions , ĊĠĠĠ Ġvalue , ĊĠĠĠ Ġempty Option , ĊĠĠĠ Ġmultiple , ĊĠĠĠ Ġselect Size , ĊĠĠĠ Ġclasses , ĠclassName Ċ ). bind ( state , Ġtrue , Ġinit ) Ċ