diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts index cc458f8a..900b3ead 100644 --- a/androidApp/build.gradle.kts +++ b/androidApp/build.gradle.kts @@ -5,7 +5,7 @@ plugins { android { namespace = "com.bumble.appyx.puzzyx.android" - compileSdk = 33 + compileSdk = libs.versions.androidCompileSdk.get().toInt() defaultConfig { applicationId = "com.bumble.appyx.puzzyx.android" minSdk = 30 diff --git a/androidApp/src/main/AndroidManifest.xml b/androidApp/src/main/AndroidManifest.xml index fc85efde..644bbe15 100644 --- a/androidApp/src/main/AndroidManifest.xml +++ b/androidApp/src/main/AndroidManifest.xml @@ -1,6 +1,8 @@ - + + + diff --git a/androidApp/src/main/java/com/bumble/appyx/puzzyx/android/MainActivity.kt b/androidApp/src/main/kotlin/com/bumble/puzzyx/MainActivity.kt similarity index 94% rename from androidApp/src/main/java/com/bumble/appyx/puzzyx/android/MainActivity.kt rename to androidApp/src/main/kotlin/com/bumble/puzzyx/MainActivity.kt index 0de53e67..142f38bc 100644 --- a/androidApp/src/main/java/com/bumble/appyx/puzzyx/android/MainActivity.kt +++ b/androidApp/src/main/kotlin/com/bumble/puzzyx/MainActivity.kt @@ -1,10 +1,9 @@ -package com.bumble.appyx.puzzyx.android +package com.bumble.puzzyx import android.os.Bundle import androidx.activity.compose.setContent import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material.MaterialTheme import androidx.compose.material.Surface import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier diff --git a/bumble_logo.png b/bumble_logo.png new file mode 100644 index 00000000..73219d4e Binary files /dev/null and b/bumble_logo.png differ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3ffbefd5..c469a339 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,16 +3,17 @@ [versions] accompanist = "0.28.0" agp = "8.1.1" -androidCompileSdk = "33" +androidCompileSdk = "34" androidMinSdk = "21" androidTargetSdk = "32" androidx-lifecycle = "2.6.1" androidx-navigation-compose = "2.5.1" appyx = "2.0.0-alpha06" coil = "2.2.1" -composePlugin = "1.4.0" +composePlugin = "1.4.3" composeBom = "2023.05.01" composeCompiler = "1.4.4" +image-loader-version = "1.6.4" coroutines = "1.7.1" dependencyAnalysis = "1.13.1" detekt = "1.21.0" @@ -21,8 +22,10 @@ jvmTarget = "17" kotlin = "1.8.10" ksp = "1.8.0-1.0.8" mvicore = "1.2.6" +resources = "0.22.3" ribs = "0.39.0" serialization-json = "1.5.0" +ktor = "2.3.4" uuid = "9.0.0" [libraries] @@ -59,6 +62,7 @@ compose-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest" } google-accompanist-systemui = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" } google-accompanist-flow = { module = "com.google.accompanist:accompanist-flowlayout", version.ref = "accompanist" } google-material = "com.google.android.material:material:1.4.0" +compose-image-loader = { module = "io.github.qdsfdhvh:image-loader", version.ref = "image-loader-version"} junit = "junit:junit:4.13.2" kotlin-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" } kotlin-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } diff --git a/puzzle_slicer.py b/puzzle_slicer.py new file mode 100644 index 00000000..f7ef03da --- /dev/null +++ b/puzzle_slicer.py @@ -0,0 +1,49 @@ +# This is a script to slice an image into a specified number of pieces +# and save them to a specified directory. + +import os +import argparse +import numpy as np +from PIL import Image + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('-i', '--image', type=str, required=True, help='Path to image to slice') + parser.add_argument('-o', '--output', type=str, help='Path to output directory') + parser.add_argument('-c', '--columns', type=int, required=True, help='Number of columns to slice image into') + parser.add_argument('-r', '--rows', type=int, required=True, help='Number of rows to slice image into') + args = parser.parse_args() + + # If output directory is not provided, create one named after the image in the working directory + if not args.output: + image_name = os.path.splitext(os.path.basename(args.image))[0] + args.output = os.path.join(os.getcwd(), image_name) + + # Create directory if it does not exist + if not os.path.exists(args.output): + os.makedirs(args.output) + + # Load image + img = Image.open(args.image) + img = np.array(img) + + # Get image dimensions + height, width, channels = img.shape + + # Get slice dimensions + slice_height = height // args.rows + slice_width = width // args.columns + + # Slice image + for y in range(args.rows): + for x in range(args.columns): + start_height = y * slice_height + end_height = start_height + slice_height + start_width = x * slice_width + end_width = start_width + slice_width + slice = img[start_height:end_height, start_width:end_width, :] + slice = Image.fromarray(slice) + slice.save(os.path.join(args.output, 'slice_{}_{}.png'.format(y, x))) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 5729bcca..143c42e2 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -28,6 +28,9 @@ kotlin { implementation(kotlin("test")) implementation(libs.appyx.navigation) api(libs.appyx.components.backstack) + api(libs.compose.image.loader) + @OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class) + implementation(compose.components.resources) } } val commonTest by getting { @@ -40,7 +43,8 @@ kotlin { android { namespace = "com.bumble.appyx.puzzyx" - compileSdk = 33 + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + compileSdk = libs.versions.androidCompileSdk.get().toInt() defaultConfig { minSdk = 30 } diff --git a/shared/src/androidMain/kotlin/com/bumble/puzzyx/imageloader/ImageBitmap.kt b/shared/src/androidMain/kotlin/com/bumble/puzzyx/imageloader/ImageBitmap.kt new file mode 100644 index 00000000..9454d979 --- /dev/null +++ b/shared/src/androidMain/kotlin/com/bumble/puzzyx/imageloader/ImageBitmap.kt @@ -0,0 +1,10 @@ +package com.bumble.puzzyx.imageloader + +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.asImageBitmap + +actual fun ByteArray.toImageBitmap(): ImageBitmap = toAndroidBitmap().asImageBitmap() + +fun ByteArray.toAndroidBitmap(): Bitmap = BitmapFactory.decodeByteArray(this, 0, size) diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/backstackclipper/BackStackClipper.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/backstackclipper/BackStackClipper.kt new file mode 100644 index 00000000..781d0bd9 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/backstackclipper/BackStackClipper.kt @@ -0,0 +1,59 @@ +package com.bumble.puzzyx.component.backstackclipper + +import androidx.compose.animation.core.SpringSpec +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Shape +import com.bumble.appyx.components.backstack.BackStackModel +import com.bumble.appyx.interactions.core.ui.context.UiContext +import com.bumble.appyx.interactions.core.ui.helper.DefaultAnimationSpec +import com.bumble.appyx.interactions.core.ui.property.impl.ZIndex +import com.bumble.appyx.interactions.core.ui.state.MatchedTargetUiState +import com.bumble.appyx.transitionmodel.BaseMotionController + + +/** + * With Appyx, we usually map model states (like a back stack element's state) to visual end + * states. + * + * To achieve the canvas clipping effect, instead of usual Alpha, Scale, Rotation etc. properties + * we'll animate the progress value related to a shape, and apply it as a clip mask on the outgoing + * element. + * + * @param shape Should return a Shape given a progress value in the range of 0..1f. The shape will + * be applied as a clip mask on the outgoing back stack element. + */ +class BackStackClipper( + uiContext: UiContext, + private val shape: @Composable (progress: Float) -> Shape, + defaultAnimationSpec: SpringSpec = DefaultAnimationSpec +) : BaseMotionController, MutableUiState, TargetUiState>( + uiContext = uiContext, + defaultAnimationSpec = defaultAnimationSpec, +) { + + private val incoming = TargetUiState( + clipShapeProgress = ClipShapeProgress.Target(0f), + zIndex = ZIndex.Target(0f), + ) + + /** + * The Shape is animated towards 100% progress. + * zIndex ensures the outgoing element stays on top. As the clipping is applied to it, + * any elements behind it should start showing through. + */ + private val outgoing = TargetUiState( + clipShapeProgress = ClipShapeProgress.Target(1f), + zIndex = ZIndex.Target(1f), + ) + + override fun BackStackModel.State.toUiTargets(): + List> = + (created + listOf(active)).map { + MatchedTargetUiState(it, incoming) + } + (stashed + destroyed).map { + MatchedTargetUiState(it, outgoing) + } + + override fun mutableUiStateFor(uiContext: UiContext, targetUiState: TargetUiState): MutableUiState = + targetUiState.toMutableUiState(uiContext, shape) +} diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/backstackclipper/ClipShapeProgress.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/backstackclipper/ClipShapeProgress.kt new file mode 100644 index 00000000..88911f53 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/backstackclipper/ClipShapeProgress.kt @@ -0,0 +1,63 @@ +package com.bumble.puzzyx.component.backstackclipper + +import androidx.compose.animation.core.Animatable +import androidx.compose.animation.core.AnimationVector1D +import androidx.compose.animation.core.Easing +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.RectangleShape +import androidx.compose.ui.graphics.Shape +import com.bumble.appyx.interactions.core.ui.math.lerpFloat +import com.bumble.appyx.interactions.core.ui.property.Interpolatable +import com.bumble.appyx.interactions.core.ui.property.MotionProperty +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow + +/** + * With Appyx, we usually animate actual UI-related properties like Alpha, Rotation, etc. + * + * This class wraps an animatable Float that should represent an animation progress value + * in the 0..1f range. Using this animated value, a [Shape] is fetched as a function of progress + * and applied as clip mask with Modifier.clip(shape). + */ +class ClipShapeProgress( + coroutineScope: CoroutineScope, + target: Target, + displacement: StateFlow = MutableStateFlow(0f), + private val shape: @Composable (progress: Float) -> Shape = { RectangleShape }, +) : MotionProperty( + coroutineScope = coroutineScope, + animatable = Animatable(target.value), + displacement = displacement +), Interpolatable { + + class Target( + val value: Float, + val easing: Easing? = null, + ) : MotionProperty.Target + + override fun calculateRenderValue(base: Float, displacement: Float): Float = + base - displacement + + override val modifier: Modifier + get() = Modifier.composed { + val progress = renderValueFlow.collectAsState().value + if (progress == 0f) this + else this.clip(shape.invoke(progress)) + } + + + override suspend fun lerpTo(start: Target, end: Target, fraction: Float) { + snapTo( + lerpFloat( + start = start.value, + end = end.value, + progress = easingTransform(end.easing, fraction) + ) + ) + } +} diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/backstackclipper/TargetUiState.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/backstackclipper/TargetUiState.kt new file mode 100644 index 00000000..59d5a0be --- /dev/null +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/backstackclipper/TargetUiState.kt @@ -0,0 +1,28 @@ +package com.bumble.puzzyx.component.backstackclipper + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Shape +import com.bumble.appyx.interactions.core.ui.context.UiContext +import com.bumble.appyx.interactions.core.ui.property.impl.ZIndex +import com.bumble.appyx.interactions.core.ui.state.MutableUiStateSpecs + +@Suppress("unused") +@MutableUiStateSpecs +class TargetUiState( + val clipShapeProgress: ClipShapeProgress.Target, + val zIndex: ZIndex.Target, +) { + fun toMutableUiState(uiContext: UiContext, shape: @Composable (progress: Float) -> Shape): MutableUiState = + MutableUiState( + uiContext = uiContext, + clipShapeProgress = ClipShapeProgress( + coroutineScope = uiContext.coroutineScope, + target = clipShapeProgress, + shape = shape + ), + zIndex = ZIndex( + coroutineScope = uiContext.coroutineScope, + target = zIndex + ) + ) +} diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/gridpuzzle/GridPuzzleVisualisation.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/gridpuzzle/GridPuzzleVisualisation.kt index 72333244..8a682160 100644 --- a/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/gridpuzzle/GridPuzzleVisualisation.kt +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/component/gridpuzzle/GridPuzzleVisualisation.kt @@ -2,6 +2,7 @@ package com.bumble.puzzyx.component.gridpuzzle import androidx.compose.animation.core.Easing import androidx.compose.animation.core.SpringSpec +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.times import com.bumble.appyx.interactions.core.ui.context.UiContext @@ -55,8 +56,8 @@ class GridPuzzleVisualisation( position = Target( alignment = alignment(i, j), offset = DpOffset( - x = (i - (gridCols - 1) / 2f) * Random.nextInt(3,9) * 0.5f * transitionBounds.widthDp, - y = (j - (gridRows - 1) / 2f) * Random.nextInt(3,9) * 0.5f * transitionBounds.heightDp, + x = offset(i, gridCols, transitionBounds.widthDp), + y = offset(j, gridRows, transitionBounds.heightDp), ), ), rotationZ = RotationZ.Target( @@ -64,6 +65,15 @@ class GridPuzzleVisualisation( ) ) + private fun offset(index: Int, maxIndex: Int, step: Dp): Dp { + var multiplier = (index - (maxIndex - 1) / 2f) + // if maxIndex is odd the middle one will always have 0 offsetX without this check + if (multiplier == 0f) { + multiplier = 1f + } + return multiplier * Random.nextInt(3, 9) * 0.5f * step + } + private fun State.assembled(i: Int, j: Int, idx: Int) = TargetUiState( position = Target( alignment = alignment(i, j), @@ -93,7 +103,7 @@ class GridPuzzleVisualisation( rotationZ = RotationZ.Target( (if (Random.nextBoolean()) -1 else 1) * Random.nextInt(1, 3) * 360f ), - angularPosition = AngularPosition.Target( + angularPosition = AngularPosition.Target( AngularPosition.Value( // This should be the same as the prepared angle in the assembled state // as it's not supposed to be animated diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/composable/CallToActionScreen.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/composable/CallToActionScreen.kt new file mode 100644 index 00000000..34008133 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/composable/CallToActionScreen.kt @@ -0,0 +1,26 @@ +package com.bumble.puzzyx.composable + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import com.bumble.puzzyx.ui.appyx_dark +import com.bumble.puzzyx.ui.appyx_yellow1 + +@Composable +fun CallToActionScreen(modifier: Modifier) { + Box( + modifier = modifier + .fillMaxSize() + .background(appyx_dark) + ) { + Text( + text = "Join the challenge", + color = appyx_yellow1, + modifier = Modifier.align(Alignment.Center) + ) + } +} diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/composable/MessageBoard.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/composable/MessageBoard.kt new file mode 100644 index 00000000..3d612808 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/composable/MessageBoard.kt @@ -0,0 +1,24 @@ +package com.bumble.puzzyx.composable + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color + +@Composable +fun MessageBoard(modifier: Modifier) { + Box( + modifier = modifier + .fillMaxSize() + .background(Color.LightGray) + ) { + Text( + text = "MessageBoard", + modifier = Modifier.align(Alignment.Center) + ) + } +} diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/imageloader/ImageBitmap.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/imageloader/ImageBitmap.kt new file mode 100644 index 00000000..62c316bc --- /dev/null +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/imageloader/ImageBitmap.kt @@ -0,0 +1,5 @@ +package com.bumble.puzzyx.imageloader + +import androidx.compose.ui.graphics.ImageBitmap + +expect fun ByteArray.toImageBitmap(): ImageBitmap diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/imageloader/ResourceImage.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/imageloader/ResourceImage.kt new file mode 100644 index 00000000..87a0aac7 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/imageloader/ResourceImage.kt @@ -0,0 +1,39 @@ +package com.bumble.puzzyx.imageloader + +import androidx.compose.foundation.Image +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.layout.ContentScale +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.resource + +@OptIn(ExperimentalResourceApi::class) +@Composable +fun ResourceImage( + path: String, + modifier: Modifier = Modifier, + contentDescription: String? = null, + contentScale: ContentScale = ContentScale.Fit +) { + var image: ImageBitmap? by remember { mutableStateOf(null) } + LaunchedEffect(Unit) { + image = + resource(path) + .readBytes() + .toImageBitmap() + } + image?.let { + Image( + bitmap = it, + contentDescription = null, + modifier = modifier, + contentScale = contentScale + ) + } +} diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/math/Math.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/math/Math.kt new file mode 100644 index 00000000..e1ad09f7 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/math/Math.kt @@ -0,0 +1,28 @@ +package com.bumble.puzzyx.math + +import com.bumble.appyx.interactions.core.ui.math.lerpFloat + + +fun mapValueRange( + value: Float, + fromRangeMin: Float, + fromRangeMax: Float, + destRangeMin: Float, + destRangeMax: Float +): Float = + lerpFloat( + start = destRangeMin, + end = destRangeMax, + norm( + value = value.coerceIn(fromRangeMin, fromRangeMax), + min = fromRangeMin, + max = fromRangeMax + ) + ) + +fun norm( + value: Float, + min: Float, + max: Float +): Float = + (value - min) / (max - min) diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/node/app/PuzzyxAppNode.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/node/app/PuzzyxAppNode.kt index 3f3d4480..ef7b5697 100644 --- a/shared/src/commonMain/kotlin/com/bumble/puzzyx/node/app/PuzzyxAppNode.kt +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/node/app/PuzzyxAppNode.kt @@ -1,51 +1,143 @@ package com.bumble.puzzyx.node.app +import androidx.compose.animation.core.FastOutLinearInEasing +import androidx.compose.animation.core.tween +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.max import com.bumble.appyx.components.backstack.BackStack import com.bumble.appyx.components.backstack.BackStackModel -import com.bumble.appyx.components.backstack.ui.slider.BackStackSlider +import com.bumble.appyx.components.backstack.operation.replace import com.bumble.appyx.navigation.composable.AppyxComponent +import com.bumble.appyx.navigation.integration.LocalScreenSize import com.bumble.appyx.navigation.modality.BuildContext import com.bumble.appyx.navigation.node.Node import com.bumble.appyx.navigation.node.ParentNode -import com.bumble.puzzyx.node.app.PuzzyxAppNode.InteractionTarget -import com.bumble.puzzyx.node.app.PuzzyxAppNode.InteractionTarget.Puzzle1 +import com.bumble.appyx.navigation.node.node import com.bumble.appyx.utils.multiplatform.Parcelable import com.bumble.appyx.utils.multiplatform.Parcelize +import com.bumble.puzzyx.component.backstackclipper.BackStackClipper +import com.bumble.puzzyx.composable.CallToActionScreen +import com.bumble.puzzyx.composable.MessageBoard +import com.bumble.puzzyx.node.app.PuzzyxAppNode.NavTarget +import com.bumble.puzzyx.node.app.PuzzyxAppNode.NavTarget.CallToAction +import com.bumble.puzzyx.node.app.PuzzyxAppNode.NavTarget.MessageBoard +import com.bumble.puzzyx.node.app.PuzzyxAppNode.NavTarget.Puzzle1 import com.bumble.puzzyx.node.puzzle1.Puzzle1Node +import com.bumble.puzzyx.ui.DottedMeshShape class PuzzyxAppNode( buildContext: BuildContext, - private val backStack: BackStack = BackStack( + private val backStack: BackStack = BackStack( model = BackStackModel( initialTargets = listOf(Puzzle1), savedStateMap = buildContext.savedStateMap, ), - motionController = { BackStackSlider(it) } + motionController = { BackStackClipper(it, shape = { progress -> ClipShape(progress) }) } ) -) : ParentNode( +) : ParentNode( buildContext = buildContext, appyxComponent = backStack ) { - sealed class InteractionTarget : Parcelable { + sealed class NavTarget : Parcelable { @Parcelize - object Puzzle1 : InteractionTarget() + object Puzzle1 : NavTarget() + + @Parcelize + object CallToAction : NavTarget() + + @Parcelize + object MessageBoard : NavTarget() } - override fun resolve(interactionTarget: InteractionTarget, buildContext: BuildContext): Node = - when (interactionTarget) { - is Puzzle1 -> Puzzle1Node(buildContext) + override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node = + when (navTarget) { + is Puzzle1 -> Puzzle1Node( + imageDirectory = "bumble_logo/", + columns = 19, + rows = 9, + buildContext = buildContext + ) + is CallToAction -> node(buildContext) { modifier -> CallToActionScreen(modifier) } + is MessageBoard -> node(buildContext) { modifier -> MessageBoard(modifier) } } @Composable override fun View(modifier: Modifier) { + Box( + modifier = modifier.fillMaxSize() + ) { + CurrentScreen() + NextButton() + } + } + + @Composable + private fun CurrentScreen() { AppyxComponent( appyxComponent = backStack, - modifier = modifier - .fillMaxSize() + modifier = Modifier.fillMaxSize() ) } + + @Composable + private fun NextButton() { + val screens = remember { listOf(Puzzle1, CallToAction, MessageBoard) } + var screenIdx by remember { mutableStateOf(0) } + + Button( + colors = ButtonDefaults.buttonColors(containerColor = Color.Transparent), + onClick = { + backStack.replace( + target = screens[++screenIdx % screens.size], + animationSpec = tween( + durationMillis = 3000, + easing = FastOutLinearInEasing + ) + ) + } + ) { + Text("Next") + } + } +} + +@Composable +private fun ClipShape(progress: Float): Shape { + val screenSize = LocalScreenSize.current + val density = LocalDensity.current + val (meshMin, meshMax) = 15 to 25 + val meshSizeX = if (screenSize.widthDp > screenSize.heightDp) meshMax else meshMin + val meshSizeY = if (screenSize.widthDp > screenSize.heightDp) meshMin else meshMax + val maxRadius = remember(screenSize) { + with(density) { + max(screenSize.widthDp, screenSize.heightDp).toPx() / meshMin * 1.5f + } + } + + val shape by remember(progress) { + mutableStateOf( + DottedMeshShape( + meshSizeX, + meshSizeY, + maxRadius, + progress + ) + ) + } + + return shape } diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/node/puzzle1/Puzzle1Node.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/node/puzzle1/Puzzle1Node.kt index 8abde39d..435f5eb9 100644 --- a/shared/src/commonMain/kotlin/com/bumble/puzzyx/node/puzzle1/Puzzle1Node.kt +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/node/puzzle1/Puzzle1Node.kt @@ -6,7 +6,8 @@ import androidx.compose.animation.core.tween import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize @@ -21,6 +22,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment.Companion.BottomCenter import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import com.bumble.appyx.interactions.core.model.transition.Operation.Mode.KEYFRAME import com.bumble.appyx.navigation.composable.AppyxComponent @@ -36,13 +38,13 @@ import com.bumble.puzzyx.component.gridpuzzle.operation.scatter import com.bumble.puzzyx.composable.EntryCard import com.bumble.puzzyx.composable.FlashCard import com.bumble.puzzyx.entries.Entry +import com.bumble.puzzyx.imageloader.ResourceImage import com.bumble.puzzyx.puzzle.PuzzlePiece +import com.bumble.puzzyx.ui.appyx_dark import com.bumble.puzzyx.ui.colors +import org.jetbrains.compose.resources.ExperimentalResourceApi import kotlin.random.Random -private val gridCols = 16 // TODO get rid of this, move width into TargetUiState -private val gridRows = 9 // TODO get rid of this, move width into TargetUiState - private val animationSpec = spring( stiffness = Spring.StiffnessVeryLow / 15, dampingRatio = Spring.DampingRatioNoBouncy @@ -50,11 +52,14 @@ private val animationSpec = spring( class Puzzle1Node( buildContext: BuildContext, + private val imageDirectory: String, + private val columns: Int, + private val rows: Int, private val gridPuzzle: GridPuzzle = GridPuzzle( - gridRows = gridRows, - gridCols = gridCols, - pieces = IntRange(0, gridRows * gridCols - 1).map { - PuzzlePiece(it % gridCols, it / gridCols, Entry()) + gridRows = rows, + gridCols = columns, + pieces = IntRange(0, rows * columns - 1).map { + PuzzlePiece(it % columns, it / columns, Entry()) }.shuffled(),//.take(37), // TODO To test only a subset of elements, uncomment .take savedStateMap = buildContext.savedStateMap, defaultAnimationSpec = animationSpec @@ -64,6 +69,7 @@ class Puzzle1Node( appyxComponent = gridPuzzle ) { + @OptIn(ExperimentalResourceApi::class) override fun resolve(puzzlePiece: PuzzlePiece, buildContext: BuildContext): Node = node(buildContext) { modifier -> val colorIdx = rememberSaveable(puzzlePiece) { Random.nextInt(colors.size) } @@ -71,24 +77,24 @@ class Puzzle1Node( Box( modifier = modifier - .fillMaxWidth(1f / gridCols) - .fillMaxHeight(1f / gridRows) + .fillMaxWidth(1f / columns) + .fillMaxHeight(1f / rows) ) { FlashCard( flash = Color.White, front = { modifier -> - Box(modifier = modifier - .fillMaxSize() - .background(color) - ) { - Text("${puzzlePiece.i},${puzzlePiece.j}") - } + ResourceImage( + path = "${imageDirectory}slice_${puzzlePiece.j}_${puzzlePiece.i}.png", + contentScale = ContentScale.FillBounds, + modifier = modifier + .fillMaxSize() + ) }, back = { modifier -> EntryCard( modifier = modifier .fillMaxSize() - .background(color) , + .background(color), puzzlePiece.entry ) } @@ -107,13 +113,14 @@ class Puzzle1Node( Box( modifier = modifier .fillMaxSize() + .background(appyx_dark) .padding(24.dp), ) { AppyxComponent( appyxComponent = gridPuzzle, modifier = Modifier .align(Alignment.Center) - .aspectRatio(1f * gridCols / gridRows) + .aspectRatio(1f * columns / rows) .background(Color.DarkGray) ) Controls( @@ -122,9 +129,10 @@ class Puzzle1Node( } } + @OptIn(ExperimentalLayoutApi::class) @Composable private fun Controls(modifier: Modifier) { - Row( + FlowRow( modifier = modifier, horizontalArrangement = Arrangement.Center ) { diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/ui/Ext.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/ui/ColorExt.kt similarity index 100% rename from shared/src/commonMain/kotlin/com/bumble/puzzyx/ui/Ext.kt rename to shared/src/commonMain/kotlin/com/bumble/puzzyx/ui/ColorExt.kt diff --git a/shared/src/commonMain/kotlin/com/bumble/puzzyx/ui/DottedMeshShape.kt b/shared/src/commonMain/kotlin/com/bumble/puzzyx/ui/DottedMeshShape.kt new file mode 100644 index 00000000..40b3dab7 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/bumble/puzzyx/ui/DottedMeshShape.kt @@ -0,0 +1,89 @@ +package com.bumble.puzzyx.ui + +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Rect +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Outline +import androidx.compose.ui.graphics.Path +import androidx.compose.ui.graphics.PathOperation +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.LayoutDirection +import com.bumble.appyx.interactions.core.annotations.FloatRange +import com.bumble.appyx.interactions.core.ui.math.lerpFloat +import com.bumble.puzzyx.math.mapValueRange +import kotlin.math.abs + +/** + * Creates a shape that contains [meshSizeX] * [meshSizeY] evenly spaced individual + * circles. + * + * Expecting a [progress] value that represents the state of the animation in the [0f..1f] range, + * each circle's radius will be calculated for the current frame such that: + * - the starting value for radius is 0 + * - the maximum radius is [maxRadius] + * - the radius animation for a given circle is delayed based on its position in the mesh, + * center ones starting first, gradually followed by ones closer to the edges + * + * The animation itself does not happen in this class, it only represents one frame given + * the passed in [progress] value. + */ +class DottedMeshShape( + private val meshSizeX: Int, + private val meshSizeY: Int, + private val maxRadius: Float, + @FloatRange(from=0.0, to=1.0) + private val progress: Float = 0f +) : Shape { + override fun createOutline( + size: Size, + layoutDirection: LayoutDirection, + density: Density + ): Outline { + val (width, height) = size + val progressDelayed = lerpFloat(-1.0f, 1f, progress) + + val sheet = Path().apply { + addRect(Rect(0f, 0f, width, height)) + } + val dots = Path().apply { + for (y in 0 until meshSizeY) { + for (x in 0 until meshSizeX) { + val u = x / (meshSizeX - 1f) + val v = y / (meshSizeY - 1f) + + val center = Offset( + x = lerpFloat(0f, width, u), + y = lerpFloat(0f, height, v) + ) + + val radius = mapValueRange( + value = progressDelayed + + (0.5f - abs(u - 0.5f)) + + (0.5f - abs(v - 0.5f)), + fromRangeMin = 0f, + fromRangeMax = 2f, + destRangeMin = 0f, + destRangeMax = maxRadius + ) + + addOval( + Rect( + left = center.x - radius, + top = center.y - radius, + right = center.x + radius, + bottom = center.y + radius + ), + ) + } + } + } + + val diff = Path().apply { + op(sheet, dots, PathOperation.Difference) + } + + return Outline.Generic(diff) + } +} + diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_0.png b/shared/src/commonMain/resources/bumble_logo/slice_0_0.png new file mode 100644 index 00000000..f9edb4fc Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_0.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_1.png b/shared/src/commonMain/resources/bumble_logo/slice_0_1.png new file mode 100644 index 00000000..27e9fa0d Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_1.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_10.png b/shared/src/commonMain/resources/bumble_logo/slice_0_10.png new file mode 100644 index 00000000..5003e4a0 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_10.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_11.png b/shared/src/commonMain/resources/bumble_logo/slice_0_11.png new file mode 100644 index 00000000..932b7c63 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_11.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_12.png b/shared/src/commonMain/resources/bumble_logo/slice_0_12.png new file mode 100644 index 00000000..3d758edf Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_12.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_13.png b/shared/src/commonMain/resources/bumble_logo/slice_0_13.png new file mode 100644 index 00000000..ca198193 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_13.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_14.png b/shared/src/commonMain/resources/bumble_logo/slice_0_14.png new file mode 100644 index 00000000..f08ab688 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_14.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_15.png b/shared/src/commonMain/resources/bumble_logo/slice_0_15.png new file mode 100644 index 00000000..59f27890 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_15.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_16.png b/shared/src/commonMain/resources/bumble_logo/slice_0_16.png new file mode 100644 index 00000000..4b67f917 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_16.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_17.png b/shared/src/commonMain/resources/bumble_logo/slice_0_17.png new file mode 100644 index 00000000..037a70dc Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_17.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_18.png b/shared/src/commonMain/resources/bumble_logo/slice_0_18.png new file mode 100644 index 00000000..159bc39d Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_18.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_2.png b/shared/src/commonMain/resources/bumble_logo/slice_0_2.png new file mode 100644 index 00000000..ce12b710 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_2.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_3.png b/shared/src/commonMain/resources/bumble_logo/slice_0_3.png new file mode 100644 index 00000000..b21e88af Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_3.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_4.png b/shared/src/commonMain/resources/bumble_logo/slice_0_4.png new file mode 100644 index 00000000..c02cb541 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_4.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_5.png b/shared/src/commonMain/resources/bumble_logo/slice_0_5.png new file mode 100644 index 00000000..3098428d Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_5.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_6.png b/shared/src/commonMain/resources/bumble_logo/slice_0_6.png new file mode 100644 index 00000000..106c125b Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_6.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_7.png b/shared/src/commonMain/resources/bumble_logo/slice_0_7.png new file mode 100644 index 00000000..73676947 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_7.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_8.png b/shared/src/commonMain/resources/bumble_logo/slice_0_8.png new file mode 100644 index 00000000..3b62eb63 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_8.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_0_9.png b/shared/src/commonMain/resources/bumble_logo/slice_0_9.png new file mode 100644 index 00000000..15a9af03 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_0_9.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_0.png b/shared/src/commonMain/resources/bumble_logo/slice_1_0.png new file mode 100644 index 00000000..1a115924 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_0.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_1.png b/shared/src/commonMain/resources/bumble_logo/slice_1_1.png new file mode 100644 index 00000000..effc1910 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_1.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_10.png b/shared/src/commonMain/resources/bumble_logo/slice_1_10.png new file mode 100644 index 00000000..bf53e337 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_10.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_11.png b/shared/src/commonMain/resources/bumble_logo/slice_1_11.png new file mode 100644 index 00000000..f518ffe7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_11.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_12.png b/shared/src/commonMain/resources/bumble_logo/slice_1_12.png new file mode 100644 index 00000000..c51dc745 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_12.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_13.png b/shared/src/commonMain/resources/bumble_logo/slice_1_13.png new file mode 100644 index 00000000..202bfadf Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_13.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_14.png b/shared/src/commonMain/resources/bumble_logo/slice_1_14.png new file mode 100644 index 00000000..e3565598 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_14.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_15.png b/shared/src/commonMain/resources/bumble_logo/slice_1_15.png new file mode 100644 index 00000000..eebf2b16 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_15.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_16.png b/shared/src/commonMain/resources/bumble_logo/slice_1_16.png new file mode 100644 index 00000000..e0cdb0c4 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_16.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_17.png b/shared/src/commonMain/resources/bumble_logo/slice_1_17.png new file mode 100644 index 00000000..95a6d522 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_17.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_18.png b/shared/src/commonMain/resources/bumble_logo/slice_1_18.png new file mode 100644 index 00000000..2801e116 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_18.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_2.png b/shared/src/commonMain/resources/bumble_logo/slice_1_2.png new file mode 100644 index 00000000..4b7907f1 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_2.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_3.png b/shared/src/commonMain/resources/bumble_logo/slice_1_3.png new file mode 100644 index 00000000..86227826 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_3.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_4.png b/shared/src/commonMain/resources/bumble_logo/slice_1_4.png new file mode 100644 index 00000000..e27ce35a Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_4.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_5.png b/shared/src/commonMain/resources/bumble_logo/slice_1_5.png new file mode 100644 index 00000000..1d6a62fc Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_5.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_6.png b/shared/src/commonMain/resources/bumble_logo/slice_1_6.png new file mode 100644 index 00000000..e440cff7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_6.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_7.png b/shared/src/commonMain/resources/bumble_logo/slice_1_7.png new file mode 100644 index 00000000..2c51d504 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_7.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_8.png b/shared/src/commonMain/resources/bumble_logo/slice_1_8.png new file mode 100644 index 00000000..77464805 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_8.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_1_9.png b/shared/src/commonMain/resources/bumble_logo/slice_1_9.png new file mode 100644 index 00000000..2d0f4a4e Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_1_9.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_0.png b/shared/src/commonMain/resources/bumble_logo/slice_2_0.png new file mode 100644 index 00000000..821ffc18 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_0.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_1.png b/shared/src/commonMain/resources/bumble_logo/slice_2_1.png new file mode 100644 index 00000000..404e18c9 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_1.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_10.png b/shared/src/commonMain/resources/bumble_logo/slice_2_10.png new file mode 100644 index 00000000..628880bf Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_10.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_11.png b/shared/src/commonMain/resources/bumble_logo/slice_2_11.png new file mode 100644 index 00000000..b7a0ee4c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_11.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_12.png b/shared/src/commonMain/resources/bumble_logo/slice_2_12.png new file mode 100644 index 00000000..9080a169 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_12.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_13.png b/shared/src/commonMain/resources/bumble_logo/slice_2_13.png new file mode 100644 index 00000000..823a66c2 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_13.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_14.png b/shared/src/commonMain/resources/bumble_logo/slice_2_14.png new file mode 100644 index 00000000..b5709517 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_14.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_15.png b/shared/src/commonMain/resources/bumble_logo/slice_2_15.png new file mode 100644 index 00000000..9879bc96 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_15.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_16.png b/shared/src/commonMain/resources/bumble_logo/slice_2_16.png new file mode 100644 index 00000000..fa887b97 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_16.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_17.png b/shared/src/commonMain/resources/bumble_logo/slice_2_17.png new file mode 100644 index 00000000..5ba68433 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_17.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_18.png b/shared/src/commonMain/resources/bumble_logo/slice_2_18.png new file mode 100644 index 00000000..62887e1c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_18.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_2.png b/shared/src/commonMain/resources/bumble_logo/slice_2_2.png new file mode 100644 index 00000000..5dcb83b5 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_2.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_3.png b/shared/src/commonMain/resources/bumble_logo/slice_2_3.png new file mode 100644 index 00000000..b5595b38 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_3.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_4.png b/shared/src/commonMain/resources/bumble_logo/slice_2_4.png new file mode 100644 index 00000000..d47341bd Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_4.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_5.png b/shared/src/commonMain/resources/bumble_logo/slice_2_5.png new file mode 100644 index 00000000..832ee7a7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_5.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_6.png b/shared/src/commonMain/resources/bumble_logo/slice_2_6.png new file mode 100644 index 00000000..e3e28eca Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_6.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_7.png b/shared/src/commonMain/resources/bumble_logo/slice_2_7.png new file mode 100644 index 00000000..045bde89 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_7.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_8.png b/shared/src/commonMain/resources/bumble_logo/slice_2_8.png new file mode 100644 index 00000000..8b34d07e Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_8.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_2_9.png b/shared/src/commonMain/resources/bumble_logo/slice_2_9.png new file mode 100644 index 00000000..51497120 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_2_9.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_0.png b/shared/src/commonMain/resources/bumble_logo/slice_3_0.png new file mode 100644 index 00000000..4517ce9a Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_0.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_1.png b/shared/src/commonMain/resources/bumble_logo/slice_3_1.png new file mode 100644 index 00000000..4f5be189 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_1.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_10.png b/shared/src/commonMain/resources/bumble_logo/slice_3_10.png new file mode 100644 index 00000000..a6a7f913 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_10.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_11.png b/shared/src/commonMain/resources/bumble_logo/slice_3_11.png new file mode 100644 index 00000000..862221d1 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_11.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_12.png b/shared/src/commonMain/resources/bumble_logo/slice_3_12.png new file mode 100644 index 00000000..1d8c3bf8 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_12.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_13.png b/shared/src/commonMain/resources/bumble_logo/slice_3_13.png new file mode 100644 index 00000000..334d6eb8 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_13.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_14.png b/shared/src/commonMain/resources/bumble_logo/slice_3_14.png new file mode 100644 index 00000000..c9f159a9 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_14.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_15.png b/shared/src/commonMain/resources/bumble_logo/slice_3_15.png new file mode 100644 index 00000000..10717ebf Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_15.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_16.png b/shared/src/commonMain/resources/bumble_logo/slice_3_16.png new file mode 100644 index 00000000..b7a6871c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_16.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_17.png b/shared/src/commonMain/resources/bumble_logo/slice_3_17.png new file mode 100644 index 00000000..6a8cc20a Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_17.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_18.png b/shared/src/commonMain/resources/bumble_logo/slice_3_18.png new file mode 100644 index 00000000..b5967608 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_18.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_2.png b/shared/src/commonMain/resources/bumble_logo/slice_3_2.png new file mode 100644 index 00000000..5971c6da Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_2.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_3.png b/shared/src/commonMain/resources/bumble_logo/slice_3_3.png new file mode 100644 index 00000000..fd88b925 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_3.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_4.png b/shared/src/commonMain/resources/bumble_logo/slice_3_4.png new file mode 100644 index 00000000..142de4d7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_4.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_5.png b/shared/src/commonMain/resources/bumble_logo/slice_3_5.png new file mode 100644 index 00000000..8a27ec61 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_5.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_6.png b/shared/src/commonMain/resources/bumble_logo/slice_3_6.png new file mode 100644 index 00000000..46d4a240 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_6.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_7.png b/shared/src/commonMain/resources/bumble_logo/slice_3_7.png new file mode 100644 index 00000000..1146c8aa Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_7.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_8.png b/shared/src/commonMain/resources/bumble_logo/slice_3_8.png new file mode 100644 index 00000000..1f2f9892 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_8.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_3_9.png b/shared/src/commonMain/resources/bumble_logo/slice_3_9.png new file mode 100644 index 00000000..48380d29 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_3_9.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_0.png b/shared/src/commonMain/resources/bumble_logo/slice_4_0.png new file mode 100644 index 00000000..9e442eab Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_0.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_1.png b/shared/src/commonMain/resources/bumble_logo/slice_4_1.png new file mode 100644 index 00000000..14a49dc8 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_1.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_10.png b/shared/src/commonMain/resources/bumble_logo/slice_4_10.png new file mode 100644 index 00000000..2cb0d7b9 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_10.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_11.png b/shared/src/commonMain/resources/bumble_logo/slice_4_11.png new file mode 100644 index 00000000..303d4284 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_11.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_12.png b/shared/src/commonMain/resources/bumble_logo/slice_4_12.png new file mode 100644 index 00000000..bd6ea2e7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_12.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_13.png b/shared/src/commonMain/resources/bumble_logo/slice_4_13.png new file mode 100644 index 00000000..bd6ea2e7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_13.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_14.png b/shared/src/commonMain/resources/bumble_logo/slice_4_14.png new file mode 100644 index 00000000..27c705e4 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_14.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_15.png b/shared/src/commonMain/resources/bumble_logo/slice_4_15.png new file mode 100644 index 00000000..ea93f72d Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_15.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_16.png b/shared/src/commonMain/resources/bumble_logo/slice_4_16.png new file mode 100644 index 00000000..c8bcdc7e Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_16.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_17.png b/shared/src/commonMain/resources/bumble_logo/slice_4_17.png new file mode 100644 index 00000000..fc1e45b9 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_17.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_18.png b/shared/src/commonMain/resources/bumble_logo/slice_4_18.png new file mode 100644 index 00000000..62286934 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_18.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_2.png b/shared/src/commonMain/resources/bumble_logo/slice_4_2.png new file mode 100644 index 00000000..f2e879e1 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_2.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_3.png b/shared/src/commonMain/resources/bumble_logo/slice_4_3.png new file mode 100644 index 00000000..d1833d0b Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_3.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_4.png b/shared/src/commonMain/resources/bumble_logo/slice_4_4.png new file mode 100644 index 00000000..bd6ea2e7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_4.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_5.png b/shared/src/commonMain/resources/bumble_logo/slice_4_5.png new file mode 100644 index 00000000..50be4d3e Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_5.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_6.png b/shared/src/commonMain/resources/bumble_logo/slice_4_6.png new file mode 100644 index 00000000..a8ad7b69 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_6.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_7.png b/shared/src/commonMain/resources/bumble_logo/slice_4_7.png new file mode 100644 index 00000000..e9db49b1 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_7.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_8.png b/shared/src/commonMain/resources/bumble_logo/slice_4_8.png new file mode 100644 index 00000000..8b40e23c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_8.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_4_9.png b/shared/src/commonMain/resources/bumble_logo/slice_4_9.png new file mode 100644 index 00000000..0acba4a4 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_4_9.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_0.png b/shared/src/commonMain/resources/bumble_logo/slice_5_0.png new file mode 100644 index 00000000..be743241 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_0.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_1.png b/shared/src/commonMain/resources/bumble_logo/slice_5_1.png new file mode 100644 index 00000000..d1171d5b Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_1.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_10.png b/shared/src/commonMain/resources/bumble_logo/slice_5_10.png new file mode 100644 index 00000000..4334740c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_10.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_11.png b/shared/src/commonMain/resources/bumble_logo/slice_5_11.png new file mode 100644 index 00000000..0685fd72 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_11.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_12.png b/shared/src/commonMain/resources/bumble_logo/slice_5_12.png new file mode 100644 index 00000000..21d1a096 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_12.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_13.png b/shared/src/commonMain/resources/bumble_logo/slice_5_13.png new file mode 100644 index 00000000..de664b41 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_13.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_14.png b/shared/src/commonMain/resources/bumble_logo/slice_5_14.png new file mode 100644 index 00000000..8dc2067e Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_14.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_15.png b/shared/src/commonMain/resources/bumble_logo/slice_5_15.png new file mode 100644 index 00000000..bef66bf1 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_15.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_16.png b/shared/src/commonMain/resources/bumble_logo/slice_5_16.png new file mode 100644 index 00000000..88546c3e Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_16.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_17.png b/shared/src/commonMain/resources/bumble_logo/slice_5_17.png new file mode 100644 index 00000000..3f99253e Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_17.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_18.png b/shared/src/commonMain/resources/bumble_logo/slice_5_18.png new file mode 100644 index 00000000..70cc3b52 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_18.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_2.png b/shared/src/commonMain/resources/bumble_logo/slice_5_2.png new file mode 100644 index 00000000..f83f8364 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_2.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_3.png b/shared/src/commonMain/resources/bumble_logo/slice_5_3.png new file mode 100644 index 00000000..fd0dcd6f Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_3.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_4.png b/shared/src/commonMain/resources/bumble_logo/slice_5_4.png new file mode 100644 index 00000000..b486754c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_4.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_5.png b/shared/src/commonMain/resources/bumble_logo/slice_5_5.png new file mode 100644 index 00000000..06c653da Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_5.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_6.png b/shared/src/commonMain/resources/bumble_logo/slice_5_6.png new file mode 100644 index 00000000..bd6ea2e7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_6.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_7.png b/shared/src/commonMain/resources/bumble_logo/slice_5_7.png new file mode 100644 index 00000000..bd6ea2e7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_7.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_8.png b/shared/src/commonMain/resources/bumble_logo/slice_5_8.png new file mode 100644 index 00000000..bd6ea2e7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_8.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_5_9.png b/shared/src/commonMain/resources/bumble_logo/slice_5_9.png new file mode 100644 index 00000000..bd6ea2e7 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_5_9.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_0.png b/shared/src/commonMain/resources/bumble_logo/slice_6_0.png new file mode 100644 index 00000000..46db40ac Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_0.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_1.png b/shared/src/commonMain/resources/bumble_logo/slice_6_1.png new file mode 100644 index 00000000..8a908153 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_1.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_10.png b/shared/src/commonMain/resources/bumble_logo/slice_6_10.png new file mode 100644 index 00000000..081e086c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_10.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_11.png b/shared/src/commonMain/resources/bumble_logo/slice_6_11.png new file mode 100644 index 00000000..bb354103 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_11.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_12.png b/shared/src/commonMain/resources/bumble_logo/slice_6_12.png new file mode 100644 index 00000000..3d441083 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_12.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_13.png b/shared/src/commonMain/resources/bumble_logo/slice_6_13.png new file mode 100644 index 00000000..0e1e3554 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_13.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_14.png b/shared/src/commonMain/resources/bumble_logo/slice_6_14.png new file mode 100644 index 00000000..f0b305f2 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_14.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_15.png b/shared/src/commonMain/resources/bumble_logo/slice_6_15.png new file mode 100644 index 00000000..116fce07 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_15.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_16.png b/shared/src/commonMain/resources/bumble_logo/slice_6_16.png new file mode 100644 index 00000000..b043b3b2 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_16.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_17.png b/shared/src/commonMain/resources/bumble_logo/slice_6_17.png new file mode 100644 index 00000000..e4535d74 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_17.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_18.png b/shared/src/commonMain/resources/bumble_logo/slice_6_18.png new file mode 100644 index 00000000..d871db07 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_18.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_2.png b/shared/src/commonMain/resources/bumble_logo/slice_6_2.png new file mode 100644 index 00000000..7f042e53 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_2.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_3.png b/shared/src/commonMain/resources/bumble_logo/slice_6_3.png new file mode 100644 index 00000000..9ad4482c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_3.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_4.png b/shared/src/commonMain/resources/bumble_logo/slice_6_4.png new file mode 100644 index 00000000..24fb6f31 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_4.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_5.png b/shared/src/commonMain/resources/bumble_logo/slice_6_5.png new file mode 100644 index 00000000..d90c1948 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_5.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_6.png b/shared/src/commonMain/resources/bumble_logo/slice_6_6.png new file mode 100644 index 00000000..9dacb96a Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_6.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_7.png b/shared/src/commonMain/resources/bumble_logo/slice_6_7.png new file mode 100644 index 00000000..cefd8bcb Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_7.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_8.png b/shared/src/commonMain/resources/bumble_logo/slice_6_8.png new file mode 100644 index 00000000..ab403746 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_8.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_6_9.png b/shared/src/commonMain/resources/bumble_logo/slice_6_9.png new file mode 100644 index 00000000..605a84ec Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_6_9.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_0.png b/shared/src/commonMain/resources/bumble_logo/slice_7_0.png new file mode 100644 index 00000000..b9b96ff9 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_0.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_1.png b/shared/src/commonMain/resources/bumble_logo/slice_7_1.png new file mode 100644 index 00000000..812e6d59 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_1.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_10.png b/shared/src/commonMain/resources/bumble_logo/slice_7_10.png new file mode 100644 index 00000000..615f8aa4 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_10.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_11.png b/shared/src/commonMain/resources/bumble_logo/slice_7_11.png new file mode 100644 index 00000000..906ad51a Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_11.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_12.png b/shared/src/commonMain/resources/bumble_logo/slice_7_12.png new file mode 100644 index 00000000..0cdd9de6 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_12.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_13.png b/shared/src/commonMain/resources/bumble_logo/slice_7_13.png new file mode 100644 index 00000000..54bd1e42 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_13.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_14.png b/shared/src/commonMain/resources/bumble_logo/slice_7_14.png new file mode 100644 index 00000000..fec145bb Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_14.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_15.png b/shared/src/commonMain/resources/bumble_logo/slice_7_15.png new file mode 100644 index 00000000..6a87ebe0 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_15.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_16.png b/shared/src/commonMain/resources/bumble_logo/slice_7_16.png new file mode 100644 index 00000000..b52ee675 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_16.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_17.png b/shared/src/commonMain/resources/bumble_logo/slice_7_17.png new file mode 100644 index 00000000..738736ce Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_17.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_18.png b/shared/src/commonMain/resources/bumble_logo/slice_7_18.png new file mode 100644 index 00000000..8054cbc8 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_18.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_2.png b/shared/src/commonMain/resources/bumble_logo/slice_7_2.png new file mode 100644 index 00000000..192915a5 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_2.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_3.png b/shared/src/commonMain/resources/bumble_logo/slice_7_3.png new file mode 100644 index 00000000..cab233c2 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_3.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_4.png b/shared/src/commonMain/resources/bumble_logo/slice_7_4.png new file mode 100644 index 00000000..0102fd4d Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_4.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_5.png b/shared/src/commonMain/resources/bumble_logo/slice_7_5.png new file mode 100644 index 00000000..9e675d95 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_5.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_6.png b/shared/src/commonMain/resources/bumble_logo/slice_7_6.png new file mode 100644 index 00000000..3afefa67 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_6.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_7.png b/shared/src/commonMain/resources/bumble_logo/slice_7_7.png new file mode 100644 index 00000000..5be44f20 Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_7.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_8.png b/shared/src/commonMain/resources/bumble_logo/slice_7_8.png new file mode 100644 index 00000000..e864095e Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_8.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_7_9.png b/shared/src/commonMain/resources/bumble_logo/slice_7_9.png new file mode 100644 index 00000000..d279307b Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_7_9.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_0.png b/shared/src/commonMain/resources/bumble_logo/slice_8_0.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_0.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_1.png b/shared/src/commonMain/resources/bumble_logo/slice_8_1.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_1.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_10.png b/shared/src/commonMain/resources/bumble_logo/slice_8_10.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_10.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_11.png b/shared/src/commonMain/resources/bumble_logo/slice_8_11.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_11.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_12.png b/shared/src/commonMain/resources/bumble_logo/slice_8_12.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_12.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_13.png b/shared/src/commonMain/resources/bumble_logo/slice_8_13.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_13.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_14.png b/shared/src/commonMain/resources/bumble_logo/slice_8_14.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_14.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_15.png b/shared/src/commonMain/resources/bumble_logo/slice_8_15.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_15.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_16.png b/shared/src/commonMain/resources/bumble_logo/slice_8_16.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_16.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_17.png b/shared/src/commonMain/resources/bumble_logo/slice_8_17.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_17.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_18.png b/shared/src/commonMain/resources/bumble_logo/slice_8_18.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_18.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_2.png b/shared/src/commonMain/resources/bumble_logo/slice_8_2.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_2.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_3.png b/shared/src/commonMain/resources/bumble_logo/slice_8_3.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_3.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_4.png b/shared/src/commonMain/resources/bumble_logo/slice_8_4.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_4.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_5.png b/shared/src/commonMain/resources/bumble_logo/slice_8_5.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_5.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_6.png b/shared/src/commonMain/resources/bumble_logo/slice_8_6.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_6.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_7.png b/shared/src/commonMain/resources/bumble_logo/slice_8_7.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_7.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_8.png b/shared/src/commonMain/resources/bumble_logo/slice_8_8.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_8.png differ diff --git a/shared/src/commonMain/resources/bumble_logo/slice_8_9.png b/shared/src/commonMain/resources/bumble_logo/slice_8_9.png new file mode 100644 index 00000000..0d70f70c Binary files /dev/null and b/shared/src/commonMain/resources/bumble_logo/slice_8_9.png differ diff --git a/shared/src/desktopMain/kotlin/com/bumble/puzzyx/imageloader/ImageBitmap.kt b/shared/src/desktopMain/kotlin/com/bumble/puzzyx/imageloader/ImageBitmap.kt new file mode 100644 index 00000000..62c667ee --- /dev/null +++ b/shared/src/desktopMain/kotlin/com/bumble/puzzyx/imageloader/ImageBitmap.kt @@ -0,0 +1,8 @@ +package com.bumble.puzzyx.imageloader + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.toComposeImageBitmap +import org.jetbrains.skia.Image + +actual fun ByteArray.toImageBitmap(): ImageBitmap = + Image.makeFromEncoded(this).toComposeImageBitmap()