mirror of
https://github.com/InsanusMokrassar/JSUIKitKBindings.git
synced 2024-06-02 07:55:17 +00:00
47 lines
1.6 KiB
Kotlin
47 lines
1.6 KiB
Kotlin
|
package dev.inmo.jsuikit.elements
|
||
|
|
||
|
import androidx.compose.runtime.Composable
|
||
|
import dev.inmo.jsuikit.modifiers.UIKitTab
|
||
|
import dev.inmo.jsuikit.modifiers.include
|
||
|
import dev.inmo.jsuikit.utils.optionallyDraw
|
||
|
import org.jetbrains.compose.web.attributes.AttrsScope
|
||
|
import org.jetbrains.compose.web.dom.*
|
||
|
import org.w3c.dom.HTMLLIElement
|
||
|
import org.w3c.dom.HTMLUListElement
|
||
|
|
||
|
@Composable
|
||
|
fun <T> Tabs(
|
||
|
data: Iterable<T>,
|
||
|
tabsItemBuilder: @Composable ElementScope<HTMLLIElement>.(i: Int, data: T) -> Unit,
|
||
|
tabsItemAttrs: AttrsScope<HTMLLIElement>.(i: Int, data: T) -> Unit = { _, _ -> },
|
||
|
tabsContainerAttrs: AttrsScope<HTMLUListElement>.() -> Unit = {},
|
||
|
contentContainerAttrs: (AttrsScope<HTMLUListElement>.() -> Unit)? = null,
|
||
|
contentItemAttrs: (AttrsScope<HTMLLIElement>.(i: Int, data: T) -> Unit)? = null,
|
||
|
contentItemBuilder: (@Composable ElementScope<HTMLLIElement>.(i: Int, data: T) -> Unit)? = null
|
||
|
) {
|
||
|
Ul({
|
||
|
include(UIKitTab);
|
||
|
tabsContainerAttrs()
|
||
|
}) {
|
||
|
data.forEachIndexed { i, data ->
|
||
|
Li({ tabsItemAttrs(i, data) }) {
|
||
|
tabsItemBuilder(i, data)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
optionallyDraw(contentItemAttrs != null, contentItemBuilder != null, contentContainerAttrs != null) {
|
||
|
Ul({
|
||
|
contentContainerAttrs ?.invoke(this)
|
||
|
}) {
|
||
|
optionallyDraw(contentItemAttrs != null, contentItemBuilder != null) {
|
||
|
data.forEachIndexed { i, data ->
|
||
|
Li({ contentItemAttrs ?.invoke(this, i, data) }) {
|
||
|
contentItemBuilder ?.invoke(this, i, data)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|