An opinionated architecture/library for Jetbrains Compose Multiplatform development with an implementation of the VISCE architecture
OSKit Compose is primarily a tool for us here at Outside Source. That being said, feel free to use this library in your own code. We strive to adhere to semantic versioning.
Contributions are appreciated and welcome, but we are a small team and make no guarantees that your changes will be implemented.
- 5.0.0+
https://outsidesource.github.io/OSKit-Compose-KMP/
- Common
- Screen Wake Lock
KmpScreenWakeLockEffect
- Animation
- TransitionAnimatedContent (AnimatedContent with flexible transitions)
- Common CubicBezier transitions
- Canvas
- Blur
- URL Image painter
- Bitmap Painter
- Painter to Bitmap converter
- Layouts
- Arrangement.spacedByWithPadding()
- FixedTableRow
- FlexRow
- PanAndScale
- WrappableRow
- Popups (able to be placed anywhere in composable tree)
- BottomSheet
- Drawer
- Modal
- Popover
- Popup
- OSKit Integration
- Router
- Compose implementation of OSKit Router
- Backpress handling
- Route transitions
- Interactor
- Compose implementation of OSKit Interactor
- Router
- Markdown
- Markdown renderer
- Customizable styles with sane defaults
- Load local or remote images and specify alignment and size
- Asynchronous image loading
- Modifier
- borderTop, borderBottom, borderStart, borderEnd
- innerShadow, outerShadow
- disablePointerInput, preventClickPropagationToParent
- Desktop external drag and drop support
- Resources
- Fonts
- Images
- Strings with localization
- System UI
- Application Lifecycle Observer
- Customizable Window Insets
- Customizable system bar colors
- Window info
- Misc
- rememberLastNonNullValue()
- Screen Wake Lock
- Android
- Context helpers
- Desktop
- Persisted window state
- SizedWindow for windows with enforced minimum size
Currently supported platforms include:
- Android
- JVM (MacOS/Windows/Linux)
- iOS
implementation("com.outsidesource:oskit-compose:4.0.0")
https://github.com/outsidesource/OSKit-Example-App-KMP
- Kotlin 2.1.10 support
- Compose multiplatform 1.8.0
- Kotlin 2.1.0 support
- Compose multiplatform 1.7.3 support
WindowInsets.ime
- Fixes for
KmpWheelPicker
to properly handle mouse wheel scrolling - Added
onDestroy
parameter forrememberInjectForRoute
- Added
FadeRouteTransition
as aComposeRouteTransition
forRouter
- Added
onDestroy
forrememberForRoute
- Added
KmpScreenWakeLockEffect
- Adopted Upper Camel Case for all acronym prefixes on class and function names (i.e.
KMP
changed toKmp
) KMPDeepLinkEffect
renamed toAndroidDeepLinkEffect
and only available on AndroidkmpUrlImagePainter
is now a suspending function- Renamed
rememberLastNonNullState
torememberLastNonNullValue
Modifier.kmpOnExternalDrag
was renamed and reworked toModifier.kmpOnExternalDragAndDrop
- Non-fullscreen popups (i.e. Popover) on Android had a regression where they were not positioned correctly
- Back handling and key events in Android Popups
- onKeyEvent to BottomSheet
- KmpBackHandler/BackHandler to KmpPopup
- Focusable parameter to Popover
- KmpDisableScreenIdleTimeoutEffect
- Fixed typo in KmpTimePicker. Previously
TimeMerdiem
wasTimeMeridian
- Support for Jetbrains Compose 1.6
- Support for Kotlin 1.9.23
- KmpResource - No longer works with compose 1.6
- KmpFont - No longer works with compose 1.6
- KmpImage - No longer works with compose 1.6
- KmpTimePicker
- KmpDatePicker
- KmpWheelPicker
rememberKmpWindowInfo()
createInteractor()
KmpAppLifecycleObserver
Context
helper functionsrememberLastNonNullState()
- Fallback locale for
KmpString
- Markdown
- Async image loading
- Loading Markdown from other sources
PopupShapeCaretPosition
- iOS window insets issues
- Markdown
onLinkClick
now accepts a second parameter