mirror of
https://github.com/InsanusMokrassar/JSUIKitKBindings.git
synced 2025-12-18 04:05:44 +00:00
Grid support improvement; Article, Iconnav and Leader support
This commit is contained in:
57
src/jsMain/kotlin/dev/inmo/jsuikit/elements/Article.kt
Normal file
57
src/jsMain/kotlin/dev/inmo/jsuikit/elements/Article.kt
Normal file
@@ -0,0 +1,57 @@
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.modifiers.UIKitArticle
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import dev.inmo.jsuikit.utils.Attrs
|
||||
import dev.inmo.jsuikit.utils.optionallyDraw
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.jetbrains.compose.web.dom.Text
|
||||
import org.w3c.dom.*
|
||||
|
||||
@Composable
|
||||
fun UIKitArticleElement (
|
||||
headerBuilder: ContentBuilder<HTMLHeadingElement>,
|
||||
headerAttrs: Attrs<HTMLHeadingElement> = Attrs.empty(),
|
||||
metaBuilder: ContentBuilder<HTMLParagraphElement>? = null,
|
||||
metaAttrs: Attrs<HTMLParagraphElement>? = null,
|
||||
otherContentBuilder: ContentBuilder<HTMLElement>
|
||||
) = Article(
|
||||
{
|
||||
include(UIKitArticle)
|
||||
}
|
||||
) {
|
||||
H1(
|
||||
{
|
||||
include(UIKitArticle.Title)
|
||||
headerAttrs.builder(this)
|
||||
},
|
||||
headerBuilder
|
||||
)
|
||||
optionallyDraw(metaAttrs, metaBuilder) {
|
||||
P(
|
||||
{
|
||||
include(UIKitArticle.Meta)
|
||||
metaAttrs ?.builder ?.invoke(this)
|
||||
},
|
||||
metaBuilder ?: {}
|
||||
)
|
||||
}
|
||||
|
||||
otherContentBuilder()
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun UIKitArticleElement (
|
||||
header: String,
|
||||
meta: String? = null,
|
||||
otherContentBuilder: ContentBuilder<HTMLElement>
|
||||
) = UIKitArticleElement(
|
||||
{ Text(header) },
|
||||
metaBuilder = meta ?.let {
|
||||
{
|
||||
Text(meta)
|
||||
}
|
||||
},
|
||||
otherContentBuilder = otherContentBuilder
|
||||
)
|
||||
@@ -1,8 +1,8 @@
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.modifiers.UIKitModifier
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import dev.inmo.jsuikit.modifiers.*
|
||||
import dev.inmo.jsuikit.utils.buildAttribute
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLDivElement
|
||||
|
||||
@@ -26,23 +26,18 @@ fun GridColumn(
|
||||
fun Grid(
|
||||
vararg modifiers: UIKitModifier,
|
||||
masonry: Boolean = false,
|
||||
parallax: Int? = null,
|
||||
marginClass: String? = null,
|
||||
parallax: UInt? = null,
|
||||
marginClass: UIKitMargin? = null,
|
||||
firstColumnClass: String? = null,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLDivElement> = {},
|
||||
builder: @Composable ElementScope<HTMLDivElement>.() -> Unit = {}
|
||||
builder: ContentBuilder<HTMLDivElement> = {}
|
||||
) {
|
||||
val attrs = listOfNotNull(
|
||||
if (masonry) "masonry" to "true" else null,
|
||||
parallax ?.let { "parallax" to it.toString() },
|
||||
marginClass ?.let { "margin" to it },
|
||||
firstColumnClass ?.let { "first-column" to it },
|
||||
)
|
||||
Div(
|
||||
{
|
||||
attr("uk-grid", attrs.joinToString(";") { (k, v) -> "$k: $v" })
|
||||
classes("uk-grid")
|
||||
include(*modifiers)
|
||||
include(
|
||||
UIKitGrid.invoke(marginClass, firstColumnClass, masonry, parallax),
|
||||
*modifiers
|
||||
)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
|
||||
33
src/jsMain/kotlin/dev/inmo/jsuikit/elements/Iconnav.kt
Normal file
33
src/jsMain/kotlin/dev/inmo/jsuikit/elements/Iconnav.kt
Normal file
@@ -0,0 +1,33 @@
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.modifiers.UIKitIconnav
|
||||
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.HTMLLIElement
|
||||
import org.w3c.dom.HTMLUListElement
|
||||
|
||||
@Composable
|
||||
fun <T> Iconnav(
|
||||
data: Iterable<T>,
|
||||
listAttrs: Attrs<HTMLUListElement> = Attrs.empty(),
|
||||
elementAttrsBuilder: AttrsScope<HTMLLIElement>.(T) -> Unit = {},
|
||||
elementBuilder: @Composable ElementScope<HTMLLIElement>.(T) -> Unit
|
||||
) {
|
||||
Ul(
|
||||
{
|
||||
include(UIKitIconnav)
|
||||
listAttrs.builder(this)
|
||||
}
|
||||
) {
|
||||
data.forEach {
|
||||
Li(
|
||||
{
|
||||
elementAttrsBuilder.invoke(this, it)
|
||||
}
|
||||
) { elementBuilder(this, it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user