package dev.inmo.jsuikit.defaults import androidx.compose.runtime.Composable import dev.inmo.jsuikit.defaults.modifers.UIKitModifier import dev.inmo.jsuikit.defaults.modifers.include import org.jetbrains.compose.web.attributes.AttrsBuilder import org.jetbrains.compose.web.dom.* import org.w3c.dom.HTMLLIElement interface NavbarNavElement { fun AttrsBuilder.setup() {} @Composable fun ElementScope.fill() class Default( private val setupCallback: AttrsBuilder.() -> Unit, private val fillCallback: @Composable ElementScope.() -> Unit ) : NavbarNavElement { override fun AttrsBuilder.setup() { setupCallback() } @Composable override fun ElementScope.fill() { fillCallback() } } } class NavbarNavBuilder( private val modifiers: Array, private val elements: List ) { constructor( modifiers: Array, vararg elements: NavbarNavElement ) : this(modifiers, elements.toList()) constructor( vararg elements: NavbarNavElement ) : this(emptyArray(), elements.toList()) @Composable fun draw() { Ul( { classes("uk-navbar-nav") include(*modifiers) } ) { elements.forEach { element -> Li( { element.apply { setup() } } ) { element.apply { fill() } } } } } }