in html/core/src/jsMain/kotlin/org/jetbrains/compose/web/dom/Elements.kt [751:783]
fun TextArea(
value: String? = null,
attrs: (TextAreaAttrsScope.() -> Unit)? = null
) {
// if firstProvidedValueWasNotNull then TextArea behaves as controlled input
val firstProvidedValueWasNotNull = remember { value != null }
// changes to this key trigger [textAreaRestoreControlledStateEffect]
val keyForRestoringControlledState: MutableState<Int> = remember { mutableStateOf(0) }
TagElement(
elementBuilder = TextArea,
applyAttrs = {
val textAreaAttrsBuilder = TextAreaAttrsScope(this)
textAreaAttrsBuilder.onInput {
// controlled state needs to be restored after every input
keyForRestoringControlledState.value = keyForRestoringControlledState.value + 1
}
if (attrs != null) {
textAreaAttrsBuilder.attrs()
}
if (firstProvidedValueWasNotNull) {
textAreaAttrsBuilder.value(value ?: "")
}
},
content = {
DisposableEffect(keyForRestoringControlledState.value) {
restoreControlledTextAreaState(element = scopeElement)
onDispose { }
}
}
)
}