Releases: arkivanov/Decompose
3.2.0-alpha04
- Force javaTarget 11 for all non-Android JVM targets (#758)
The previous 3.2.0-alpha03 release has all non-Android JVM targets published with the target Java version 17. This release fixes the issue, all non-Android JVM targets now have target Java version 11 instead.
Versions and dependencies
Kotlin: 2.0.10
Essenty: 2.2.0-alpha04
kotlinx-serialization: 1.6.3
Multiplatform Compose: 1.7.0-alpha02
3.2.0-alpha03
- Added new experimental stack animation API with Shared Element Transitions support (#753)
- Annotated
StackNavigator#push
as delicate API (#747) - Renamed
Pages
composable function toChildPages
, promoted all Child Pages API to stable (#756) - Updated Kotlin to
2.0.10
, Compose to1.7.0-alpha02
, Essenty to2.2.0-alpha03
(#750)
The new experimental animation API
This release adds a new artifact extensions-compose-experimental
with a brand new API surface for stack animations with the support of Shared Element Transitions. Please see the updated docs for more information and examples.
Child Pages API is stable
The entire Child Pages API is now stable. The Pages
composable function has been renamed to ChildPages
, for consistency with the new ChildStack
composable function from the new experimental animations.
Versions and dependencies
Kotlin: 2.0.10
Essenty: 2.2.0-alpha03
kotlinx-serialization: 1.6.3
Multiplatform Compose: 1.7.0-alpha02
3.2.0-alpha02
- Fixed "Key was used multiple times" crash with
duplicateConfigurationsEnabled
flag enabled (#734) - Updated Essenty to
2.2.0-alpha02
with newStateKeeper
andInstanceKeeper
extensions (#735)
New experimental StateKeeper and InstanceKeeper extensions
This release is based on Essenty 2.2.0-alpha02, which brings some new extensions for StateKeeper
and InstanceKeeper
:
StateKeeper.saveable(...)
andStateKeeperOwner.saveable(...)
InstanceKeeperOwner.retainedInstance { ... }
Please see the update docs for saveable and retainedInstance.
Versions and dependencies
Kotlin: 2.0.0
Essenty: 2.2.0-alpha02
kotlinx-serialization: 1.6.3
Multiplatform Compose: 1.6.10
3.2.0-alpha01
- Allow duplicate configurations as an experimental feature (#731)
Experimental Duplicate Configurations feature
This release adds an experimental support of duplicate configurations in all navigation models. The feature can be enabled using the DecomposeExperimentFlags.duplicateConfigurationsEnabled
flag. If the feature is enabled, Decompose will not throw errors when duplicate configurations are detected. Instead, it will try its best to properly manage the components. Please see the updated docs for more information.
Versions and dependencies
Kotlin: 2.0.0
Essenty: 2.1.0
kotlinx-serialization: 1.6.3
Multiplatform Compose: 1.6.10
3.1.0
- Updated Kotlin to
2.0.0
, Compose to1.6.10
and other dependencies (#718) - Add
onWebNavigation
callback toWebHistoryController#attach
method to allow/deny navigation on browser forward/back button click (#713 by @gsteckman, #724) - Added
StackNavigator#popToFirst
extension function (#722, docs)
Versions and dependencies
Kotlin: 2.0.0
Essenty: 2.1.0
kotlinx-serialization: 1.6.3
Multiplatform Compose: 1.6.10
3.0.0
Changes since version 3.0.0-beta01
- Added
handleDeepLink
extension function (#701, #702) - Promoted retainedComponent, onDecomposeError, pushNew, pushToFront and LifecycleController APIs to stable (#704)
- Updated Essenty to 2.0.0 (#703)
- Fixed a bug in MergedLifecycle when one of the lifecycles emits asynchronously (#698)
Earlier changes since version 2.2.3
- Complete migration to
kotlinx-serialization
(#553) - Added support for the
wasmJs
target for browser (#564) - Renamed
extensions-compose-jetbrains
module toextensions-compose
(#559) - Removed deprecated
Value#subscribe
andValue#unsubscribe
methods (#554) - Renamed
predictiveBackAnimation
animation
argument tofallbackAnimation
(#555) - Added
STARTED
status toChildNavState
(#557) - Added API to discard saved state on Android (#558)
- Support
WebHistoryController
onwasmJs
by using serialization (#569) - Added
LocalStackAnimationProvider
for configuring a default stack animation (#571 by @LionZXY) - Moved
PredictiveBackGestureOverlay
andPredictiveBackGestureIcon
insidepredictiveback
package (#614) - Use
Cancellation
inNavigationSource
(#613) - Added
discardSavedState
andisStateSavingAllowed
arguments toretainedComponent {}
function (#594) - Added
StackNavigator#pushToFront
extension function (#593) - Removed
StackNavigationSource
,SlotNavigationSource
andPagesNavigationSource
interfaces (#626) - Added
edgeWidth
,startingOffsetThreshold
andconfirmationProgressThreshold
parameters forPredictiveBackGestureOverlay
(#622, see #618) - Animate predictive back gesture cancellation (#620, see #618)
- Removed
ApplicationLifecycle
and used the new one from Essenty (#654) - Added
androidPredictiveBackAnimatable
(#652) - Buffer navigation events during initialisation (#645)
- Inlined the rest of navigation extensions with lambdas (#648)
- Don't remove the first configuration on
popWhile
(#646) - Monitor window focused state in desktop
LifecycleController
(#672, see #671) - Improved component context API for easier custom component contexts (#670)
- Various bug fixes
Overall changes and improvements
The new withDeepLink
extension function for Android
The new extensions function (withDeepLink
) is now available for easier deep link handling on Android. Please see the update docs for more information.
Migration to kotlinx-serialization
The migration to kotlinx-serialization
is now completed, the support of Parcelable/Parcelize is removed. See the updated docs for more information.
Changes in ChildNavState
The ChildNavState.Status
enum (Generic Navigation) has changed and now includes STARTED
variant. Please see the updated docs.
Removal of Value subscribe
and unsubscribe
methods
Previously deprecated methods Value#subscribe
and Value#unsubscribe
are removed. The Value#observe
method returning Cancellation
is renamed to subscribe
. The Value.observe(Lifecycle, ...)
method is also renamed to subscribe
.
API to discard saved state on Android
New arguments in defaultComponentContext
function
The defaultComponentContext
function now accepts two new optional arguments:
discardSavedState
- a flag indicating whether any previously saved state should be discarded or not, default value isfalse
. Can be useful for handling deep links inonCreate
, so that the navigation state is not restored and initial state from the deep link is applied instead.isStateSavingAllowed
- called before saving the state. Whentrue
then the state will be saved, otherwise it won't. Default value istrue
.
New arguments in retainedComponent
function
The retainedComponent {}
function got two new arguments with default values: discardSavedState
and isStateSavingAllowed
. The default behaviour is unchanged, though this change breaks binary compatibility.
Changes in Compose extensions
The extensions-compose-jetpack
module is removed, the extensions-compose-jetbrains
module is renamed to extensions-compose
. Please update your dependencies accordingly and replace all com.arkivanov.decompose.extensions.compose.jetbrains.*
imports with com.arkivanov.decompose.extensions.compose.*
.
Compose for iOS, macOS and Web support
Now there is no need to use -compose-experimental
version suffix. The support of Compose for iOS, macOS and Web is now published under the main version.
Compose for JS/Wasm
The new version supports Compose for Wasm (wasmJs
target).
The new StackNavigator#pushToFront
function
This release adds the new StackNavigator#pushToFront
navigation function. See the updated docs for details.
Using Cancellation
in NavigationSource
The NavigationSource#subscribe
method now returns Cancellation
, the NavigationSource#unsubscribe
method is removed. This is both source and binary incompatible change. Though, the source compatibility is only affected if there is a manual implementation of the NavigationSource
interface.
Moved PredictiveBackGestureOverlay
and PredictiveBackGestureIcon
PredictiveBackGestureOverlay
and PredictiveBackGestureIcon
are moved from com.arkivanov.decompose.extensions.compose
package to com.arkivanov.decompose.extensions.compose.stack.animation.predictiveback
.
- import com.arkivanov.decompose.extensions.compose.PredictiveBackGestureOverlay
- import com.arkivanov.decompose.extensions.compose.PredictiveBackGestureIcon
+ import com.arkivanov.decompose.extensions.compose.stack.animation.predictiveback.PredictiveBackGestureOverlay
+ import com.arkivanov.decompose.extensions.compose.stack.animation.predictiveback.PredictiveBackGestureIcon
Changes in PredictiveBackAnimatable interface
The PredictiveBackAnimatable
interface got the new method: suspend fun cancel()
. This is required for animations when the predictive back gesture is cancelled.
Removed navigation source interfaces
The following interfaces were removed: StackNavigationSource
, SlotNavigationSource
and PagesNavigationSource
. This change should be source compatible (meaning your project should still compile fine), unless you have custom implementations of those interfaces, in which case you have to implement the NavigationSource
interface instead.
The improved ComponentContext API
This release brings improvements for the ComponentContext API. Please share your feedback or any issues you encounter. The idea is to make it easier to create and manage custom component contexts.
The change shouldn't break any source compatibility. However, if you have type parameters (generics) explicitly specified for functions childStack
, childSlot
, childPages
or children
, you will need to change your code in the following way. The rest should be compatible and require no changes in the code.
- val stack: Value<ChildStack<*, Child>> = childStack<Config, Child>(...)
+ val stack: Value<ChildStack<*, Child>> = childStack<_, Config, Child>(...)
If you have a custom component context
Since this version you can now remove custom navigation extensions like AppComponentContext.appChildStack
, AppComponentContext.childAppContext
, etc. You will also need to update your custom component context definitions. Please see the updated docs.
Changes in LifecycleController
for desktop (JVM)
The LifecycleController
function now accepts an optional WindowInfo
argument. If supplied, the Lifecycle
will pause/resume when the window's focus state changes.
ApplicationLifecycle is moved to Essenty
ApplicationLifecycle
for iOS and tvOS has been moved to Essenty.
If you are using ApplicationLifecycle
in Kotlin, you will need to update imports.
- import com.arkivanov.decompose.lifecycle.ApplicationLifecycle
+ import com.arkivanov.essenty.lifecycle.ApplicationLifecycle
If you are using ApplicationLifecycle
in Swift, you will need to export Essenty lifecycle
module to iOS framework.
The new androidPredictiveBackAnimatable
API
This release add a new predictive back animation style - the animation that is used e.g. in system settings on Pixel devices. See the updated docs.
WebHistoryController on JS/Wasm
This release adds WebHistoryController
for wasmJs
target. It is shared with js
target and now relies on kotlinx-serialization
. The WebHistoryController#attach
method got a new argument (serializer: KSerializer<C>
), which is a breaking change.
Versions and dependencies
Kotlin: 1.9.23
Essenty: 2.0.0
kotlinx-serialization: 1.6.2
JetBrains Compose: 1.6.1
2.2.3
- Bug fix: component
Lifecycle
unnecessary stops and resumes sometimes on initialisation, if the root component is created usingLazy
(#698)
Versions and dependencies
Kotlin: 1.9.21
Essenty: 1.3.0
kotlinx-serialization: 1.6.0
parcelize-darwin: 0.2.3
extensions-compose-jetpack
Jetpack Compose: 1.5.0
Jetpack Compose Compiler: 1.5.6
extensions-compose-jetbrains
JetBrains Compose: 1.5.11
3.0.0-beta01
- Discard back gesture in
PredictiveBackGestureOverlay
when swiped in the opposite direction (#680) - Print configurations on uniqueness violation (#683)
- Updated Essenty to
2.0.0-beta01
(#687)
Versions and dependencies
Kotlin: 1.9.23
Essenty: 2.0.0-beta01
kotlinx-serialization: 1.6.2
JetBrains Compose: 1.6.1
3.0.0-alpha09
- Improved component context API for easier custom component contexts (#670)
- Monitor window focused state in desktop
LifecycleController
(#672, see #671) - Updated Kotlin to
1.9.23
, Compose to1.6.1
and other dependencies (#676)
The improved ComponentContext API
This release brings experimental changes to the ComponentContext API. Please share your feedback or any issues you encounter. The idea is to make it easier to create and manage custom component contexts.
The change shouldn't break any source compatibility. However, if you have type parameters (generics) explicitly specified for functions childStack
, childSlot
, childPages
or children
, you will need to change your code in the following way. The rest should be compatible and require no changes in the code.
- val stack: Value<ChildStack<*, Child>> = childStack<Config, Child>(...)
+ val stack: Value<ChildStack<*, Child>> = childStack<_, Config, Child>(...)
If you have a custom component context
Since this version (experimentally) you can now remove custom navigation extensions like AppComponentContext.appChildStack
, AppComponentContext.childAppContext
, etc. You will also need to update your custom component context definitions. Please see the updated docs.
Changes in LifecycleController
for desktop (JVM)
The LifecycleController
function now accepts an optional WindowInfo
argument. If supplied, the Lifecycle
will pause/resume when the window's focus state changes.
Versions and dependencies
Kotlin: 1.9.23
Essenty: 2.0.0-alpha07
kotlinx-serialization: 1.6.2
JetBrains Compose: 1.6.1
3.0.0-alpha08
- Fixed predictive back animation not working sometimes (regression in
3.0.0-alpha07
) (#664) - Fixed screen corners blinking when the predictive back gesture starts (#665)
- Fixed screen corner animations in
androidPredictiveBackAnimatable
(#666) - Minor fixes and changes (#659, #667)
Versions and dependencies
Kotlin: 1.9.22
Essenty: 2.0.0-alpha07
kotlinx-serialization: 1.6.2
JetBrains Compose: 1.6.0-rc02