diff --git a/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Color.kt b/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Color.kt index 3858515e..e506e91a 100644 --- a/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Color.kt +++ b/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Color.kt @@ -1,11 +1,541 @@ package com.spoony.spoony.core.designsystem.theme +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview -val Purple80 = Color(0xFFD0BCFF) -val PurpleGrey80 = Color(0xFFCCC2DC) -val Pink80 = Color(0xFFEFB8C8) +// Main +val main0 = Color(0xFFFFEFEC) +val main100 = Color(0xFFFFCEC6) +val main200 = Color(0xFFFF9785) +val main300 = Color(0xFFFF755E) +val main400 = Color(0xFFFF5235) +val main500 = Color(0xFFE1482E) +val main600 = Color(0xFFBE3A24) +val main700 = Color(0xFF962D1C) +val main800 = Color(0xFF6E2317) +val main900 = Color(0xFF4E150B) -val Purple40 = Color(0xFF6650a4) -val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) +// Point +val orange400 = Color(0xFFFF7E35) +val pink400 = Color(0xFFFF7E84) +val green400 = Color(0xFF00CB92) +val blue400 = Color(0xFF6A92FF) +val purple400 = Color(0xFFAD75F9) +val orange100 = Color(0xFFFFE1D0) +val pink100 = Color(0xFFFFE4E5) +val green100 = Color(0xFFD3F4EB) +val blue100 = Color(0xFFDCE5FE) +val purple100 = Color(0xFFEEE3FD) + +// State +val error400 = Color(0xFFFF364A) + +// Gray scale +val white = Color(0xFFFFFFFF) +val black = Color(0xFF171719) +val gray0 = Color(0xFFF7F7F8) +val gray100 = Color(0xFFEAEBEC) +val gray200 = Color(0xFFDBDCDF) +val gray300 = Color(0xFFC2C4C8) +val gray400 = Color(0xFF989BA2) +val gray500 = Color(0xFF878A93) +val gray600 = Color(0xFF5A5C63) +val gray700 = Color(0xFF46474C) +val gray800 = Color(0xFF333438) +val gray900 = Color(0xFF292A2D) + +@Stable +class SpoonyColors( + main0: Color, + main100: Color, + main200: Color, + main300: Color, + main400: Color, + main500: Color, + main600: Color, + main700: Color, + main800: Color, + main900: Color, + orange400: Color, + pink400: Color, + green400: Color, + blue400: Color, + purple400: Color, + orange100: Color, + pink100: Color, + green100: Color, + blue100: Color, + purple100: Color, + error400: Color, + white: Color, + black: Color, + gray0: Color, + gray100: Color, + gray200: Color, + gray300: Color, + gray400: Color, + gray500: Color, + gray600: Color, + gray700: Color, + gray800: Color, + gray900: Color, + isLight: Boolean +) { + var main0 by mutableStateOf(main0) + private set + var main100 by mutableStateOf(main100) + private set + var main200 by mutableStateOf(main200) + private set + var main300 by mutableStateOf(main300) + private set + var main400 by mutableStateOf(main400) + private set + var main500 by mutableStateOf(main500) + private set + var main600 by mutableStateOf(main600) + private set + var main700 by mutableStateOf(main700) + private set + var main800 by mutableStateOf(main800) + private set + var main900 by mutableStateOf(main900) + private set + var orange400 by mutableStateOf(orange400) + private set + var pink400 by mutableStateOf(pink400) + private set + var green400 by mutableStateOf(green400) + private set + var blue400 by mutableStateOf(blue400) + private set + var purple400 by mutableStateOf(purple400) + private set + var orange100 by mutableStateOf(orange100) + private set + var pink100 by mutableStateOf(pink100) + private set + var green100 by mutableStateOf(green100) + private set + var blue100 by mutableStateOf(blue100) + private set + var purple100 by mutableStateOf(purple100) + private set + var error400 by mutableStateOf(error400) + private set + var white by mutableStateOf(white) + private set + var black by mutableStateOf(black) + private set + var gray0 by mutableStateOf(gray0) + private set + var gray100 by mutableStateOf(gray100) + private set + var gray200 by mutableStateOf(gray200) + private set + var gray300 by mutableStateOf(gray300) + private set + var gray400 by mutableStateOf(gray400) + private set + var gray500 by mutableStateOf(gray500) + private set + var gray600 by mutableStateOf(gray600) + private set + var gray700 by mutableStateOf(gray700) + private set + var gray800 by mutableStateOf(gray800) + private set + var gray900 by mutableStateOf(gray900) + private set + var isLight by mutableStateOf(isLight) + + fun copy(): SpoonyColors = SpoonyColors( + main0, + main100, + main200, + main300, + main400, + main500, + main600, + main700, + main800, + main900, + orange400, + pink400, + green400, + blue400, + purple400, + orange100, + pink100, + green100, + blue100, + purple100, + error400, + white, + black, + gray0, + gray100, + gray200, + gray300, + gray400, + gray500, + gray600, + gray700, + gray800, + gray900, + isLight + ) + + fun update(other: SpoonyColors) { + main0 = other.main0 + main100 = other.main100 + main200 = other.main200 + main300 = other.main300 + main400 = other.main400 + main500 = other.main500 + main600 = other.main600 + main700 = other.main700 + main800 = other.main800 + main900 = other.main900 + orange400 = other.orange400 + pink400 = other.pink400 + green400 = other.green400 + blue400 = other.blue400 + purple400 = other.purple400 + orange100 = other.orange100 + pink100 = other.pink100 + green100 = other.green100 + blue100 = other.blue100 + purple100 = other.purple100 + error400 = other.error400 + white = other.white + black = other.black + gray0 = other.gray0 + gray100 = other.gray100 + gray200 = other.gray200 + gray300 = other.gray300 + gray400 = other.gray400 + gray500 = other.gray500 + gray600 = other.gray600 + gray700 = other.gray700 + gray800 = other.gray800 + gray900 = other.gray900 + isLight = other.isLight + } +} + +fun SpoonyLightColors( + Main0: Color = main0, + Main100: Color = main100, + Main200: Color = main200, + Main300: Color = main300, + Main400: Color = main400, + Main500: Color = main500, + Main600: Color = main600, + Main700: Color = main700, + Main800: Color = main800, + Main900: Color = main900, + Orange400: Color = orange400, + Pink400: Color = pink400, + Green400: Color = green400, + Blue400: Color = blue400, + Purple400: Color = purple400, + Orange100: Color = orange100, + Pink100: Color = pink100, + Green100: Color = green100, + Blue100: Color = blue100, + Purple100: Color = purple100, + Error400: Color = error400, + White: Color = white, + Black: Color = black, + Gray0: Color = gray0, + Gray100: Color = gray100, + Gray200: Color = gray200, + Gray300: Color = gray300, + Gray400: Color = gray400, + Gray500: Color = gray500, + Gray600: Color = gray600, + Gray700: Color = gray700, + Gray800: Color = gray800, + Gray900: Color = gray900 +) = SpoonyColors( + Main0, + Main100, + Main200, + Main300, + Main400, + Main500, + Main600, + Main700, + Main800, + Main900, + Orange400, + Pink400, + Green400, + Blue400, + Purple400, + Orange100, + Pink100, + Green100, + Blue100, + Purple100, + Error400, + White, + Black, + Gray0, + Gray100, + Gray200, + Gray300, + Gray400, + Gray500, + Gray600, + Gray700, + Gray800, + Gray900, + isLight = true +) + +@Preview(showBackground = true) +@Composable +fun SpoonyMainColorsPreview() { + SpoonyAndroidTheme { + Column { + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.main0, + modifier = Modifier.background( + color = SpoonyAndroidTheme.colors.black + ) + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.main100, + modifier = Modifier.background( + color = SpoonyAndroidTheme.colors.black + ) + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.main200 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.main300 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.main400 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.main500 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.main600 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.main700 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.main800 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.main900 + ) + } + } +} + +@Preview(showBackground = true) +@Composable +fun SpoonyPointColorsPreview() { + SpoonyAndroidTheme { + Column { + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.orange400 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.orange100, + modifier = Modifier.background( + color = SpoonyAndroidTheme.colors.black + ) + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.pink400 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.pink100, + modifier = Modifier.background( + color = SpoonyAndroidTheme.colors.black + ) + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.green400 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.green100, + modifier = Modifier.background( + color = SpoonyAndroidTheme.colors.black + ) + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.blue400 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.blue100, + modifier = Modifier.background( + color = SpoonyAndroidTheme.colors.black + ) + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.purple400 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.purple100, + modifier = Modifier.background( + color = SpoonyAndroidTheme.colors.black + ) + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.error400 + ) + } + } +} + +@Preview(showBackground = true) +@Composable +fun SpoonyStateColorsPreview() { + SpoonyAndroidTheme { + Column { + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.error400 + ) + } + } +} + +@Preview(showBackground = true) +@Composable +fun SpoonyGrayScaleColorsPreview() { + SpoonyAndroidTheme { + Column { + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.white, + modifier = Modifier.background( + color = SpoonyAndroidTheme.colors.black + ) + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.black + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.gray0, + modifier = Modifier.background( + color = SpoonyAndroidTheme.colors.black + ) + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.gray100, + modifier = Modifier.background( + color = SpoonyAndroidTheme.colors.black + ) + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.gray200 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.gray300 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.gray400 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.gray500 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.gray600 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.gray700 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.gray800 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1, + color = SpoonyAndroidTheme.colors.gray900 + ) + } + } +} diff --git a/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Theme.kt b/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Theme.kt index 9c70bbc4..a307f2af 100644 --- a/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Theme.kt +++ b/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Theme.kt @@ -1,57 +1,59 @@ package com.spoony.spoony.core.designsystem.theme -import android.os.Build -import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.dynamicDarkColorScheme -import androidx.compose.material3.dynamicLightColorScheme -import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.LocalContext +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.runtime.remember +import androidx.compose.runtime.staticCompositionLocalOf -private val DarkColorScheme = darkColorScheme( - primary = Purple80, - secondary = PurpleGrey80, - tertiary = Pink80 -) +private val LocalSpoonyColors = staticCompositionLocalOf { + error("No SpoonyColors provided") +} + +private val LocalSpoonyTypography = staticCompositionLocalOf { + error("No SpoonyTypography provided") +} -private val LightColorScheme = lightColorScheme( - primary = Purple40, - secondary = PurpleGrey40, - tertiary = Pink40 +/* +* SpoonyTheme +* +* Color에 접근하고 싶을때 SpoonyTheme.colors.primary 이런식으로 접근하면 됩니다. +* Typo를 변경하고 싶다면 SpoonyTheme.typography.heading48B 이런식으로 접근하면 됩니다. +* */ +object SpoonyAndroidTheme { + val colors: SpoonyColors + @Composable + @ReadOnlyComposable + get() = LocalSpoonyColors.current - /* Other default colors to override - background = Color(0xFFFFFBFE), - surface = Color(0xFFFFFBFE), - onPrimary = Color.White, - onSecondary = Color.White, - onTertiary = Color.White, - onBackground = Color(0xFF1C1B1F), - onSurface = Color(0xFF1C1B1F), - */ -) + val typography: SpoonyTypography + @Composable + @ReadOnlyComposable + get() = LocalSpoonyTypography.current +} @Composable -fun SpoonyAndroidTheme( - darkTheme: Boolean = isSystemInDarkTheme(), - // Dynamic color is available on Android 12+ - dynamicColor: Boolean = true, +fun ProvideSpoonyColorsAndTypography( + colors: SpoonyColors, + typography: SpoonyTypography, content: @Composable () -> Unit ) { - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } - - darkTheme -> DarkColorScheme - else -> LightColorScheme - } - - MaterialTheme( - colorScheme = colorScheme, - typography = Typography, + val provideColors = remember { colors.copy() } + provideColors.update(colors) + val provideTypography = remember { typography.copy() }.apply { update(typography) } + CompositionLocalProvider( + LocalSpoonyColors provides provideColors, + LocalSpoonyTypography provides provideTypography, content = content ) } + +@Composable +fun SpoonyAndroidTheme(darkTheme: Boolean = false, content: @Composable () -> Unit) { + val colors = SpoonyLightColors() + val typography = SpoonyTypography() + ProvideSpoonyColorsAndTypography(colors, typography) { + MaterialTheme(content = content) + } +} diff --git a/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Type.kt b/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Type.kt index e23051b7..f34ed690 100644 --- a/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Type.kt +++ b/app/src/main/java/com/spoony/spoony/core/designsystem/theme/Type.kt @@ -1,34 +1,250 @@ package com.spoony.spoony.core.designsystem.theme -import androidx.compose.material3.Typography +import androidx.compose.foundation.layout.Column +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.LineHeightStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.TextUnit +import androidx.compose.ui.unit.em import androidx.compose.ui.unit.sp +import com.spoony.spoony.R -// Set of Material typography styles to start with -val Typography = Typography( - bodyLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.5.sp +val PretendardBold = FontFamily(Font(R.font.pretendard_bold, FontWeight.Bold)) +val PretendardSemiBold = FontFamily(Font(R.font.pretendard_semibold, FontWeight.SemiBold)) +val PretendardMedium = FontFamily(Font(R.font.pretendard_medium, FontWeight.Medium)) + +@Stable +class SpoonyTypography( + title1: TextStyle, + title2b: TextStyle, + title2sb: TextStyle, + body1b: TextStyle, + body1sb: TextStyle, + body1m: TextStyle, + body2b: TextStyle, + body2sb: TextStyle, + body2m: TextStyle, + caption1b: TextStyle, + caption1m: TextStyle, + caption2b: TextStyle, + caption2m: TextStyle +) { + + var title1 by mutableStateOf(title1) + private set + var title2b by mutableStateOf(title2b) + private set + var title2sb by mutableStateOf(title2sb) + private set + var body1b by mutableStateOf(body1b) + private set + var body1sb by mutableStateOf(body1sb) + private set + var body1m by mutableStateOf(body1m) + private set + var body2b by mutableStateOf(body2b) + private set + var body2sb by mutableStateOf(body2sb) + private set + var body2m by mutableStateOf(body2m) + private set + var caption1b by mutableStateOf(caption1b) + private set + var caption1m by mutableStateOf(caption1m) + private set + var caption2b by mutableStateOf(caption2b) + private set + var caption2m by mutableStateOf(caption2m) + private set + + fun copy( + title1: TextStyle = this.title1, + title2b: TextStyle = this.title2b, + title2sb: TextStyle = this.title2sb, + body1b: TextStyle = this.body1b, + body1sb: TextStyle = this.body1sb, + body1m: TextStyle = this.body1m, + body2b: TextStyle = this.body2b, + body2sb: TextStyle = this.body2sb, + body2m: TextStyle = this.body2m, + caption1b: TextStyle = this.caption1b, + caption1m: TextStyle = this.caption1m, + caption2b: TextStyle = this.caption2b, + caption2m: TextStyle = this.caption2m + + ): SpoonyTypography = SpoonyTypography( + title1, + title2b, + title2sb, + body1b, + body1sb, + body1m, + body2b, + body2sb, + body2m, + caption1b, + caption1m, + caption2b, + caption2m ) - /* Other default text styles to override - titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), - labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp + + fun update(other: SpoonyTypography) { + title1 = other.title1 + title2b = other.title2b + title2sb = other.title2sb + body1b = other.body1b + body1sb = other.body1sb + body1m = other.body1m + body2b = other.body2b + body2sb = other.body2sb + body2m = other.body2m + caption1b = other.caption1b + caption1m = other.caption1m + caption2b = other.caption2b + caption2m = other.caption2m + } +} + +private fun SpoonyTextStyle( + fontFamily: FontFamily, + fontSize: TextUnit, + lineHeight: TextUnit = 1.45.em, + letterSpacing: TextUnit = (-0.02).em +): TextStyle = TextStyle( + fontFamily = fontFamily, + fontSize = fontSize, + lineHeight = lineHeight, + letterSpacing = letterSpacing, + lineHeightStyle = LineHeightStyle( + alignment = LineHeightStyle.Alignment.Center, + trim = LineHeightStyle.Trim.None ) - */ ) + +@Composable +fun SpoonyTypography(): SpoonyTypography { + return SpoonyTypography( + title1 = SpoonyTextStyle( + fontFamily = PretendardBold, + fontSize = 20.sp + ), + title2b = SpoonyTextStyle( + fontFamily = PretendardBold, + fontSize = 18.sp + ), + title2sb = SpoonyTextStyle( + fontFamily = PretendardSemiBold, + fontSize = 18.sp + ), + body1b = SpoonyTextStyle( + fontFamily = PretendardBold, + fontSize = 16.sp + ), + body1sb = SpoonyTextStyle( + fontFamily = PretendardSemiBold, + fontSize = 16.sp + ), + body1m = SpoonyTextStyle( + fontFamily = PretendardMedium, + fontSize = 16.sp + ), + body2b = SpoonyTextStyle( + fontFamily = PretendardBold, + fontSize = 14.sp + ), + body2sb = SpoonyTextStyle( + fontFamily = PretendardSemiBold, + fontSize = 14.sp + ), + body2m = SpoonyTextStyle( + fontFamily = PretendardMedium, + fontSize = 14.sp + ), + caption1b = SpoonyTextStyle( + fontFamily = PretendardBold, + fontSize = 12.sp + ), + caption1m = SpoonyTextStyle( + fontFamily = PretendardMedium, + fontSize = 12.sp + ), + caption2b = SpoonyTextStyle( + fontFamily = PretendardBold, + fontSize = 10.sp + ), + caption2m = SpoonyTextStyle( + fontFamily = PretendardMedium, + fontSize = 10.sp + ) + ) +} + +@Preview(showBackground = true) +@Composable +fun SpoonyTypographyPreview() { + SpoonyAndroidTheme { + Column { + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title1 + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title2b + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.title2sb + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.body1b + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.body1sb + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.body1m + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.body2b + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.body2sb + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.body2m + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.caption1b + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.caption1m + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.caption2b + ) + Text( + "SpoonyAndroidTheme", + style = SpoonyAndroidTheme.typography.caption2m + ) + } + } +} diff --git a/app/src/main/res/font/pretendard_bold.otf b/app/src/main/res/font/pretendard_bold.otf new file mode 100644 index 00000000..8e5e30a2 Binary files /dev/null and b/app/src/main/res/font/pretendard_bold.otf differ diff --git a/app/src/main/res/font/pretendard_medium.otf b/app/src/main/res/font/pretendard_medium.otf new file mode 100644 index 00000000..05750698 Binary files /dev/null and b/app/src/main/res/font/pretendard_medium.otf differ diff --git a/app/src/main/res/font/pretendard_semibold.otf b/app/src/main/res/font/pretendard_semibold.otf new file mode 100644 index 00000000..e7e36abc Binary files /dev/null and b/app/src/main/res/font/pretendard_semibold.otf differ