diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleBuilder.kt b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleBuilder.kt index 4bc8a20907..f8b9ebaae0 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleBuilder.kt +++ b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/css/StyleBuilder.kt @@ -7,9 +7,7 @@ package org.jetbrains.compose.web.css -import org.jetbrains.compose.web.internal.runtime.DomElementWrapper import org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi -import org.w3c.dom.css.CSSStyleDeclaration import kotlin.properties.ReadOnlyProperty /** diff --git a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Base.kt b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Base.kt index b00eef957e..200613ce68 100644 --- a/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Base.kt +++ b/web/core/src/jsMain/kotlin/org/jetbrains/compose/web/elements/Base.kt @@ -4,8 +4,9 @@ import androidx.compose.runtime.* import org.jetbrains.compose.web.attributes.AttrsBuilder import org.jetbrains.compose.web.ExperimentalComposeWebApi import org.jetbrains.compose.web.css.StyleHolder -import org.jetbrains.compose.web.internal.runtime.DomElementWrapper import org.jetbrains.compose.web.internal.runtime.ComposeWebInternalApi +import org.jetbrains.compose.web.internal.runtime.DomNodeWrapper +import org.jetbrains.compose.web.internal.runtime.NamedEventListener import org.w3c.dom.Element import org.w3c.dom.HTMLElement import org.w3c.dom.css.ElementCSSInlineStyle @@ -35,44 +36,57 @@ private inline fun ComposeDomNode( currentComposer.endNode() } +@ComposeWebInternalApi +private class DomElementWrapper(override val node: Element): DomNodeWrapper(node) { + private var currentListeners = emptyList() -@OptIn(ComposeWebInternalApi::class) -private fun DomElementWrapper.updateProperties(applicators: List Unit, Any>>) { - node.removeAttribute("class") + fun updateEventListeners(list: List) { + currentListeners.forEach { + node.removeEventListener(it.name, it) + } - applicators.forEach { (applicator, item) -> - applicator(node, item) + currentListeners = list + + currentListeners.forEach { + node.addEventListener(it.name, it) + } } -} -@OptIn(ComposeWebInternalApi::class) -private fun DomElementWrapper.updateStyleDeclarations(styleApplier: StyleHolder) { - when (node) { - is HTMLElement, is SVGElement -> { - node.removeAttribute("style") + fun updateProperties(applicators: List Unit, Any>>) { + node.removeAttribute("class") + + applicators.forEach { (applicator, item) -> + applicator(node, item) + } + } - val style = node.unsafeCast().style + fun updateStyleDeclarations(styleApplier: StyleHolder) { + when (node) { + is HTMLElement, is SVGElement -> { + node.removeAttribute("style") - styleApplier.properties.forEach { (name, value) -> - style.setProperty(name, value.toString()) - } + val style = node.unsafeCast().style - styleApplier.variables.forEach { (name, value) -> - style.setProperty(name, value.toString()) + styleApplier.properties.forEach { (name, value) -> + style.setProperty(name, value.toString()) + } + + styleApplier.variables.forEach { (name, value) -> + style.setProperty(name, value.toString()) + } } } } -} -@OptIn(ComposeWebInternalApi::class) -fun DomElementWrapper.updateAttrs(attrs: Map) { - node.getAttributeNames().forEach { name -> - if (name == "style") return@forEach - node.removeAttribute(name) - } + fun updateAttrs(attrs: Map) { + node.getAttributeNames().forEach { name -> + if (name == "style") return@forEach + node.removeAttribute(name) + } - attrs.forEach { - node.setAttribute(it.key, it.value) + attrs.forEach { + node.setAttribute(it.key, it.value) + } } } diff --git a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/DomApplier.kt b/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/DomApplier.kt index bef7baf0cb..16a3ce7be4 100644 --- a/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/DomApplier.kt +++ b/web/internal-web-core-runtime/src/jsMain/kotlin/org/jetbrains/compose/web/internal/runtime/DomApplier.kt @@ -71,21 +71,4 @@ open class DomNodeWrapper(open val node: Node) { node.insertBefore(child, node.childNodes[toIndex]!!) } } -} - -@ComposeWebInternalApi -class DomElementWrapper(override val node: Element): DomNodeWrapper(node) { - private var currentListeners = emptyList() - - fun updateEventListeners(list: List) { - currentListeners.forEach { - node.removeEventListener(it.name, it) - } - - currentListeners = list - - currentListeners.forEach { - node.addEventListener(it.name, it) - } - } -} +} \ No newline at end of file