package dev.inmo.jsuikit.elements import androidx.compose.runtime.Composable import dev.inmo.jsuikit.modifiers.* import dev.inmo.jsuikit.utils.* 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 NavbarNav( elements: List>, attrs: Attrs = Attrs.empty() ) { Ul( { include(UIKitNavbar.Nav) attrs.builder(this) } ) { elements.forEach { element -> Li(element.attributesBuilderContext, element.builder) } } } @Composable fun NavbarNav( vararg elements: AttrsWithContentBuilder, attrs: Attrs = Attrs.empty() ) = NavbarNav(elements.toList(), attrs) @Deprecated("Will be removed soon. Use NavbarNavPart with AttrsWithContentBuilder instead") interface NavbarNavElement { fun AttrsScope.setup() {} @Composable fun ElementScope.fill() class Default( private val setupCallback: AttrsScope.() -> Unit, private val fillCallback: @Composable ElementScope.() -> Unit ) : NavbarNavElement { override fun AttrsScope.setup() { setupCallback() } @Composable override fun ElementScope.fill() { fillCallback() } } } @Deprecated("Will be removed soon. Use NavbarNavPart with AttrsWithContentBuilder instead") class NavbarNavBuilder( private val modifiers: Array, private val elements: List, private val attributesCustomizer: AttrBuilderContext = {} ) { constructor( modifiers: Array, vararg elements: NavbarNavElement, attributesCustomizer: AttrBuilderContext = {} ) : this(modifiers, elements.toList(), attributesCustomizer) constructor( vararg elements: NavbarNavElement, attributesCustomizer: AttrBuilderContext = {} ) : this(emptyArray(), elements.toList(), attributesCustomizer) @Composable fun draw() { Ul( { include(UIKitNavbar.Nav, *modifiers) attributesCustomizer() } ) { elements.forEach { element -> Li( { element.apply { setup() } } ) { element.apply { fill() } } } } } }