Skip to content

Commit b3d0ac6

Browse files
Merge pull request #18 from hitendra-gofynd/master
Add more customization for textfield and dropDown textfields and tagView
2 parents 7a3bdab + 8a50488 commit b3d0ac6

File tree

10 files changed

+186
-117
lines changed

10 files changed

+186
-117
lines changed

Example-Nitrozen-SwiftUI/Example-Nitrozen-SwiftUI.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

-18
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,6 @@
1717
"branch" : "main",
1818
"revision" : "d4c9a91fce3755d051af9e4cbe7ccb8c4ebd1bd8"
1919
}
20-
},
21-
{
22-
"identity" : "floatingtextfield-swiftui",
23-
"kind" : "remoteSourceControl",
24-
"location" : "https://github.com/hitendradeveloper/FloatingTextField-SwiftUI",
25-
"state" : {
26-
"branch" : "v1.3.3",
27-
"revision" : "cd5e54a747302b79d3b58220f94e23f64ac6c3c8"
28-
}
29-
},
30-
{
31-
"identity" : "swiftui-introspect",
32-
"kind" : "remoteSourceControl",
33-
"location" : "https://github.com/siteline/SwiftUI-Introspect",
34-
"state" : {
35-
"revision" : "c18951c747ab62af7c15e17a81bd37d4fd5a9979",
36-
"version" : "0.2.3"
37-
}
3820
}
3921
],
4022
"version" : 2

Example-Nitrozen-SwiftUI/Example-Nitrozen-SwiftUI/Example-Code/Example_Nitrozen_SwiftUIApp.swift

-8
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,7 @@ struct Example_Nitrozen_SwiftUIApp: App {
5757
.borderWidth(0.0)
5858

5959
NitrozenAppearance.shared.textField
60-
.titleColor(.black)
61-
.font(.body)
6260
.errorInfo(.init(titleColor: .red.opacity(0.85), font: .caption))
6361
.sucessInfo(.init(titleColor: .green.opacity(0.85), font: .caption))
64-
.borderAppearance(
65-
.init()
66-
.borderColor(.gray)
67-
.borderWidth(1.0)
68-
.borderPadding(6)
69-
)
7062
}
7163
}

Package.swift

