diff --git a/topics/whats-new/whats-new-compose-180.md b/topics/whats-new/whats-new-compose-180.md
index a82486dd..92243189 100644
--- a/topics/whats-new/whats-new-compose-180.md
+++ b/topics/whats-new/whats-new-compose-180.md
@@ -7,7 +7,7 @@ Here are the highlights for this EAP feature release:
* [Preloading of resources for web targets](#preloading-of-resources)
* [Integration with browser navigation controls](#browser-controls-supported-in-the-navigation-library)
-See the full list of changes for this release [on GitHub](https://github.com/JetBrains/compose-multiplatform/blob/master/CHANGELOG.md#180-beta01-march-2025).
+See the full list of changes for this release [on GitHub](https://github.com/JetBrains/compose-multiplatform/blob/master/CHANGELOG.md#180-beta02-april-2025).
## Breaking changes
@@ -68,21 +68,28 @@ composable(Destinations.Followers.route) { navBackStackEntry ->
}
```
-### Implementation of `runOnIdle()` aligned with Android
+### Deprecated `ComposeUIViewControllerDelegate` on iOS
-To bring the Compose Multiplatform implementation of the `runOnIdle()` test function in line with Android behavior,
-we introduced the following changes:
+The `ComposeUIViewControllerDelegate` API has been deprecated in favor of the parent view controller.
+If you use the deprecated API with Compose Multiplatform %composeEapVersion%, you will encounter a deprecation error indicating
+that you should override the `UIViewController` class methods via the parent view controller.
-* `runOnIdle()` now executes its `action` on the UI thread.
-* `runOnIdle()` does not call `waitForIdle()` after executing `action` anymore.
+Read more about child-parent view controller relationships in Apple’s developer [documentation](https://developer.apple.com/documentation/uikit/uiviewcontroller).
-If your tests rely on that extra `waitForIdle()` call after the `runOnIdle()` action,
-add that call to your tests as needed when you update them for Compose Multiplatform %composeEapVersion%.
+### Removed obsolete `platformLayers` option on iOS
-### New handling of coroutine delays in tests
+The `platformLayers`
+experimental option [was introduced in 1.6.0](https://www.jetbrains.com/help/kotlin-multiplatform-dev/whats-new-compose.html#separate-platform-views-for-popups-dialogs-and-dropdowns-ios-desktop)
+to allow enabling alternative layering mode and drawing popups and dialogs outside the bounds of the parent container.
+
+This mode is now the default behavior on iOS, and the option to enable it has been removed as obsolete.
+
+### Breaking changes in tests
+
+#### New handling of coroutine delays in tests
Previously, Compose Multiplatform tests would not consider side effects with `delay()` calls idle.
-Because of that, this test, for example, would hang indefinitely:
+Because of that, the following test, for example, would hang indefinitely:
```kotlin
@Test
@@ -98,10 +105,11 @@ fun loopInLaunchedEffectTest() = runComposeUiTest {
}
```
-In Compose Multiplatform %composeEapVersion%, `waitForIdle()`, `awaitIdle()`, and `runOnIdle()` functions consider Compose
-to be idle even when coroutines launched in a composition scope call the `delay()` function.
-This fixes the hanging test above but breaks tests that rely on `waitForIdle()`, `awaitIdle()`, and `runOnIdle()`
+When coroutines call the `delay()` function after being launched in a composition scope, the `waitForIdle()`, `awaitIdle()`,
+and `runOnIdle()` functions now consider Compose to be idle.
+This change fixes the hanging test above but breaks tests that rely on `waitForIdle()`, `awaitIdle()`, and `runOnIdle()`
to execute coroutines with `delay()`.
+
To produce the same results in these cases, advance time artificially:
```kotlin
@@ -117,9 +125,8 @@ setContent {
}
updateText = true
waitForIdle()
-
// Since waitForIdle() no longer waits for the delayed LaunchedEffect() to complete,
-// the test needs to advance time to make the following assertion correct
+// the test needs to advance time to make the following assertion correct:
mainClock.advanceTimeBy(1001)
assertEquals("1", text)
@@ -128,6 +135,25 @@ assertEquals("1", text)
Tests that already use `mainClock.advanceTimeBy()` calls to advance the test clock may behave differently
with recomposition, layout, drawing, and effects.
+#### Implementation of `runOnIdle()` aligned with Android
+
+To bring the Compose Multiplatform implementation of the `runOnIdle()` test function in line with Android behavior,
+we’ve introduced the following changes:
+
+* `runOnIdle()` now executes its `action` on the UI thread.
+* `runOnIdle()` does not call `waitForIdle()` after executing `action` anymore.
+
+If your tests rely on that extra `waitForIdle()` call after the `runOnIdle()` action,
+add the call to your tests as needed when you update them for Compose Multiplatform %composeEapVersion%.
+
+#### Advancing time in tests is decoupled from rendering
+
+In Compose Multiplatform %composeEapVersion%, the `mainClock.advanceTimeBy()` function no longer causes recomposition, layout,
+or drawing if the time was not advanced past the point of rendering the next frame (virtual test frames are rendered every 16 ms).
+
+This may break tests that rely on rendering being triggered by every `mainClock.advanceTimeBy()` call.
+See the [PR description](https://github.com/JetBrains/compose-multiplatform-core/pull/1618) for details.
+
## Across platforms
### Variable fonts
@@ -187,19 +213,6 @@ see the [dedicated article](https://developer.android.com/develop/ui/compose/tou
Compose Multiplatform %composeEapVersion% introduces accessibility support for right-to-left languages,
including proper text direction handling for gestures.
-#### Loading accessibility tree on demand
-
-Instead of setting a specific mode of syncing the Compose semantic tree with the iOS accessibility tree,
-you can now rely on Compose Multiplatform to handle this process lazily:
-the tree is fully loaded after the first request from the iOS accessibility engine
-and is disposed of when the screen reader stops interacting with it.
-
-This allows fully supporting iOS Voice Control, VoiceOver,
-and other accessibility tools that rely on the accessibility tree.
-
-The `AccessibilitySyncOptions` class, which was [used to configure accessibility tree sync](compose-ios-accessibility.md#choose-the-tree-synchronization-option),
-has been removed as it is no longer necessary.
-
#### Accessibility for scrollable lists
This version improves the performance and accuracy of scrolling boundary and element position calculations.
@@ -268,6 +281,29 @@ ensuring proper accessibility-state representation.
You can now also use accessible text input in UI testing.
+#### Support for control via trackpad and keyboard
+Compose Multiplatform for iOS now supports two additional input methods to control your device. Instead of relying on the touchscreen,
+you can enable either AssistiveTouch to use a mouse or trackpad, or Full Keyboard Access to use a keyboard:
+
+* AssistiveTouch (**Settings** | **Accessibility** | **Touch** | **AssistiveTouch**) allows you to control your iPhone or
+ iPad with a pointer from a connected mouse or trackpad. You can use the pointer to click icons on your screen,
+ navigate through the AssistiveTouch menu, or type using the onscreen keyboard.
+* Full Keyboard Access (**Settings** | **Accessibility** | **Keyboards** | **Full Keyboard Access**) enables device control
+ with a connected keyboard. You can navigate with keys like **Tab** and activate items using **Space**.
+
+#### Loading accessibility tree on demand
+
+Instead of setting a specific mode of syncing the Compose semantic tree with the iOS accessibility tree,
+you can now rely on Compose Multiplatform to handle this process lazily.
+The tree is fully loaded after the first request from the iOS accessibility engine
+and is disposed of when the screen reader stops interacting with it.
+
+This allows fully supporting iOS Voice Control, VoiceOver,
+and other accessibility tools that rely on the accessibility tree.
+
+The `AccessibilitySyncOptions` class, which was [used to configure accessibility tree sync](compose-ios-accessibility.md#choose-the-tree-synchronization-option),
+has been removed as no longer necessary.
+
#### Improved accuracy of accessibility property calculations
We’ve updated the accessibility properties
@@ -280,6 +316,12 @@ to fix several issues related to the incorrect calculation of accessibility prop
such as missing hitboxes for `DropDown` elements,
mismatches between visible text and accessibility labels, and incorrect radio button states.
+### Stable API for iOS logging
+
+The API that enables operating system logging on iOS is now stable. The `enableTraceOSLog()` function no longer requires
+experimental opt-in and now aligns with Android-style logging. This logging provides trace information that can be analyzed
+using Xcode Instruments for debugging and performance analysis.
+
### Opt-in concurrent rendering
@@ -333,9 +375,38 @@ and navigate to a destination directly when the user pastes a URL with the corre
The `window.bindToNavigation()` method has the optional `getBackStackEntryPath` parameter,
which allows you to customize the translation of route strings into URL fragments.
+### Setting the browser cursor
+
+
+We introduced an experimental `PointerIcon.Companion.fromKeyword()` function to manage icons that can be used as mouse
+pointers on a browser page. By passing a keyword as a parameter, you can specify the type of cursor to display based on the context.
+For example, you can assign different pointer icons to select text, open a context menu, or indicate a loading process.
+
+Check out the full list of available [keywords](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor).
+
## Desktop
### Support for Windows for ARM64
Compose Multiplatform %composeEapVersion% introduces support for Windows for ARM64 on the JVM,
improving the overall experience of building and running applications on ARM-based Windows devices.
+
+## Gradle plugin
+
+### Support for multiplatform resources in the `androidLibrary` target
+
+Starting with the Android Gradle plugin version 8.8.0, you can use generated assets in the new `androidLibrary` target.
+To align Compose Multiplatform with these changes, we’ve introduced support for a new target configuration to work with
+multiplatform resources packed into Android assets.
+
+If you are using the `androidLibrary` target, enable resources in your configuration:
+
+```
+kotlin {
+ androidLibrary {
+ experimentalProperties["android.experimental.kmp.enableAndroidResources"] = true
+ }
+}
+```
+
+Otherwise, you’ll encounter the following exception: `org.jetbrains.compose.resources.MissingResourceException: Missing resource with path: …`.
\ No newline at end of file
diff --git a/v.list b/v.list
index 522b51c2..ad1802e3 100644
--- a/v.list
+++ b/v.list
@@ -6,7 +6,7 @@
-
+