package dev.inmo.jsuikit.elements import androidx.compose.runtime.Composable import dev.inmo.jsuikit.modifiers.UIKitAccordion import dev.inmo.jsuikit.modifiers.include import dev.inmo.jsuikit.utils.Attrs import org.jetbrains.compose.web.attributes.AttrsScope import org.jetbrains.compose.web.dom.* import org.w3c.dom.* @Composable fun Accordion( data: Iterable, attrs: Attrs = Attrs.empty(), itemAttrsBuilder: AttrsScope.(Int, T) -> Unit = { _, _ -> }, itemContentBuilder: @Composable ElementScope.(Int, T) -> Unit ) { Ul( { include(UIKitAccordion) attrs.builder(this) } ) { data.forEachIndexed { i, t -> Li({ itemAttrsBuilder(i, t) }) { itemContentBuilder(i, t) } } } } @Composable fun DefaultAccordion( data: Iterable, attrs: Attrs = Attrs.empty(), itemAttrsBuilder: AttrsScope.(Int, T) -> Unit = { _, _ -> }, titleAttrsBuilder: AttrsScope.(Int, T) -> Unit = { _, _ -> }, titleContentBuilder: @Composable ElementScope.(Int, T) -> Unit = { _, _ -> }, beforeTitleContentBuilder: @Composable ElementScope.(Int, T) -> Unit = { _, _ -> }, afterTitleContentBuilder: @Composable ElementScope.(Int, T) -> Unit = { _, _ -> }, afterContentContentBuilder: @Composable ElementScope.(Int, T) -> Unit = { _, _ -> }, contentAttrsBuilder: AttrsScope.(Int, T) -> Unit = { _, _ -> }, contentContentBuilder: @Composable ElementScope.(Int, T) -> Unit ) = Accordion( data, attrs, itemAttrsBuilder ) { i, t -> beforeTitleContentBuilder(i, t) A( attrs = { include(UIKitAccordion.Title) titleAttrsBuilder(i, t) } ) { titleContentBuilder(i, t) } afterTitleContentBuilder(i, t) Div( { include(UIKitAccordion.Content) contentAttrsBuilder(i, t) } ) { contentContentBuilder(i, t) } afterContentContentBuilder(i, t) } @Composable fun DefaultAccordion( data: Iterable, titleResolver: (Int, T) -> String, attrs: Attrs = Attrs.empty(), itemAttrsBuilder: AttrsScope.(Int, T) -> Unit = { _, _ -> }, titleAttrsBuilder: AttrsScope.(Int, T) -> Unit = { _, _ -> }, contentAttrsBuilder: AttrsScope.(Int, T) -> Unit = { _, _ -> }, contentContentBuilder: @Composable ElementScope.(Int, T) -> Unit ) = DefaultAccordion( data, attrs, itemAttrsBuilder, titleAttrsBuilder, { i, t -> org.jetbrains.compose.web.dom.Text(titleResolver(i, t)) }, contentAttrsBuilder = contentAttrsBuilder, contentContentBuilder = contentContentBuilder )