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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"images" : [
{
"filename" : "arrow_right.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true,
"template-rendering-intent" : "template"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"images" : [
{
"filename" : "Background.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true,
"template-rendering-intent" : "template"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"images" : [
{
"filename" : "team_agreement_logo.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true,
"template-rendering-intent" : "original"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"images" : [
{
"filename" : "team_blog_logo.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true,
"template-rendering-intent" : "original"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"images" : [
{
"filename" : "team_introduction_logo.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true,
"template-rendering-intent" : "original"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ extension ShapeStyle where Self == Color {

// MARK: - Static Text

static var textPrimary: Color { .init(hex: "FFFFFF") }
static var textSecondary: Color { .init(hex: "EAEAEA") }
static var textPrimary: Color { .init(hex: "0A0A0A") }
static var textSecondary: Color { .init(hex: "717182") }
static var textSecondary100: Color { .init(hex: "525252") }
static var textInactive: Color { .init(hex: "70737C47").opacity(0.28) }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,35 @@
import Foundation

enum PretendardFontFamily: CustomStringConvertible {
case Black
case Bold
case ExtraBold
case ExtraLight
case Light
case Medium
case Regular
case SemiBold
case Thin
case black
case bold
case extraBold
case extraLight
case light
case medium
case regular
case semiBold
case thin

public var description: String {
switch self {
case .Black:
case .black:
return "Black"
case .Bold:
case .bold:
return "Bold"
case .ExtraBold:
case .extraBold:
return "ExtraBold"
case .ExtraLight:
case .extraLight:
return "ExtraLight"
case .Light:
case .light:
return "Light"
case .Medium:
case .medium:
return "Medium"
case .Regular:
case .regular:
return "Regular"
case .SemiBold:
case .semiBold:
return "SemiBold"
case .Thin:
case .thin:
return "Thin"
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
//
// IntroductionRowModel.swift
// TeamIntroduce
//
// Created by 홍석현 on 8/11/25.
//

import Foundation

struct IntroductionRowModel: Identifiable, Hashable {
let id = UUID()
let name: String
let role: String // subTitle 대신 role로 더 명확하게
let imageName: String
let mbti: MBTI
let introduction: String? // 간단한 소개글 추가
let isLeader: Bool

init(
name: String,
role: String,
imageName: String,
mbti: MBTI,
introduction: String? = nil,
isLeader: Bool = false
) {
self.name = name
self.role = role
self.imageName = imageName
self.mbti = mbti
self.introduction = introduction
self.isLeader = isLeader
}
}

// MARK: - Mock Data
extension IntroductionRowModel {
static let mockData: [IntroductionRowModel] = [
IntroductionRowModel(
name: "김민희",
role: "iOS Developer",
imageName: "profile_kim",
mbti: .estp,
introduction: "서버 아키텍처에 관심이 많습니다",
isLeader: true
),
IntroductionRowModel(
name: "서원지",
role: "iOS Developer",
imageName: "profile_lee",
mbti: .intp,
introduction: "사용자 경험을 최우선으로 생각합니다"
),
IntroductionRowModel(
name: "홍석현",
role: "iOS Developer",
imageName: "profile_hong",
mbti: .enfj,
introduction: "SwiftUI와 iOS 개발을 좋아합니다"
)
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
//
// IntroductionRowView.swift
// TeamIntroduce
//
// Created by 홍석현 on 8/11/25.
//

import SwiftUI

struct IntroductionRowView: View {
private let model: IntroductionRowModel

init(model: IntroductionRowModel) {
self.model = model
}

var body: some View {
HStack {
Circle()
.frame(width: 42, height: 42)
VStack(alignment: .leading, spacing: 4) {
HStack(spacing: 4) {
Text(model.name)
.pretendardFont(family: .semiBold, size: 14)
.foregroundStyle(.textPrimary)

if model.isLeader {
Image(systemName: "crown.fill")
.foregroundStyle(Color.yellow)
.font(.system(size: 12))
}
}

Text(model.role)
.pretendardFont(family: .regular, size: 12)
.foregroundStyle(.textSecondary)

MBTILabel(mbti: model.mbti)
}

Spacer()

Image("ArrowRight")
.foregroundStyle(Color(hex: "717182"))
}
.padding(16)
.background(Color.staticWhite)
.clipShape(RoundedRectangle(cornerRadius: 12))
.shadow(radius: 1)
}
}

#Preview {
IntroductionRowView(model: IntroductionRowModel.mockData[0])
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
//
// MBTILabel.swift
// TeamIntroduce
//
// Created by 홍석현 on 8/11/25.
//

import SwiftUI

public enum MBTI: String, CaseIterable {
case enfp = "ENFP"
case estp = "ESTP"
case infj = "INFJ"
case intj = "INTJ"
case isfj = "ISFJ"
case enfj = "ENFJ"
case infp = "INFP"
case intp = "INTP"
case isfp = "ISFP"
}

struct MBTILabel: View {

private let mbti: MBTI

private var backgroundColor: Color {
switch mbti {
case .enfp: return Color(hex: "FF6B6B")
case .estp: return Color(hex: "E17055")
case .infj: return Color(hex: "4ECDC4")
case .intj: return Color(hex: "6C5CE7")
case .isfj: return Color(hex: "A8E6CF")
case .enfj: return Color(hex: "FFD93D")
case .infp: return Color(hex: "DDA0DD")
case .intp: return Color(hex: "74B9FF")
case .isfp: return Color(hex: "FDCB6E")
}
}

private var textColor: Color {
switch mbti {
case .enfp, .estp, .infj, .intj, .intp:
return .white
case .isfj, .enfj, .infp, .isfp:
return Color(hex: "2D3436")
}
}

init(mbti: MBTI) {
self.mbti = mbti
}

var body: some View {
Text(mbti.rawValue)
.pretendardFont(family: .regular, size: 10)
.foregroundStyle(textColor)
.padding(.horizontal, 7)
.padding(.vertical, 5)
.background(backgroundColor)
.clipShape(RoundedRectangle(cornerRadius: 8))
}
}

#Preview {
VStack {
MBTILabel(mbti: .enfj)
MBTILabel(mbti: .estp)
MBTILabel(mbti: .intp)
}
}
Loading