커스텀 폰트 pretendard-regular, gmarket-regular를 사용하고 있던 것을 appFont 모디파이어를 사용하여 한국어는 pretendard, 그 외에는 시스템 폰트를 사용하도록 수정

This commit is contained in:
Yu Sung
2026-01-23 03:25:19 +09:00
parent c9c1db39a6
commit b3331d5512
44 changed files with 166 additions and 150 deletions
@@ -34,7 +34,7 @@ struct CharacterItemView: View {
Spacer() Spacer()
Text("N") Text("N")
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.frame(width: 30, height: 30) .frame(width: 30, height: 30)
.background(Color.button) .background(Color.button)
@@ -57,14 +57,14 @@ struct CharacterItemView: View {
} }
Text(character.name) Text(character.name)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
if let desc = character.description, !desc.isEmpty { if let desc = character.description, !desc.isEmpty {
Text(desc) Text(desc)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
.lineLimit(1) .lineLimit(1)
} }
@@ -24,7 +24,7 @@ struct CharacterSectionView: View {
Spacer() Spacer()
if let trailingTitle = trailingTitle { if let trailingTitle = trailingTitle {
Text(trailingTitle) Text(trailingTitle)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "90A4AE")) .foregroundColor(Color(hex: "90A4AE"))
.onTapGesture { onTapTrailing?() } .onTapGesture { onTapTrailing?() }
} }
@@ -205,7 +205,7 @@ extension CharacterDetailView {
HStack(spacing: 4) { HStack(spacing: 4) {
if let gender = viewModel.characterDetail?.gender { if let gender = viewModel.characterDetail?.gender {
Text(viewModel.characterDetail?.translated?.gender ?? gender) Text(viewModel.characterDetail?.translated?.gender ?? gender)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor( .foregroundColor(
gender == "남성" ? gender == "남성" ?
Color.button : Color.button :
@@ -228,7 +228,7 @@ extension CharacterDetailView {
if let age = viewModel.characterDetail?.age { if let age = viewModel.characterDetail?.age {
Text("\(age)세") Text("\(age)세")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.padding(.horizontal, 7) .padding(.horizontal, 7)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -244,7 +244,7 @@ extension CharacterDetailView {
if let mbti = viewModel.characterDetail?.mbti { if let mbti = viewModel.characterDetail?.mbti {
Text(mbti) Text(mbti)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.padding(.horizontal, 7) .padding(.horizontal, 7)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -271,7 +271,7 @@ extension CharacterDetailView {
if let characterType = viewModel.characterDetail?.characterType { if let characterType = viewModel.characterDetail?.characterType {
HStack(spacing: 8) { HStack(spacing: 8) {
Text(characterType.rawValue) Text(characterType.rawValue)
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 5) .padding(.horizontal, 5)
.padding(.vertical, 1) .padding(.vertical, 1)
@@ -283,11 +283,11 @@ extension CharacterDetailView {
// 설명 // 설명
Text(viewModel.characterDetail?.translated?.description ?? viewModel.characterDetail?.description ?? "") Text(viewModel.characterDetail?.translated?.description ?? viewModel.characterDetail?.description ?? "")
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
Text(viewModel.characterDetail?.translated?.tags ?? viewModel.characterDetail?.tags ?? "") Text(viewModel.characterDetail?.translated?.tags ?? viewModel.characterDetail?.tags ?? "")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "3BB9F1")) .foregroundColor(Color(hex: "3BB9F1"))
.multilineTextAlignment(.leading) .multilineTextAlignment(.leading)
} }
@@ -328,7 +328,7 @@ extension CharacterDetailView {
HStack { HStack {
Text(title) Text(title)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
Spacer() Spacer()
@@ -382,7 +382,7 @@ extension CharacterDetailView {
Text(""" Text("""
보이스온의 오픈월드 캐릭터톡은 대화의 자유도가 높아 대화에 참여하는 당신은 누구든 될 수 있습니다. 세계관 속 연관 캐릭터가 되어 대화를 하거나 완전히 새로운 인물이 되어 캐릭터와 당신만의 스토리를 만들어 갈 수 있습니다. 보이스온의 오픈월드 캐릭터톡은 대화의 자유도가 높아 대화에 참여하는 당신은 누구든 될 수 있습니다. 세계관 속 연관 캐릭터가 되어 대화를 하거나 완전히 새로운 인물이 되어 캐릭터와 당신만의 스토리를 만들어 갈 수 있습니다.
""") """)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(Color(hex: "AEAEB2")) .foregroundColor(Color(hex: "AEAEB2"))
.multilineTextAlignment(.leading) .multilineTextAlignment(.leading)
@@ -390,7 +390,7 @@ extension CharacterDetailView {
오픈월드 캐릭터톡은 캐릭터를 정교하게 설계하였지만, 대화가 어색하거나 불완전할 수도 있습니다. 오픈월드 캐릭터톡은 캐릭터를 정교하게 설계하였지만, 대화가 어색하거나 불완전할 수도 있습니다.
대화 도중 캐릭터의 대화가 이상하거나 새로운 캐릭터로 대화를 나누고 싶다면 대화를 초기화 하고 새롭게 캐릭터와 대화를 나눠보세요. 대화 도중 캐릭터의 대화가 이상하거나 새로운 캐릭터로 대화를 나누고 싶다면 대화를 초기화 하고 새롭게 캐릭터와 대화를 나눠보세요.
""") """)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(Color(hex: "AEAEB2")) .foregroundColor(Color(hex: "AEAEB2"))
.multilineTextAlignment(.leading) .multilineTextAlignment(.leading)
} }
@@ -443,7 +443,7 @@ struct CharacterExpandableTextView: View {
var body: some View { var body: some View {
VStack(alignment: .leading, spacing: 8) { VStack(alignment: .leading, spacing: 8) {
Text(text) Text(text)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.lineLimit(isExpanded ? nil : 3) .lineLimit(isExpanded ? nil : 3)
.multilineTextAlignment(.leading) .multilineTextAlignment(.leading)
@@ -469,7 +469,7 @@ struct CharacterExpandableTextView: View {
.rotationEffect(.degrees(isExpanded ? 180 : 0)) .rotationEffect(.degrees(isExpanded ? 180 : 0))
Text(isExpanded ? "간략히" : "더보기") Text(isExpanded ? "간략히" : "더보기")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(Color(hex: "607D8B")) .foregroundColor(Color(hex: "607D8B"))
} }
.onTapGesture { .onTapGesture {
@@ -102,15 +102,15 @@ struct CharacterDetailGalleryView: View {
HStack(spacing: 4) { HStack(spacing: 4) {
Text("\(viewModel.ownedCount)") Text("\(viewModel.ownedCount)")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(Color(hex: "#FDD453")) .foregroundColor(Color(hex: "#FDD453"))
Text("/") Text("/")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
Text("\(viewModel.totalCount)개") Text("\(viewModel.totalCount)개")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
} }
@@ -24,13 +24,13 @@ struct NewCharacterListView: View {
// 전체 n개 // 전체 n개
HStack(spacing: 0) { HStack(spacing: 0) {
Text("전체") Text("전체")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(Color(hex: "e2e2e2")) .foregroundColor(Color(hex: "e2e2e2"))
Text(" \(viewModel.totalCount)") Text(" \(viewModel.totalCount)")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(Color(hex: "ff5c49")) .foregroundColor(Color(hex: "ff5c49"))
Text("개") Text("개")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(Color(hex: "e2e2e2")) .foregroundColor(Color(hex: "e2e2e2"))
Spacer() Spacer()
} }
@@ -20,7 +20,7 @@ struct RecentCharacterItemView: View {
.clipShape(Circle()) .clipShape(Circle())
Text(character.name) Text(character.name)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.lineLimit(1) .lineLimit(1)
.frame(maxWidth: 76) .frame(maxWidth: 76)
@@ -32,7 +32,7 @@ struct OriginalWorkDetailHeaderView: View {
HStack(spacing: 4) { HStack(spacing: 4) {
Text(item.translated?.contentType ?? item.contentType) Text(item.translated?.contentType ?? item.contentType)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.padding(.horizontal, 7) .padding(.horizontal, 7)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -45,7 +45,7 @@ struct OriginalWorkDetailHeaderView: View {
} }
Text(item.translated?.category ?? item.category) Text(item.translated?.category ?? item.category)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.button) .foregroundColor(.button)
.padding(.horizontal, 7) .padding(.horizontal, 7)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -59,7 +59,7 @@ struct OriginalWorkDetailHeaderView: View {
if item.isAdult { if item.isAdult {
Text("19+") Text("19+")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "ff5c49")) .foregroundColor(Color(hex: "ff5c49"))
.padding(.horizontal, 7) .padding(.horizontal, 7)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -79,7 +79,7 @@ struct OriginalWorkDetailHeaderView: View {
.map { $0.hasPrefix("#") ? $0 : "#\($0)" } .map { $0.hasPrefix("#") ? $0 : "#\($0)" }
.joined(separator: " ") .joined(separator: " ")
) )
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "3bb9f1")) .foregroundColor(Color(hex: "3bb9f1"))
.frame(maxWidth: .infinity) .frame(maxWidth: .infinity)
.padding(.top, 14) .padding(.top, 14)
@@ -161,7 +161,7 @@ struct OriginalWorkInfoView: View {
.foregroundColor(.white) .foregroundColor(.white)
Text(response.translated?.description ?? response.description) Text(response.translated?.description ?? response.description)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.lineLimit(isExpandDesc ? Int.max : 3) .lineLimit(isExpandDesc ? Int.max : 3)
.truncationMode(.tail) .truncationMode(.tail)
@@ -185,7 +185,7 @@ struct OriginalWorkInfoView: View {
let link = response.originalLinks[$0] let link = response.originalLinks[$0]
Text(link) Text(link)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.onTapGesture { .onTapGesture {
if let url = URL(string: link) { if let url = URL(string: link) {
@@ -210,19 +210,19 @@ struct OriginalWorkInfoView: View {
VStack(alignment: .leading, spacing: 8) { VStack(alignment: .leading, spacing: 8) {
if let _ = response.writer { if let _ = response.writer {
Text("작가") Text("작가")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
} }
if let _ = response.studio { if let _ = response.studio {
Text("제작사") Text("제작사")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
} }
if let _ = response.originalWork { if let _ = response.originalWork {
Text("원작") Text("원작")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
} }
} }
@@ -230,19 +230,19 @@ struct OriginalWorkInfoView: View {
VStack(alignment: .leading, spacing: 8) { VStack(alignment: .leading, spacing: 8) {
if let writer = response.writer { if let writer = response.writer {
Text(writer) Text(writer)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
if let studio = response.studio { if let studio = response.studio {
Text(studio) Text(studio)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
if let originalWork = response.originalWork { if let originalWork = response.originalWork {
Text(originalWork) Text(originalWork)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.underline(response.originalLink != nil ? true : false) .underline(response.originalLink != nil ? true : false)
.onTapGesture { .onTapGesture {
@@ -21,13 +21,13 @@ struct OriginalTabItemView: View {
).cornerRadius(16) ).cornerRadius(16)
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
Text(item.contentType) Text(item.contentType)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
@@ -73,7 +73,7 @@ struct ChatRoomView: View {
.frame(width: 20, height: 20) .frame(width: 20, height: 20)
Text("\(can)") Text("\(can)")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
.padding(.horizontal, 10) .padding(.horizontal, 10)
@@ -103,7 +103,7 @@ struct ChatRoomView: View {
? "보이스온 AI캐릭터톡은 대화의 자유도가 높아 대화에 참여하는 당신은 누구든 될 수 있습니다.\n세계관 속 캐릭터로 대화를 하거나 새로운 인물로 캐릭터와 당신만의 스토리를 만들어보세요.\n※ AI캐릭터톡은 오픈베타 서비스 중이며, 캐릭터의 대화가 어색하거나 불완전할 수 있습니다." ? "보이스온 AI캐릭터톡은 대화의 자유도가 높아 대화에 참여하는 당신은 누구든 될 수 있습니다.\n세계관 속 캐릭터로 대화를 하거나 새로운 인물로 캐릭터와 당신만의 스토리를 만들어보세요.\n※ AI캐릭터톡은 오픈베타 서비스 중이며, 캐릭터의 대화가 어색하거나 불완전할 수 있습니다."
: "AI Clone은 크리에이터의 정보를 기반으로 대화하지만, 모든 정보를 완벽하게 반영하거나 실제 대화와 일치하지 않을 수 있습니다." : "AI Clone은 크리에이터의 정보를 기반으로 대화하지만, 모든 정보를 완벽하게 반영하거나 실제 대화와 일치하지 않을 수 있습니다."
) )
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
Image(systemName: "chevron.up") Image(systemName: "chevron.up")
@@ -187,12 +187,12 @@ struct ChatRoomView: View {
ZStack(alignment: .leading) { ZStack(alignment: .leading) {
if viewModel.messageText.isEmpty { if viewModel.messageText.isEmpty {
Text("메시지를 입력하세요.") Text("메시지를 입력하세요.")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
} }
TextField("", text: $viewModel.messageText) TextField("", text: $viewModel.messageText)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.onSubmit { .onSubmit {
viewModel.sendMessage() viewModel.sendMessage()
@@ -86,7 +86,7 @@ struct AiMessageItemView: View {
VStack(alignment: .leading, spacing: 4) { VStack(alignment: .leading, spacing: 4) {
HStack(spacing: 4) { HStack(spacing: 4) {
Text(characterName) Text(characterName)
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
@@ -162,7 +162,7 @@ struct AiMessageItemView: View {
// 시간 표시 // 시간 표시
VStack { VStack {
Text(formatTime(from: message.createdAt)) Text(formatTime(from: message.createdAt))
.font(.custom(Font.preRegular.rawValue, size: 10)) .appFont(size: 10, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
@@ -185,7 +185,7 @@ struct AiMessageItemView: View {
// 첫 번째 컴포넌트는 항상 일반 텍스트 // 첫 번째 컴포넌트는 항상 일반 텍스트
if !component.isEmpty { if !component.isEmpty {
result = result + Text(component) result = result + Text(component)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
} else { } else {
@@ -202,13 +202,13 @@ struct AiMessageItemView: View {
// 소괄호 뒤의 텍스트 (일반 스타일) // 소괄호 뒤의 텍스트 (일반 스타일)
if !afterClose.isEmpty { if !afterClose.isEmpty {
result = result + Text(afterClose) result = result + Text(afterClose)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
} else { } else {
// 닫는 괄호가 없으면 일반 텍스트로 처리 // 닫는 괄호가 없으면 일반 텍스트로 처리
result = result + Text("(\(component)") result = result + Text("(\(component)")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
} }
@@ -37,7 +37,7 @@ struct TypingIndicatorItemView: View {
VStack(alignment: .leading, spacing: 4) { VStack(alignment: .leading, spacing: 4) {
HStack(spacing: 4) { HStack(spacing: 4) {
Text(characterName) Text(characterName)
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
@@ -69,7 +69,7 @@ struct UserMessageItemView: View {
// 시간 표시 // 시간 표시
VStack { VStack {
Text(formatTime(from: message.createdAt)) Text(formatTime(from: message.createdAt))
.font(.custom(Font.preRegular.rawValue, size: 10)) .appFont(size: 10, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
@@ -106,7 +106,7 @@ struct UserMessageItemView: View {
// 첫 번째 컴포넌트는 항상 일반 텍스트 // 첫 번째 컴포넌트는 항상 일반 텍스트
if !component.isEmpty { if !component.isEmpty {
result = result + Text(component) result = result + Text(component)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
} else { } else {
@@ -123,13 +123,13 @@ struct UserMessageItemView: View {
// 소괄호 뒤의 텍스트 (일반 스타일) // 소괄호 뒤의 텍스트 (일반 스타일)
if !afterClose.isEmpty { if !afterClose.isEmpty {
result = result + Text(afterClose) result = result + Text(afterClose)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
} else { } else {
// 닫는 괄호가 없으면 일반 텍스트로 처리 // 닫는 괄호가 없으면 일반 텍스트로 처리
result = result + Text("(\(component)") result = result + Text("(\(component)")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
} }
@@ -98,7 +98,7 @@ struct ChatBgSelectionView: View {
if selectedBgImageId == item.id { if selectedBgImageId == item.id {
Text("현재 배경") Text("현재 배경")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 6) .padding(.horizontal, 6)
.padding(.vertical, 2) .padding(.vertical, 2)
@@ -67,11 +67,11 @@ struct ChatSettingsView: View {
HStack(alignment: .top, spacing: 0) { HStack(alignment: .top, spacing: 0) {
Text("⚠️ ") Text("⚠️ ")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white.opacity(0.7)) .foregroundColor(.white.opacity(0.7))
Text("지금까지의 대화가 모두 초기화 되고, 이용자가 새로운 캐릭터가 되어 새롭게 대화를 시작합니다.") Text("지금까지의 대화가 모두 초기화 되고, 이용자가 새로운 캐릭터가 되어 새롭게 대화를 시작합니다.")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white.opacity(0.7)) .foregroundColor(.white.opacity(0.7))
.fixedSize(horizontal: false, vertical: true) .fixedSize(horizontal: false, vertical: true)
} }
@@ -29,7 +29,7 @@ struct TalkItemView: View {
.lineLimit(1) .lineLimit(1)
Text(item.opponentType) Text(item.opponentType)
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(Color(hex: "D9FCF4")) .foregroundColor(Color(hex: "D9FCF4"))
.lineLimit(1) .lineLimit(1)
.padding(.horizontal, 5) .padding(.horizontal, 5)
@@ -40,14 +40,14 @@ struct TalkItemView: View {
Spacer() Spacer()
Text(item.lastMessageTimeLabel) Text(item.lastMessageTimeLabel)
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
.lineLimit(1) .lineLimit(1)
} }
if let message = item.lastMessagePreview { if let message = item.lastMessagePreview {
Text(message) Text(message)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "b0bec5")) .foregroundColor(Color(hex: "b0bec5"))
.lineLimit(2) .lineLimit(2)
.truncationMode(.tail) .truncationMode(.tail)
+1 -1
View File
@@ -15,7 +15,7 @@ struct TalkView: View {
BaseView(isLoading: $viewModel.isLoading) { BaseView(isLoading: $viewModel.isLoading) {
if viewModel.talkRooms.isEmpty { if viewModel.talkRooms.isEmpty {
Text("대화 중인 톡이 없습니다") Text("대화 중인 톡이 없습니다")
.font(.custom(Font.preRegular.rawValue, size: 20)) .appFont(size: 20, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} else { } else {
ScrollView(.vertical, showsIndicators: false) { ScrollView(.vertical, showsIndicators: false) {
@@ -101,7 +101,7 @@ struct ContentAllView: View {
} }
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.multilineTextAlignment(.leading) .multilineTextAlignment(.leading)
.fixedSize(horizontal: false, vertical: true) .fixedSize(horizontal: false, vertical: true)
@@ -111,7 +111,7 @@ struct ContentAllView: View {
Text(item.creatorNickname) Text(item.creatorNickname)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
.lineLimit(1) .lineLimit(1)
.padding(.horizontal, 6) .padding(.horizontal, 6)
@@ -37,7 +37,7 @@ struct ContentItemView: View {
} }
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.multilineTextAlignment(.leading) .multilineTextAlignment(.leading)
.fixedSize(horizontal: false, vertical: true) .fixedSize(horizontal: false, vertical: true)
@@ -47,7 +47,7 @@ struct ContentItemView: View {
Text(item.creatorNickname) Text(item.creatorNickname)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
.lineLimit(1) .lineLimit(1)
.padding(.horizontal, 6) .padding(.horizontal, 6)
@@ -52,7 +52,7 @@ struct DayOfWeekSeriesView: View {
Spacer() Spacer()
Text("전체보기") Text("전체보기")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.init(hex: "78909C")) .foregroundColor(.init(hex: "78909C"))
.onTapGesture { .onTapGesture {
AppState.shared AppState.shared
@@ -30,7 +30,7 @@ struct SeriesMainHomeView: View {
Spacer() Spacer()
Text("전체보기") Text("전체보기")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.init(hex: "78909C")) .foregroundColor(.init(hex: "78909C"))
.onTapGesture { .onTapGesture {
AppState.shared AppState.shared
@@ -28,7 +28,7 @@ struct SeriesMainItemView: View {
HStack(spacing: 0) { HStack(spacing: 0) {
if item.isPopular { if item.isPopular {
Text("인기") Text("인기")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 10) .padding(.horizontal, 10)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -38,7 +38,7 @@ struct SeriesMainItemView: View {
if item.isNew { if item.isNew {
Text("신작") Text("신작")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 10) .padding(.horizontal, 10)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -57,7 +57,7 @@ struct SeriesMainItemView: View {
if item.isComplete { if item.isComplete {
Text("완결") Text("완결")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 10) .padding(.horizontal, 10)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -72,7 +72,7 @@ struct SeriesMainItemView: View {
Spacer() Spacer()
Text("총 \(item.numberOfContent)화") Text("총 \(item.numberOfContent)화")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 10) .padding(.horizontal, 10)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -89,14 +89,14 @@ struct SeriesMainItemView: View {
.frame(width: width, height: height, alignment: .center) .frame(width: width, height: height, alignment: .center)
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.lineLimit(1) .lineLimit(1)
.multilineTextAlignment(.leading) .multilineTextAlignment(.leading)
.padding(.horizontal, 8) .padding(.horizontal, 8)
Text(item.creator.nickname) Text(item.creator.nickname)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
.lineLimit(1) .lineLimit(1)
.padding(.horizontal, 8) .padding(.horizontal, 8)
@@ -28,7 +28,7 @@ struct SeriesItemView: View {
HStack(spacing: 0) { HStack(spacing: 0) {
if item.isPopular { if item.isPopular {
Text("인기") Text("인기")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 10) .padding(.horizontal, 10)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -38,7 +38,7 @@ struct SeriesItemView: View {
if item.isNew { if item.isNew {
Text("신작") Text("신작")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 10) .padding(.horizontal, 10)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -57,7 +57,7 @@ struct SeriesItemView: View {
if item.isComplete { if item.isComplete {
Text("완결") Text("완결")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 10) .padding(.horizontal, 10)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -72,7 +72,7 @@ struct SeriesItemView: View {
Spacer() Spacer()
Text("총 \(item.numberOfContent)화") Text("총 \(item.numberOfContent)화")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 10) .padding(.horizontal, 10)
.padding(.vertical, 3) .padding(.vertical, 3)
@@ -89,13 +89,13 @@ struct SeriesItemView: View {
.frame(width: 160, height: 227, alignment: .center) .frame(width: 160, height: 227, alignment: .center)
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.lineLimit(1) .lineLimit(1)
.padding(.horizontal, 8) .padding(.horizontal, 8)
Text(item.creator.nickname) Text(item.creator.nickname)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
.lineLimit(1) .lineLimit(1)
.padding(.horizontal, 8) .padding(.horizontal, 8)
@@ -21,7 +21,7 @@ struct ExpandableTextView: View {
VStack(alignment: .leading) { VStack(alignment: .leading) {
Text(text) Text(text)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color.gray77) .foregroundColor(Color.gray77)
.lineLimit(isExpanded ? nil : 3) // 확장 시 전체 표시, 아니면 3줄로 제한 .lineLimit(isExpanded ? nil : 3) // 확장 시 전체 표시, 아니면 3줄로 제한
.truncationMode(.tail) .truncationMode(.tail)
@@ -27,7 +27,7 @@ struct CreatorCommunityItemView: View {
.foregroundColor(Color.white) .foregroundColor(Color.white)
Text(item.relativeTimeText()) Text(item.relativeTimeText())
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
} }
@@ -36,7 +36,7 @@ struct CreatorCommunityItemView: View {
HStack(spacing: 0) { HStack(spacing: 0) {
Text(item.content) Text(item.content)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.fixedSize(horizontal: false, vertical: true) .fixedSize(horizontal: false, vertical: true)
.lineLimit(3) .lineLimit(3)
@@ -65,7 +65,7 @@ struct CreatorCommunityItemView: View {
.frame(width: 24, height: 24) .frame(width: 24, height: 24)
Text("\(item.likeCount)") Text("\(item.likeCount)")
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
} }
@@ -75,7 +75,7 @@ struct CreatorCommunityItemView: View {
.frame(width: 24, height: 24) .frame(width: 24, height: 24)
Text("\(item.commentCount)") Text("\(item.commentCount)")
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
} }
} }
@@ -81,15 +81,15 @@ struct UserProfileContentView: View {
HStack(spacing: 4) { HStack(spacing: 4) {
Text("\(ownedContentCount)") Text("\(ownedContentCount)")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(Color(hex: "#FDD453")) .foregroundColor(Color(hex: "#FDD453"))
Text("/") Text("/")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
Text("\(totalContentCount)개") Text("\(totalContentCount)개")
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
} }
@@ -44,29 +44,29 @@ struct UserProfileLiveView: View {
VStack(alignment: .leading, spacing: 8) { VStack(alignment: .leading, spacing: 8) {
Text(item.managerNickname) Text(item.managerNickname)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
HStack(spacing: 4) { HStack(spacing: 4) {
Text("\(dateDic["dayOfWeek"] ?? "")") Text("\(dateDic["dayOfWeek"] ?? "")")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
Text("|") Text("|")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
let time = dateDic["time"] ?? "" let time = dateDic["time"] ?? ""
Text("\(item.isActive && !item.channelName.isNullOrBlank() ? "On Air" : time)") Text("\(item.isActive && !item.channelName.isNullOrBlank() ? "On Air" : time)")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "98A2F6")) .foregroundColor(Color(hex: "98A2F6"))
} }
} }
@@ -117,7 +117,7 @@ struct UserProfileLiveView: View {
.frame(width: 12) .frame(width: 12)
Text("\(item.price)") Text("\(item.price)")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
.padding(4) .padding(4)
@@ -126,7 +126,7 @@ struct UserProfileLiveView: View {
.cornerRadius(4) .cornerRadius(4)
} else { } else {
Text("무료") Text("무료")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "#263238")) .foregroundColor(Color(hex: "#263238"))
.padding(4) .padding(4)
.frame(maxWidth: .infinity) .frame(maxWidth: .infinity)
@@ -7,29 +7,36 @@
import SwiftUI import SwiftUI
private func resolvedLanguageCode(currentLocale: Locale) -> String? {
if let raw = UserDefaults.standard.string(forKey: "app.language"),
let option = LanguageOption(rawValue: raw),
option != .system {
return option.rawValue
}
return currentLocale.language.languageCode?.identifier
}
private func appFontName(for weight: SwiftUI.Font.Weight) -> String {
switch weight {
case .bold:
return "Pretendard-Bold"
case .medium:
return "Pretendard-Medium"
case .light:
return "Pretendard-Light"
default:
return "Pretendard-Regular"
}
}
struct KoreanFontModifier: ViewModifier { struct KoreanFontModifier: ViewModifier {
@Environment(\.locale) private var locale @Environment(\.locale) private var locale
let size: CGFloat let size: CGFloat
let weight: SwiftUI.Font.Weight let weight: SwiftUI.Font.Weight
private func resolvedLanguageCode() -> String? {
if let raw = UserDefaults.standard.string(forKey: "app.language"),
let option = LanguageOption(rawValue: raw),
option != .system {
return option.rawValue
}
return locale.language.languageCode?.identifier
}
func body(content: Content) -> some View { func body(content: Content) -> some View {
if resolvedLanguageCode() == "ko" { if resolvedLanguageCode(currentLocale: locale) == "ko" {
let name: String = switch weight { content.font(.custom(appFontName(for: weight), size: size))
case .bold: "Pretendard-Bold"
case .medium: "Pretendard-Medium"
case .light: "Pretendard-Light"
default: "Pretendard-Regular"
}
content.font(.custom(name, size: size))
} else { } else {
content.font(.system(size: size, weight: weight)) content.font(.system(size: size, weight: weight))
} }
@@ -41,3 +48,12 @@ extension View {
self.modifier(KoreanFontModifier(size: size, weight: weight)) self.modifier(KoreanFontModifier(size: size, weight: weight))
} }
} }
extension Text {
func appFont(size: CGFloat, weight: SwiftUI.Font.Weight = .regular) -> Text {
if resolvedLanguageCode(currentLocale: .autoupdatingCurrent) == "ko" {
return self.font(.custom(appFontName(for: weight), size: size))
}
return self.font(.system(size: size, weight: weight))
}
}
@@ -39,14 +39,14 @@ struct HomeCreatorRankingItemView: View {
Spacer() Spacer()
Text(item.nickname) Text(item.nickname)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
Spacer() Spacer()
if item.id != UserDefaults.int(forKey: .userId) { if item.id != UserDefaults.int(forKey: .userId) {
Text(item.follow ? "팔로잉" : "팔로우") Text(item.follow ? "팔로잉" : "팔로우")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.padding(.vertical, 4) .padding(.vertical, 4)
.frame(maxWidth: .infinity) .frame(maxWidth: .infinity)
.background( .background(
@@ -30,7 +30,7 @@ struct HomeLatestContentView: View {
Spacer() Spacer()
Text("전체보기") Text("전체보기")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.init(hex: "78909C")) .foregroundColor(.init(hex: "78909C"))
.onTapGesture { onClickMore() } .onTapGesture { onClickMore() }
} }
+2 -2
View File
@@ -37,13 +37,13 @@ struct HomeLiveItemView: View {
VStack(alignment: .leading, spacing: 4) { VStack(alignment: .leading, spacing: 4) {
Text(item.creatorNickname) Text(item.creatorNickname)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.lineLimit(2) .lineLimit(2)
.truncationMode(.tail) .truncationMode(.tail)
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
+5 -5
View File
@@ -195,7 +195,7 @@ struct HomeTabView: View {
Spacer() Spacer()
Text("전체보기") Text("전체보기")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.init(hex: "78909C")) .foregroundColor(.init(hex: "78909C"))
.onTapGesture { .onTapGesture {
AppState.shared AppState.shared
@@ -283,7 +283,7 @@ struct HomeTabView: View {
Spacer() Spacer()
Text("전체보기") Text("전체보기")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.init(hex: "78909C")) .foregroundColor(.init(hex: "78909C"))
.onTapGesture { .onTapGesture {
AppState.shared AppState.shared
@@ -313,7 +313,7 @@ struct HomeTabView: View {
Spacer() Spacer()
Text("전체보기") Text("전체보기")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.init(hex: "78909C")) .foregroundColor(.init(hex: "78909C"))
.onTapGesture { .onTapGesture {
AppState.shared AppState.shared
@@ -388,7 +388,7 @@ struct HomeTabView: View {
- 대표 이메일 : sodalive.official@gmail.com - 대표 이메일 : sodalive.official@gmail.com
""") """)
.font(.custom(Font.preRegular.rawValue, size: 11)) .appFont(size: 11, weight: .regular)
.foregroundColor(Color.gray77) .foregroundColor(Color.gray77)
.padding(.horizontal, 13.3) .padding(.horizontal, 13.3)
} }
@@ -519,7 +519,7 @@ struct HomeTabView: View {
Text(viewModel.errorMessage) Text(viewModel.errorMessage)
.padding(.vertical, 13.3) .padding(.vertical, 13.3)
.frame(width: screenSize().width - 66.7, alignment: .center) .frame(width: screenSize().width - 66.7, alignment: .center)
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.background(Color.button) .background(Color.button)
.foregroundColor(Color.white) .foregroundColor(Color.white)
.multilineTextAlignment(.leading) .multilineTextAlignment(.leading)
@@ -30,11 +30,11 @@ struct HomeWeeklyChartItemView: View {
VStack(alignment: .leading, spacing: 6) { VStack(alignment: .leading, spacing: 6) {
Text(content.title) Text(content.title)
.lineLimit(1) .lineLimit(1)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
Text(content.creatorNickname) Text(content.creatorNickname)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
} }
} }
@@ -24,7 +24,7 @@ struct RecommendChannelContentItemView: View {
VStack(alignment: .leading, spacing: 2) { VStack(alignment: .leading, spacing: 2) {
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
@@ -34,7 +34,7 @@ struct RecommendChannelContentItemView: View {
Image("ic_heart_white") Image("ic_heart_white")
Text("\(item.likeCount)") Text("\(item.likeCount)")
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
@@ -42,7 +42,7 @@ struct RecommendChannelContentItemView: View {
Image("ic_comment_white") Image("ic_comment_white")
Text("\(item.commentCount)") Text("\(item.commentCount)")
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
} }
@@ -30,7 +30,7 @@ struct RecommendChannelItemView: View {
HStack(spacing: 4) { HStack(spacing: 4) {
Text("콘텐츠") Text("콘텐츠")
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
Text("\(item.contentCount)") Text("\(item.contentCount)")
@@ -22,14 +22,14 @@ struct LatestFinishedLiveItemView: View {
.clipShape(Circle()) .clipShape(Circle())
Text(item.nickname) Text(item.nickname)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.top, 20) .padding(.top, 20)
Spacer() Spacer()
Text(item.relativeTimeText()) Text(item.relativeTimeText())
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
} }
.padding(16) .padding(16)
@@ -48,12 +48,12 @@ struct LiveNowItemView: View {
Spacer() Spacer()
Text(item.creatorNickname) Text(item.creatorNickname)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.padding(.horizontal, 2) .padding(.horizontal, 2)
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(Color(hex: "#B0BEC5")) .foregroundColor(Color(hex: "#B0BEC5"))
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
@@ -70,7 +70,7 @@ struct LiveNowItemView: View {
.frame(width: 16) .frame(width: 16)
Text("\(item.price)") Text("\(item.price)")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
.padding(.vertical, 4) .padding(.vertical, 4)
@@ -81,7 +81,7 @@ struct LiveNowItemView: View {
.padding(.bottom, 2) .padding(.bottom, 2)
} else { } else {
Text("무료") Text("무료")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "#263238")) .foregroundColor(Color(hex: "#263238"))
.padding(.vertical, 4) .padding(.vertical, 4)
.frame(maxWidth: .infinity) .frame(maxWidth: .infinity)
@@ -28,7 +28,7 @@ struct SectionLiveNowView: View {
if items.count > 0 { if items.count > 0 {
Text("전체보기") Text("전체보기")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
.onTapGesture { AppState.shared.setAppStep(step: .liveNowAll(onClickParticipant: onClickParticipant)) } .onTapGesture { AppState.shared.setAppStep(step: .liveNowAll(onClickParticipant: onClickParticipant)) }
} }
@@ -88,7 +88,7 @@ struct SectionRecommendChannelView: View {
.frame(width: screenSize().width * 0.18, height: screenSize().width * 0.18, alignment: .center) .frame(width: screenSize().width * 0.18, height: screenSize().width * 0.18, alignment: .center)
Text("더보기") Text("더보기")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.frame(width: screenSize().width * 0.18) .frame(width: screenSize().width * 0.18)
.lineLimit(1) .lineLimit(1)
@@ -37,28 +37,28 @@ struct LiveReservationItemView: View {
VStack(alignment: .leading, spacing: 8) { VStack(alignment: .leading, spacing: 8) {
Text(item.creatorNickname) Text(item.creatorNickname)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
HStack(spacing: 4) { HStack(spacing: 4) {
Text("\(dateDic["dayOfWeek"] ?? "")") Text("\(dateDic["dayOfWeek"] ?? "")")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
Text("|") Text("|")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
Text("\(dateDic["time"] ?? "")") Text("\(dateDic["time"] ?? "")")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "98A2F6")) .foregroundColor(Color(hex: "98A2F6"))
} }
} }
@@ -92,7 +92,7 @@ struct LiveReservationItemView: View {
.frame(width: 12) .frame(width: 12)
Text("\(item.price)") Text("\(item.price)")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
.padding(4) .padding(4)
@@ -101,7 +101,7 @@ struct LiveReservationItemView: View {
.cornerRadius(4) .cornerRadius(4)
} else { } else {
Text("무료") Text("무료")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "#263238")) .foregroundColor(Color(hex: "#263238"))
.padding(4) .padding(4)
.frame(maxWidth: .infinity) .frame(maxWidth: .infinity)
@@ -49,28 +49,28 @@ struct MyLiveReservationItemView: View {
VStack(alignment: .leading, spacing: 8) { VStack(alignment: .leading, spacing: 8) {
Text(item.creatorNickname) Text(item.creatorNickname)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
Text(item.title) Text(item.title)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(Color(hex: "B0BEC5")) .foregroundColor(Color(hex: "B0BEC5"))
.lineLimit(1) .lineLimit(1)
.truncationMode(.tail) .truncationMode(.tail)
HStack(spacing: 0) { HStack(spacing: 0) {
Text("\(dateDic["dayOfWeek"] ?? "")") Text("\(dateDic["dayOfWeek"] ?? "")")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
Text("|") Text("|")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
Text("\(dateDic["time"] ?? "")") Text("\(dateDic["time"] ?? "")")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "98A2F6")) .foregroundColor(Color(hex: "98A2F6"))
} }
} }
@@ -104,7 +104,7 @@ struct MyLiveReservationItemView: View {
.frame(width: 12) .frame(width: 12)
Text("\(item.price)") Text("\(item.price)")
.font(.custom(Font.preRegular.rawValue, size: 12)) .appFont(size: 12, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
.padding(4) .padding(4)
@@ -113,7 +113,7 @@ struct MyLiveReservationItemView: View {
.cornerRadius(4) .cornerRadius(4)
} else { } else {
Text("무료") Text("무료")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "#263238")) .foregroundColor(Color(hex: "#263238"))
.padding(4) .padding(4)
.frame(maxWidth: .infinity) .frame(maxWidth: .infinity)
@@ -28,7 +28,7 @@ struct SectionLiveReservationView: View {
if items.count > 0 { if items.count > 0 {
Text("전체보기") Text("전체보기")
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
.onTapGesture { .onTapGesture {
if !token.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { if !token.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
+3 -3
View File
@@ -465,7 +465,7 @@ struct CategoryButtonItem: View {
} }
Text(title) Text(title)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
} }
.onTapGesture { .onTapGesture {
@@ -518,7 +518,7 @@ struct RecentItemView: View {
.cornerRadius(16) .cornerRadius(16)
Text(content.title) Text(content.title)
.font(.custom(Font.preRegular.rawValue, size: 18)) .appFont(size: 18, weight: .regular)
.foregroundColor(.white) .foregroundColor(.white)
.multilineTextAlignment(.leading) .multilineTextAlignment(.leading)
.fixedSize(horizontal: false, vertical: true) .fixedSize(horizontal: false, vertical: true)
@@ -528,7 +528,7 @@ struct RecentItemView: View {
Text(content.creatorNickname) Text(content.creatorNickname)
.font(.custom(Font.preRegular.rawValue, size: 14)) .appFont(size: 14, weight: .regular)
.foregroundColor(Color(hex: "78909C")) .foregroundColor(Color(hex: "78909C"))
.lineLimit(1) .lineLimit(1)
.padding(.horizontal, 6) .padding(.horizontal, 6)
@@ -27,7 +27,7 @@ struct LanguageSettingsView: View {
ForEach(Array(LanguageOption.allCases.enumerated()), id: \.offset) { idx, option in ForEach(Array(LanguageOption.allCases.enumerated()), id: \.offset) { idx, option in
HStack(spacing: 0) { HStack(spacing: 0) {
Text(option.displayName) Text(option.displayName)
.font(.custom(Font.preRegular.rawValue, size: 16)) .appFont(size: 16, weight: .regular)
.foregroundColor(Color.grayee) .foregroundColor(Color.grayee)
Spacer() Spacer()
if viewModel.pending == option { if viewModel.pending == option {