mirror of
https://github.com/InsanusMokrassar/JSUIKitKBindings.git
synced 2024-06-01 23:45:12 +00:00
90 lines
2.9 KiB
Kotlin
90 lines
2.9 KiB
Kotlin
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 <T> Accordion(
|
|
data: Iterable<T>,
|
|
attrs: Attrs<HTMLUListElement> = Attrs.empty(),
|
|
itemAttrsBuilder: AttrsScope<HTMLLIElement>.(Int, T) -> Unit = { _, _ -> },
|
|
itemContentBuilder: @Composable ElementScope<HTMLLIElement>.(Int, T) -> Unit
|
|
) {
|
|
Ul(
|
|
{
|
|
include(UIKitAccordion)
|
|
attrs.builder(this)
|
|
}
|
|
) {
|
|
data.forEachIndexed { i, t ->
|
|
Li({ itemAttrsBuilder(i, t) }) {
|
|
itemContentBuilder(i, t)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
fun <T> DefaultAccordion(
|
|
data: Iterable<T>,
|
|
attrs: Attrs<HTMLUListElement> = Attrs.empty(),
|
|
itemAttrsBuilder: AttrsScope<HTMLLIElement>.(Int, T) -> Unit = { _, _ -> },
|
|
titleAttrsBuilder: AttrsScope<HTMLAnchorElement>.(Int, T) -> Unit = { _, _ -> },
|
|
titleContentBuilder: @Composable ElementScope<HTMLAnchorElement>.(Int, T) -> Unit = { _, _ -> },
|
|
beforeTitleContentBuilder: @Composable ElementScope<HTMLLIElement>.(Int, T) -> Unit = { _, _ -> },
|
|
afterTitleContentBuilder: @Composable ElementScope<HTMLLIElement>.(Int, T) -> Unit = { _, _ -> },
|
|
afterContentContentBuilder: @Composable ElementScope<HTMLLIElement>.(Int, T) -> Unit = { _, _ -> },
|
|
contentAttrsBuilder: AttrsScope<HTMLDivElement>.(Int, T) -> Unit = { _, _ -> },
|
|
contentContentBuilder: @Composable ElementScope<HTMLDivElement>.(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 <T> DefaultAccordion(
|
|
data: Iterable<T>,
|
|
titleResolver: (Int, T) -> String,
|
|
attrs: Attrs<HTMLUListElement> = Attrs.empty(),
|
|
itemAttrsBuilder: AttrsScope<HTMLLIElement>.(Int, T) -> Unit = { _, _ -> },
|
|
titleAttrsBuilder: AttrsScope<HTMLAnchorElement>.(Int, T) -> Unit = { _, _ -> },
|
|
contentAttrsBuilder: AttrsScope<HTMLDivElement>.(Int, T) -> Unit = { _, _ -> },
|
|
contentContentBuilder: @Composable ElementScope<HTMLDivElement>.(Int, T) -> Unit
|
|
) = DefaultAccordion(
|
|
data,
|
|
attrs,
|
|
itemAttrsBuilder,
|
|
titleAttrsBuilder,
|
|
{ i, t ->
|
|
org.jetbrains.compose.web.dom.Text(titleResolver(i, t))
|
|
},
|
|
contentAttrsBuilder = contentAttrsBuilder,
|
|
contentContentBuilder = contentContentBuilder
|
|
)
|