package Ġcom . gd ale y Ċ Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġpl . tre k soft . k vision . data . Data Container . Companion . data Container Ċ import Ġpl . tre k soft . k vision . form . Form Panel Ċ import Ġpl . tre k soft . k vision . form . Form Panel . Companion . form Panel Ċ import Ġpl . tre k soft . k vision . form . text . Text Ċ import Ġpl . tre k soft . k vision . form . text . TextInput Type Ċ import Ġpl . tre k soft . k vision . html . Button Ċ import Ġpl . tre k soft . k vision . html . Button . Companion . button Ċ import Ġpl . tre k soft . k vision . html . Icon . Companion . icon Ċ import Ġpl . tre k soft . k vision . modal . Confirm Ċ import Ġpl . tre k soft . k vision . modal . Modal Ċ import Ġpl . tre k soft . k vision . panel . V Panel Ċ import Ġpl . tre k soft . k vision . table . Cell . Companion . cell Ċ import Ġpl . tre k soft . k vision . table . Header Cell Ċ import Ġpl . tre k soft . k vision . table . Row Ċ import Ġpl . tre k soft . k vision . table . Table Ċ import Ġpl . tre k soft . k vision . table . Table Type Ċ import Ġpl . tre k soft . k vision . utils . px Ċ Ċ object ĠMain Panel Ġ: ĠV Panel () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadd Form : ĠForm Panel < Contact > ĊĠĠĠ Ġprivate Ġval Ġmodal : ĠModal ĊĠĠĠ Ġprivate Ġvar Ġediting Index Ġ= Ġ- 1 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġpadding Ġ= Ġ 1 0 . px ĊĊĠĠĠĠĠĠĠ Ġval Ġtable Ġ= ĠTable ( types Ġ= Ġset Of ( Table Type . STRI PED , ĠTable Type . HO VER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header Cell ( Header Cell (" Name ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header Cell ( Header Cell (" Email ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header Cell ( Header Cell ("")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdata Container ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModel . contacts , Ġ{ Ġindex , Ġaddress Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell ( address . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell ( address . email ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon (" fa - times ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Delete " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Ġ= Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . stopPropagation () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfirm . show (" Are Ġyou Ġsure ?", Ġ" Do Ġyou Ġwant Ġto Ġdelete Ġthis Ġaddress ?") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġcontainer Ġ= Ġtable ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmodal Ġ= ĠModal (" Add / Edit ĠContact ") ĊĠĠĠĠĠĠĠ Ġmodal . add ( V Panel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Form Ġ= Ġform Panel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Contact :: name , ĠText ( label Ġ= Ġ" Name : "). apply Ġ{ Ġmaxlength Ġ= Ġ 2 5 5 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Contact :: email , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( TextInput Type . EMAIL , Ġlabel Ġ= Ġ" Email : "). apply Ġ{ Ġmaxlength Ġ= Ġ 2 5 5 Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . matches ("[ \\ w - ]+ @ ([ \\ w - ]+ \\. )+ [ \\ w - ]+ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġmodal . add Button ( Button (" Cancel "). onClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodal . hide () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġmodal . add Button ( Button (" OK "). onClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbutton ( text Ġ= Ġ" Add ĠContact "). onClick Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Address () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnew Address () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Form . setData ( Contact ()) ĊĠĠĠĠĠĠĠ Ġediting Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġmodal . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( add Form . validate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġif Ġ( editing Index Ġ>= Ġ 0 ) ĠModel . contacts [ editing Index ]. id Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġadd Form . getData (). copy ( id Ġ= Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModel . save Contact ( address ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodal . hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġedit ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= ĠModel . contacts [ index ] ĊĠĠĠĠĠĠĠ Ġadd Form . setData ( address ) ĊĠĠĠĠĠĠĠ Ġediting Index Ġ= Ġindex ĊĠĠĠĠĠĠĠ Ġmodal . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete ( index : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModel . contacts [ index ]. id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModel . delete Contact ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