package Ġcom . pub n ub . components . chat . ui . component . channel Ċ Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . Lazy Item Scope Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . foundation . lazy . remember Lazy List State Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . semantics . content Description Ċ import Ġandroidx . compose . ui . semantics . semantics Ċ import Ġandroidx . paging . Paging Data Ċ import Ġandroidx . paging . compose . collect As Lazy Paging Items Ċ import Ġandroidx . paging . compose . items Ċ import Ġcom . pub n ub . components . chat . ui . R Ċ import Ġcom . pub n ub . components . chat . ui . component . channel . renderer . Channel Renderer Ċ import Ġcom . pub n ub . components . chat . ui . component . channel . renderer . Default Channel Renderer Ċ import Ġcom . pub n ub . components . chat . ui . component . provider . Local Pub N ub Ċ import Ġkotlinx . coroutines . flow . Flow Ċ Ċ @ Composable Ċ fun ĠChannel List ( ĊĠĠĠ Ġchannels : ĠList < Channel Ui . Data >, ĊĠĠĠ Ġon Selected : Ġ( Channel Ui . Data ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġon Leave : Ġ(( Channel Ui . Data ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġheader : Ġ@ Composable Ġ( Lazy Item Scope ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġfooter : Ġ@ Composable Ġ( Lazy Item Scope ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġrenderer : ĠChannel Renderer Ġ= ĠDefault Channel Renderer , Ċ ) Ġ{ ĊĠĠĠ ĠChannel List ( ĊĠĠĠĠĠĠĠ Ġchannels Ġ= Ġmap Of ( null Ġto Ġchannels ), ĊĠĠĠĠĠĠĠ Ġon Selected Ġ= Ġon Selected , ĊĠĠĠĠĠĠĠ Ġon Leave Ġ= Ġon Leave , ĊĠĠĠĠĠĠĠ Ġheader Ġ= Ġheader , ĊĠĠĠĠĠĠĠ Ġfooter Ġ= Ġfooter , ĊĠĠĠĠĠĠĠ Ġrenderer Ġ= Ġrenderer , ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Opt In ( Experimental Foundation Api :: class ) Ċ @ Composable Ċ fun ĠChannel List ( ĊĠĠĠ Ġchannels : ĠMap < String ?, ĠList < Channel Ui . Data >>, ĊĠĠĠ Ġon Selected : Ġ( Channel Ui . Data ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġon Add : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġon Leave : Ġ(( Channel Ui . Data ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġheader : Ġ@ Composable Ġ( Lazy Item Scope ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġfooter : Ġ@ Composable Ġ( Lazy Item Scope ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġrenderer : ĠChannel Renderer Ġ= ĠDefault Channel Renderer , Ċ ) Ġ{ ĊĠĠĠ ĠcheckNotNull ( Local Pub N ub . current ) ĊĊĠĠĠ Ġval Ġtheme Ġ= ĠLocal Channel List Theme . current ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĊĠĠĠ ĠBox ( modifier Ġ= Ġtheme . modifier ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlazy List State Ġ= Ġremember Lazy List State ( initial First Visible Item Index Ġ= Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠLazy Column ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġlazy List State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . semantics Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġcontext . getString ( R . string . channel _ list ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchannels . forEach Ġ{ Ġ( header , Ġlist ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . render Separator ( this , Ġheader , Ġon Add ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( list ) Ġ{ Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġchannel . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġchannel . description !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Url Ġ= Ġchannel . profile Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġon Selected ( channel ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Leave Ġ= Ġon Leave ?. run Ġ{ Ġ{ Ġon Leave ( channel ) Ġ} Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfooter ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠChannel List ( ĊĠĠĠ Ġchannels : ĠFlow < Paging Data < Channel Ui >>, ĊĠĠĠ Ġon Selected : Ġ( Channel Ui . Data ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġon Add : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġon Leave : Ġ(( Channel Ui . Data ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġheader : Ġ@ Composable Ġ( Lazy Item Scope ) Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġfooter : Ġ@ Composable Ġ( Lazy Item Scope ) Ġ-> ĠUnit Ġ= Ġ{ Ġ_: ĠLazy Item Scope Ġ-> Ġ}, ĊĠĠĠ Ġrenderer : ĠChannel Renderer Ġ= ĠDefault Channel Renderer , Ċ ) Ġ{ ĊĠĠĠ ĠcheckNotNull ( Local Pub N ub . current ) ĊĊĠĠĠ Ġval Ġtheme Ġ= ĠLocal Channel List Theme . current ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĊĠĠĠ Ġ// ĠScroll Ġwith Ġpag inated Ġchannels ? ĊĠĠĠ Ġval Ġlazy Items Ġ= Ġchannels . collect As Lazy Paging Items () ĊĠĠĠ ĠBox ( modifier Ġ= Ġtheme . modifier ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlazy List State Ġ= Ġremember Lazy List State ( initial First Visible Item Index Ġ= Ġ 0 ) ĊĊĠĠĠĠĠĠĠ ĠLazy Column ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġlazy List State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . semantics Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġcontext . getString ( R . string . channel _ list ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( lazy Items ) Ġ{ Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( channel Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . Placeholder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ items ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( channel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChannel Ui . Header Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . Separator ( title Ġ= Ġchannel . title , ĠonClick Ġ= Ġon Add ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠChannel Ui . Data Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrenderer . Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġchannel . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġchannel . description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Url Ġ= Ġchannel . profile Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġon Selected ( channel ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Leave Ġ= Ġon Leave ?. run Ġ{ Ġ{ Ġon Leave ( channel ) Ġ} Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfooter ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }