diff --git a/benchmarks/desktop/gradle/wrapper/gradle-wrapper.properties b/benchmarks/desktop/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/benchmarks/desktop/gradle/wrapper/gradle-wrapper.properties
+++ b/benchmarks/desktop/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/benchmarks/showcases/LazyGridImageView/gradle/wrapper/gradle-wrapper.properties b/benchmarks/showcases/LazyGridImageView/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/benchmarks/showcases/LazyGridImageView/gradle/wrapper/gradle-wrapper.properties
+++ b/benchmarks/showcases/LazyGridImageView/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/benchmarks/showcases/LazyGridImageView/nativeAndroidApp/gradle/wrapper/gradle-wrapper.properties b/benchmarks/showcases/LazyGridImageView/nativeAndroidApp/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/benchmarks/showcases/LazyGridImageView/nativeAndroidApp/gradle/wrapper/gradle-wrapper.properties
+++ b/benchmarks/showcases/LazyGridImageView/nativeAndroidApp/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/ci/build-helpers/gradle/wrapper/gradle-wrapper.properties b/ci/build-helpers/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/ci/build-helpers/gradle/wrapper/gradle-wrapper.properties
+++ b/ci/build-helpers/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/ci/compose-uber-jar/gradle.properties b/ci/compose-uber-jar/gradle.properties
index e81439f809a..9fafebe5706 100644
--- a/ci/compose-uber-jar/gradle.properties
+++ b/ci/compose-uber-jar/gradle.properties
@@ -1,2 +1,2 @@
-compose.version=1.12.0
+compose.version=1.13.0-beta01
kotlin.code.style=official
diff --git a/ci/compose-uber-jar/gradle/wrapper/gradle-wrapper.properties b/ci/compose-uber-jar/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/ci/compose-uber-jar/gradle/wrapper/gradle-wrapper.properties
+++ b/ci/compose-uber-jar/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/ci/delete-packages-from-space/gradle/wrapper/gradle-wrapper.properties b/ci/delete-packages-from-space/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/ci/delete-packages-from-space/gradle/wrapper/gradle-wrapper.properties
+++ b/ci/delete-packages-from-space/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/ci/templates/desktop-template/gradle.properties b/ci/templates/desktop-template/gradle.properties
index e25a368d1d2..20e357ad4f2 100644
--- a/ci/templates/desktop-template/gradle.properties
+++ b/ci/templates/desktop-template/gradle.properties
@@ -1,4 +1,4 @@
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
kotlin.code.style=official
-kotlin.version=2.4.20
-compose.version=1.12.0
+kotlin.version=2.5.0-Beta1
+compose.version=1.13.0-beta01
diff --git a/ci/templates/desktop-template/gradle/wrapper/gradle-wrapper.properties b/ci/templates/desktop-template/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/ci/templates/desktop-template/gradle/wrapper/gradle-wrapper.properties
+++ b/ci/templates/desktop-template/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/ci/templates/html-library-template/gradle.properties b/ci/templates/html-library-template/gradle.properties
index e25a368d1d2..20e357ad4f2 100644
--- a/ci/templates/html-library-template/gradle.properties
+++ b/ci/templates/html-library-template/gradle.properties
@@ -1,4 +1,4 @@
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
kotlin.code.style=official
-kotlin.version=2.4.20
-compose.version=1.12.0
+kotlin.version=2.5.0-Beta1
+compose.version=1.13.0-beta01
diff --git a/ci/templates/html-library-template/gradle/wrapper/gradle-wrapper.properties b/ci/templates/html-library-template/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/ci/templates/html-library-template/gradle/wrapper/gradle-wrapper.properties
+++ b/ci/templates/html-library-template/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/ci/templates/maven-test-project/pom.xml b/ci/templates/maven-test-project/pom.xml
index cfb2273efdd..2fc54e22dbf 100644
--- a/ci/templates/maven-test-project/pom.xml
+++ b/ci/templates/maven-test-project/pom.xml
@@ -12,8 +12,8 @@
UTF-8
official
11
- 2.4.20
- 1.12.0
+ 2.5.0-Beta1
+ 1.13.0-beta01
1.9.0
diff --git a/ci/templates/multiplatform-template/gradle.properties b/ci/templates/multiplatform-template/gradle.properties
index f39765d1b76..2c92405ac2c 100644
--- a/ci/templates/multiplatform-template/gradle.properties
+++ b/ci/templates/multiplatform-template/gradle.properties
@@ -2,6 +2,6 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
android.enableJetifier=true
kotlin.code.style=official
-kotlin.version=2.4.20
+kotlin.version=2.5.0-Beta1
agp.version=8.9.0
-compose.version=1.12.0
+compose.version=1.13.0-beta01
diff --git a/ci/templates/multiplatform-template/gradle/wrapper/gradle-wrapper.properties b/ci/templates/multiplatform-template/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/ci/templates/multiplatform-template/gradle/wrapper/gradle-wrapper.properties
+++ b/ci/templates/multiplatform-template/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/components/gradle.properties b/components/gradle.properties
index bd3745b0a6e..b7540ff932f 100644
--- a/components/gradle.properties
+++ b/components/gradle.properties
@@ -7,10 +7,10 @@ org.gradle.configuration-cache=true
android.useAndroidX=true
#Versions
-kotlin.version=2.4.20
+kotlin.version=2.5.0-Beta1
kotlin.supported.version=2.2.20
agp.version=9.1.1
-compose.version=1.12.10-alpha01+dev4472
+compose.version=1.13.0-beta01
deploy.version=9999.0.0-SNAPSHOT
#Compose
diff --git a/compose/integrations/composable-test-cases/gradle/wrapper/gradle-wrapper.properties b/compose/integrations/composable-test-cases/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/compose/integrations/composable-test-cases/gradle/wrapper/gradle-wrapper.properties
+++ b/compose/integrations/composable-test-cases/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/compose/integrations/compose-with-ktx-serialization/gradle/wrapper/gradle-wrapper.properties b/compose/integrations/compose-with-ktx-serialization/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/compose/integrations/compose-with-ktx-serialization/gradle/wrapper/gradle-wrapper.properties
+++ b/compose/integrations/compose-with-ktx-serialization/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/compose/ios-manual-tests/gradle/wrapper/gradle-wrapper.properties b/compose/ios-manual-tests/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/compose/ios-manual-tests/gradle/wrapper/gradle-wrapper.properties
+++ b/compose/ios-manual-tests/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/examples/chat/gradle.properties b/examples/chat/gradle.properties
index a5a909b489e..0ea04e648b9 100644
--- a/examples/chat/gradle.properties
+++ b/examples/chat/gradle.properties
@@ -5,6 +5,6 @@ org.gradle.jvmargs=-Xmx8g
org.gradle.configuration-cache=true
org.gradle.caching=true
org.jetbrains.compose.experimental.macos.enabled=true
-kotlin.version=2.4.20
+kotlin.version=2.5.0-Beta1
agp.version=9.2.1
-compose.version=1.12.0
+compose.version=1.13.0-beta01
diff --git a/examples/graphics-2d/gradle.properties b/examples/graphics-2d/gradle.properties
index a5a909b489e..0ea04e648b9 100644
--- a/examples/graphics-2d/gradle.properties
+++ b/examples/graphics-2d/gradle.properties
@@ -5,6 +5,6 @@ org.gradle.jvmargs=-Xmx8g
org.gradle.configuration-cache=true
org.gradle.caching=true
org.jetbrains.compose.experimental.macos.enabled=true
-kotlin.version=2.4.20
+kotlin.version=2.5.0-Beta1
agp.version=9.2.1
-compose.version=1.12.0
+compose.version=1.13.0-beta01
diff --git a/examples/html/compose-bird/gradle.properties b/examples/html/compose-bird/gradle.properties
index 6b9f9345981..bb2637b7bcb 100644
--- a/examples/html/compose-bird/gradle.properties
+++ b/examples/html/compose-bird/gradle.properties
@@ -1,5 +1,5 @@
kotlin.code.style=official
-kotlin.version=2.4.20
-compose.version=1.12.0
+kotlin.version=2.5.0-Beta1
+compose.version=1.13.0-beta01
org.gradle.configuration-cache=true
org.gradle.caching=true
diff --git a/examples/html/compose-bird/gradle/wrapper/gradle-wrapper.properties b/examples/html/compose-bird/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/examples/html/compose-bird/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/html/compose-bird/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/examples/html/compose-in-js/gradle.properties b/examples/html/compose-in-js/gradle.properties
index c10bb15d12d..48bb2b296a8 100644
--- a/examples/html/compose-in-js/gradle.properties
+++ b/examples/html/compose-in-js/gradle.properties
@@ -1,6 +1,6 @@
kotlin.code.style=official
kotlin.js.webpack.major.version=4
-kotlin.version=2.4.20
-compose.version=1.12.0
+kotlin.version=2.5.0-Beta1
+compose.version=1.13.0-beta01
org.gradle.configuration-cache=true
org.gradle.caching=true
diff --git a/examples/html/compose-in-js/gradle/wrapper/gradle-wrapper.properties b/examples/html/compose-in-js/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/examples/html/compose-in-js/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/html/compose-in-js/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/examples/html/landing/gradle.properties b/examples/html/landing/gradle.properties
index 6b9f9345981..bb2637b7bcb 100644
--- a/examples/html/landing/gradle.properties
+++ b/examples/html/landing/gradle.properties
@@ -1,5 +1,5 @@
kotlin.code.style=official
-kotlin.version=2.4.20
-compose.version=1.12.0
+kotlin.version=2.5.0-Beta1
+compose.version=1.13.0-beta01
org.gradle.configuration-cache=true
org.gradle.caching=true
diff --git a/examples/html/landing/gradle/wrapper/gradle-wrapper.properties b/examples/html/landing/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/examples/html/landing/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/html/landing/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/examples/html/with-react/build.gradle.kts b/examples/html/with-react/build.gradle.kts
index 57b308cb006..bd19b1ad400 100644
--- a/examples/html/with-react/build.gradle.kts
+++ b/examples/html/with-react/build.gradle.kts
@@ -22,11 +22,10 @@ kotlin {
dependencies {
implementation(compose.html.core)
implementation(compose.runtime)
- implementation("org.jetbrains.kotlin-wrappers:kotlin-react:17.0.2-pre.201-kotlin-1.5.0")
- implementation("org.jetbrains.kotlin-wrappers:kotlin-react-dom:17.0.2-pre.201-kotlin-1.5.0")
- implementation("org.jetbrains.kotlin-wrappers:kotlin-styled:5.3.0-pre.201-kotlin-1.5.0")
- implementation(npm("react", "17.0.2"))
- implementation(npm("react-dom", "17.0.2"))
+ implementation(project.dependencies.platform("org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom:2026.10.5"))
+ implementation("org.jetbrains.kotlin-wrappers:kotlin-react")
+ implementation("org.jetbrains.kotlin-wrappers:kotlin-react-dom")
+ implementation("org.jetbrains.kotlin-wrappers:kotlin-emotion-react")
implementation(npm("react-youtube-lite", "1.0.1"))
}
}
diff --git a/examples/html/with-react/gradle.properties b/examples/html/with-react/gradle.properties
index 6b9f9345981..13419111543 100644
--- a/examples/html/with-react/gradle.properties
+++ b/examples/html/with-react/gradle.properties
@@ -1,5 +1,6 @@
kotlin.code.style=official
-kotlin.version=2.4.20
-compose.version=1.12.0
+kotlin.version=2.5.0-Beta1
+compose.version=1.13.0-beta01
org.gradle.configuration-cache=true
org.gradle.caching=true
+org.gradle.jvmargs=-Xmx2048m
diff --git a/examples/html/with-react/gradle/wrapper/gradle-wrapper.properties b/examples/html/with-react/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/examples/html/with-react/gradle/wrapper/gradle-wrapper.properties
+++ b/examples/html/with-react/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/examples/html/with-react/src/jsMain/kotlin/ComposeInReactApp.kt b/examples/html/with-react/src/jsMain/kotlin/ComposeInReactApp.kt
index d3e041c6df7..5d4490e451c 100644
--- a/examples/html/with-react/src/jsMain/kotlin/ComposeInReactApp.kt
+++ b/examples/html/with-react/src/jsMain/kotlin/ComposeInReactApp.kt
@@ -4,17 +4,24 @@ import androidx.compose.runtime.mutableStateOf
import org.jetbrains.compose.web.dom.Div
import org.jetbrains.compose.web.dom.Text
import org.jetbrains.compose.web.renderComposable
+import emotion.react.css
import kotlinx.browser.document
import kotlinx.browser.window
-import kotlinx.css.*
-import kotlinx.html.InputType
-import kotlinx.html.js.onClickFunction
-import kotlinx.html.js.onInputFunction
-import org.w3c.dom.HTMLElement
+import kotlinx.coroutines.awaitCancellation
import react.*
-import react.dom.*
-import styled.css
-import styled.styledDiv
+import react.dom.client.createRoot
+import react.dom.html.ReactHTML.a
+import react.dom.html.ReactHTML.button
+import react.dom.html.ReactHTML.div
+import react.dom.html.ReactHTML.h3
+import react.dom.html.ReactHTML.input
+import web.cssom.Display
+import web.cssom.FlexDirection
+import web.cssom.px
+import web.html.HTMLDivElement
+import web.html.HTMLElement
+import web.html.InputType
+import web.html.range
@Composable
private fun ComposableComponentToUseInReact(count: State) {
@@ -26,13 +33,13 @@ private fun ComposableComponentToUseInReact(count: State) {
}
/**
- * @param containerRef - [RMutableRef] - reference to the HTMLElement that is used as a root for Composition
+ * @param containerRef - [RefObject] - reference to the HTMLElement that is used as a root for Composition
* @param stateInitialValue - initial state value for the Composition
* @param stateValueProvider - a lambda that's used to change the state's value
* @param composable - the content controlled by Compose and mounted in a root provided by [containerRef]
*/
private fun useCompose(
- containerRef: RMutableRef,
+ containerRef: RefObject,
stateInitialValue: T,
stateValueProvider: () -> T,
composable: @Composable (state: State) -> Unit
@@ -43,22 +50,24 @@ private fun useCompose(
mutableState.current?.value = stateValueProvider()
}
- useLayoutEffectWithCleanup(dependencies = emptyList()) {
- val composition = renderComposable(containerRef.current!!) {
+ useLayoutEffectOnce {
+ val composition = renderComposable(containerRef.current!!.unsafeCast()) {
composable(mutableState.current!!)
}
- return@useLayoutEffectWithCleanup {
+ try {
+ awaitCancellation()
+ } finally {
composition.dispose()
}
}
}
-private external interface ListProps : RProps {
+private external interface ListProps : Props {
var countOfItems: Int
}
-private val composeListComponentWrapper = functionalComponent { props ->
- val containerRef = useRef(null)
+private val composeListComponentWrapper = FC { props ->
+ val containerRef = useRef(null)
useCompose(
containerRef = containerRef,
@@ -69,27 +78,26 @@ private val composeListComponentWrapper = functionalComponent { props
}
// This div will be a root for the Composition managed by Compose
- div { ref { containerRef.current = it } }
+ div { ref = containerRef }
}
-private val column = functionalComponent {
+private val column = FC {
val (counter, setCounter) = useState(0)
- styledDiv {
+ div {
css {
- padding = "25px"
+ padding = 25.px
}
h3 {
+"Update items count using slider:"
}
- input(type = InputType.range) {
- attrs {
- onInputFunction = {
- setCounter(it.target?.asDynamic().value.toString().toInt())
- }
- value = "$counter"
+ input {
+ type = InputType.range
+ value = "$counter"
+ onChange = {
+ setCounter(it.target.value.toInt())
}
}
@@ -97,53 +105,47 @@ private val column = functionalComponent {
+"Compose controlled items:"
}
- child(composeListComponentWrapper) {
- this.attrs {
- countOfItems = counter
- }
+ composeListComponentWrapper {
+ countOfItems = counter
}
}
}
-private val appContent = functionalComponent {
+private val appContent = FC {
val (columnsCount, setColumnsCount) = useState(3)
- a(href = "${window.location.origin}?app=composeApp") {
+ a {
+ href = "${window.location.origin}?app=composeApp"
+"GO TO REACT IN COMPOSE EXAMPLE"
}
button {
- attrs {
- onClickFunction = {
- setColumnsCount(columnsCount - 1)
- }
+ onClick = {
+ setColumnsCount(columnsCount - 1)
}
+"Remove column"
}
button {
- attrs {
- onClickFunction = {
- setColumnsCount(columnsCount + 1)
- }
+ onClick = {
+ setColumnsCount(columnsCount + 1)
}
+"Add column"
}
- styledDiv {
+ div {
css {
display = Display.flex
flexDirection = FlexDirection.row
}
repeat(columnsCount) {
- child(column)
+ column()
}
}
}
fun composeInReactAppExample() {
- render(document.getElementById("root")) {
- child(appContent)
- }
-}
\ No newline at end of file
+ createRoot(document.getElementById("root")!!.unsafeCast())
+ .render(appContent.create())
+}
diff --git a/examples/html/with-react/src/jsMain/kotlin/ReactInComposeApp.kt b/examples/html/with-react/src/jsMain/kotlin/ReactInComposeApp.kt
index 76c627b08fa..38aad6f0408 100644
--- a/examples/html/with-react/src/jsMain/kotlin/ReactInComposeApp.kt
+++ b/examples/html/with-react/src/jsMain/kotlin/ReactInComposeApp.kt
@@ -7,9 +7,10 @@ import org.jetbrains.compose.web.dom.*
import org.jetbrains.compose.web.renderComposable
import kotlinx.browser.window
import org.w3c.dom.HTMLElement
-import react.RBuilder
-import react.dom.render
-import react.dom.unmountComponentAtNode
+import react.ChildrenBuilder
+import react.Fragment
+import react.create
+import react.dom.client.createRoot
/**
* @param key - when UseReactEffect is invoked with a new [key], compose forces react to render with a new content.
@@ -18,18 +19,13 @@ import react.dom.unmountComponentAtNode
@Composable
private fun ElementScope.UseReactEffect(
key: Any?,
- content: RBuilder.() -> Unit
+ content: ChildrenBuilder.() -> Unit
) {
DisposableEffect(key) {
- render(scopeElement) {
- content()
- }
- onDispose { }
- }
-
- DisposableEffect(Unit) {
+ val root = createRoot(scopeElement.unsafeCast())
+ root.render(Fragment.create(content))
onDispose {
- unmountComponentAtNode(scopeElement)
+ root.unmount()
}
}
}
@@ -44,7 +40,7 @@ fun YoutubeReactPlayerWrapper(videoUrl: String) {
}) {
UseReactEffect(key = videoUrl) {
reactPlayer {
- attrs.url = videoUrl
+ url = videoUrl
}
}
}
diff --git a/examples/html/with-react/src/jsMain/kotlin/ReactYoutubePlayer.kt b/examples/html/with-react/src/jsMain/kotlin/ReactYoutubePlayer.kt
index 6b42517ea43..8309a67a8de 100644
--- a/examples/html/with-react/src/jsMain/kotlin/ReactYoutubePlayer.kt
+++ b/examples/html/with-react/src/jsMain/kotlin/ReactYoutubePlayer.kt
@@ -1,11 +1,12 @@
@file:JsModule("react-youtube-lite")
@file:JsNonModule
-import react.*
+import react.ComponentType
+import react.Props
@JsName("ReactYouTubeLite")
-external val reactPlayer: RClass
+external val reactPlayer: ComponentType
-external interface ReactYouTubeProps : RProps {
+external interface ReactYouTubeProps : Props {
var url: String
}
diff --git a/examples/imageviewer/gradle.properties b/examples/imageviewer/gradle.properties
index 823cfa9d4b7..978dc16ff0f 100644
--- a/examples/imageviewer/gradle.properties
+++ b/examples/imageviewer/gradle.properties
@@ -7,6 +7,6 @@ org.gradle.configuration-cache=true
org.gradle.caching=true
org.jetbrains.compose.experimental.jscanvas.enabled=true
org.jetbrains.compose.experimental.macos.enabled=true
-kotlin.version=2.4.20
+kotlin.version=2.5.0-Beta1
agp.version=9.1.1
-compose.version=1.12.0
+compose.version=1.13.0-beta01
diff --git a/examples/interop/ios-compose-in-swiftui/gradle.properties b/examples/interop/ios-compose-in-swiftui/gradle.properties
index b1a12b4d577..626965f9f7a 100644
--- a/examples/interop/ios-compose-in-swiftui/gradle.properties
+++ b/examples/interop/ios-compose-in-swiftui/gradle.properties
@@ -1,5 +1,5 @@
kotlin.code.style=official
xcodeproj=./iosApp
org.gradle.jvmargs=-Xmx3g
-kotlin.version=2.4.20
-compose.version=1.12.0
+kotlin.version=2.5.0-Beta1
+compose.version=1.13.0-beta01
diff --git a/examples/interop/ios-compose-in-uikit/gradle.properties b/examples/interop/ios-compose-in-uikit/gradle.properties
index b1a12b4d577..626965f9f7a 100644
--- a/examples/interop/ios-compose-in-uikit/gradle.properties
+++ b/examples/interop/ios-compose-in-uikit/gradle.properties
@@ -1,5 +1,5 @@
kotlin.code.style=official
xcodeproj=./iosApp
org.gradle.jvmargs=-Xmx3g
-kotlin.version=2.4.20
-compose.version=1.12.0
+kotlin.version=2.5.0-Beta1
+compose.version=1.13.0-beta01
diff --git a/examples/interop/ios-swiftui-in-compose/gradle.properties b/examples/interop/ios-swiftui-in-compose/gradle.properties
index b1a12b4d577..626965f9f7a 100644
--- a/examples/interop/ios-swiftui-in-compose/gradle.properties
+++ b/examples/interop/ios-swiftui-in-compose/gradle.properties
@@ -1,5 +1,5 @@
kotlin.code.style=official
xcodeproj=./iosApp
org.gradle.jvmargs=-Xmx3g
-kotlin.version=2.4.20
-compose.version=1.12.0
+kotlin.version=2.5.0-Beta1
+compose.version=1.13.0-beta01
diff --git a/examples/interop/ios-uikit-in-compose/gradle.properties b/examples/interop/ios-uikit-in-compose/gradle.properties
index b1a12b4d577..626965f9f7a 100644
--- a/examples/interop/ios-uikit-in-compose/gradle.properties
+++ b/examples/interop/ios-uikit-in-compose/gradle.properties
@@ -1,5 +1,5 @@
kotlin.code.style=official
xcodeproj=./iosApp
org.gradle.jvmargs=-Xmx3g
-kotlin.version=2.4.20
-compose.version=1.12.0
+kotlin.version=2.5.0-Beta1
+compose.version=1.13.0-beta01
diff --git a/examples/issues/gradle.properties b/examples/issues/gradle.properties
index 54248ff7c9f..6a24af069c7 100644
--- a/examples/issues/gradle.properties
+++ b/examples/issues/gradle.properties
@@ -2,6 +2,6 @@ org.gradle.jvmargs=-Xmx2048m
org.gradle.caching=true
kotlin.code.style=official
android.useAndroidX=true
-kotlin.version=2.4.20
+kotlin.version=2.5.0-Beta1
agp.version=9.2.1
-compose.version=1.12.0
+compose.version=1.13.0-beta01
diff --git a/examples/nav_cupcake/gradle.properties b/examples/nav_cupcake/gradle.properties
index a81e90f20e6..16357912c51 100644
--- a/examples/nav_cupcake/gradle.properties
+++ b/examples/nav_cupcake/gradle.properties
@@ -2,6 +2,6 @@ kotlin.code.style=official
android.useAndroidX=true
org.gradle.jvmargs=-Xmx8g
org.gradle.caching=true
-kotlin.version=2.4.20
+kotlin.version=2.5.0-Beta1
agp.version=9.2.1
-compose.version=1.12.0
+compose.version=1.13.0-beta01
diff --git a/gradle-plugins/compose/src/test/test-projects/application/macSign/compose.test-non-ascii.keychain b/gradle-plugins/compose/src/test/test-projects/application/macSign/compose.test-non-ascii.keychain
index a8cacd722fc..6784006dd5c 100644
Binary files a/gradle-plugins/compose/src/test/test-projects/application/macSign/compose.test-non-ascii.keychain and b/gradle-plugins/compose/src/test/test-projects/application/macSign/compose.test-non-ascii.keychain differ
diff --git a/gradle-plugins/compose/src/test/test-projects/application/moduleClashCli/build.gradle b/gradle-plugins/compose/src/test/test-projects/application/moduleClashCli/build.gradle
index e69de29bb2d..02391ab7e38 100644
--- a/gradle-plugins/compose/src/test/test-projects/application/moduleClashCli/build.gradle
+++ b/gradle-plugins/compose/src/test/test-projects/application/moduleClashCli/build.gradle
@@ -0,0 +1,5 @@
+plugins {
+ id "org.jetbrains.kotlin.jvm" apply false
+ id "org.jetbrains.kotlin.plugin.compose" apply false
+ id "org.jetbrains.compose" apply false
+}
diff --git a/gradle-plugins/gradle.properties b/gradle-plugins/gradle.properties
index 85314767861..d4cab87fe3c 100644
--- a/gradle-plugins/gradle.properties
+++ b/gradle-plugins/gradle.properties
@@ -8,10 +8,10 @@ kotlin.code.style=official
dev.junit.parallel=false
# Default version of Compose Libraries used by Gradle plugin
-compose.version=1.12.10-alpha01+dev4472
+compose.version=1.13.0-beta01
compose.material3.version=1.9.0
# The latest version of Kotlin compatible with compose.tests.compiler.version. Used only in tests/CI.
-compose.tests.kotlin.version=2.4.20
+compose.tests.kotlin.version=2.5.0-Beta1
# __SUPPORTED_GRADLE_VERSIONS__
# Don't forget to edit versions in .github/workflows/gradle-plugin.yml as well
# and Publish.Subtasks.buildTypes.gradle.GradlePluginTestKt#gradleVersions in the TC config
diff --git a/html/buildSrc/gradle.properties b/html/buildSrc/gradle.properties
index 521312bfb0f..5a08291d96d 100644
--- a/html/buildSrc/gradle.properties
+++ b/html/buildSrc/gradle.properties
@@ -1 +1 @@
-kotlin.version=2.4.20
+kotlin.version=2.5.0-Beta1
diff --git a/html/compose-compiler-integration/main-template/gradle/wrapper/gradle-wrapper.properties b/html/compose-compiler-integration/main-template/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/html/compose-compiler-integration/main-template/gradle/wrapper/gradle-wrapper.properties
+++ b/html/compose-compiler-integration/main-template/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/html/core/src/jsMain/kotlin/org/jetbrains/compose/web/dom/RadioGroup.kt b/html/core/src/jsMain/kotlin/org/jetbrains/compose/web/dom/RadioGroup.kt
index c7c8cd4541a..818d0084f71 100644
--- a/html/core/src/jsMain/kotlin/org/jetbrains/compose/web/dom/RadioGroup.kt
+++ b/html/core/src/jsMain/kotlin/org/jetbrains/compose/web/dom/RadioGroup.kt
@@ -47,15 +47,15 @@ fun RadioGroupScope.RadioInput(
@Composable
@NonRestartableComposable
@ExperimentalComposeWebApi
-fun ?> RadioGroup(
- checkedValue: T,
+fun > RadioGroup(
+ checkedValue: T?,
name: String? = null,
content: @Composable RadioGroupScope.() -> Unit
) {
val radioGroupName = remember { name ?: generateNextRadioGroupName() }
CompositionLocalProvider(
- radioGroupCompositionLocalValue provides checkedValue.toString(),
+ radioGroupCompositionLocalValue provides checkedValue?.toString(),
radioGroupCompositionLocalName provides radioGroupName,
content = {
// normal cast would fail here!
diff --git a/html/eap/core/src/commonMain/kotlin/org/jetbrains/compose/web/dom/RadioGroup.kt b/html/eap/core/src/commonMain/kotlin/org/jetbrains/compose/web/dom/RadioGroup.kt
index 5065d5e3b3c..f98be2336de 100644
--- a/html/eap/core/src/commonMain/kotlin/org/jetbrains/compose/web/dom/RadioGroup.kt
+++ b/html/eap/core/src/commonMain/kotlin/org/jetbrains/compose/web/dom/RadioGroup.kt
@@ -53,15 +53,15 @@ fun RadioGroupScope.RadioInput(
@Composable
@NonRestartableComposable
@ExperimentalComposeWebApi
-fun ?> RadioGroup(
- checkedValue: T,
+fun > RadioGroup(
+ checkedValue: T?,
name: String? = null,
content: @Composable RadioGroupScope.() -> Unit
) {
val radioGroupName = remember { name ?: generateNextRadioGroupName() }
CompositionLocalProvider(
- radioGroupCompositionLocalValue provides checkedValue.toString(),
+ radioGroupCompositionLocalValue provides checkedValue?.toString(),
radioGroupCompositionLocalName provides radioGroupName,
content = {
// normal cast would fail here!
diff --git a/html/gradle.properties b/html/gradle.properties
index 6fa1f89aa70..9c40174fd3c 100644
--- a/html/gradle.properties
+++ b/html/gradle.properties
@@ -2,7 +2,7 @@
org.gradle.jvmargs=-Xmx8g
#Versions
-compose.version=1.12.0
+compose.version=1.13.0-beta01
#Compose
compose.web.buildSamples=false
diff --git a/html/gradle/wrapper/gradle-wrapper.properties b/html/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/html/gradle/wrapper/gradle-wrapper.properties
+++ b/html/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/html/kotlinx-browser-common-subset/generator/kotlin-js-store/yarn.lock b/html/kotlinx-browser-common-subset/generator/kotlin-js-store/yarn.lock
index 60a03c77476..6620f4887a4 100644
--- a/html/kotlinx-browser-common-subset/generator/kotlin-js-store/yarn.lock
+++ b/html/kotlinx-browser-common-subset/generator/kotlin-js-store/yarn.lock
@@ -181,11 +181,6 @@ foreground-child@^3.1.0:
cross-spawn "^7.0.6"
signal-exit "^4.0.1"
-format-util@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271"
- integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==
-
get-caller-file@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
@@ -254,12 +249,10 @@ js-yaml@^4.1.0:
dependencies:
argparse "^2.0.1"
-kotlin-web-helpers@3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-3.3.0.tgz#4c0bf6bcfa64752f6f1531e4c84583943bc7e9d6"
- integrity sha512-sXnwHZ2YGMtIia+NQlf/c0UDtwVNHhXsIH+uHkTv87AvvZQJjJ+XbdkvUUuomPWgBC5TgcQLDEGLcjL48QkFkQ==
- dependencies:
- format-util "^1.0.5"
+kotlin-web-helpers@3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-3.5.3.tgz#4c85e5e3ce011ea82f8fe2ff9c01c6fa50989b41"
+ integrity sha512-ZJ/1Ti+9sPplfS9Rpe67lT4WPazgyaz5JKQpf7HEXzZs4ARnT9005TUZr3Zg81HIUi/HKrx4/CI9gkGGkNFoLg==
locate-path@^6.0.0:
version "6.0.0"
diff --git a/html/kotlinx-browser-common-subset/gradle/wrapper/gradle-wrapper.properties b/html/kotlinx-browser-common-subset/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/html/kotlinx-browser-common-subset/gradle/wrapper/gradle-wrapper.properties
+++ b/html/kotlinx-browser-common-subset/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/html/kotlinx-browser-common-subset/kotlin-js-store/yarn.lock b/html/kotlinx-browser-common-subset/kotlin-js-store/yarn.lock
index 054fe690607..4bcf24fb065 100644
--- a/html/kotlinx-browser-common-subset/kotlin-js-store/yarn.lock
+++ b/html/kotlinx-browser-common-subset/kotlin-js-store/yarn.lock
@@ -833,11 +833,6 @@ foreground-child@^3.1.0:
cross-spawn "^7.0.6"
signal-exit "^4.0.1"
-format-util@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.5.tgz#1ffb450c8a03e7bccffe40643180918cc297d271"
- integrity sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==
-
fs-extra@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
@@ -1205,12 +1200,10 @@ kind-of@^6.0.2:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
-kotlin-web-helpers@3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-3.3.0.tgz#4c0bf6bcfa64752f6f1531e4c84583943bc7e9d6"
- integrity sha512-sXnwHZ2YGMtIia+NQlf/c0UDtwVNHhXsIH+uHkTv87AvvZQJjJ+XbdkvUUuomPWgBC5TgcQLDEGLcjL48QkFkQ==
- dependencies:
- format-util "^1.0.5"
+kotlin-web-helpers@3.5.3:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-3.5.3.tgz#4c85e5e3ce011ea82f8fe2ff9c01c6fa50989b41"
+ integrity sha512-ZJ/1Ti+9sPplfS9Rpe67lT4WPazgyaz5JKQpf7HEXzZs4ARnT9005TUZr3Zg81HIUi/HKrx4/CI9gkGGkNFoLg==
loader-runner@^4.3.2:
version "4.3.2"
diff --git a/tutorials/HTML/Getting_Started/README.md b/tutorials/HTML/Getting_Started/README.md
index ce45073a54e..c3aeeecd787 100644
--- a/tutorials/HTML/Getting_Started/README.md
+++ b/tutorials/HTML/Getting_Started/README.md
@@ -35,8 +35,8 @@ pluginManagement {
``` kotlin
// Add compose gradle plugin
plugins {
- kotlin("multiplatform") version "2.4.20"
- id("org.jetbrains.compose") version "1.12.0"
+ kotlin("multiplatform") version "2.5.0-Beta1"
+ id("org.jetbrains.compose") version "1.13.0-beta01"
}
// Add maven repositories
diff --git a/tutorials/checker/gradle/wrapper/gradle-wrapper.properties b/tutorials/checker/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c84..4f5eb9dcc0e 100644
--- a/tutorials/checker/gradle/wrapper/gradle-wrapper.properties
+++ b/tutorials/checker/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME