/* Ċ Ġ* ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 - 2 0 2 2 ĠD mit ri y ĠG or bun ov Ġ( d mit ri y . goto @ gmail . com ) Ċ Ġ* Ċ Ġ* Ġ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 Ġme . dm dev . pre mo . navigation Ċ Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġme . dm dev . pre mo . Experimental Pre mo Api Ċ import Ġme . dm dev . pre mo . Pm Description Ċ import Ġme . dm dev . pre mo . Pm MessageHandler Ċ import Ġme . dm dev . pre mo . Presentation Model Ċ Ċ interface ĠStack Navigation Ġ{ ĊĠĠĠ Ġval Ġcurrent Top State : ĠState Flow < Presentation Model ?> ĊĠĠĠ Ġval Ġback stack State : ĠState Flow < List < Presentation Model >> ĊĠĠĠ Ġ@ Experimental Pre mo Api ĊĠĠĠ Ġval Ġback stack Changes : ĠFlow < Back stack Change > Ċ } Ċ Ċ val ĠStack Navigation . back stack : ĠList < Presentation Model > ĊĠĠĠ Ġget () Ġ= Ġback stack State . value Ċ Ċ val ĠStack Navigation . current Top : ĠPresentation Model ? ĊĠĠĠ Ġget () Ġ= Ġback stack . last OrNull () Ċ Ċ fun ĠPresentation Model . Stack Navigation ( ĊĠĠĠ Ġinitial Description : ĠP m Description , ĊĠĠĠ Ġinit Handlers : ĠP m MessageHandler .( navigator : ĠStack Navigator ) Ġ-> ĠUnit Ċ ): ĠStack Navigation Ġ{ ĊĠĠĠ Ġval Ġnavigator Ġ= ĠStack Navigator ( initial Description ) ĊĠĠĠ Ġmessage Handler . init Handlers ( navigator ) ĊĠĠĠ Ġreturn Ġnavigator Ċ }