From 8c5ea2946b9c8cd66e685af46127fbd38417a45a Mon Sep 17 00:00:00 2001 From: Jeong Dong Date: Sat, 7 Jun 2025 17:50:33 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[#57]=20=ED=8C=8C=EC=9D=BC=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sources/{Color.swift => Resouce+Ext/Color+Ext.swift} | 0 .../Sources/{Font.swift => Resouce+Ext/Font+Ext.swift} | 0 .../Sources/{Image.swift => Resouce+Ext/Image+Ext.swift} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename Core/DesignSystem/Sources/{Color.swift => Resouce+Ext/Color+Ext.swift} (100%) rename Core/DesignSystem/Sources/{Font.swift => Resouce+Ext/Font+Ext.swift} (100%) rename Core/DesignSystem/Sources/{Image.swift => Resouce+Ext/Image+Ext.swift} (100%) diff --git a/Core/DesignSystem/Sources/Color.swift b/Core/DesignSystem/Sources/Resouce+Ext/Color+Ext.swift similarity index 100% rename from Core/DesignSystem/Sources/Color.swift rename to Core/DesignSystem/Sources/Resouce+Ext/Color+Ext.swift diff --git a/Core/DesignSystem/Sources/Font.swift b/Core/DesignSystem/Sources/Resouce+Ext/Font+Ext.swift similarity index 100% rename from Core/DesignSystem/Sources/Font.swift rename to Core/DesignSystem/Sources/Resouce+Ext/Font+Ext.swift diff --git a/Core/DesignSystem/Sources/Image.swift b/Core/DesignSystem/Sources/Resouce+Ext/Image+Ext.swift similarity index 100% rename from Core/DesignSystem/Sources/Image.swift rename to Core/DesignSystem/Sources/Resouce+Ext/Image+Ext.swift From c7b26bae29e8e4603171a54954ecb2c079efca01 Mon Sep 17 00:00:00 2001 From: Jeong Dong Date: Sat, 7 Jun 2025 18:18:45 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[#57]=20RoundedOutlineModifier=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98=20=EB=B0=8F=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RoundedOutlineModifier.swift | 43 +++++++++++++++++++ .../Feature/AddFolder/AddFolderView.swift | 12 +++--- .../Sources/Feature/AddLink/AddLinkView.swift | 12 +++--- Mark-In/Sources/Feature/Login/LoginView.swift | 11 ++--- .../Sources/Feature/Main/LinkListView.swift | 11 ++--- 5 files changed, 63 insertions(+), 26 deletions(-) create mode 100644 Core/DesignSystem/Sources/ViewModifiers/RoundedOutlineModifier.swift diff --git a/Core/DesignSystem/Sources/ViewModifiers/RoundedOutlineModifier.swift b/Core/DesignSystem/Sources/ViewModifiers/RoundedOutlineModifier.swift new file mode 100644 index 0000000..60477f8 --- /dev/null +++ b/Core/DesignSystem/Sources/ViewModifiers/RoundedOutlineModifier.swift @@ -0,0 +1,43 @@ +// +// RoundedStrokeModifier.swift +// DesignSystem +// +// Created by 이정동 on 6/7/25. +// + +import SwiftUI + +struct RoundedOutlineModifier: ViewModifier { + + let cornerRadius: CGFloat + let lineWidth: CGFloat + let lineColor: Color + + func body(content: Content) -> some View { + content + .clipShape( + RoundedRectangle(cornerRadius: cornerRadius) + ) + .overlay(content: { + RoundedRectangle(cornerRadius: cornerRadius) + .stroke(lineWidth: lineWidth) + .fill(lineColor) + }) + } +} + +public extension View { + func markRoundedOutline( + cornerRadius: CGFloat, + lineWidth: CGFloat = 0, + lineColor: Color = .clear + ) -> some View { + self.modifier( + RoundedOutlineModifier( + cornerRadius: cornerRadius, + lineWidth: lineWidth, + lineColor: lineColor + ) + ) + } +} diff --git a/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift b/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift index 458de0c..bf55ee1 100644 --- a/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift +++ b/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift @@ -49,11 +49,11 @@ struct AddFolderView: View { .padding(.horizontal, 14) .foregroundStyle(.markBlack) .background(.markWhite) - .clipShape(RoundedRectangle(cornerRadius: 6)) - .overlay { - RoundedRectangle(cornerRadius: 6) - .stroke(.markBlack10, lineWidth: 0.5) - } + .markRoundedOutline( + cornerRadius: 6, + lineWidth: 0.5, + lineColor: .markBlack10 + ) } .disabled(title.isEmpty || isSaving) @@ -65,7 +65,7 @@ struct AddFolderView: View { .padding(.horizontal, 14) .foregroundStyle(.markWhite) .background(.markPoint) - .clipShape(RoundedRectangle(cornerRadius: 6)) + .markRoundedOutline(cornerRadius: 6) } .disabled(title.isEmpty || isSaving) } diff --git a/Mark-In/Sources/Feature/AddLink/AddLinkView.swift b/Mark-In/Sources/Feature/AddLink/AddLinkView.swift index 80c5f8f..7d8488e 100644 --- a/Mark-In/Sources/Feature/AddLink/AddLinkView.swift +++ b/Mark-In/Sources/Feature/AddLink/AddLinkView.swift @@ -81,11 +81,11 @@ struct AddLinkView: View { .padding(.horizontal, 14) .foregroundStyle(.markBlack) .background(.markWhite) - .clipShape(RoundedRectangle(cornerRadius: 6)) - .overlay { - RoundedRectangle(cornerRadius: 6) - .stroke(.markBlack10, lineWidth: 0.5) - } + .markRoundedOutline( + cornerRadius: 6, + lineWidth: 0.5, + lineColor: .markBlack10 + ) } .disabled(isSaving) @@ -102,7 +102,7 @@ struct AddLinkView: View { .padding(.horizontal, 14) .foregroundStyle(.markWhite) .background(.markPoint) - .clipShape(RoundedRectangle(cornerRadius: 6)) + .markRoundedOutline(cornerRadius: 6) } .disabled(url.isEmpty || isSaving) } diff --git a/Mark-In/Sources/Feature/Login/LoginView.swift b/Mark-In/Sources/Feature/Login/LoginView.swift index adc4098..be5f13c 100644 --- a/Mark-In/Sources/Feature/Login/LoginView.swift +++ b/Mark-In/Sources/Feature/Login/LoginView.swift @@ -158,14 +158,11 @@ private struct SignInButton: View { .contentShape(Rectangle()) } .buttonStyle(.plain) - .clipShape( - RoundedRectangle(cornerRadius: 10) + .markRoundedOutline( + cornerRadius: 10, + lineWidth: 0.5, + lineColor: .markBlack30 ) - .overlay(content: { - RoundedRectangle(cornerRadius: 10) - .stroke(lineWidth: 0.5) - .fill(.markBlack30) - }) } } diff --git a/Mark-In/Sources/Feature/Main/LinkListView.swift b/Mark-In/Sources/Feature/Main/LinkListView.swift index e94c70b..98cc9b8 100644 --- a/Mark-In/Sources/Feature/Main/LinkListView.swift +++ b/Mark-In/Sources/Feature/Main/LinkListView.swift @@ -108,14 +108,11 @@ private struct LinkCell: View { .padding([.top, .bottom], 12) .background(.markWhite) } - .clipShape( - RoundedRectangle(cornerRadius: 6) + .markRoundedOutline( + cornerRadius: 6, + lineWidth: 0.5, + lineColor: .markBlack20 ) - .overlay(content: { - RoundedRectangle(cornerRadius: 6) - .stroke(.markBlack20, lineWidth: 0.5) - }) - } private var headerTitle: some View { From cf27ba1a6389a4abc7563a0f80ad3f5eaef2a555 Mon Sep 17 00:00:00 2001 From: Jeong Dong Date: Sat, 7 Jun 2025 18:40:29 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[#57]=20AddButton,=20CancelButton=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Buttons/MarkAddButton.swift | 41 ++++++++++++++++++ .../Components/Buttons/MarkCancelButton.swift | 43 +++++++++++++++++++ .../Feature/AddFolder/AddFolderView.swift | 24 +---------- .../Sources/Feature/AddLink/AddLinkView.swift | 24 +---------- 4 files changed, 88 insertions(+), 44 deletions(-) create mode 100644 Core/DesignSystem/Sources/Components/Buttons/MarkAddButton.swift create mode 100644 Core/DesignSystem/Sources/Components/Buttons/MarkCancelButton.swift diff --git a/Core/DesignSystem/Sources/Components/Buttons/MarkAddButton.swift b/Core/DesignSystem/Sources/Components/Buttons/MarkAddButton.swift new file mode 100644 index 0000000..bbd1435 --- /dev/null +++ b/Core/DesignSystem/Sources/Components/Buttons/MarkAddButton.swift @@ -0,0 +1,41 @@ +// +// MarkAddButton.swift +// DesignSystem +// +// Created by 이정동 on 6/7/25. +// + +import SwiftUI + +#if os(macOS) +public struct MarkAddButton: View { + + private let action: () -> Void + + public init(_ action: @escaping () -> Void) { + self.action = action + } + + public var body: some View { + Button { + action() + } label: { + Text("추가") + .padding(.vertical, 4) + .padding(.horizontal, 14) + .foregroundStyle(.markWhite) + .background(.markPoint) + .font(.pretendard(size: 14, weight: .medium)) + .markRoundedOutline(cornerRadius: 6) + } + .buttonStyle(.plain) + } +} + + +#Preview { + MarkAddButton { + + } +} +#endif diff --git a/Core/DesignSystem/Sources/Components/Buttons/MarkCancelButton.swift b/Core/DesignSystem/Sources/Components/Buttons/MarkCancelButton.swift new file mode 100644 index 0000000..4a9ba87 --- /dev/null +++ b/Core/DesignSystem/Sources/Components/Buttons/MarkCancelButton.swift @@ -0,0 +1,43 @@ +// +// MarkCancelButton.swift +// DesignSystem +// +// Created by 이정동 on 6/7/25. +// + +import SwiftUI + +#if os(macOS) +public struct MarkCancelButton: View { + private let action: () -> Void + + public init(_ action: @escaping () -> Void) { + self.action = action + } + + public var body: some View { + Button { + action() + } label: { + Text("취소") + .padding(.vertical, 4) + .padding(.horizontal, 14) + .foregroundStyle(.markBlack) + .background(.markWhite) + .font(.pretendard(size: 14, weight: .medium)) + .markRoundedOutline( + cornerRadius: 6, + lineWidth: 0.5, + lineColor: .markBlack10 + ) + } + .buttonStyle(.plain) + } +} + +#Preview { + MarkCancelButton { + + } +} +#endif diff --git a/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift b/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift index bf55ee1..eaf1704 100644 --- a/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift +++ b/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift @@ -41,38 +41,18 @@ struct AddFolderView: View { .scaleEffect(0.4, anchor: .center) } - Button { + MarkCancelButton { dismiss() - } label: { - Text("취소") - .padding(.vertical, 4) - .padding(.horizontal, 14) - .foregroundStyle(.markBlack) - .background(.markWhite) - .markRoundedOutline( - cornerRadius: 6, - lineWidth: 0.5, - lineColor: .markBlack10 - ) } .disabled(title.isEmpty || isSaving) - Button { + MarkAddButton { store.send(.didTapAddFolderButton(name: title)) - } label: { - Text("추가") - .padding(.vertical, 4) - .padding(.horizontal, 14) - .foregroundStyle(.markWhite) - .background(.markPoint) - .markRoundedOutline(cornerRadius: 6) } .disabled(title.isEmpty || isSaving) } .frame(maxWidth: .infinity, alignment: .trailing) .padding(.top, 18) - .font(.pretendard(size: 14, weight: .medium)) - .buttonStyle(.plain) } .padding(20) .frame(width: 400) diff --git a/Mark-In/Sources/Feature/AddLink/AddLinkView.swift b/Mark-In/Sources/Feature/AddLink/AddLinkView.swift index 7d8488e..77a6ea3 100644 --- a/Mark-In/Sources/Feature/AddLink/AddLinkView.swift +++ b/Mark-In/Sources/Feature/AddLink/AddLinkView.swift @@ -73,43 +73,23 @@ struct AddLinkView: View { .scaleEffect(0.4, anchor: .center) } - Button { + MarkCancelButton { dismiss() - } label: { - Text("취소") - .padding(.vertical, 4) - .padding(.horizontal, 14) - .foregroundStyle(.markBlack) - .background(.markWhite) - .markRoundedOutline( - cornerRadius: 6, - lineWidth: 0.5, - lineColor: .markBlack10 - ) } .disabled(isSaving) - Button { + MarkAddButton { let link = WriteLink( url: url, title: title.isEmpty ? nil : title, folderID: currentFolder.id ) store.send(.addLinkButtonTapped(link: link)) - } label: { - Text("추가") - .padding(.vertical, 4) - .padding(.horizontal, 14) - .foregroundStyle(.markWhite) - .background(.markPoint) - .markRoundedOutline(cornerRadius: 6) } .disabled(url.isEmpty || isSaving) } .frame(maxWidth: .infinity, alignment: .trailing) .padding(.top, 18) - .font(.pretendard(size: 14, weight: .medium)) - .buttonStyle(.plain) } .padding(20) .frame(width: 400) From 51908ed33a16efc8a5ac6688f5f9c551c02353a0 Mon Sep 17 00:00:00 2001 From: Jeong Dong Date: Sat, 7 Jun 2025 18:58:17 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[#57]=20LinearGradient=20=EC=83=89=EC=83=81?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contents.json | 20 +++++++++++++++++++ .../buttonLinearBottom.colorset/Contents.json | 20 +++++++++++++++++++ .../buttonLinearTop.colorset/Contents.json | 20 +++++++++++++++++++ .../Components/Buttons/MarkAddButton.swift | 2 +- .../Sources/Resouce+Ext/Color+Ext.swift | 14 +++++++++++++ Mark-In/Sources/Feature/Login/LoginView.swift | 8 ++------ 6 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 Core/DesignSystem/Resources/Color.xcassets/backgroundLinearTop.colorset/Contents.json create mode 100644 Core/DesignSystem/Resources/Color.xcassets/buttonLinearBottom.colorset/Contents.json create mode 100644 Core/DesignSystem/Resources/Color.xcassets/buttonLinearTop.colorset/Contents.json diff --git a/Core/DesignSystem/Resources/Color.xcassets/backgroundLinearTop.colorset/Contents.json b/Core/DesignSystem/Resources/Color.xcassets/backgroundLinearTop.colorset/Contents.json new file mode 100644 index 0000000..c1cb2dc --- /dev/null +++ b/Core/DesignSystem/Resources/Color.xcassets/backgroundLinearTop.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0x6F", + "red" : "0x00" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Resources/Color.xcassets/buttonLinearBottom.colorset/Contents.json b/Core/DesignSystem/Resources/Color.xcassets/buttonLinearBottom.colorset/Contents.json new file mode 100644 index 0000000..414157d --- /dev/null +++ b/Core/DesignSystem/Resources/Color.xcassets/buttonLinearBottom.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF6", + "green" : "0x7A", + "red" : "0x36" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Resources/Color.xcassets/buttonLinearTop.colorset/Contents.json b/Core/DesignSystem/Resources/Color.xcassets/buttonLinearTop.colorset/Contents.json new file mode 100644 index 0000000..259ae4c --- /dev/null +++ b/Core/DesignSystem/Resources/Color.xcassets/buttonLinearTop.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF7", + "green" : "0x91", + "red" : "0x4B" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Sources/Components/Buttons/MarkAddButton.swift b/Core/DesignSystem/Sources/Components/Buttons/MarkAddButton.swift index bbd1435..77b4d19 100644 --- a/Core/DesignSystem/Sources/Components/Buttons/MarkAddButton.swift +++ b/Core/DesignSystem/Sources/Components/Buttons/MarkAddButton.swift @@ -24,7 +24,7 @@ public struct MarkAddButton: View { .padding(.vertical, 4) .padding(.horizontal, 14) .foregroundStyle(.markWhite) - .background(.markPoint) + .background(LinearGradient.button) .font(.pretendard(size: 14, weight: .medium)) .markRoundedOutline(cornerRadius: 6) } diff --git a/Core/DesignSystem/Sources/Resouce+Ext/Color+Ext.swift b/Core/DesignSystem/Sources/Resouce+Ext/Color+Ext.swift index cc3f3d4..9741455 100644 --- a/Core/DesignSystem/Sources/Resouce+Ext/Color+Ext.swift +++ b/Core/DesignSystem/Sources/Resouce+Ext/Color+Ext.swift @@ -54,3 +54,17 @@ public extension ShapeStyle where Self == Color { static var markBackground: Self { .background } } + +public extension LinearGradient { + static let background = Self( + colors: [.backgroundLinearTop, .background], + startPoint: .top, + endPoint: .bottom + ) + + static let button = Self( + colors: [.buttonLinearTop, .buttonLinearBottom], + startPoint: .top, + endPoint: .bottom + ) +} diff --git a/Mark-In/Sources/Feature/Login/LoginView.swift b/Mark-In/Sources/Feature/Login/LoginView.swift index be5f13c..0d0aef3 100644 --- a/Mark-In/Sources/Feature/Login/LoginView.swift +++ b/Mark-In/Sources/Feature/Login/LoginView.swift @@ -20,12 +20,8 @@ struct LoginView: View { var body: some View { ZStack { - LinearGradient( - colors: [.markPoint, .markWhite], - startPoint: .top, - endPoint: .bottom - ) - .ignoresSafeArea() + LinearGradient.background + .ignoresSafeArea() VStack(spacing: 28) { headerView From 92d81aad2e56d51f2b632d43e9c7a39d423a61b6 Mon Sep 17 00:00:00 2001 From: Jeong Dong Date: Sat, 7 Jun 2025 19:06:11 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[#57]=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EB=B0=B0=EA=B2=BD=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../loginBackground.imageset/Contents.json | 12 ++++++++++++ .../loginBackground.imageset/Mark-in.png | Bin 0 -> 45994 bytes .../Sources/Resouce+Ext/Image+Ext.swift | 1 + Mark-In/Sources/Feature/Login/LoginView.swift | 4 ++++ 4 files changed, 17 insertions(+) create mode 100644 Core/DesignSystem/Resources/Image.xcassets/loginBackground.imageset/Contents.json create mode 100644 Core/DesignSystem/Resources/Image.xcassets/loginBackground.imageset/Mark-in.png diff --git a/Core/DesignSystem/Resources/Image.xcassets/loginBackground.imageset/Contents.json b/Core/DesignSystem/Resources/Image.xcassets/loginBackground.imageset/Contents.json new file mode 100644 index 0000000..d61b245 --- /dev/null +++ b/Core/DesignSystem/Resources/Image.xcassets/loginBackground.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "Mark-in.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Core/DesignSystem/Resources/Image.xcassets/loginBackground.imageset/Mark-in.png b/Core/DesignSystem/Resources/Image.xcassets/loginBackground.imageset/Mark-in.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a17d86a136c868513c968c4aa8f9a2460b873b GIT binary patch literal 45994 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 J1y5gp_&*Xwc=P}O literal 0 HcmV?d00001 diff --git a/Core/DesignSystem/Sources/Resouce+Ext/Image+Ext.swift b/Core/DesignSystem/Sources/Resouce+Ext/Image+Ext.swift index 2197ff5..7985209 100644 --- a/Core/DesignSystem/Sources/Resouce+Ext/Image+Ext.swift +++ b/Core/DesignSystem/Sources/Resouce+Ext/Image+Ext.swift @@ -11,4 +11,5 @@ public extension ImageResource { static let sampleImage: ImageResource = .test static let apple: ImageResource = .appleLogo static let google: ImageResource = .googleLogo + static let backgroundLogo: ImageResource = .loginBackground } diff --git a/Mark-In/Sources/Feature/Login/LoginView.swift b/Mark-In/Sources/Feature/Login/LoginView.swift index 0d0aef3..f6fef75 100644 --- a/Mark-In/Sources/Feature/Login/LoginView.swift +++ b/Mark-In/Sources/Feature/Login/LoginView.swift @@ -23,6 +23,10 @@ struct LoginView: View { LinearGradient.background .ignoresSafeArea() + Image(.backgroundLogo) + .resizable() + .aspectRatio(contentMode: .fill) + VStack(spacing: 28) { headerView From 351d00e326578400448f69d800db9426a6e6fa29 Mon Sep 17 00:00:00 2001 From: Jeong Dong Date: Mon, 9 Jun 2025 12:43:57 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[#57]=20TextField=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/TextFields/MarkTextField.swift | 34 +++++++++++++++++++ .../Feature/AddFolder/AddFolderView.swift | 3 +- .../Sources/Feature/AddLink/AddLinkView.swift | 6 ++-- 3 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 Core/DesignSystem/Sources/Components/TextFields/MarkTextField.swift diff --git a/Core/DesignSystem/Sources/Components/TextFields/MarkTextField.swift b/Core/DesignSystem/Sources/Components/TextFields/MarkTextField.swift new file mode 100644 index 0000000..dab26f7 --- /dev/null +++ b/Core/DesignSystem/Sources/Components/TextFields/MarkTextField.swift @@ -0,0 +1,34 @@ +// +// MarkTextField.swift +// DesignSystem +// +// Created by 이정동 on 6/9/25. +// + +import SwiftUI + +#if os(macOS) +public struct MarkTextField: View { + + @Binding var text: String + let placeholder: String + + public init( + text: Binding, + placeholder: String = "" + ) { + self._text = text + self.placeholder = placeholder + } + + public var body: some View { + TextField("", text: $text, prompt: Text(placeholder)) + .textFieldStyle(.roundedBorder) + } +} + +#Preview { + @Previewable @State var text = "" + MarkTextField(text: $text, placeholder: "입력") +} +#endif diff --git a/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift b/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift index eaf1704..4095902 100644 --- a/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift +++ b/Mark-In/Sources/Feature/AddFolder/AddFolderView.swift @@ -29,8 +29,7 @@ struct AddFolderView: View { Text("폴더를 추가:") .frame(maxWidth: .infinity, alignment: .leading) - TextField("", text: $title, prompt: Text("제목")) - .textFieldStyle(.roundedBorder) + MarkTextField(text: $title, placeholder: "제목") .padding(.top, 14) .disabled(isSaving) diff --git a/Mark-In/Sources/Feature/AddLink/AddLinkView.swift b/Mark-In/Sources/Feature/AddLink/AddLinkView.swift index 77a6ea3..32b5ce4 100644 --- a/Mark-In/Sources/Feature/AddLink/AddLinkView.swift +++ b/Mark-In/Sources/Feature/AddLink/AddLinkView.swift @@ -56,11 +56,9 @@ struct AddLinkView: View { .pickerStyle(.menu) .labelsHidden() - TextField("", text: $url, prompt: Text("주소")) - .textFieldStyle(.roundedBorder) + MarkTextField(text: $url, placeholder: "주소") - TextField("", text: $title, prompt: Text("제목(선택)")) - .textFieldStyle(.roundedBorder) + MarkTextField(text: $title, placeholder: "제목(선택)") } .padding(.top, 14) .disabled(isSaving)