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