fun TagElement()

in html/core/src/jsMain/kotlin/org/jetbrains/compose/web/dom/Base.kt [107:149]


fun <TElement : Element> TagElement(
    elementBuilder: ElementBuilder<TElement>,
    applyAttrs: (AttrsScope<TElement>.() -> Unit)?,
    content: (@Composable ElementScope<TElement>.() -> Unit)?
) {
    val scope = remember {  ElementScopeImpl<TElement>() }
    var refEffect: (DisposableEffectScope.(TElement) -> DisposableEffectResult)? = null

    ComposeDomNode<ElementScope<TElement>, DomElementWrapper>(
        factory = {
            val node = elementBuilder.create()
            scope.element = node
            DomElementWrapper(node)
        },
        attrsSkippableUpdate = {
            val attrsScope = AttrsScopeBuilder<TElement>()
            applyAttrs?.invoke(attrsScope)

            refEffect = attrsScope.refEffect

            update {
                set(attrsScope.classes, DomElementWrapper::updateClasses)
                set(attrsScope.styleScope, DomElementWrapper::updateStyleDeclarations)
                set(attrsScope.collect(), DomElementWrapper::updateAttrs)
                set(
                    attrsScope.eventsListenerScopeBuilder.collectListeners(),
                    DomElementWrapper::updateEventListeners
                )
                set(attrsScope.propertyUpdates, DomElementWrapper::updateProperties)
            }
        },
        elementScope = scope,
        content = {
            content?.invoke(this)
        }
    )

    refEffect?.let { effect ->
        DisposableEffect(null) {
            effect.invoke(this, scope.element)
        }
    }
}