package dev.inmo.jsuikit.modifiers import dev.inmo.jsuikit.utils.Attrs import org.jetbrains.compose.web.attributes.AttrsScope import org.jetbrains.compose.web.dom.AttrBuilderContext import org.w3c.dom.Element interface UIKitModifier { val classes: Array get() = emptyArray() val otherAttrs: Map get() = emptyMap() } fun AttrsScope<*>.include(vararg container: UIKitModifier?) { container.forEach { it ?.classes ?.let { newClasses -> classes(*newClasses) } it ?.otherAttrs ?.let { attrs -> attrs.forEach { (k, v) -> attr(k, v) } } } } fun UIKitModifier.asAttributesBuilder(): AttrBuilderContext = { include(this@asAttributesBuilder) } operator fun UIKitModifier.plus(other: UIKitModifier): UIKitModifier = UIKitCustom( classes + other.classes, otherAttrs + other.otherAttrs ) fun UIKitModifier?.builder() = Attrs(this).builder fun Array.builder() = Attrs(*this).builder inline fun attrsBuilder(vararg modifiers: UIKitModifier?) = modifiers.builder() @JsName("plusBuilder") operator fun UIKitModifier?.plus(other: UIKitModifier?): AttrBuilderContext = Attrs(this@plus, other).builder