package Ġde . rob ol ab . client . ui . views Ċ Ċ import Ġde . rob ol ab . client . app . model . base . Material Icon Ċ import Ġde . rob ol ab . client . app . view model . Terminal Input ViewModel Ċ import Ġde . rob ol ab . client . app . view model . ViewModel Ċ import Ġde . rob ol ab . client . repl . base . Repl Color Ċ import Ġde . rob ol ab . client . ui . View Factory Ċ import Ġde . rob ol ab . client . ui . adapter . to Event Ċ import Ġde . west erm ann . k webview . Class List Ċ import Ġde . west erm ann . k webview . View Ċ import Ġde . west erm ann . k webview . View Collection Ċ import Ġde . west erm ann . k webview . components . TextView Ċ import Ġde . west erm ann . k webview . components . box View Ċ import Ġde . west erm ann . k webview . components . icon View Ċ import Ġde . west erm ann . k webview . sync Ċ import Ġkotlinx . browser . window Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . await Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . w 3 c . dom . HTML Span Element Ċ Ċ class ĠTerminal Input View ( ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠTerminal Input ViewModel , Ċ ) Ġ: ĠView Collection < View >() Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġclass List . bind (" readonly ", ĠviewModel . readOnly Property ) ĊĠĠĠĠĠĠĠ Ġhtml . tab Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġon KeyDown Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġevent . to Event () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on KeyDown ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! e . b ubbles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stopPropagation () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Into View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon KeyPress Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġevent . to Event () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on KeyPress ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! e . b ubbles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stopPropagation () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Into View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġon KeyUp Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġevent . to Event () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on KeyUp ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! e . b ubbles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . preventDefault () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . stopPropagation () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll Into View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . request Focus Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocus () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġicon View ( Material Icon . CHE VR ON _ RIGHT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass List Ġ+= Ġ" terminal - input - prefix " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġinput ContentView Ġ= Ġbox View (" terminal - input - content ") ĊĠĠĠĠĠĠĠ Ġval Ġinput Suffix View Ġ= Ġbox View (" terminal - input - suffix ") ĊĊĠĠĠĠĠĠĠ Ġicon View ( Material Icon . HOUR GL ASS _ TOP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass List Ġ+= Ġ" terminal - input - auto - complete - activity " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass List . bind (" active ", ĠviewModel . auto Complete Active Property ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbox View (" terminal - input - auto - complete ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsync ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . auto Complete Property , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Ġ= Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTextView ( item . value ). also Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dataset [" description "] Ġ= Ġitem . description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle (" selected ", Ġitem . selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ġ= Ġ{ Ġview , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġitem . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dataset [" description "] Ġ= Ġitem . description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle (" selected ", Ġitem . selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Ġ= Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dataset [" description "] Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle (" selected ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġevent . target ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġis ĠHTML Span Element ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . select Auto Complete ( t . textContent Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinput ContentView . sync ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . content Property , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Ġ= Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTextView ( item . value ). also Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle Terminal Color ( item . color ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . is Cursor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList Ġ+= Ġ" cursor " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ġ= Ġ{ Ġview , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġitem . value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle (" hidden ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle (" cursor ", Ġitem . is Cursor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle Terminal Color ( item . color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Ġ= Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle (" cursor ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle Terminal Color ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList Ġ+= Ġ" hidden " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġinput Suffix View . sync ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . suffix Property , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Ġ= Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTextView ( item . value ). also Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle Terminal Color ( item . color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ġ= Ġ{ Ġview , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġitem . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle (" hidden ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle Terminal Color ( item . color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Ġ= Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList . toggle Terminal Color ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . classList Ġ+= Ġ" hidden " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . on Paste Request Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclipboard Ġ= Ġwindow . navigator . clipboard . read Text (). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . paste ( clipboard ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠView Factory Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches ( viewModel : ĠViewModel ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠviewModel Ġis ĠTerminal Input ViewModel ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( viewModel : ĠViewModel ): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠTerminal Input View ( viewModel Ġas ĠTerminal Input ViewModel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠClass List . toggle Terminal Color ( color : ĠRe pl Color ?) Ġ{ ĊĠĠĠ Ġfor Ġ( c Ġin ĠRe pl Color . values ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoggle ( c . to ClassName (), Ġc Ġ== Ġcolor ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠRe pl Color . to ClassName () Ġ= Ġ" terminal -${ name . lowercase () }" Ċ