package Ġdev . f rit z 2 . headless . components Ċ Ċ import Ġdev . f rit z 2 . core .* Ċ import Ġdev . f rit z 2 . headless . foundation .* Ċ import Ġdev . f rit z 2 . headless . foundation . utils . scroll into view . Head less Scroll Options Ċ import Ġdev . f rit z 2 . headless . foundation . utils . scroll into view . scroll Into View Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġorg . w 3 c . dom . HTML Button Element Ċ import Ġorg . w 3 c . dom . HTML Div Element Ċ import Ġorg . w 3 c . dom . HTMLElement Ċ import Ġorg . w 3 c . dom . HTML Label Element Ċ import Ġkotlin . math . max Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġprovides Ġthe Ġbuilding Ġblocks Ġto Ġimplement Ġa Ġlist box . Ċ Ġ* Ċ Ġ* ĠUse Ġ[ list box ] Ġfunctions Ġto Ġcreate Ġan Ġinstance , Ġset Ġup Ġthe Ġneeded Ġ[ Hook ] s Ġor Ġ[ Property ] s Ġand Ġref ine Ġthe Ċ Ġ* Ġcomponent Ġby Ġusing Ġthe Ġfurther Ġfactory Ġmethods Ġoffered Ġby Ġthis Ġclass . Ċ Ġ* Ċ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /) Ċ Ġ*/ Ċ @ Suppress (" EXPERIMENT AL _ IS _ NOT _ ENABLED ") Ċ class ĠList box < T , ĠC Ġ: ĠHTMLElement >( tag : ĠTag < C >, Ġid : ĠString ?) Ġ: ĠTag < C > Ġby Ġtag , ĠOpen Close () Ġ{ ĊĊĠĠĠ Ġval Ġvalue Ġ= ĠD atab ind ing Property < T >() ĊĠĠĠ Ġval Ġcomponent Id : ĠString Ġby Ġlazy Ġ{ Ġid Ġ?: Ġvalue . id Ġ?: ĠId . next () Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġbutton : ĠTag < HTMLElement >? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġactive Index Ġ= Ġstore Of (- 1 ) ĊĠĠĠ Ġprivate Ġvar ĠnumberOf Items Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġlabel : ĠTag < HTMLElement >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġvalidation Messages : ĠTag < HTMLElement >? Ġ= Ġnull ĊĊĠĠĠ Ġinternal Ġdata Ġclass ĠList box Entry < T >( val Ġvalue : ĠT , Ġval Ġdisabled : ĠBoolean , Ġvar Ġcharacter : ĠChar ?) ĊĊĠĠĠ Ġprivate Ġval Ġentries Ġ= Ġobject Ġ: ĠRoot Store < List < List box Entry < T >> >( emptyList ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġadd Entry Ġ= Ġhandle < List box Entry < T >> Ġ{ Ġold , Ġentry Ġ-> Ġold Ġ+ Ġentry Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġset Character Ġ= Ġhandle < Pair < Int , ĠChar ? >> Ġ{ Ġold , Ġ( index , Ġc ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold . map Indexed Ġ{ Ġi , Ġo Ġ-> Ġif Ġ( i Ġ== Ġindex ) Ġo . copy ( character Ġ= Ġc ) Ġelse Ġo Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdisabled Handler ( index : ĠInt ) Ġ= Ġhandle < Boolean > Ġ{ Ġstate , Ġdisabled Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . with Index (). map Ġ{ Ġif Ġ( it . index Ġ== Ġindex ) Ġit . value . copy ( disabled Ġ= Ġdisabled ) Ġelse Ġit . value Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġstate Ġby Ġlazy Ġ{ Ġactive Index . data . combine ( entries . data , Ġ:: Pair ) Ġ} ĊĊĠĠĠ Ġfun Ġrender () Ġ{ ĊĠĠĠĠĠĠĠ Ġattr (" id ", Ġcomponent Id ) ĊĊĠĠĠĠĠĠĠ Ġopened . drop ( 1 ). filter Ġ{ Ġ! it Ġ} Ġhandled By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton ?. set Focus () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ list box Button ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe ĊĠĠĠĠ Ġ* Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box button ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< CB Ġ: ĠHTMLElement > ĠRender Context . list box Button ( ĊĠĠĠĠĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġtag : ĠTag Factory < Tag < CB >>, ĊĠĠĠĠĠĠĠ Ġcontent : ĠTag < CB >. () Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠTag < CB > Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Component Structure Info (" list box Button ", Ġthis @ list box Button . scope , Ġthis ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag ( this , Ġclasses , Ġ"$ component Id - button ", Ġscope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! open State . isSet ) Ġopen State ( store Of ( false )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr ( A ria . expanded , Ġopened . asString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle OnClick s Enter And Space () ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ Ġbutton Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ list box Button ] Ġwith Ġa Ġ[ HTML Button Element ] Ġas Ġdefault Ġ[ Tag ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe ĊĠĠĠĠ Ġ* Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box button ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠRender Context . list box Button ( ĊĠĠĠĠĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġcontent : ĠTag < HTML Button Element >. () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= Ġlist box Button ( classes , Ġscope , ĠRender Context :: button , Ġcontent ). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġattr (" type ", Ġ" button ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ list box Label ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe ĊĠĠĠĠ Ġ* Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box label ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< CL Ġ: ĠHTMLElement > ĠRender Context . list box Label ( ĊĠĠĠĠĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġtag : ĠTag Factory < Tag < CL >>, ĊĠĠĠĠĠĠĠ Ġcontent : ĠTag < CL >. () Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠTag < CL > Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Component Structure Info (" list box Label ", Ġthis @ list box Label . scope , Ġthis ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtag ( this , Ġclasses , Ġ"$ component Id - label ", Ġscope , Ġcontent ). also Ġ{ Ġlabel Ġ= Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ list box Label ] Ġwith Ġa Ġ[ HTML Label Element ] Ġas Ġdefault Ġ[ Tag ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe ĊĠĠĠĠ Ġ* Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box label ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠRender Context . list box Label ( ĊĠĠĠĠĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġcontent : ĠTag < HTML Label Element >. () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= Ġlist box Label ( classes , Ġscope , ĠRender Context :: label , Ġcontent ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ list box Validation Messages ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe ĊĠĠĠĠ Ġ* Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box validation messages ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< CV Ġ: ĠHTMLElement > ĠRender Context . list box Validation Messages ( ĊĠĠĠĠĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġtag : ĠTag Factory < Tag < CV >>, ĊĠĠĠĠĠĠĠ Ġinitialize : ĠValidation Messages < CV >. () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue . validation Messages . map Ġ{ Ġit . isNotEmpty () Ġ}. distinct Until Changed (). render Ġ{ Ġis NotEmpty Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isNotEmpty ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Component Structure Info (" list box Validation Messages ", Ġthis @ list box Validation Messages . scope , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag ( this , Ġclasses , Ġ"$ component Id -${ Validation Messages . ID _ SUFFIX }", Ġscope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalidation Messages Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize ( Validation Messages ( value . validation Messages , Ġthis )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ list box Validation Messages ] Ġwith Ġa Ġ[ HTML Div Element ] Ġas Ġdefault Ġ[ Tag ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe ĊĠĠĠĠ Ġ* Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box validation messages ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠRender Context . list box Validation Messages ( ĊĠĠĠĠĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġinitialize : ĠValidation Messages < HTML Div Element >. () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= Ġlist box Validation Messages ( classes , Ġscope , ĠRender Context :: div , Ġinitialize ) ĊĊĠĠĠ Ġinner Ġclass ĠList box Items < CI Ġ: ĠHTMLElement >( ĊĠĠĠĠĠĠĠ Ġval Ġrender Context : ĠRender Context , ĊĠĠĠĠĠĠĠ Ġtag Factory : ĠTag Factory < Tag < CI >>, ĊĠĠĠĠĠĠĠ Ġclasses : ĠString ?, ĊĠĠĠĠĠĠĠ Ġscope : ĠScope Context . () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ: ĠPop Up Panel < CI >( ĊĠĠĠĠĠĠĠ Ġrender Context , ĊĠĠĠĠĠĠĠ Ġtag Factory , ĊĠĠĠĠĠĠĠ Ġclasses , ĊĠĠĠĠĠĠĠ Ġ"$ component Id - items ", ĊĠĠĠĠĠĠĠ Ġscope , ĊĠĠĠĠĠĠĠ Ġthis @ List box . opened , ĊĠĠĠĠĠĠĠ Ġreference Ġ= Ġbutton ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġnext Item ( currentIndex : ĠInt , Ġdirection : ĠDirection , Ġentries : ĠList < List box Entry < T >> ): ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( direction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Next Ġ-> Ġ( entries . drop ( currentIndex Ġ+ Ġ 1 ). indexOf First Ġ{ Ġ! it . disabled Ġ} Ġ+ ĠcurrentIndex Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDirection . Previous Ġ-> Ġentries . take ( max ( 0 , ĠcurrentIndex )). indexOf Last Ġ{ Ġ! it . disabled Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġif Ġ( it Ġ== Ġ- 1 ) ĠcurrentIndex Ġelse Ġit Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfirst Item ( entries : ĠList < List box Entry < T >>) Ġ= Ġentries . indexOf First Ġ{ Ġ! it . disabled Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġlast Item ( entries : ĠList < List box Entry < T >>) Ġ= Ġentries . indexOf Last Ġ{ Ġ! it . disabled Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġitem By Character ( entries : ĠList < List box Entry < T >>, Ġcharacter : ĠChar ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . indexOf First Ġ{ Ġ! it . disabled Ġ&& Ġit . character Ġ== Ġcharacter Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġ- 1 ) Ġnull Ġelse Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrender () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . render () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrap Focus ( restore Focus Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose On Escape () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose On Blur () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr IfNot Set (" tab index ", Ġ" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" role ", ĠA ria . Role . list box ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr ( A ria . invalid , Ġ" true ". wh enever ( value . has Error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel ?. let Ġ{ Ġattr ( A ria . labelledby , Ġit . id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr ( A ria . active desc endant , Ġactive Index . data . map Ġ{ Ġif Ġ( it Ġ== Ġ- 1 ) Ġnull Ġelse Ġ"$ component Id - item -$ it " Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . flatMap Latest Ġ{ Ġ( currentIndex , Ġentries ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey down s . map NotNull Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( shortcut Of ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . Arrow Up Ġ-> Ġnext Item ( currentIndex , ĠDirection . Previous , Ġentries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . Arrow Down Ġ-> Ġnext Item ( currentIndex , ĠDirection . Next , Ġentries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . Home Ġ-> Ġfirst Item ( entries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeys . End Ġ-> Ġlast Item ( entries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stop Immediate Propagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġhandled By Ġactive Index . update ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . data . flatMap Latest Ġ{ Ġentries Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey down s . map NotNull Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Keys . Named Keys . contains ( event . key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stop Immediate Propagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . key . first (). lowercase Char () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c . is Letter Or Digit ()) Ġitem By Character ( entries , Ġc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġhandled By Ġactive Index . update ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . handler ?. invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . flatMap Latest Ġ{ Ġ( currentIndex , Ġentries ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey down s . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Keys . Enter , ĠKeys . Space ). contains ( shortcut Of ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentIndex Ġ== Ġ- 1 Ġ|| Ġentries [ currentIndex ]. disabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . stop Immediate Propagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries [ currentIndex ]. value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġopened . filter Ġ{ Ġit Ġ}. flatMap Latest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . data . flatMap Latest Ġ{ Ġcurrent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . data . map Ġ{ Ġentries Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Index Ġ= Ġentries . indexOf First Ġ{ Ġit . value Ġ== Ġcurrent Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selectedIndex Ġ== Ġ- 1 ) Ġfirst Item ( entries ) Ġelse Ġselected Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġhandled By Ġactive Index . update ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinner Ġclass ĠList box Item < CM Ġ: ĠHTMLElement >( val Ġentry : ĠT , Ġtag : ĠTag < CM >, Ġval Ġindex : ĠInt ) Ġ: ĠTag < CM > Ġby Ġtag Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactive Ġ= Ġactive Index . data . map Ġ{ Ġit Ġ== Ġindex Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Ġ= Ġvalue . data . map Ġ{ Ġit Ġ== Ġentry Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġvalue Ġshould Ġappear Ġwhen Ġlist Ġis Ġstill Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisabled Ġ= Ġentries . data . map NotNull Ġ{ Ġit . get OrNull ( index )?. disabled Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisable Ġby Ġlazy Ġ{ Ġentries . disabled Handler ( index ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġrender () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse ent ers . map NotNull Ġ{ Ġif Ġ( entries . current [ index ]. disabled ) Ġnull Ġelse Ġindex Ġ} Ġhandled By Ġactive Index . update ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" tab index ", Ġ"- 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" role ", ĠA ria . Role . option ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive . filter Ġ{ Ġit Ġ} Ġhandled By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Into View ( dom Node , ĠHead less Scroll Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . handler ?. invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmouse down s . map NotNull Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . stop Immediate Propagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . current [ index ]. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . disabled ) Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . data . map Ġ{} Ġhandled By Ġclose ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ list box Item ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box item ) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġ< CM Ġ: ĠHTMLElement > ĠRender Context . list box Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry : ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag : ĠTag Factory < Tag < CM >>, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize : ĠList box Item < CM >. () Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠnumberOf Items ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . add Entry ( List box Entry ( entry , Ġfalse , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Component Structure Info (" list box Item ", Ġthis @ list box Item . scope , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag ( this , Ġclasses , Ġ"$ component Id - item -$ index ", Ġscope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList box Item ( entry , Ġthis , Ġindex ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . set Character (( index Ġto Ġit . dom Node . textContent ?. trim Start ()?. first OrNull ()?. lowercase Char ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ list box Item ] Ġwith Ġa Ġ[ HTML Button Element ] Ġas Ġdefault Ġ[ Tag ]. ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box item ) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun ĠRender Context . list box Item ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry : ĠT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize : ĠList box Item < HTML Button Element >. () Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġlist box Item ( entry , Ġclasses , Ġscope , ĠRender Context :: button , Ġinitialize ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ list box Items ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe ĊĠĠĠĠ Ġ* Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box items ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< CI Ġ: ĠHTMLElement > ĠRender Context . list box Items ( ĊĠĠĠĠĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġtag : ĠTag Factory < Tag < CI >>, ĊĠĠĠĠĠĠĠ Ġinitialize : ĠList box Items < CI >. () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Component Structure Info (" list box Items ", Ġthis @ list box Items . scope , Ġthis ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! open State . isSet ) Ġopen State ( store Of ( false )) ĊĠĠĠĠĠĠĠ ĠList box Items ( this , Ġtag , Ġclasses , Ġscope ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ list box Items ] Ġwith Ġa Ġ[ HTML Div Element ] Ġas Ġdefault Ġ[ Tag ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe ĊĠĠĠĠ Ġ* Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box items ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠRender Context . list box Items ( ĊĠĠĠĠĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġinternal Scope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġinitialize : ĠList box Items < HTML Div Element >. () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= Ġlist box Items ( classes , Ġinternal Scope , ĠRender Context :: div , Ġinitialize ) Ċ } Ċ Ċ /** Ċ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ List box ]. Ċ Ġ* Ċ Ġ* ĠAPI - Sketch : Ċ Ġ* Ġ``` kotlin Ċ Ġ* Ġlist box < T >() Ġ{ Ċ Ġ* ĠĠĠĠ Ġval Ġvalue : ĠD atab ind ing Property < T > Ċ Ġ* ĠĠĠĠ Ġ// Ġinherited Ġby Ġ` Open Close ` Ċ Ġ* ĠĠĠĠ Ġval Ġopen State : ĠD atab ind ing Property < Boolean > Ċ Ġ* ĠĠĠĠ Ġval Ġopened : ĠFlow < Boolean > Ċ Ġ* ĠĠĠĠ Ġval Ġclose : ĠSimple Handler < Unit > Ċ Ġ* ĠĠĠĠ Ġval Ġopen : ĠSimple Handler < Unit > Ċ Ġ* ĠĠĠĠ Ġval Ġtoggle : ĠSimple Handler < Unit > Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġlist box Button () Ġ{ Ġ} Ċ Ġ* ĠĠĠĠ Ġlist box Label () Ġ{ Ġ} Ċ Ġ* ĠĠĠĠ Ġlist box Validation Messages () Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġval Ġmsgs : ĠFlow < List < Component Validation Message >> Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠ Ġlist box Items () Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġinherited Ġby Ġ` Pop Up Panel ` Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġvar Ġplacement : ĠPl acement Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġvar Ġstrategy : ĠStrategy Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġvar Ġflip : ĠBoolean Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġvar Ġsk idding : ĠInt Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġvar Ġdistance : Ġint Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġeach ĠT Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist box Item ( entry : ĠT ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected : ĠFlow < Boolean > Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactive : ĠFlow < Boolean > Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisabled : ĠFlow < Boolean > Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisable : ĠSimple Handler < Boolean > Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġ} Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box ) Ċ Ġ*/ Ċ fun Ġ< T , ĠC Ġ: ĠHTMLElement > ĠRender Context . list box ( ĊĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġid : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠ Ġtag : ĠTag Factory < Tag < C >>, ĊĠĠĠ Ġinitialize : ĠList box < T , ĠC >. () Ġ-> ĠUnit Ċ ): ĠTag < C > Ġ{ ĊĠĠĠ Ġadd Component Structure Info (" list box ", Ġthis @ list box . scope , Ġthis ) ĊĠĠĠ Ġreturn Ġtag ( this , Ġclasses ( classes , Ġ" relative "), Ġid , Ġscope ) Ġ{ ĊĠĠĠĠĠĠĠ ĠList box < T , ĠC >( this , Ġid ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitialize ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠFactory Ġfunction Ġto Ġcreate Ġa Ġ[ List box ] Ġwith Ġa Ġ[ HTML Div Element ] Ġas Ġdefault Ġroot Ġ[ Tag ]. Ċ Ġ* Ċ Ġ* ĠAPI - Sketch : Ċ Ġ* Ġ``` kotlin Ċ Ġ* Ġlist box < T >() Ġ{ Ċ Ġ* ĠĠĠĠ Ġval Ġvalue : ĠD atab ind ing Property < T > Ċ Ġ* ĠĠĠĠ Ġ// Ġinherited Ġby Ġ` Open Close ` Ċ Ġ* ĠĠĠĠ Ġval Ġopen State : ĠD atab ind ing Property < Boolean > Ċ Ġ* ĠĠĠĠ Ġval Ġopened : ĠFlow < Boolean > Ċ Ġ* ĠĠĠĠ Ġval Ġclose : ĠSimple Handler < Unit > Ċ Ġ* ĠĠĠĠ Ġval Ġopen : ĠSimple Handler < Unit > Ċ Ġ* ĠĠĠĠ Ġval Ġtoggle : ĠSimple Handler < Unit > Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġlist box Button () Ġ{ Ġ} Ċ Ġ* ĠĠĠĠ Ġlist box Label () Ġ{ Ġ} Ċ Ġ* ĠĠĠĠ Ġlist box Validation Messages () Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġval Ġmsgs : ĠFlow < List < Component Validation Message >> Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠ Ġlist box Items () Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġinherited Ġby Ġ` Pop Up Panel ` Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġvar Ġplacement : ĠPl acement Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġvar Ġstrategy : ĠStrategy Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġvar Ġflip : ĠBoolean Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġvar Ġsk idding : ĠInt Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġvar Ġdistance : Ġint Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġeach ĠT Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist box Item ( entry : ĠT ) Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected : ĠFlow < Boolean > Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactive : ĠFlow < Boolean > Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisabled : ĠFlow < Boolean > Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisable : ĠSimple Handler < Boolean > Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġ// Ġ} Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* ĠFor Ġmore Ġinformation Ġrefer Ġto Ġthe Ġ[ official Ġdocumentation ]( https :// www . f rit z 2 . dev / headless / list box /# list box ) Ċ Ġ*/ Ċ fun Ġ< T > ĠRender Context . list box ( ĊĠĠĠ Ġclasses : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġid : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġscope : Ġ( Scope Context . () Ġ-> ĠUnit ) Ġ= Ġ{}, ĊĠĠĠ Ġinitialize : ĠList box < T , ĠHTML Div Element >. () Ġ-> ĠUnit Ċ ): ĠTag < HTML Div Element > Ġ= Ġlist box ( classes , Ġid , Ġscope , ĠRender Context :: div , Ġinitialize ) Ċ