diff --git a/bezier/src/main/java/io/channel/bezier/compose/component/emoji/BezierEmoji.kt b/bezier/src/main/java/io/channel/bezier/compose/component/emoji/BezierEmoji.kt new file mode 100644 index 00000000..a55b18ee --- /dev/null +++ b/bezier/src/main/java/io/channel/bezier/compose/component/emoji/BezierEmoji.kt @@ -0,0 +1,81 @@ +package io.channel.bezier.compose.component.emoji + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.requiredSize +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import io.channel.bezier.BezierTheme +import io.channel.bezier.compose.component.badge.chat.BezierChatBadge +import io.channel.bezier.compose.component.emoji.properties.BezierEmojiBadge +import io.channel.bezier.compose.component.emoji.properties.BezierEmojiSize +import io.channel.bezier.extension.toEmojiPainter + +@Composable +fun BezierEmoji( + name: String, + size: BezierEmojiSize, + modifier: Modifier = Modifier, + badge: BezierEmojiBadge = BezierEmojiBadge.None, +) { + Box( + modifier = modifier + .requiredSize(size.size), + ) { + Image( + modifier = Modifier.fillMaxSize(), + painter = name.toEmojiPainter, + contentDescription = null, + ) + + Box( + modifier = Modifier + .align(Alignment.BottomEnd) + .offset(x = 4.dp, y = 4.dp), + ) { + when (badge) { + BezierEmojiBadge.None -> Unit + BezierEmojiBadge.Chat -> BezierChatBadge(size = size.chatBadgeSize) + } + } + } +} + +@Preview(showBackground = true, widthDp = 700, heightDp = 300) +@Composable +private fun BezierEmojiPreview() { + BezierTheme { + Column { + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + BezierEmojiSize.entries.forEach { size -> + BezierEmoji( + name = "smile", + size = size, + ) + } + } + + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + BezierEmojiSize.entries.forEach { size -> + BezierEmoji( + name = "smile", + size = size, + badge = BezierEmojiBadge.Chat, + ) + } + } + } + } +} diff --git a/bezier/src/main/java/io/channel/bezier/compose/component/emoji/properties/BezierEmojiBadge.kt b/bezier/src/main/java/io/channel/bezier/compose/component/emoji/properties/BezierEmojiBadge.kt new file mode 100644 index 00000000..0b7dade3 --- /dev/null +++ b/bezier/src/main/java/io/channel/bezier/compose/component/emoji/properties/BezierEmojiBadge.kt @@ -0,0 +1,6 @@ +package io.channel.bezier.compose.component.emoji.properties + +sealed interface BezierEmojiBadge { + data object None : BezierEmojiBadge + data object Chat : BezierEmojiBadge +} diff --git a/bezier/src/main/java/io/channel/bezier/compose/component/emoji/properties/BezierEmojiSize.kt b/bezier/src/main/java/io/channel/bezier/compose/component/emoji/properties/BezierEmojiSize.kt new file mode 100644 index 00000000..ae3fd26e --- /dev/null +++ b/bezier/src/main/java/io/channel/bezier/compose/component/emoji/properties/BezierEmojiSize.kt @@ -0,0 +1,56 @@ +package io.channel.bezier.compose.component.emoji.properties + +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import io.channel.bezier.compose.component.badge.chat.properties.BezierChatBadgeSize + +enum class BezierEmojiSize( + internal val size: Dp, + internal val chatBadgeSize: BezierChatBadgeSize +) { + Size16( + size = 16.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), + Size20( + size = 20.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), + Size24( + size = 24.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), + Size30( + size = 30.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), + Size36( + size = 36.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), + Size42( + size = 42.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), + Size48( + size = 48.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), + Size60( + size = 60.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), + Size72( + size = 72.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), + Size90( + size = 90.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), + Size120( + size = 120.dp, + chatBadgeSize = BezierChatBadgeSize.Medium, + ), +} +