-3
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ let package = Package(
1919
],
2020
dependencies: [
2121
.package(url: "https://github.com/exyte/ActivityIndicatorView.git", from: .init(1, 1, 1)),
22-
.package(url: "https://github.com/hitendradeveloper/FloatingTextField-SwiftUI", branch: "v1.3.3"),
2322
.package(url: "https://github.com/hitendradeveloper/CollectionStack-SwiftUI", branch: "main")
24-
2523
],
2624
targets: [
2725
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
@@ -30,7 +28,6 @@ let package = Package(
3028
name: "Nitrozen-SwiftUI",
3129
dependencies: [
3230
.product(name: "ActivityIndicatorView", package: "ActivityIndicatorView"),
33-
.product(name: "FloatingTextField-SwiftUI", package: "FloatingTextField-SwiftUI"),
3431
.product(name: "CollectionStack-SwiftUI", package: "CollectionStack-SwiftUI")
3532
],
3633
resources: [

Sources/Nitrozen-SwiftUI/Appearance/NitrozenAppearance.swift

+35-37
Original file line numberDiff line numberDiff line change
@@ -82,60 +82,40 @@ public extension NitrozenAppearance {
8282
static var shared: NitrozenAppearance = {
8383
let colorProvider = ColorProvider.shared
8484
let fontProvider = FontProvider.shared
85-
85+
8686
let disableOpacity: Double = 0.3
87-
88-
87+
88+
8989
let font: SystemFont = .nitrozen(.body(size: .l, weight: .bold))
90-
90+
9191
FontRegistar.registerJIOFonts()
92-
93-
return .init(
92+
93+
return NitrozenAppearance.init(
9494
colorProvider: ColorProvider.shared,
9595
fontProvider: fontProvider,
96-
96+
9797
primaryButton: .init(styleUseCase: .primary,
9898
titleColor: .white, titleColorDisabled: .white.opacity(disableOpacity),
9999
backgroundColor: colorProvider.primary, backgroundColorDisabled: colorProvider.primary.opacity(disableOpacity),
100100
font: font,
101101
borderWidth: 0.0, borderColor: .clear, borderColorDisabled: .clear),
102-
102+
103103
borderedButton: .init(styleUseCase: .bordered,
104104
titleColor: colorProvider.primary, titleColorDisabled: colorProvider.primary.opacity(disableOpacity),
105105
backgroundColor: .clear, backgroundColorDisabled: .clear,
106106
font: font,
107107
borderWidth: 1.0, borderColor: .gray, borderColorDisabled: .gray),
108-
108+
109109
tertiaryButton: .init(styleUseCase: .tertiary,
110110
titleColor: colorProvider.primary, titleColorDisabled: colorProvider.primary.opacity(disableOpacity),
111111
backgroundColor: .clear, backgroundColorDisabled: .clear,
112112
font: font,
113113
borderWidth: 1.0, borderColor: .clear, borderColorDisabled: .clear),
114-
115-
textField: .init(
116-
titleColor: colorProvider.primary, font: .body,
117-
topInfo: .init(titleColor: .gray, font: .caption),
118-
sucessInfo: .init(titleColor: .green, font: .callout),
119-
errorInfo: .init(titleColor: .red, font: .callout),
120-
121-
borderAppearance: .init()
122-
.borderColor(.gray)
123-
.borderWidth(1.0)
124-
.borderPadding(6)
125-
),
126-
127-
dropDownTextField: .init(
128-
titleColor: colorProvider.primary, font: .body,
129-
topInfo: .init(titleColor: .gray, font: .caption),
130-
sucessInfo: .init(titleColor: .green, font: .callout),
131-
errorInfo: .init(titleColor: .red, font: .callout),
132-
133-
borderAppearance: .init()
134-
.borderColor(.purple)
135-
.borderWidth(1.0)
136-
.borderPadding(6)
137-
),
138-
114+
115+
textField: textfieldAppearance(),
116+
117+
dropDownTextField: textfieldAppearance(),
118+
139119
radioButton: .init(
140120
selectedBorderColor: .blue,
141121
deSelectedBorderColor: .black,
@@ -157,7 +137,7 @@ public extension NitrozenAppearance {
157137
Image(systemName: "checkmark.square.fill").resizable().scaledToFit()
158138
)
159139
),
160-
140+
161141
actionSheet: .init(
162142
title: .init(
163143
titleColor: colorProvider.primary,
@@ -169,9 +149,9 @@ public extension NitrozenAppearance {
169149
)
170150
,closeButtonColor: .blue
171151
),
172-
152+
173153
presentSheet: .init(focusOpacity: 0.5),
174-
154+
175155
alert: .init(
176156
title: .init(titleColor: .black, font: .nitrozen(.heading(size: .xs))),
177157
subtitle: .init(titleColor: .black.opacity(0.8), font: .nitrozen(.body(size: .s, weight: .useDefault))),
@@ -184,12 +164,30 @@ public extension NitrozenAppearance {
184164
)
185165
}()
186166

167+
private static func textfieldAppearance() -> NitrozenAppearance.TextField {
168+
.init(
169+
textFieldInternalTextLabel: .init(titleColor: .black, font: .nitrozen(.body(size: .s, weight: .useDefault))),
170+
topInfo: .init(titleColor: .gray, font: .caption),
171+
topInfoPadding: .custom(paddingToAdd: .init(top: 0, leading: 8, bottom: 8, trailing: 0)),
172+
sucessInfo: .init(titleColor: .green, font: .callout),
173+
successInfoPadding: .custom(paddingToAdd: .init(top: 8, leading: 8, bottom: 0, trailing: 0)),
174+
errorInfo: .init(titleColor: .red, font: .callout),
175+
errorInfoPadding: .custom(paddingToAdd: .init(top: 8, leading: 8, bottom: 0, trailing: 0)),
176+
borderColor: .gray,
177+
borderWidth: 1,
178+
borderPadding: .custom(paddingToAdd: .init(top: 10, leading: 10, bottom: 10, trailing: 10)),
179+
borderRadius: 16,
180+
backgroundColor: Color(UIColor.systemBackground)
181+
)
182+
}
183+
187184
private static func tagViewAppearance(color: SystemColor, font: SystemFont) -> NitrozenAppearance.TagView {
188185
.init(
189186
selectedTitle: .init(titleColor: color, font: .title.weight(.bold)),
190187
deSelectedTitle: .init(titleColor: .gray, font: .title),
191188
selectedBorderColor: color, deselectedBorderColor: .gray,
192189
selectedBorderWidth: 2, deselectedBorderWidth: 1,
190+
selectedBackgroundColor: color.opacity(0.05), deSelectedBackgroundColor: .gray.opacity(0.05),
193191
padding: .systemDefault, clearButtonColor: color
194192
)
195193
}

Sources/Nitrozen-SwiftUI/Elements/TagView/NitrozenTagView.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public struct NitrozenTagViewItem: View {
137137
clearIconView()
138138
}
139139
.apply(padding: self.appearance.padding)
140-
.background(self.appearance.selectedBorderColor.opacity(0.1))
140+
.background(self.appearance.selectedBackgroundColor)
141141
.nitrozen.capsuleWithBorder(color: self.appearance.selectedBorderColor, lineWidth: self.appearance.selectedBorderWidth)
142142
}
143143

@@ -152,6 +152,7 @@ public struct NitrozenTagViewItem: View {
152152
}
153153
}
154154
.apply(padding: self.appearance.padding)
155+
.background(self.appearance.deSelectedBackgroundColor)
155156
.nitrozen.capsuleWithBorder(color: self.appearance.deselectedBorderColor, lineWidth: self.appearance.deselectedBorderWidth)
156157
}
157158

Sources/Nitrozen-SwiftUI/Elements/TagView/TagView+Appearance.swift

+14
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@ public extension NitrozenAppearance {
2121
var padding: ViewPadding
2222
var clearButtonColor: SystemColor
2323

24+
var selectedBackgroundColor: SystemColor
25+
var deSelectedBackgroundColor: SystemColor
26+
2427
init(selectedTitle: NitrozenAppearance.TextLabel, deSelectedTitle: NitrozenAppearance.TextLabel,
2528
selectedBorderColor: SystemColor, deselectedBorderColor: SystemColor,
2629
selectedBorderWidth: CGFloat, deselectedBorderWidth: CGFloat,
30+
selectedBackgroundColor: SystemColor, deSelectedBackgroundColor: SystemColor,
2731
padding: ViewPadding, clearButtonColor: SystemColor
2832
) {
2933
self.selectedTitle = selectedTitle
@@ -34,6 +38,8 @@ public extension NitrozenAppearance {
3438
self.deselectedBorderWidth = deselectedBorderWidth
3539
self.padding = padding
3640
self.clearButtonColor = clearButtonColor
41+
self.selectedBackgroundColor = selectedBackgroundColor
42+
self.deSelectedBackgroundColor = deSelectedBackgroundColor
3743
}
3844
}
3945
}
@@ -63,6 +69,12 @@ public extension NitrozenAppearance.TagView {
6369

6470
@discardableResult
6571
func clearButtonColor(_ clearButtonColor: SystemColor) -> Self { self.clearButtonColor = clearButtonColor; return self }
72+
73+
@discardableResult
74+
func selectedBackgroundColor(_ selectedBackgroundColor: SystemColor) -> Self { self.selectedBackgroundColor = selectedBackgroundColor; return self }
75+
76+
@discardableResult
77+
func deSelectedBackgroundColor(_ deSelectedBackgroundColor: SystemColor) -> Self { self.deSelectedBackgroundColor = deSelectedBackgroundColor; return self }
6678
}
6779

6880
//MARK: Copy Support
@@ -75,6 +87,8 @@ public extension NitrozenAppearance.TagView {
7587
deselectedBorderColor: self.deselectedBorderColor,
7688
selectedBorderWidth: self.selectedBorderWidth,
7789
deselectedBorderWidth: self.deselectedBorderWidth,
90+
selectedBackgroundColor: self.selectedBackgroundColor,
91+
deSelectedBackgroundColor: self.deSelectedBackgroundColor,
7892
padding: self.padding,
7993
clearButtonColor: self.clearButtonColor
8094
)

Sources/Nitrozen-SwiftUI/Elements/TextField/NitrozenDropdownTextField.swift

+2-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
//
77

88
import SwiftUI
9-
import FloatingTextField_SwiftUI
109

1110
public struct NitrozenDropdownTextField: View {
1211

@@ -35,9 +34,9 @@ public struct NitrozenDropdownTextField: View {
3534
}
3635

3736
public var body: some View {
38-
VStack {
37+
VStack(spacing: 0) {
3938
self.textFieldContainer.infoView()
40-
.frame(maxWidth: .infinity, alignment: .leading)
39+
4140
ZStack {
4241
self.textFieldContainer.textField()
4342
.disabled(true)
@@ -47,9 +46,7 @@ public struct NitrozenDropdownTextField: View {
4746
}
4847
}
4948
self.textFieldContainer.errorView()
50-
.frame(maxWidth: .infinity, alignment: .leading)
5149
self.textFieldContainer.successView()
52-
.frame(maxWidth: .infinity, alignment: .leading)
5350
}
5451
}
5552

Sources/Nitrozen-SwiftUI/Elements/TextField/NitrozenTextField.swift

+32-26
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
//
77

88
import SwiftUI
9-
import FloatingTextField_SwiftUI
109

1110
public struct NitrozenTextField: View {
1211

@@ -34,8 +33,7 @@ public struct NitrozenTextField: View {
3433
var placeHolder: String
3534
var infos: [Info] = []
3635

37-
var borderedAppearance: FloatingTextField_SwiftUI.Modifiers.Rounded.Configuration
38-
var textFieldAppearance: FloatingTextField_SwiftUI.Modifiers.Floating.Configuration
36+
var apperance: NitrozenAppearance.TextField
3937

4038
var leftView: AnyView? = nil
4139
var rightView: AnyView? = nil
@@ -44,8 +42,7 @@ public struct NitrozenTextField: View {
4442
binding: Binding<String>, placeHolder: String,
4543
infos: [Info],
4644
isSecure: Bool = false,
47-
borderedAppearance: FloatingTextField_SwiftUI.Modifiers.Rounded.Configuration? = nil,
48-
textFieldAppearance: FloatingTextField_SwiftUI.Modifiers.Floating.Configuration? = nil,
45+
apperance: NitrozenAppearance.TextField? = nil,
4946
leftView: AnyView? = nil, rightView: AnyView? = nil
5047
) {
5148
self.isSecure = isSecure
@@ -54,42 +51,45 @@ public struct NitrozenTextField: View {
5451
self.infos = infos
5552
self.leftView = leftView
5653
self.rightView = rightView
57-
self.borderedAppearance = borderedAppearance.or(NitrozenAppearance.shared.textField.borderAppearance)
58-
self.textFieldAppearance = textFieldAppearance.or(
59-
.init()
60-
.textFieldFont(NitrozenAppearance.shared.textField.font)
61-
.textFieldColor(NitrozenAppearance.shared.textField.titleColor)
62-
.allowsFloatingPlaceholder(false)
63-
.leftView(AnyView(self.leftView.convertToView{ $0 }))
64-
.rightView(AnyView(self.rightView.convertToView{ $0 }))
65-
)
54+
self.apperance = apperance.or(NitrozenAppearance.shared.textField)
55+
56+
// .init()
57+
// .textFieldFont(NitrozenAppearance.shared.textField.font)
58+
// .textFieldColor(NitrozenAppearance.shared.textField.titleColor)
59+
// .allowsFloatingPlaceholder(false)
60+
// .leftView(AnyView(self.leftView.convertToView{ $0 }))
61+
// .rightView(AnyView(self.rightView.convertToView{ $0 }))
62+
6663
}
6764

6865
public var body: some View {
69-
VStack(spacing: 4) {
66+
VStack(spacing: 0) {
7067
infoView()
71-
.frame(maxWidth: .infinity, alignment: .leading)
7268
textField()
73-
7469
errorView()
75-
.frame(maxWidth: .infinity, alignment: .leading)
7670
successView()
77-
.frame(maxWidth: .infinity, alignment: .leading)
7871
}
7972
}
8073

8174

8275
@ViewBuilder
8376
func textField() -> some View {
84-
Group {
85-
if self.isSecure {
86-
SecureField(placeHolder, text: binding)
87-
} else {
88-
TextField(placeHolder, text: binding)
77+
HStack {
78+
leftView.convertToView { $0 }
79+
Group {
80+
if self.isSecure {
81+
SecureField(placeHolder, text: binding)
82+
} else {
83+
TextField(placeHolder, text: binding)
84+
}
8985
}
86+
rightView.convertToView { $0 }
9087
}
91-
.floatingRounded(self.borderedAppearance)
92-
.floating(self.textFieldAppearance)
88+
.apply(padding: self.apperance.borderPadding)
89+
.foregroundColor(self.apperance.textFieldInternalTextLabel.titleColor)
90+
.font(self.apperance.textFieldInternalTextLabel.font)
91+
.background(self.apperance.backgroundColor)
92+
.nitrozen.roundedCornerWithBorder(color: self.apperance.borderColor, radius: self.apperance.borderRadius, lineWidth: self.apperance.borderWidth)
9393
}
9494

9595
@ViewBuilder
@@ -104,6 +104,8 @@ public struct NitrozenTextField: View {
104104
.font(info.appearance.or(NitrozenAppearance.shared.textField.topInfo).font)
105105

106106
}
107+
.frame(maxWidth: .infinity, alignment: .leading)
108+
.apply(padding: self.apperance.topInfoPadding)
107109
}
108110
}
109111
}
@@ -119,6 +121,8 @@ public struct NitrozenTextField: View {
119121
.foregroundColor(info.appearance.or(NitrozenAppearance.shared.textField.errorInfo).titleColor)
120122
.font(info.appearance.or(NitrozenAppearance.shared.textField.errorInfo).font)
121123
}
124+
.frame(maxWidth: .infinity, alignment: .leading)
125+
.apply(padding: self.apperance.errorInfoPadding)
122126
}
123127
}
124128
}
@@ -135,6 +139,8 @@ public struct NitrozenTextField: View {
135139
.font(info.appearance.or(NitrozenAppearance.shared.textField.sucessInfo).font)
136140

137141
}
142+
.frame(maxWidth: .infinity, alignment: .leading)
143+
.apply(padding: self.apperance.successInfoPadding)
138144
}
139145
}
140146
}

0 commit comments

Comments
 (0)