Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ private fun DefaultAvatarIcon(
contentDescription: String,
) {
Icon(
painter = painterResource(R.drawable.ic_person),
painter = painterResource(R.drawable.core_designsystem_ic_person),
contentDescription = contentDescription,
modifier = Modifier.size(prezelAvatarIconSize(size)),
tint = PrezelTheme.colors.iconDisabled,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
package com.team.prezel.core.designsystem.component.image

import androidx.annotation.DrawableRes
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.team.prezel.core.designsystem.component.PrezelAsyncImage
import com.team.prezel.core.designsystem.icon.PrezelIcons
import com.team.prezel.core.designsystem.preview.ThemePreview
import com.team.prezel.core.designsystem.theme.PrezelTheme

@Composable
fun PrezelImage(
url: String,
contentDescription: String,
modifier: Modifier = Modifier,
rounded: Boolean = false,
border: Boolean = false,
onSuccess: () -> Unit = {},
onError: (Throwable?) -> Unit = {},
) {
Box(
modifier = modifier.prezelImageContainer(rounded, border),
contentAlignment = Alignment.Center,
) {
PrezelAsyncImage(
url = url,
contentDescription = contentDescription,
modifier = Modifier.fillMaxSize(),
contentScale = ContentScale.Crop,
onSuccess = onSuccess,
onError = onError,
)
}
}

@Composable
fun PrezelImage(
@DrawableRes resId: Int,
contentDescription: String,
modifier: Modifier = Modifier,
rounded: Boolean = false,
border: Boolean = false,
) {
Box(
modifier = modifier.prezelImageContainer(rounded, border),
contentAlignment = Alignment.Center,
) {
Image(
painter = painterResource(id = resId),
contentDescription = contentDescription,
modifier = Modifier,
contentScale = ContentScale.Fit,
)
}
}

@Composable
private fun Modifier.prezelImageContainer(
rounded: Boolean,
border: Boolean,
): Modifier {
val shape = if (rounded) RoundedCornerShape(12.dp) else RectangleShape
val borderStroke = if (border) BorderStroke(width = 1.dp, color = PrezelTheme.colors.borderRegular) else null

return this
.clip(shape)
.then(if (borderStroke != null) Modifier.border(borderStroke, shape) else Modifier)
}

@ThemePreview
@Composable
private fun PrezelImagePreview() {
PrezelTheme {
Column(
modifier = Modifier
.background(PrezelTheme.colors.bgRegular)
.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp),
) {
PrezelImagePreviewItem(
label = "Drawable / No Round / No Border",
rounded = false,
border = false,
)

PrezelImagePreviewItem(
label = "Drawable / Round / No Border",
rounded = true,
border = false,
)

PrezelImagePreviewItem(
label = "Drawable / No Round / Border",
rounded = false,
border = true,
)

PrezelImagePreviewItem(
label = "Drawable / Round / Border",
rounded = true,
border = true,
)
}
}
}

@Composable
private fun PrezelImagePreviewItem(
label: String,
rounded: Boolean,
border: Boolean,
) {
Text(text = label)
PrezelImage(
resId = PrezelIcons.Calendar,
contentDescription = label,
modifier = Modifier.size(100.dp),
rounded = rounded,
border = border,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.team.prezel.core.designsystem.component.image

import androidx.compose.runtime.Immutable

@Immutable
sealed interface PrezelImageSource {
@Immutable
data class Url(
val value: String,
) : PrezelImageSource

@Immutable
data class Drawable(
val resId: Int,
) : PrezelImageSource
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,46 +3,46 @@ package com.team.prezel.core.designsystem.icon
import com.team.prezel.core.designsystem.R

object PrezelIcons {
val ArrowLeft = R.drawable.ic_arrow_left
val Balloon = R.drawable.ic_balloon
val Blank = R.drawable.ic_blank
val Calendar = R.drawable.ic_calendar
val Cancel = R.drawable.ic_cancel
val CancelCircleFilled = R.drawable.ic_cancel_circle_filled
val CancelCircleOutlined = R.drawable.ic_cancel_circle_outlined
val Check = R.drawable.ic_check
val CheckCircleFilled = R.drawable.ic_check_circle_filled
val CheckCircleOutlined = R.drawable.ic_check_circle_outlined
val ChevronDown = R.drawable.ic_chevron_down
val ChevronLeft = R.drawable.ic_chevron_left
val ChevronRight = R.drawable.ic_chevron_right
val ChevronUp = R.drawable.ic_chevron_up
val College = R.drawable.ic_college
val Company = R.drawable.ic_company
val Folder = R.drawable.ic_folder
val Gallery = R.drawable.ic_gallery
val Hand = R.drawable.ic_hand
val Home = R.drawable.ic_home
val Info = R.drawable.ic_info
val InfoCircle = R.drawable.ic_info_circle
val Kakao = R.drawable.ic_kakao
val Mic = R.drawable.ic_mic
val Pause = R.drawable.ic_pause
val Person = R.drawable.ic_person
val Play = R.drawable.ic_play
val Plus = R.drawable.ic_plus
val Profile = R.drawable.ic_profile
val RadioCircleFilled = R.drawable.ic_radio_circle_filled
val RadioCircleOutlined = R.drawable.ic_radio_circle_outlined
val Recording = R.drawable.ic_recording
val Reset = R.drawable.ic_reset
val Rotate = R.drawable.ic_rotate
val Stop = R.drawable.ic_stop
val Trophy = R.drawable.ic_trophy
val Video = R.drawable.ic_video
val Voice = R.drawable.ic_voice
val Warning = R.drawable.ic_warning
val WarningCircle = R.drawable.ic_warning_circle
val ZoomIn = R.drawable.ic_zoom_in
val ZoomOut = R.drawable.ic_zoom_out
val ArrowLeft = R.drawable.core_designsystem_ic_arrow_left
val Balloon = R.drawable.core_designsystem_ic_balloon
val Blank = R.drawable.core_designsystem_ic_blank
val Calendar = R.drawable.core_designsystem_ic_calendar
val Cancel = R.drawable.core_designsystem_ic_cancel
val CancelCircleFilled = R.drawable.core_designsystem_ic_cancel_circle_filled
val CancelCircleOutlined = R.drawable.core_designsystem_ic_cancel_circle_outlined
val Check = R.drawable.core_designsystem_ic_check
val CheckCircleFilled = R.drawable.core_designsystem_ic_check_circle_filled
val CheckCircleOutlined = R.drawable.core_designsystem_ic_check_circle_outlined
val ChevronDown = R.drawable.core_designsystem_ic_chevron_down
val ChevronLeft = R.drawable.core_designsystem_ic_chevron_left
val ChevronRight = R.drawable.core_designsystem_ic_chevron_right
val ChevronUp = R.drawable.core_designsystem_ic_chevron_up
val College = R.drawable.core_designsystem_ic_college
val Company = R.drawable.core_designsystem_ic_company
val Folder = R.drawable.core_designsystem_ic_folder
val Gallery = R.drawable.core_designsystem_ic_gallery
val Hand = R.drawable.core_designsystem_ic_hand
val Home = R.drawable.core_designsystem_ic_home
val Info = R.drawable.core_designsystem_ic_info
val InfoCircle = R.drawable.core_designsystem_ic_info_circle
val Kakao = R.drawable.core_designsystem_ic_kakao
val Mic = R.drawable.core_designsystem_ic_mic
val Pause = R.drawable.core_designsystem_ic_pause
val Person = R.drawable.core_designsystem_ic_person
val Play = R.drawable.core_designsystem_ic_play
val Plus = R.drawable.core_designsystem_ic_plus
val Profile = R.drawable.core_designsystem_ic_profile
val RadioCircleFilled = R.drawable.core_designsystem_ic_radio_circle_filled
val RadioCircleOutlined = R.drawable.core_designsystem_ic_radio_circle_outlined
val Recording = R.drawable.core_designsystem_ic_recording
val Reset = R.drawable.core_designsystem_ic_reset
val Rotate = R.drawable.core_designsystem_ic_rotate
val Stop = R.drawable.core_designsystem_ic_stop
val Trophy = R.drawable.core_designsystem_ic_trophy
val Video = R.drawable.core_designsystem_ic_video
val Voice = R.drawable.core_designsystem_ic_voice
val Warning = R.drawable.core_designsystem_ic_warning
val WarningCircle = R.drawable.core_designsystem_ic_warning_circle
val ZoomIn = R.drawable.core_designsystem_ic_zoom_in
val ZoomOut = R.drawable.core_designsystem_ic_zoom_out
}