The code of `ScalableImage` is exactly the same as [here](https://github.com/JetBrains/compose-multiplatform-core/pull/459/files#diff-2df227d37a7fcdb885f4fd1a715c0efd94b8e206d446d553d69a456f83e284f6R19):
1. The initial size of an image is chosen by the area size (phone/windows size)
2. We can zoom using pinch-to-zoom (with taking centroid of touches into account)
3. We can zoom using mouse scroll (also, taking the mouse position into account). On touchpad/macOS it also works great.
4. The code of the old `ScalableState` and `ScalableImage` was complete rewritten.
5. The zoom is not limited by phone/window dimensions, we can zoom out
* Avoid scaling code duplication
* Move AndroidImageStorage into separate package
* Implement storing metadata on Android
* Move file extensions to separate class
* Design changes; move to material3
* Use animations to move between different images
* More design changes, rounded corners and animations
* Introduce square gallery view, start with granularizing state management
* Introduce square gallery view, start with granularizing state management
* Make PreviewImage not depend on the whole gallery state
* Move in initialization logic from composition into launched effect
* Highlight currently selected image
* Hoist state for FullscreenImage TopAppBar
Move from Custom Implementation to Material App Bar, use color scheme from main page
Extract hardcoded colors to ImageViewerColors
* Provide floating action buttons with nicer colors
* Provide keyboard events via SharedFlow (remove passing around MutableState in the composable hierarchy as it may potentially violate UDF)
Commonize IOScope initialization
* Provide German translation in shared R-strings
* Move from immutable data classes to Compose-aware State Holders.
* Fix gradlew formatting issue?
* Regenerate gradle wrapper after Android Studio autoformatting debacle
* Resolve rememberCoroutineScope issue
* Provide mock name for remaining picture in repo
* Restore TEAM_ID in project.pbxproj
* Use emptyFlow as default to simplify nullability handling for external events
* Remove extraneous newline and unnecessary print statement
* Provide German translation in XML format
Consistently rename title to "My Memories"
* Remove commented-out code, cleanup rendundant modifiers
Make Title Bar use callbacks instead of accessing ViewModel directly
Add toggle & icon for list and grid view
* Put all samples to one with a simple navigation
* Move desktop dependencies to main.kt and Wave settings panel to a separate class
* Use common resource API instead of desktop only for RotatingWords
* Move project to KMM structure and add iOS/Android target
* Change year for Happy New Year!
* Correct README.md