package dev.inmo.jsuikit.elements import androidx.compose.runtime.Composable import androidx.compose.runtime.snapshots.SnapshotStateList import dev.inmo.jsuikit.buildAndAddAttribute import dev.inmo.jsuikit.modifiers.* import dev.inmo.jsuikit.utils.Milliseconds import org.jetbrains.compose.web.dom.* import org.jetbrains.compose.web.dom.Text import org.w3c.dom.* @Composable fun Nav( vararg modifiers: UIKitModifier, multiple: Boolean? = null, collapsible: Boolean? = null, animation: UIKitAnimation? = null, duration: Milliseconds? = null, attributesCustomizer: AttrBuilderContext = {}, dataAllocator: ContentBuilder ) { Ul( { buildAndAddAttribute("uk-nav") { "multiple" to multiple ?.toString() "collapsible" to collapsible ?.toString() "animation" to animation "duration" to duration ?.toString() } classes("uk-nav") include(*modifiers) attributesCustomizer() } ) { dataAllocator() } } @Composable fun Nav( title: String, data: SnapshotStateList, vararg ulModifiers: UIKitModifier, titleModifiers: Array = emptyArray(), multiple: Boolean? = null, collapsible: Boolean? = null, animation: UIKitAnimation? = null, duration: Milliseconds? = null, besidesTitleAndList: ContentBuilder? = null, titleCustomizer: AttrBuilderContext = {}, ulCustomizer: AttrBuilderContext = {}, elementAllocator: @Composable ElementScope.(T) -> Unit ) { Ul( { buildAndAddAttribute("uk-nav") { "multiple" to multiple ?.toString() "collapsible" to collapsible ?.toString() "animation" to animation "duration" to duration ?.toString() } classes("uk-nav") include(*ulModifiers) ulCustomizer() } ) { NavHeader( title, *titleModifiers, attributesCustomizer = titleCustomizer ) besidesTitleAndList ?.let { it() } data.forEach { elementAllocator(it) } } } @Composable fun NavHeader( text: String, vararg modifiers: UIKitModifier, attributesCustomizer: AttrBuilderContext = {}, ) { Li( { include(*modifiers, UIKitNav.Header) attributesCustomizer() } ) { Text(text) } } @Composable fun NavElement( vararg modifiers: UIKitModifier, attributesCustomizer: AttrBuilderContext = {}, contentAllocator: ContentBuilder ) { Li( { include(*modifiers) attributesCustomizer() } ) { contentAllocator() } } @Composable fun NavDivider() { Li({ include(UIKitNav.Divider) }) }