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