diff --git a/TeamIntroduce/TeamIntroduce/Sources/DesignSytstem/Color/Extension+ShapeStyle.swift b/TeamIntroduce/TeamIntroduce/Sources/DesignSytstem/Color/Extension+ShapeStyle.swift index 5841e07..1383dde 100644 --- a/TeamIntroduce/TeamIntroduce/Sources/DesignSytstem/Color/Extension+ShapeStyle.swift +++ b/TeamIntroduce/TeamIntroduce/Sources/DesignSytstem/Color/Extension+ShapeStyle.swift @@ -28,7 +28,7 @@ extension ShapeStyle where Self == Color { // MARK: - Static Border - static var borderInactive: Color { .init(hex: "C6C6C6") } + static var borderInactive: Color { .init(hex: "000000").opacity(0.05) } static var borderDisabled: Color { .init(hex: "323537") } static var borderInverse: Color { .init(hex: "202325") } @@ -44,6 +44,7 @@ extension ShapeStyle where Self == Color { static var gray80: Color { .init(hex: "323537") } static var gray60: Color { .init(hex: "6F6F6F") } static var gray40: Color { .init(hex: "A8A8A8") } + static var gray20: Color { .init(hex: "ededed") } static var gray90: Color { .init(hex: "202325") } static var grayError: Color { .init(hex: "FF5050") } static var grayWhite: Color { .init(hex: "FFFFFF") } @@ -59,6 +60,9 @@ extension ShapeStyle where Self == Color { static var surfaceEnable: Color { .init(hex: "0099FF") } static var surfaceError: Color { .init(hex: "FF5050").opacity(0.2) } + //MARK: -Shadow + static var shadowDefault: Color { .init(hex: "000000").opacity(0.1) } + // MARK: - TextIcon static var onBackground: Color { .init(hex: "FFFFFF") } diff --git a/TeamIntroduce/TeamIntroduce/Sources/DesignSytstem/Modifier/CardStyle.swift b/TeamIntroduce/TeamIntroduce/Sources/DesignSytstem/Modifier/CardStyle.swift new file mode 100644 index 0000000..66ebc17 --- /dev/null +++ b/TeamIntroduce/TeamIntroduce/Sources/DesignSytstem/Modifier/CardStyle.swift @@ -0,0 +1,31 @@ +// +// CardStyle.swift +// TeamIntroduce +// +// Created by 김민희 on 8/12/25. +// + +import SwiftUI + +struct CardStyle: ViewModifier { + func body(content: Content) -> some View { + content + .padding(15) + .frame(maxWidth: .infinity, alignment: .leading) + .background( + RoundedRectangle(cornerRadius: 16) + .fill(.staticWhite) + ) + .overlay( + RoundedRectangle(cornerRadius: 16) + .stroke(.borderInactive, lineWidth: 0.5) + ) + .shadow(color: .shadowDefault, radius: 3, x: 0, y: 1) + } +} + +extension View { + public func cardStyle() -> some View { + modifier(CardStyle()) + } +} diff --git a/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/BlogView.swift b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/BlogView.swift new file mode 100644 index 0000000..a58fdbb --- /dev/null +++ b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/BlogView.swift @@ -0,0 +1,23 @@ +// +// BlogView.swift +// TeamIntroduce +// +// Created by 김민희 on 8/12/25. +// +import SwiftUI + +struct BlogView: View { + let profile: MemberProfile + + var body: some View { + VStack(alignment: .leading, spacing: 14) { + Text("블로그") + .pretendardFont(family: .SemiBold, size: 14) + + Text(profile.blogURL) + .pretendardFont(family: .Regular, size: 13) + .cardStyle() + + } + } +} diff --git a/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/CollabStyleView.swift b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/CollabStyleView.swift new file mode 100644 index 0000000..194be4b --- /dev/null +++ b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/CollabStyleView.swift @@ -0,0 +1,23 @@ +// +// CollabStyleView.swift +// TeamIntroduce +// +// Created by 김민희 on 8/12/25. +// +import SwiftUI + +struct CollabStyleView: View { + let profile: MemberProfile + + var body: some View { + VStack(alignment: .leading, spacing: 14) { + Text("협업스타일") + .pretendardFont(family: .SemiBold, size: 14) + Text(profile.collabStyle) + .pretendardFont(family: .Regular, size: 13) + .foregroundStyle(.textSecondary100) + .lineSpacing(5) + .cardStyle() + } + } +} diff --git a/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/EditButton.swift b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/EditButton.swift new file mode 100644 index 0000000..763dda9 --- /dev/null +++ b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/EditButton.swift @@ -0,0 +1,20 @@ +// +// EditButton.swift +// TeamIntroduce +// +// Created by 김민희 on 8/12/25. +// +import SwiftUI + +struct EditButton: View { + var body: some View { + Button(action: {}) { + Text("수정") + .foregroundColor(.white) + } + .frame(maxWidth: .infinity) + .frame(height: 48) + .background(.backGroundPrimary) + .clipShape(RoundedRectangle(cornerRadius: 16)) + } +} diff --git a/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/IntroductionView.swift b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/IntroductionView.swift new file mode 100644 index 0000000..4186644 --- /dev/null +++ b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/IntroductionView.swift @@ -0,0 +1,23 @@ +// +// IntroductionView.swift +// TeamIntroduce +// +// Created by 김민희 on 8/12/25. +// +import SwiftUI + +struct IntroductionView: View { + let profile: MemberProfile + + var body: some View { + VStack(alignment: .leading, spacing: 14) { + Text("자기소개") + .pretendardFont(family: .SemiBold, size: 14) + Text(profile.introduction) + .pretendardFont(family: .Regular, size: 13) + .foregroundStyle(.textSecondary100) + .lineSpacing(5) + .cardStyle() + } + } +} diff --git a/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/MemberDetailView.swift b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/MemberDetailView.swift new file mode 100644 index 0000000..5c5b4ab --- /dev/null +++ b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/MemberDetailView.swift @@ -0,0 +1,48 @@ +// +// MemberDetailView.swift +// TeamIntroduce +// +// Created by 김민희 on 8/11/25. +// + +import SwiftUI + +struct MemberProfile { + var image: String = "person.crop.circle" + var name: String = "김철수" + var role: String = "프론트엔드개발자" + var mbti: String = "ENFP" + var introduction: String = "사용자경험을최우선으로생각하는프론트엔드개발자입니다.새로운기술을배우는것을좋아하고,팀원들과아이디어를 공유하며함께성장하는것을즐깁니다." + var strengths: [String] = ["창의적인문제해결능력", "새로운기술에대한빠른학습력", "사용자중심적사고", "긍정적이고적극적인커뮤니케이션"] + var collabStyle: String = "아이디어를 자유롭게공유하고,다양한관점에서문제를바라보는것을 선호합니다.팀원들의의견을경청하고,함께더나은해결책을찾아가는협업을추구합니다." + var blogURL: String = "https: //chulsoo.dev" +} + +struct MemberDetailView: View { + private let profile = MemberProfile() + + var body: some View { + ScrollView { + VStack(spacing: 20) { + MemberProfileView(profile: profile) + + IntroductionView(profile: profile) + + StrengthsView(profile: profile) + + CollabStyleView(profile: profile) + + BlogView(profile: profile) + + EditButton() + } + .padding(.horizontal, 14) + } + } +} + +struct MemberDetailView_Previews: PreviewProvider { + static var previews: some View { + MemberDetailView() + } +} diff --git a/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/MemberProfileView.swift b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/MemberProfileView.swift new file mode 100644 index 0000000..f2f5f70 --- /dev/null +++ b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/MemberProfileView.swift @@ -0,0 +1,39 @@ +// +// MemberProfileView.swift +// TeamIntroduce +// +// Created by 김민희 on 8/12/25. +// +import SwiftUI + +struct MemberProfileView: View { + let profile: MemberProfile + + var body: some View { + HStack { + Spacer() + + VStack(spacing: 7) { + Image(systemName: profile.image) + .font(.system(size: 40)) + + Text(profile.name) + .pretendardFont(family: .Regular, size: 13) + + Text(profile.role) + .pretendardFont(family: .Regular, size: 13) + .foregroundStyle(.textSecondary100) + + + Text(profile.mbti) + .pretendardFont(family: .Regular, size: 13) + .padding(.horizontal, 12) + .padding(.vertical, 6) + .background(Capsule().fill(.gray20)) + } + + Spacer() + } + .cardStyle() + } +} diff --git a/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/StrengthsView.swift b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/StrengthsView.swift new file mode 100644 index 0000000..65698fd --- /dev/null +++ b/TeamIntroduce/TeamIntroduce/Sources/Presnetaion/MemberDetail/StrengthsView.swift @@ -0,0 +1,31 @@ +// +// StrengthsView.swift +// TeamIntroduce +// +// Created by 김민희 on 8/12/25. +// +import SwiftUI + +struct StrengthsView: View { + let profile: MemberProfile + + var body: some View { + VStack(alignment: .leading, spacing: 14) { + Text("주요장점") + .pretendardFont(family: .SemiBold, size: 14) + VStack { + ForEach(profile.strengths, id: \.self) { item in + HStack(alignment: .firstTextBaseline, spacing: 8) { + Circle().frame(width: 5, height: 5) + Text(item) + .pretendardFont(family: .Regular, size: 13) + .foregroundStyle(.textSecondary100) + .fixedSize(horizontal: false, vertical: true) + } + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .cardStyle() + } + } +}