package Ġcom . wis nu . k urn i awan . comp o set od olist . features . login . ui Ċ Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . Row Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . layout . width Ċ import Ġandroidx . compose . foundation . text . Keyboard Actions Ċ import Ġandroidx . compose . foundation . text . Keyboard Options Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Visibility Ċ import Ġandroidx . compose . material . icons . filled . Visibility Off Ċ import Ġandroidx . compose . material 3 . Icon Ċ import Ġandroidx . compose . material 3 . IconButton Ċ import Ġandroidx . compose . material 3 . Local TextStyle Ċ import Ġandroidx . compose . material 3 . Material Theme Ċ import Ġandroidx . compose . material 3 . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . focus . Focus Request er Ċ import Ġandroidx . compose . ui . focus . focus Request er Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . input . I me Action Ċ import Ġandroidx . compose . ui . text . input . Keyboard Type Ċ import Ġandroidx . compose . ui . text . input . Password Visual Transformation Ċ import Ġandroidx . compose . ui . text . input . Visual Transformation Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġcom . wis nu . k urn i awan . comp o set od olist . R Ċ import Ġcom . wis nu . k urn i awan . comp o set od olist . foundation . extension . can Login Ċ import Ġcom . wis nu . k urn i awan . comp o set od olist . foundation . u ic omp onent . Pg Button Ċ import Ġcom . wis nu . k urn i awan . comp o set od olist . foundation . u ic omp onent . Pg Page Layout Ċ import Ġcom . wis nu . k urn i awan . comp o set od olist . foundation . u ic omp onent . Pg TextField Ċ import Ġcom . wis nu . k urn i awan . comp o set od olist . foundation . ui extension . collect As Effect Ċ import Ġcom . wis nu . k urn i awan . comp o set od olist . runtime . navigation . Auth Flow Ċ import Ġcom . wis nu . k urn i awan . comp o set od olist . runtime . navigation . Home Flow Ċ Ċ @ Composable Ċ fun ĠLogin Screen ( nav Controller : ĠNav Controller , ĠviewModel : ĠLogin ViewModel ) Ġ{ ĊĠĠĠ Ġval Ġstate Ġby ĠviewModel . state . collect As State () ĊĠĠĠ Ġval Ġeffect Ġby ĠviewModel . effect . collect As Effect () ĊĊĠĠĠ ĠLogin Screen ( ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġstate , ĊĠĠĠĠĠĠĠ Ġon Email Changed Ġ= Ġ{ ĠviewModel . dispatch ( Login Action . Change Email ( it )) Ġ}, ĊĠĠĠĠĠĠĠ Ġon Password Changed Ġ= Ġ{ ĠviewModel . dispatch ( Login Action . Change Password ( it )) Ġ}, ĊĠĠĠĠĠĠĠ Ġon Password I me Action Ġ= Ġ{ ĠviewModel . dispatch ( Login Action . Click I me Password Done ) Ġ}, ĊĠĠĠĠĠĠĠ ĠonClick Login Ġ= Ġ{ ĠviewModel . dispatch ( Login Action . Click Login ) Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ( effect Ġis ĠLogin Effect . Navigate To Dashboard ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLa unched Effect ( effect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Home Flow . Root . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To ( Auth Flow . Login Screen . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclusive Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠLogin Screen ( ĊĠĠĠ Ġstate : ĠLogin State , ĊĠĠĠ Ġon Email Changed : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Password Changed : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Password I me Action : Ġ() Ġ-> ĠUnit , ĊĠĠĠ ĠonClick Login : Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ ĠP g Page Layout Ġ{ ĊĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 2 0 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Alignment Ġ= ĠAlignment . Center ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Focus Request Ġ= Ġremember Ġ{ ĠFocus Request er () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEmail Field ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġstate . email , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Error Ġ= Ġstate . show Email Invalid Error , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Email Changed Ġ= Ġon Email Changed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon I me Action Ġ= Ġ{ Ġpassword Focus Request . request Focus () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Label Ġ= Ġ{ ĠTextField Error ( string Resource ( R . string . login _ email _ invalid )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 8 . dp )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPassword Field ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġstate . password , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . focus Request er ( password Focus Request ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Password Changed Ġ= Ġon Password Changed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon I me Action Ġ= Ġon Password I me Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 1 6 . dp )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP g Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġstate . can Login (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= ĠonClick Login ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĠText ( text Ġ= Ġstring Resource ( R . string . login _ login ), Ġcolor Ġ= ĠColor . White ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠEmail Field ( ĊĠĠĠ Ġemail : ĠString , ĊĠĠĠ Ġis Error : ĠBoolean , ĊĠĠĠ Ġon Email Changed : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon I me Action : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġerror Label : Ġ@ Composable Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ ĠP g TextField ( ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġemail , ĊĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ Ġon Email Changed ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġplaceholder Value Ġ= Ġstring Resource ( R . string . login _ email ), ĊĠĠĠĠĠĠĠ Ġis Error Ġ= Ġis Error , ĊĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options . Default . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Action Ġ= ĠI me Action . Next , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Type Ġ= ĠKeyboard Type . Email ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġkeyboard Actions Ġ= ĠKeyboard Actions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Next Ġ= Ġ{ Ġon I me Action () Ġ} ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġif Ġ( error Label Ġ!= Ġnull Ġ&& Ġis Error ) Ġ{ ĊĠĠĠĠĠĠĠ Ġerror Label () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠTextField Error ( text Error : ĠString ) Ġ{ ĊĠĠĠ ĠRow ( modifier Ġ= ĠModifier . fill Max Width ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . width ( 1 6 . dp )) ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext Error , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠLocal TextStyle . current . copy ( color Ġ= ĠMaterial Theme . color Scheme . error ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠPassword Field ( ĊĠĠĠ Ġpassword : ĠString , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġon Password Changed : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon I me Action : Ġ() Ġ-> ĠUnit , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġshow Password Ġ= Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĊĠĠĠ ĠP g TextField ( ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġpassword , ĊĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ Ġon Password Changed ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . fill Max Width (), ĊĠĠĠĠĠĠĠ Ġplaceholder Value Ġ= Ġstring Resource ( id Ġ= ĠR . string . login _ password ), ĊĠĠĠĠĠĠĠ Ġtrailing Icon Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġ{ Ġshow Password . value Ġ= Ġ! show Password . value Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcon ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Vector Ġ= Ġif Ġ( show Password . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Filled . Visibility ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Filled . Visibility Off ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġstring Resource ( id Ġ= ĠR . string . login _ password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġvisual Transformation Ġ= Ġif Ġ( show Password . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVisual Transformation . None ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPassword Visual Transformation () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options . Default . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Action Ġ= ĠI me Action . Done , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Type Ġ= ĠKeyboard Type . Password ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġkeyboard Actions Ġ= ĠKeyboard Actions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Done Ġ= Ġ{ Ġon I me Action () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ } Ċ