package Ġcom . mo eg irl viewer . component . custom Drawer Ċ Ċ import Ġandroidx . compose . animation . core . Linear E asing Ċ import Ġandroidx . compose . animation . core . t ween Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . gest ures . Orientation Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . runtime . save able . remember Save able Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . node . Ref Ċ import Ġandroidx . compose . ui . platform . Local Configuration Ċ import Ġandroidx . compose . ui . platform . Local Density Ċ import Ġandroidx . compose . ui . unit . Dp Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . mo eg irl viewer . component . Back Handler Ċ import Ġcom . mo eg irl viewer . util . no R ipple Clickable Ċ import Ġcom . mo eg irl viewer . util . to Dp Ċ import Ġcom . mo eg irl viewer . util . visibility Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠCustom Drawer Ref ( ĊĠ Ġval Ġopen : Ġ() Ġ-> ĠUnit , ĊĠ Ġval Ġclose : Ġ() Ġ-> ĠUnit , Ċ ) Ċ Ċ // Ġ åĽł å®ĺæĸ¹ çļĦ Modal Drawer ç»Ħä»¶ å¼ĢåĲ¯ æīĭ åĬ¿ åħ¨ å±ı æľīæķĪ ï¼Į ä¸Ķ æĹłæ³ķ éħįç½® ï¼Į è¿ĻéĩĮ åıª å¥½ èĩªå·± å®ŀçİ° ä¸Ģä¸ª Ċ @ Experimental Material Api Ċ @ Composable Ċ fun ĠCustom Drawer ( ĊĠ Ġwidth : ĠD p Ġ= Ġ( Local Configuration . current . screen Width Dp Ġ* Ġ 0 . 6 ). dp , ĊĠ Ġgesture Width : ĠD p Ġ= Ġ 2 0 . dp , ĊĠ Ġalways Delay Initialize : ĠBoolean Ġ= Ġfalse , ĠĠ Ġ// Ġ åĽłä¸º æ¯ıæ¬¡ åĪĿå§ĭåĮĸ æ¸²æŁĵ æĹ¶ ç«ĭ åĪ» æ¸²æŁĵ æĢ» ä¼ļ éĹ ª çİ° ä¸Ģä¸ĭ ï¼Į æľī æĹ¶ éľĢè¦ģ å»¶ è¿ Ł æ¸²æŁĵ éģ¿åħį è¿Ļä¸ª éĹ®é¢ĺ ï¼Į éħ Į æĥħ ä½¿çĶ¨ è¿Ļä¸ª éĢīé¡¹ ĊĠ Ġside : ĠCustom Drawer Side Ġ= ĠCustom Drawer Side . LEFT , ĊĠ Ġdrawer Content : Ġ@ Composable Ġ( ref : ĠCustom Drawer Ref ) Ġ-> ĠUnit , ĊĠ Ġref : ĠRef < Custom Drawer Ref >? Ġ= Ġnull , ĊĠ Ġcontent : Ġ@ Composable Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠ Ġval Ġdensity Ġ= ĠLocal Density . current ĊĠ Ġval Ġtheme Colors Ġ= ĠMaterial Theme . colors ĊĠ Ġval Ġscope Ġ= Ġremember Coroutine Scope () ĊĠ Ġval Ġswipe able State Ġ= Ġremember Swipe able State ( ĊĠĠĠ Ġinitial Value Ġ= Ġ 0 , ĊĠĠĠ Ġanimation Spec Ġ= Ġt ween ( ĊĠĠĠĠĠ Ġduration Millis Ġ= Ġ 1 5 0 , ĊĠĠĠĠĠ Ġdelay Millis Ġ= Ġ 0 , ĊĠĠĠĠĠ Ġeasing Ġ= ĠLinear E asing , ĊĠĠĠ Ġ), ĊĠ Ġ) ĊĠ Ġvar Ġdelay Display Flag Ġby Ġremember Save able Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠ Ġvar Ġalways Delay Display Flag Ġby Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠ Ġ// Ġä¸į çŁ¥éģĵ æĺ¯ ä¸įæĺ¯ bug ï¼Į swipe able State æģ ¢å¤į æĹ¶ ï¼Į swipe able State . offset æ²¡æľī æł¹æį® anchors çļĦåĢ¼ æģ ¢å¤į ï¼Į èĢĮ æĺ¯ 0 ï¼Į è¿ĻéĩĮ åıª å¥½ åĬł ä¸ª çĬ¶æĢģ çĶ¨äºİ åĬ¨çĶ» åĢ¼çļĦ åĪ¤æĸŃ ĊĠ Ġvar Ġsw ip able State Restore d Ġby Ġremember Ġ{ Ġmutable State Of (! delay Display Flag ) Ġ} ĊĊĠ Ġval Ġis Left Side Ġ= Ġside Ġ== ĠCustom Drawer Side . LEFT ĊĠ Ġval Ġwidth Px Ġ= Ġdensity . run Ġ{ Ġwidth . to Px () Ġ} ĊĠ Ġval Ġanchors Ġ= Ġremember Ġ{ Ġmap Of ( ĊĠĠĠĠĠ Ġ( if Ġ( is Left Side ) Ġ- width Px Ġelse Ġwidth Px ) Ġto Ġ 0 , ĊĠĠĠĠĠĠ 0 f Ġto Ġ 1 ĊĠ Ġ) Ġ} ĊĠ Ġval Ġswipe Offset Ġ= Ġif Ġ( sw ip able State Restore d ) ĊĠĠĠ Ġswipe able State . offset . value . to Dp () Ġelse ĊĠĠĠ Ġanchors . keys . first (). dp ĊĠ Ġval Ġanimation Progress Ġ= Ġif Ġ( sw ip able State Restore d ) ĊĠĠĠĠ 1 Ġ- Ġswipe able State . offset . value Ġ/ Ġanchors . keys . first () Ġelse ĊĠĠĠĠ 0 f ĊĊĠ Ġfun Ġopen () Ġ{ ĊĠĠĠ Ġscope . launch Ġ{ Ġswipe able State . animate To ( 1 ) Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġclose () Ġ{ ĊĠĠĠ Ġscope . launch Ġ{ Ġswipe able State . animate To ( 0 ) Ġ} ĊĠ Ġ} ĊĊĠ ĠSide Effect Ġ{ ĊĠĠĠ Ġref ?. value Ġ= ĠCustom Drawer Ref ( ĊĠĠĠĠĠ Ġopen Ġ= Ġ{ Ġopen () Ġ}, ĊĠĠĠĠĠ Ġclose Ġ= Ġ{ Ġclose () Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ// Ġ åĪĿ æ¬¡ æ¸²æŁĵ æĹ¶ ä¼ļ åĩºçİ° éĹ ª çİ° çļĦ æĥħåĨµ ï¼Į è¿ĻéĩĮ å»¶ è¿ Ł 1 ç§Ĵ æĺ¾ç¤º ĊĠ ĠLa unched Effect ( true ) Ġ{ ĊĠĠĠ Ġdelay ( 5 0 0 ) ĊĠĠĠ Ġdelay Display Flag Ġ= Ġtrue ĊĠĠĠ Ġalways Delay Display Flag Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ ĠLa unched Effect ( swipe able State . offset . value ) Ġ{ ĊĠĠĠ Ġsw ip able State Restore d Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġval Ġdisplay Flag Ġ= Ġif Ġ( always Delay Initialize ) Ġalways Delay Display Flag Ġelse Ġdelay Display Flag ĊĊĠ ĠBack Handler ( swipe able State . current Value Ġ== Ġ 1 ) Ġ{ Ġclose () Ġ} ĊĊĠ ĠBox ( ĊĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠ Ġ. fill MaxSize (), ĊĠĠĠ Ġcontent Alignment Ġ= Ġif Ġ( is Left Side ) ĠAlignment . Top Start Ġelse ĠAlignment . Top End ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġcontent () ĊĊĠĠĠ Ġif Ġ( animation Progress Ġ!= Ġ 0 f Ġ&& Ġdisplay Flag ) Ġ{ ĊĠĠĠĠĠ ĠSp acer ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠ Ġ. background ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 . 5 f Ġ* Ġanimation Progress ), ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ. no R ipple Clickable Ġ{ Ġclose () Ġ} ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠBox ( ĊĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠ Ġ. width ( width Ġ+ Ġgesture Width ) ĊĠĠĠĠĠĠĠ Ġ. fill Max Height () ĊĠĠĠĠĠĠĠ Ġ. offset ( x Ġ= Ġswipe Offset ) ĊĠĠĠĠĠĠĠ Ġ. visibility ( animation Progress Ġ!= Ġ 0 f Ġ&& Ġdisplay Flag ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠ Ġ. match Parent Size () ĊĠĠĠĠĠĠĠĠĠ Ġ. swipe able ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġswipe able State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanchors Ġ= Ġanchors , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthresholds Ġ= Ġ{ Ġ_, Ġ_ Ġ-> ĠFraction al Threshold ( 0 . 2 f ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠOrientation . Horizontal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresistance Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= Ġif Ġ( is Left Side ) ĠAlignment . Top Start Ġelse ĠAlignment . Top End ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Height () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠSurface ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. match Parent Size (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelevation Ġ= Ġ( 2 0 Ġ* Ġanimation Progress ). dp ĊĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Drawer Ref ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Ġ= Ġ{ Ġopen () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Ġ= Ġ{ Ġclose () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠCustom Drawer Side Ġ{ ĊĠ ĠLEFT , ĊĠ ĠRIGHT Ċ }