package Ġorg . pattern fly Ċ Ċ import Ġdev . f rit z 2 . dom . Tag Ċ import Ġdev . f rit z 2 . dom . html . A Ċ import Ġdev . f rit z 2 . dom . html . Events Ċ import Ġdev . f rit z 2 . dom . html . Render Context Ċ import Ġdev . f rit z 2 . dom . html . Scope Ċ import Ġdev . f rit z 2 . dom . html . Text Element Ċ import Ġdev . f rit z 2 . dom . html . Ul Ċ import Ġdev . f rit z 2 . l enses . Id Provider Ċ import Ġdev . f rit z 2 . routing . Router Ċ import Ġkotlinx . browser . window Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . channels . await Close Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . flow . callback Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . filter NotNull Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . plus Ċ import Ġkotlinx . dom . clear Ċ import Ġorg . pattern fly . Divider Variant . HR Ċ import Ġorg . pattern fly . Divider Variant . LI Ċ import Ġorg . pattern fly . Orientation . HORIZONTAL Ċ import Ġorg . pattern fly . Orientation . VERTICAL Ċ import Ġorg . pattern fly . Settings . UI _ TIMEOUT Ċ import Ġorg . pattern fly . dom . By Ċ import Ġorg . pattern fly . dom . Id Ċ import Ġorg . pattern fly . dom . debug Ċ import Ġorg . pattern fly . dom . querySelector Ċ import Ġorg . w 3 c . dom . HTMLElement Ċ import Ġorg . w 3 c . dom . HTML LI Element Ċ import Ġorg . w 3 c . dom . events . Event Ċ Ċ // Ġ------------------------------------------------ ------ Ġd sl Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġhorizontal Ġ[ Navigation ] Ġcomponent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġrouter Ġthe Ġrouter Ġinstance Ċ Ġ* Ġ@ param Ġstore Ġthe Ġstore Ġfor Ġthe Ġnavigation Ġitems Ċ Ġ* Ġ@ param Ġid Ġthe ĠID Ġof Ġthe Ġelement Ċ Ġ* Ġ@ param Ġbase Class Ġoptional ĠCSS Ġclass Ġthat Ġshould Ġbe Ġapplied Ġto Ġthe Ġelement Ċ Ġ* Ġ@ param Ġcontent Ġa Ġlambda Ġexpression Ġfor Ġsetting Ġup Ġthe Ġcomponent Ġitself Ċ Ġ* Ċ Ġ* Ġ@ sample Ġorg . pattern fly . sample . Navigation Sample . horizontal Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠRender Context . horizontal Navigation ( ĊĠĠĠ Ġrouter : ĠRouter < T >, ĊĠĠĠ Ġstore : ĠNavigation Store < T > Ġ= ĠNavigation Store (), ĊĠĠĠ Ġid : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġbase Class : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġcontent : ĠNavigation < T >. () Ġ-> ĠUnit Ġ= Ġ{} Ċ ): ĠNavigation < T > Ġ= Ġregister ( ĊĠĠĠ ĠNavigation ( ĊĠĠĠĠĠĠĠ Ġrouter Ġ= Ġrouter , ĊĠĠĠĠĠĠĠ Ġstore Ġ= Ġstore , ĊĠĠĠĠĠĠĠ Ġorientation Ġ= ĠH ORIZONTAL , ĊĠĠĠĠĠĠĠ Ġexpand able Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġt ert i ary Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġbase Class Ġ= Ġbase Class , ĊĠĠĠĠĠĠĠ Ġjob Ġ= Ġjob , ĊĠĠĠ Ġ), ĊĠĠĠ Ġcontent Ċ ) Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġt ert i ary Ġ[ Navigation ] Ġcomponent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġrouter Ġthe Ġrouter Ġinstance Ċ Ġ* Ġ@ param Ġstore Ġthe Ġstore Ġfor Ġthe Ġnavigation Ġitems Ċ Ġ* Ġ@ param Ġid Ġthe ĠID Ġof Ġthe Ġelement Ċ Ġ* Ġ@ param Ġbase Class Ġoptional ĠCSS Ġclass Ġthat Ġshould Ġbe Ġapplied Ġto Ġthe Ġelement Ċ Ġ* Ġ@ param Ġcontent Ġa Ġlambda Ġexpression Ġfor Ġsetting Ġup Ġthe Ġcomponent Ġitself Ċ Ġ* Ċ Ġ* Ġ@ sample Ġorg . pattern fly . sample . Navigation Sample . ter ti ary Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠRender Context . ter ti ary Navigation ( ĊĠĠĠ Ġrouter : ĠRouter < T >, ĊĠĠĠ Ġstore : ĠNavigation Store < T > Ġ= ĠNavigation Store (), ĊĠĠĠ Ġid : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġbase Class : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġcontent : ĠNavigation < T >. () Ġ-> ĠUnit Ġ= Ġ{} Ċ ): ĠNavigation < T > Ġ= Ġregister ( ĊĠĠĠ ĠNavigation ( ĊĠĠĠĠĠĠĠ Ġrouter Ġ= Ġrouter , ĊĠĠĠĠĠĠĠ Ġstore Ġ= Ġstore , ĊĠĠĠĠĠĠĠ Ġorientation Ġ= ĠH ORIZONTAL , ĊĠĠĠĠĠĠĠ Ġexpand able Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġt ert i ary Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġbase Class Ġ= Ġbase Class , ĊĠĠĠĠĠĠĠ Ġjob Ġ= Ġjob , ĊĠĠĠ Ġ), ĊĠĠĠ Ġcontent Ċ ) Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġvertical Ġ[ Navigation ] Ġcomponent . Ċ Ġ* Ċ Ġ* Ġ@ param Ġrouter Ġthe Ġrouter Ġinstance Ċ Ġ* Ġ@ param Ġstore Ġthe Ġstore Ġfor Ġthe Ġnavigation Ġitems Ċ Ġ* Ġ@ param Ġexpand able Ġwhether Ġthe Ġnavigation Ġuses Ġexpand able Ġgroups Ċ Ġ* Ġ@ param Ġid Ġthe ĠID Ġof Ġthe Ġelement Ċ Ġ* Ġ@ param Ġbase Class Ġoptional ĠCSS Ġclass Ġthat Ġshould Ġbe Ġapplied Ġto Ġthe Ġelement Ċ Ġ* Ġ@ param Ġcontent Ġa Ġlambda Ġexpression Ġfor Ġsetting Ġup Ġthe Ġcomponent Ġitself Ċ Ġ* Ċ Ġ* Ġ@ sample Ġorg . pattern fly . sample . Navigation Sample . vertical Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠRender Context . vertical Navigation ( ĊĠĠĠ Ġrouter : ĠRouter < T >, ĊĠĠĠ Ġstore : ĠNavigation Store < T > Ġ= ĠNavigation Store (), ĊĠĠĠ Ġexpand able : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġid : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġbase Class : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġcontent : ĠNavigation < T >. () Ġ-> ĠUnit Ġ= Ġ{} Ċ ): ĠNavigation < T > Ġ= Ġregister ( ĊĠĠĠ ĠNavigation ( ĊĠĠĠĠĠĠĠ Ġrouter Ġ= Ġrouter , ĊĠĠĠĠĠĠĠ Ġstore Ġ= Ġstore , ĊĠĠĠĠĠĠĠ Ġorientation Ġ= ĠV ERT ICAL , ĊĠĠĠĠĠĠĠ Ġexpand able Ġ= Ġexpand able , ĊĠĠĠĠĠĠĠ Ġt ert i ary Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġbase Class Ġ= Ġbase Class , ĊĠĠĠĠĠĠĠ Ġjob Ġ= Ġjob ĊĠĠĠ Ġ), ĊĠĠĠ Ġcontent Ċ ) Ċ Ċ /** Ċ Ġ* ĠStarts Ġa Ġblock Ġto Ġadd Ġnavigation Ġitems Ġusing Ġthe ĠDSL . Ċ Ġ* Ċ Ġ* Ġ@ param Ġblock Ġcode Ġblock Ġfor Ġadding Ġthe Ġnavigation Ġitems . Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠNavigation < T >. items ( block : ĠItems Builder < T >. () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġval Ġentries Ġ= ĠItems Builder ( store . id Provider , Ġstore . item Selection ). apply ( block ). build () ĊĠĠĠ Ġstore . update ( entries ) Ċ } Ċ Ċ /** Ċ Ġ* ĠStarts Ġa Ġblock Ġto Ġadd Ġnavigation Ġgroups Ġusing Ġthe ĠDSL . Ċ Ġ* Ċ Ġ* Ġ@ param Ġblock Ġcode Ġblock Ġfor Ġadding Ġthe Ġnavigation Ġgroups . Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠNavigation < T >. groups ( block : ĠGroups Builder < T >. () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠ Ġval Ġentries Ġ= ĠGroups Builder ( store . id Provider , Ġstore . item Selection ). apply ( block ). build () ĊĠĠĠ Ġstore . update ( entries ) Ċ } Ċ Ċ // Ġ------------------------------------------------ ------ Ġtag Ċ Ċ /** Ċ Ġ* ĠPattern Fly Ġ[ navigation ]( https :// www . pattern fly . org / v 4 / components / navigation / design - guidelines ) Ġcomponent . Ċ Ġ* Ċ Ġ* ĠA Ġnavigation Ġorgan izes Ġan Ġapplication âĢĻ s Ġstructure Ġand Ġcontent , Ġmaking Ġit Ġeasy Ġto Ġfind Ġinformation Ġand Ġaccomplish Ġtasks . ĠNavigation Ġcommunic ates Ġrelationships , Ġcontext , Ġand Ġactions Ġa Ġuser Ġcan Ġtake Ġwithin Ġan Ġapplication . Ċ Ġ* Ċ Ġ* ĠThe Ġnavigation Ġcomponent Ġcomes Ġin Ġthree Ġdifferent Ġvariations : Ċ Ġ* Ċ Ġ* Ġ### ĠHorizontal Ġnavigation Ċ Ġ* Ċ Ġ* ĠHorizontal Ġnavigation Ġis Ġglobal Ġnavigation Ġthat Ġdisplays Ġnavigation Ġitems Ġfrom Ġleft Ġto Ġright Ġin Ġthe Ġ[ Page Header ]. Ċ Ġ* Ċ Ġ* Ġ### ĠVertical Ġnavigation Ċ Ġ* Ċ Ġ* ĠVertical Ġnavigation Ġis Ġh ierarchical Ġglobal Ġnavigation Ġthat Ġdisplays Ġnavigation Ġoptions Ġfrom Ġtop Ġto Ġbottom Ġon Ġthe Ġleft Ġside Ġof Ġa Ġscreen . ĠVertical Ġnavigation Ġcan Ġbe Ġcollapsed Ġto Ġprovide Ġadditional Ġscreen Ġreal Ġest ate Ġby Ġusing Ġa Ġmenu Ġicon Ġbutton Ġat Ġthe Ġtop Ġleft . Ċ Ġ* Ċ Ġ* ĠItems Ġin Ġa Ġvertical Ġnavigation Ġcan Ġbe Ġflat Ġor Ġgrouped . ĠWhen Ġgroups Ġare Ġused Ġthe Ġvalue Ġof Ġ` expand able ` Ġmatters : Ċ Ġ* Ċ Ġ* Ġ- Ġ` expand able Ġ== Ġtrue `: ĠItems Ġin Ġa Ġgroup Ġwithout Ġa Ġtext Ġare Ġrendered Ġas Ġflat Ġitems Ġbefore Ġall Ġother Ġgroups . ĠItems Ġin Ġgroups Ġwith Ġa Ġtext Ġare Ġrendered Ġas Ġexpand able Ġgroups . Ċ Ġ* Ġ- Ġ` expand able Ġ== Ġfalse `: ĠAll Ġgroups Ġshould Ġhave Ġa Ġtext Ġand Ġare Ġtreated Ġequ ally . Ċ Ġ* Ċ Ġ* Ġ### ĠT ert i ary Ġnavigation Ċ Ġ* Ċ Ġ* ĠWhile Ġglobal Ġnavigation Ġcontrols Ġwhat Ġusers Ġare Ġseeing Ġat Ġthe Ġapplication - level , Ġlocal Ġnavigation Ġprovides Ġmore Ġgran ular Ġnavigation Ġspecific Ġto Ġa Ġparticular Ġpage Ġor Ġwindow Ġin Ġthe Ġapplication . ĠFor Ġexample , Ġa Ġuser Ġmight Ġuse Ġglobal Ġnavigation Ġto Ġget Ġto Ġa Ġsettings Ġpage , Ġand Ġthen Ġuse Ġlocal Ġnavigation Ġto Ġaccess Ġprivacy Ġand Ġgeneral Ġuser Ġsettings . Ċ Ġ* Ċ Ġ* Ġ### ĠEnt ries Ċ Ġ* Ċ Ġ* ĠThe Ġdata Ġin Ġthe Ġnavigation Ġcomponent Ġis Ġmanaged Ġby Ġa Ġ[ Navigation Store ] Ġand Ġis Ġwrapped Ġinside Ġinstances Ġof Ġ[ Item ]. ĠThe Ġtype Ġof Ġthe Ġ[ Router ] Ġmust Ġmatch Ġthe Ġtype Ġof Ġthe Ġ[ Item ] s . Ċ Ġ* Ċ Ġ* Ġ#### ĠAdding Ġentries Ċ Ġ* Ċ Ġ* ĠEnt ries Ġcan Ġbe Ġadded Ġby Ġusing Ġthe Ġ[ Navigation Store ] Ġor Ġby Ġusing Ġthe ĠDSL . ĠHorizontal Ġand Ġt ert i ary Ġnavigation Ġsupports Ġonly Ġflat Ġitems Ġwhile Ġvertical Ġnavigation Ġalso Ġsupports Ġgroups . ĠNested Ġgroups Ġare Ġnot Ġsupported . Ċ Ġ* Ċ Ġ* Ġ#### ĠRendering Ġentries Ċ Ġ* Ċ Ġ* ĠBy Ġdefault Ġthe Ġnavigation Ġuses Ġ[ Group . text ] Ġand Ġ[ Item . text ] Ġto Ġrender Ġthe Ġdata Ġin Ġthe Ġ[ Navigation Store ]. ĠIf Ġyou Ġdon 't Ġwant Ġto Ġuse Ġthe Ġbuiltin Ġdefaults Ġyou Ġcan Ġspecify Ġa Ġcustom Ġdisplay Ġfunction Ġby Ġcalling Ġ[ display ]. Ċ Ġ* Ċ Ġ* Ġ[ Item . icon ], Ġ[ Item . description ], Ġ[ Item . href ] Ġand Ġ[ Item . disabled ] Ġare Ġignored Ġby Ġthe Ġnavigation Ġcomponent . Ċ Ġ* Ċ Ġ* Ġ### ĠRouting Ċ Ġ* Ċ Ġ* ĠThe Ġpassed Ġ[ Router ] Ġis Ġused Ġfor Ġthe Ġactual Ġnavigation Ġ( updates Ġthe Ġlocation Ġ& Ġhistory ). ĠAs Ġmentioned Ġabove Ġthe Ġtype Ġof Ġthe Ġ[ Router ] Ġmust Ġmatch Ġthe Ġtype Ġof Ġthe Ġ[ Item ] s . Ċ Ġ* Ċ Ġ* Ġ@ sample Ġorg . pattern fly . sample . Navigation Sample . expand able Ċ Ġ*/ Ċ @ Suppress (" Long Parameter List ") Ċ public Ġclass ĠNavigation < T > Ġinternal Ġconstructor ( ĊĠĠĠ Ġinternal Ġval Ġrouter : ĠRouter < T >, ĊĠĠĠ Ġinternal Ġval Ġstore : ĠNavigation Store < T >, ĊĠĠĠ Ġprivate Ġval Ġorientation : ĠOrientation , ĊĠĠĠ Ġexpand able : ĠBoolean , ĊĠĠĠ Ġt ert i ary : ĠBoolean , ĊĠĠĠ Ġid : ĠString ?, ĊĠĠĠ Ġbase Class : ĠString ?, ĊĠĠĠ Ġjob : ĠJob Ċ ) Ġ: ĠPattern Fly Element < HTMLElement >, ĊĠĠĠ ĠText Element ( ĊĠĠĠĠĠĠĠ Ġ" nav ", ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġbase Class Ġ= Ġclasses Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ComponentType . Navigation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ (" horizontal ". modifier () Ġ` when ` Ġ( orientation Ġ== ĠH ORIZONTAL )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ (" ter ti ary ". modifier () Ġ` when ` Ġt ert i ary ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ base Class ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġjob , ĊĠĠĠĠĠĠĠ Ġscope Ġ= ĠScope () ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġul : ĠU l ĊĠĠĠ Ġprivate Ġval Ġscroll Store Ġ= ĠScroll Button Store () ĊĠĠĠ Ġinternal Ġvar Ġdisplay : ĠComponent Display < A , ĠT >? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmark As ( ComponentType . Navigation ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! ter ti ary ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaria [" label "] Ġ= Ġ" Global " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( Main Scope () Ġ+ Ġjob ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore . data . collect Ġ{ Ġentries Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠH ORIZONTAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhorizontal ( entries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entries . groups . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflat ( entries , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( expand able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Expand able ( entries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertical Group ed ( entries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( orientation Ġ== ĠH ORIZONTAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Store . data . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" scroll able ". modifier () Ġto Ġ( it . show Buttons )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġscroll Ġbuttons , Ġwhen Ġtab Ġitems Ġhave Ġbeen Ġupdated ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstore . data . map Ġ{ Ġul . dom Node . update Scroll Buttons () Ġ}. filter NotNull () Ġhandled By Ġscroll Store . update ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġscroll Ġbuttons , Ġwhen Ġwindow Ġhas Ġbeen Ġresized ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Flow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : Ġ( Event ) Ġ-> ĠUnit Ġ= Ġ{ Ġthis . try Send ( it ). is Success Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . addEventListener ( Events . resize . name , Ġlistener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġawait Close Ġ{ Ġdom Node . removeEventListener ( Events . resize . name , Ġlistener ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġul . dom Node . update Scroll Buttons () Ġ}. filter NotNull () Ġhandled By Ġscroll Store . update ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhorizontal ( entries : ĠEnt ries < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġbutton ( base Class Ġ= Ġ" nav ". component (" scroll ", Ġ" button ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaria [" label "] Ġ= Ġ" Scroll Ġleft " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled ( this @ Navigation . scroll Store . data . map Ġ{ Ġit . disable Left Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaria [" hidden "] Ġ= Ġthis @ Navigation . scroll Store . data . map Ġ{ Ġit . disable Left . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . onclick Ġ= Ġ{ Ġthis @ Navigation . ul . dom Node . scroll Left () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon (" angle - left ". fas ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġflat ( entries , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġbutton ( base Class Ġ= Ġ" nav ". component (" scroll ", Ġ" button ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaria [" label "] Ġ= Ġ" Scroll Ġright " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled ( this @ Navigation . scroll Store . data . map Ġ{ Ġit . disable Right Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaria [" hidden "] Ġ= Ġthis @ Navigation . scroll Store . data . map Ġ{ Ġit . disable Right . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . onclick Ġ= Ġ{ Ġthis @ Navigation . ul . dom Node . scroll Right () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon (" angle - right ". fas ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġflat ( entries : ĠEnt ries < T >, Ġscroll : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġul Ġ= Ġul ( base Class Ġ= Ġ" nav ". component (" list ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scroll ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġupdate Ġscroll Ġbuttons , Ġwhen Ġscroll Ġevent Ġhas Ġbeen Ġfired ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġe . g . Ġby Ġscroll Left () Ġor Ġscroll Right () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll s . map Ġ{ Ġdom Node . update Scroll Buttons () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. handled By ( this @ Navigation . scroll Store . update ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . entries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGroup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli ( base Class Ġ= Ġ" display - none ". util ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" hidden ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Groups Ġare Ġnot Ġsupported Ġfor Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this @ Navigation . orientation Ġ== ĠH ORIZONTAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" horizontal ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" flat Ġvertical ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġnavigation ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . warn ("$ message : Ġ${ dom Node . debug () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠItem Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Link ( this @ Navigation , Ġentry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSe parator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider ( LI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvertical Group ed ( entries : ĠEnt ries < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġentries . entries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGroup < T > Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Id Ġ= ĠId . unique ( ComponentType . Navigation . id , Ġ" grp ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection ( base Class Ġ= Ġ" nav ". component (" section ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaria [" le bel led by "] Ġ= Ġheader Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh 2 (" nav ". component (" section ", Ġ" title "), Ġheader Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ( entry . text Ġ?: Ġ" n / a ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Group Entries ( this @ Navigation , Ġentry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠItem < T > Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsection ( base Class Ġ= Ġ" display - none ". util ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" hidden ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ" Flat Ġitems Ġare Ġnot Ġsupported Ġfor Ġgrouped Ġvertical Ġnavigation " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . warn ("$ message : Ġ${ dom Node . debug () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSe parator < T > Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider ( HR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvertical Expand able ( entries : ĠEnt ries < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġul ( base Class Ġ= Ġ" nav ". component (" list ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġturn Ġentries . all Ġinto Ġa Ġlist Ġcontaining ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 ) Ġthe Ġitems Ġand Ġsepar ators Ġof Ġall Ġun named Ġgroups Ġand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 ) Ġall Ġother Ġentries ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( unnamed Groups , Ġall Other Entries ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . all . partition Ġ{ Ġit Ġis ĠGroup < T > Ġ&& Ġit . text Ġ== Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems And Separ ators Of Unnamed Groups Ġ= Ġun named Groups . flatMap Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGroup < T > Ġ-> Ġentry . entries . filter Ġ{ Ġit Ġis ĠItem < T > Ġ|| Ġit Ġis ĠSe parator < T > Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠlistOf ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . copy ( all Ġ= Ġitems And Separ ators Of Unnamed Groups Ġ+ Ġall Other Entries ). entries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGroup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister ( Expand able Group ( this @ Navigation , Ġentry , Ġjob )) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠItem Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Link ( this @ Navigation , Ġentry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSe parator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider ( LI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġa Ġcustom Ġdisplay Ġfunction Ġto Ġrender Ġthe Ġnavigation Ġitems . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġdisplay ( display : ĠComponent Display < A , ĠT >) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . display Ġ= Ġdisplay ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠExpand able Group < T >( ĊĠĠĠ Ġprivate Ġval Ġnavigation : ĠNavigation < T >, ĊĠĠĠ Ġprivate Ġval Ġgroup : ĠGroup < T >, ĊĠĠĠ Ġjob : ĠJob Ċ ) Ġ: ĠTag < HTML LI Element >( ĊĠĠĠ Ġ" li ", ĊĠĠĠ Ġbase Class Ġ= Ġclasses (" nav ". component (" item "), Ġ" expand able ". modifier ()), ĊĠĠĠ Ġjob Ġ= Ġjob , ĊĠĠĠ Ġscope Ġ= ĠScope () Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġexpanded Ġ= ĠEx pan ded Store () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġuse Ġclass Map Ġfor Ġexpanded Ġflow ĊĠĠĠĠĠĠĠ Ġ// Ġclass Map Ġ= Ġexpanded . data . map Ġ{ Ġexpanded Ġ-> Ġmap Of (" expanded ". modifier () Ġto Ġexpanded ) Ġ} ĊĠĠĠĠĠĠĠ Ġ( Main Scope () Ġ+ Ġjob ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpanded . data . collect Ġ{ Ġdom Node . classList . toggle (" expanded ". modifier (), Ġit ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġit Ġmight Ġinterf ere Ġwith Ġrouter Ġflow , Ġwhich Ġalso Ġmod ifies Ġthe Ġclass Ġlist ĊĠĠĠĠĠĠĠ Ġ( Main Scope () Ġ+ Ġjob ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Expand able Group . navigation . router . data . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( UI _ TIMEOUT ) Ġ// Ġwait Ġa Ġlittle Ġbit Ġbefore Ġtesting Ġfor Ġthe Ġcurrent Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselector Ġ= ĠBy . classname (" nav ". component (" link "), Ġ" current ". modifier ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontains Current Ġ= Ġdom Node . querySelector ( selector ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdom Node . classList . toggle (" current ". modifier (), Ġcontains Current ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbutton Id Ġ= ĠId . unique ( ComponentType . Navigation . id , Ġ" eg ") ĊĠĠĠĠĠĠĠ Ġbutton (" nav ". component (" link "), Ġbutton Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ( this @ Expand able Group . group . text Ġ?: Ġ" n / a ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclicks Ġhandled By Ġthis @ Expand able Group . expanded . toggle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaria [" expanded "] Ġ= Ġthis @ Expand able Group . expanded . data . map Ġ{ Ġit . toString () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġspan (" nav ". component (" toggle ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan (" nav ". component (" toggle ", Ġ" icon ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon (" angle - right ". fas ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsection (" nav ". component (" sub nav ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaria [" labelledby "] Ġ= Ġbutton Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattr (" hidden ", Ġthis @ Expand able Group . expanded . data . map Ġ{ Ġ! it Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Group Entries ( this @ Expand able Group . navigation , Ġthis @ Expand able Group . group ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġ< T > ĠRender Context . render Group Entries ( navigation : ĠNavigation < T >, Ġgroup : ĠGroup < T >) Ġ= ĊĠĠĠ Ġul ( base Class Ġ= Ġ" nav ". component (" list ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġgroup . entries . forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠGroup Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . warn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Nested Ġgroups Ġare Ġnot Ġsupported Ġfor Ġvertical Ġgrouped Ġnavigation : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation . dom Node . debug () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠItem Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Link ( navigation , Ġentry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSe parator Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider ( LI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ private Ġfun Ġ< T > ĠRender Context . render Link ( navigation : ĠNavigation < T >, Ġitem : ĠItem < T >) Ġ= ĊĠĠĠ Ġli ( base Class Ġ= Ġ" nav ". component (" item ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġa (" nav ". component (" link ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclicks . map Ġ{ Ġitem . unwrap () Ġ} Ġhandled By Ġnavigation . router . nav To ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation . router . data . map Ġ{ Ġroute Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" current ". modifier () Ġto Ġ( route Ġ== Ġitem . unwrap ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaria [" current "] Ġ= Ġnavigation . router . data . map Ġ{ Ġroute Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route Ġ== Ġitem . unwrap ()) Ġ" page " Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( navigation . display Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigation . display ?. invoke ( this , Ġitem . unwrap ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ( item . text Ġ?: Ġ" n / a ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ // Ġ------------------------------------------------ ------ Ġstore Ċ Ċ /** Ċ Ġ* ĠAn Ġ[ Entries Store ] Ġwith Ġ[ Item Selection . SINGLE ] Ġselection Ġmode . Ċ Ġ*/ Ċ public Ġclass ĠNavigation Store < T >( id Provider : ĠId Provider < T , ĠString > Ġ= Ġ{ ĠId . build ( it . toString ()) Ġ}) Ġ: ĊĠĠĠ ĠEnt ries Store < T >( id Provider , ĠItem Selection . SINGLE ) Ċ