package Ġmo e . tl aster . swiper Ċ Ċ import Ġandroidx . compose . animation . core . Anim atable Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . runtime . save able . Saver Ċ import Ġandroidx . compose . runtime . save able . list Saver Ċ import Ġandroidx . compose . runtime . save able . remember Save able Ċ import Ġkotlin . math . absolute Value Ċ import Ġkotlin . math . with Sign Ċ Ċ @ Composable Ċ fun Ġremember Sw iper State ( ĊĠĠĠ ĠonStart : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġon Dismiss : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġon End : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, Ċ ): ĠSw iper State Ġ{ ĊĠĠĠ Ġreturn Ġremember Save able ( ĊĠĠĠĠĠĠĠ Ġsa ver Ġ= ĠSw iper State . Saver ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonStart , Ġon Dismiss , Ġon End ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSw iper State ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonStart Ġ= ĠonStart , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Ġ= Ġon Dismiss , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon End Ġ= Ġon End , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Stable Ċ class ĠSw iper State ( ĊĠĠĠ Ġinternal Ġval ĠonStart : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġinternal Ġval Ġon Dismiss : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġinternal Ġval Ġon End : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġinitial Offset : ĠFloat Ġ= Ġ 0 f , Ċ ) Ġ{ ĊĠĠĠ Ġinternal Ġvar ĠmaxHeight : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ offset . update Bounds ( lower Bound Ġ= Ġ- value . toFloat (), Ġupper Bound Ġ= Ġvalue . toFloat ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġinternal Ġvar Ġdis missed Ġby Ġmutable State Of ( false ) ĊĠĠĠ Ġprivate Ġvar Ġ_ offset Ġ= ĠAnim atable ( initial Offset ) ĊĊĠĠĠ Ġval Ġoffset : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ offset . value ĊĊĠĠĠ Ġval Ġprogress : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ( offset . absolute Value Ġ/ Ġ( if Ġ( max Height Ġ== Ġ 0 ) Ġ 1 Ġelse ĠmaxHeight )). coerce In ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum Value Ġ= Ġ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Value Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġsnap ( value : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ offset . snap To ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġfl ing ( velocity : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġ_ offset . value ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity . absolute Value Ġ> Ġ 4 0 0 0 f Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss ( velocity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . absolute Value Ġ< ĠmaxHeight Ġ* Ġ 0 . 5 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestore () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . absolute Value Ġ< ĠmaxHeight Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss ( velocity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdismiss ( velocity : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdis missed Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ_ offset . animate To ( max Height . toFloat (). with Sign (_ offset . value ), Ġinitial Velocity Ġ= Ġvelocity ) ĊĠĠĠĠĠĠĠ Ġon Dismiss . invoke () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġrestore () Ġ{ ĊĠĠĠĠĠĠĠ Ġon End . invoke () ĊĠĠĠĠĠĠĠ Ġ_ offset . animate To ( 0 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠS aver ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonStart : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon End : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġ): ĠS aver < Sw iper State , Ġ*> Ġ= Ġlist Saver ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . offset , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestore Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSw iper State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonStart Ġ= ĠonStart , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss Ġ= Ġon Dismiss , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon End Ġ= Ġon End , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Offset Ġ= Ġit [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }