package Ġcom . corn ell app dev . sco op . ui . components . post Ċ Ċ import Ġandroidx . compose . animation . core .* Ċ import Ġandroidx . compose . foundation . gest ures . Orientation Ċ import Ġandroidx . compose . foundation . gest ures . detect Tap Gest ures Ċ import Ġandroidx . compose . foundation . gest ures . draggable Ċ import Ġandroidx . compose . foundation . gest ures . remember Drag gable State Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Un fold More Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . Mutable State Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . remember Coroutine Scope Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . alpha Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . input . pointer . pointer Input Ċ import Ġandroidx . compose . ui . platform . Local Density Ċ import Ġandroidx . compose . ui . text . TextStyle Ċ import Ġandroidx . compose . ui . unit . Int Offset Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . round ToInt Ċ Ċ /** Ċ Ġ* ĠAllows Ġone Ġto Ġselect Ġnumbers Ġby Ġsw ip ing . Ċ Ġ*/ Ċ @ Composable Ċ fun ĠNumber Picker ( ĊĠĠĠ Ġstate : ĠMutable State < Int >, ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġrange : ĠInt Range ? Ġ= Ġnull , ĊĠĠĠ Ġtext Style : ĠTextStyle Ġ= ĠLocal TextStyle . current , ĊĠĠĠ Ġon StateChanged : Ġ( Int ) Ġ-> ĠUnit Ġ= Ġ{}, Ċ ) Ġ{ ĊĠĠĠ Ġval Ġcoroutine Scope Ġ= Ġremember Coroutine Scope () ĊĠĠĠ Ġval Ġnumbers Column Height Ġ= Ġ 3 6 . dp ĊĠĠĠ Ġval Ġhal ved Numbers Column Height Ġ= Ġnumbers Column Height Ġ/ Ġ 2 ĊĠĠĠ Ġval Ġhal ved Numbers Column Height Px Ġ= ĊĠĠĠĠĠĠĠ Ġwith ( Local Density . current ) Ġ{ Ġhal ved Numbers Column Height . to Px () Ġ} ĊĊĠĠĠ Ġfun Ġanimated State Value ( offset : ĠFloat ): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġstate . value Ġ- Ġ( offset Ġ/ Ġhal ved Numbers Column Height Px ). toInt () ĊĊĠĠĠ Ġval Ġanimated Offset Ġ= Ġremember Ġ{ ĠAnim atable ( 0 f ) Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( range Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Range Ġ= Ġremember ( state . value , Ġrange ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġstate . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġ-( range . last Ġ- Ġvalue ) Ġ* Ġhal ved Numbers Column Height Px ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġ-( range . first Ġ- Ġvalue ) Ġ* Ġhal ved Numbers Column Height Px ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst .. last ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Bounds ( offset Range . start , Ġoffset Range . end Inclusive ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġco er ced Animated Offset Ġ= Ġanimated Offset . value Ġ% Ġhal ved Numbers Column Height Px ĊĠĠĠ Ġval Ġanimated State Value Ġ= Ġanimated State Value ( animated Offset . value ) ĊĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. wrap Content Height () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( Intr insic Size . Max ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. draggable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠOrientation . Vertical , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Drag gable State Ġ{ Ġdelta Y Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimated Offset . snap To ( animated Offset . value Ġ+ Ġdelta Y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Drag Stopped Ġ= Ġ{ Ġvelocity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Value Ġ= Ġanimated Offset . fl ing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Velocity Ġ= Ġvelocity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġexponential Dec ay ( f riction Multiplier Ġ= Ġ 2 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadjust Target Ġ= Ġ{ Ġtarget Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġco er ced Target Ġ= Ġtarget Ġ% Ġhal ved Numbers Column Height Px ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġco er ced An chors Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- hal ved Numbers Column Height Px , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhal ved Numbers Column Height Px ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġco er ced Point Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco er ced An chors . min By OrNull Ġ{ Ġabs ( it Ġ- Ġco er ced Target ) Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhal ved Numbers Column Height Px Ġ* Ġ( target Ġ/ Ġhal ved Numbers Column Height Px ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġco er ced Point Ġ+ Ġbase ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). end State . value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . value Ġ= Ġanimated State Value ( end Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon StateChanged ( state . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimated Offset . snap To ( 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCan Ġcustomize Ġappearance Ġin Ġthe Ġcontent Ġblock Ġof Ġthe Ġcolumn Ġhere . ĊĠĠĠĠĠĠĠ ĠRow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġbox Ġis Ġresponsible Ġfor Ġdisplaying Ġthe Ġnumbers Ġand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġis Ġthe Ġmain ĠNumber Pick ing Ġsw ip ing Ġmechan ic . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Center Vert ically ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( start Ġ= Ġ 5 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset Ġ{ ĠInt Offset ( x Ġ= Ġ 0 , Ġy Ġ= Ġco er ced Animated Offset . round ToInt ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Label Modifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvide TextStyle ( text Style ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLabel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ( animated State Value Ġ- Ġ 1 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġbase Label Modifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset ( y Ġ= Ġ- hal ved Numbers Column Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( co er ced Animated Offset Ġ/ Ġhal ved Numbers Column Height Px ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLabel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġanimated State Value . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġbase Label Modifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 1 Ġ- Ġabs ( co er ced Animated Offset ) Ġ/ Ġhal ved Numbers Column Height Px ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLabel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ( animated State Value Ġ+ Ġ 1 ). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġbase Label Modifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset ( y Ġ= Ġhal ved Numbers Column Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha (- co er ced Animated Offset Ġ/ Ġhal ved Numbers Column Height Px ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Filled . Un fold More , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Center Vert ically ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( start Ġ= Ġ 1 5 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Swipe Ġindicator " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 4 . dp )) ĊĊĠĠĠĠĠĠĠ ĠDiv ider ( color Ġ= ĠColor . Black , Ġthickness Ġ= Ġ 2 . dp ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠLabel ( text : ĠString , Ġmodifier : ĠModifier ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTextStyle ( fontSize Ġ= Ġ 2 2 . sp ), ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . pointer Input ( Unit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetect Tap Gest ures ( on Long Press Ġ= Ġ{}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġsuspend Ġfun ĠAnim atable < Float , ĠAnimation Vector 1 D >. fl ing ( ĊĠĠĠ Ġinitial Velocity : ĠFloat , ĊĠĠĠ Ġanimation Spec : ĠDec ay Animation Spec < Float >, ĊĠĠĠ Ġadjust Target : Ġ(( Float ) Ġ-> ĠFloat )? , ĊĠĠĠ Ġblock : Ġ( Anim atable < Float , ĠAnimation Vector 1 D >. () Ġ-> ĠUnit )? Ġ= Ġnull , Ċ ): ĠAnimation Result < Float , ĠAnimation Vector 1 D > Ġ{ ĊĠĠĠ Ġval Ġtarget Value Ġ= Ġanimation Spec . calculate Target Value ( value , Ġinitial Velocity ) ĊĠĠĠ Ġval Ġadjusted Target Ġ= Ġadjust Target ?. invoke ( target Value ) ĊĊĠĠĠ Ġreturn Ġif Ġ( adjusted Target Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġanimate To ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Value Ġ= Ġadjusted Target , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Velocity Ġ= Ġinitial Velocity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġblock ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġanimate Dec ay ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Velocity Ġ= Ġinitial Velocity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Spec Ġ= Ġanimation Spec , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġblock , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }