Implement custom 5-color design system across entire iOS app
Apply consistent branding colors (BlueGreen, Cerulean, BrightAmber, PrimaryScarlet, cream backgrounds) to all screens, components, buttons, icons, and text throughout the app. Update all Form/List views with proper list row backgrounds to ensure visual consistency with card-based layouts. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -52,7 +52,7 @@ struct ContractorFormSheet: View {
|
||||
Section {
|
||||
HStack {
|
||||
Image(systemName: "person")
|
||||
.foregroundColor(.blue)
|
||||
.foregroundColor(Color.appPrimary)
|
||||
.frame(width: 24)
|
||||
TextField("Name", text: $name)
|
||||
.focused($focusedField, equals: .name)
|
||||
@@ -60,7 +60,7 @@ struct ContractorFormSheet: View {
|
||||
|
||||
HStack {
|
||||
Image(systemName: "building.2")
|
||||
.foregroundColor(.purple)
|
||||
.foregroundColor(Color.appPrimary)
|
||||
.frame(width: 24)
|
||||
TextField("Company", text: $company)
|
||||
.focused($focusedField, equals: .company)
|
||||
@@ -70,14 +70,15 @@ struct ContractorFormSheet: View {
|
||||
} footer: {
|
||||
Text("Required: Name")
|
||||
.font(.caption)
|
||||
.foregroundColor(.red)
|
||||
.foregroundColor(Color.appError)
|
||||
}
|
||||
.listRowBackground(Color.appBackgroundSecondary)
|
||||
|
||||
// Contact Information
|
||||
Section {
|
||||
HStack {
|
||||
Image(systemName: "phone.fill")
|
||||
.foregroundColor(.green)
|
||||
.foregroundColor(Color.appPrimary)
|
||||
.frame(width: 24)
|
||||
TextField("Phone", text: $phone)
|
||||
.keyboardType(.phonePad)
|
||||
@@ -86,7 +87,7 @@ struct ContractorFormSheet: View {
|
||||
|
||||
HStack {
|
||||
Image(systemName: "envelope.fill")
|
||||
.foregroundColor(.orange)
|
||||
.foregroundColor(Color.appAccent)
|
||||
.frame(width: 24)
|
||||
TextField("Email", text: $email)
|
||||
.keyboardType(.emailAddress)
|
||||
@@ -97,7 +98,7 @@ struct ContractorFormSheet: View {
|
||||
|
||||
HStack {
|
||||
Image(systemName: "phone.badge.plus")
|
||||
.foregroundColor(.green)
|
||||
.foregroundColor(Color.appPrimary)
|
||||
.frame(width: 24)
|
||||
TextField("Secondary Phone", text: $secondaryPhone)
|
||||
.keyboardType(.phonePad)
|
||||
@@ -106,28 +107,29 @@ struct ContractorFormSheet: View {
|
||||
} header: {
|
||||
Text("Contact Information")
|
||||
} footer: {
|
||||
|
||||
|
||||
}
|
||||
.listRowBackground(Color.appBackgroundSecondary)
|
||||
|
||||
// Business Details
|
||||
Section {
|
||||
Button(action: { showingSpecialtyPicker = true }) {
|
||||
HStack {
|
||||
Image(systemName: "wrench.and.screwdriver")
|
||||
.foregroundColor(.blue)
|
||||
.foregroundColor(Color.appPrimary)
|
||||
.frame(width: 24)
|
||||
Text(specialty.isEmpty ? "Specialty" : specialty)
|
||||
.foregroundColor(specialty.isEmpty ? Color(.placeholderText) : Color(.label))
|
||||
.foregroundColor(specialty.isEmpty ? Color.appTextSecondary.opacity(0.5) : Color.appTextPrimary)
|
||||
Spacer()
|
||||
Image(systemName: "chevron.down")
|
||||
.font(.caption)
|
||||
.foregroundColor(Color(.tertiaryLabel))
|
||||
.foregroundColor(Color.appTextSecondary.opacity(0.7))
|
||||
}
|
||||
}
|
||||
|
||||
HStack {
|
||||
Image(systemName: "doc.badge")
|
||||
.foregroundColor(.purple)
|
||||
.foregroundColor(Color.appPrimary)
|
||||
.frame(width: 24)
|
||||
TextField("License Number", text: $licenseNumber)
|
||||
.focused($focusedField, equals: .licenseNumber)
|
||||
@@ -135,7 +137,7 @@ struct ContractorFormSheet: View {
|
||||
|
||||
HStack {
|
||||
Image(systemName: "globe")
|
||||
.foregroundColor(.blue)
|
||||
.foregroundColor(Color.appAccent)
|
||||
.frame(width: 24)
|
||||
TextField("Website", text: $website)
|
||||
.keyboardType(.URL)
|
||||
@@ -146,12 +148,13 @@ struct ContractorFormSheet: View {
|
||||
} header: {
|
||||
Text("Business Details")
|
||||
}
|
||||
.listRowBackground(Color.appBackgroundSecondary)
|
||||
|
||||
// Address
|
||||
Section {
|
||||
HStack {
|
||||
Image(systemName: "location.fill")
|
||||
.foregroundColor(.red)
|
||||
.foregroundColor(Color.appError)
|
||||
.frame(width: 24)
|
||||
TextField("Street Address", text: $address)
|
||||
.focused($focusedField, equals: .address)
|
||||
@@ -159,7 +162,7 @@ struct ContractorFormSheet: View {
|
||||
|
||||
HStack {
|
||||
Image(systemName: "building.2.crop.circle")
|
||||
.foregroundColor(.blue)
|
||||
.foregroundColor(Color.appPrimary)
|
||||
.frame(width: 24)
|
||||
TextField("City", text: $city)
|
||||
.focused($focusedField, equals: .city)
|
||||
@@ -168,7 +171,7 @@ struct ContractorFormSheet: View {
|
||||
HStack(spacing: AppSpacing.sm) {
|
||||
HStack {
|
||||
Image(systemName: "map")
|
||||
.foregroundColor(.green)
|
||||
.foregroundColor(Color.appAccent)
|
||||
.frame(width: 24)
|
||||
TextField("State", text: $state)
|
||||
.focused($focusedField, equals: .state)
|
||||
@@ -185,12 +188,13 @@ struct ContractorFormSheet: View {
|
||||
} header: {
|
||||
Text("Address")
|
||||
}
|
||||
.listRowBackground(Color.appBackgroundSecondary)
|
||||
|
||||
// Notes
|
||||
Section {
|
||||
HStack(alignment: .top) {
|
||||
Image(systemName: "note.text")
|
||||
.foregroundColor(.orange)
|
||||
.foregroundColor(Color.appAccent)
|
||||
.frame(width: 24)
|
||||
.padding(.top, 8)
|
||||
|
||||
@@ -204,29 +208,35 @@ struct ContractorFormSheet: View {
|
||||
Text("Private notes about this contractor")
|
||||
.font(.caption)
|
||||
}
|
||||
.listRowBackground(Color.appBackgroundSecondary)
|
||||
|
||||
// Favorite
|
||||
Section {
|
||||
Toggle(isOn: $isFavorite) {
|
||||
Label("Mark as Favorite", systemImage: "star.fill")
|
||||
.foregroundColor(isFavorite ? .orange : Color(.label))
|
||||
.foregroundColor(isFavorite ? Color.appAccent : Color.appTextPrimary)
|
||||
}
|
||||
.tint(.orange)
|
||||
.tint(Color.appAccent)
|
||||
}
|
||||
.listRowBackground(Color.appBackgroundSecondary)
|
||||
|
||||
// Error Message
|
||||
if let error = viewModel.errorMessage {
|
||||
Section {
|
||||
HStack {
|
||||
Image(systemName: "exclamationmark.triangle.fill")
|
||||
.foregroundColor(.red)
|
||||
.foregroundColor(Color.appError)
|
||||
Text(error)
|
||||
.font(.callout)
|
||||
.foregroundColor(.red)
|
||||
.foregroundColor(Color.appError)
|
||||
}
|
||||
}
|
||||
.listRowBackground(Color.appBackgroundSecondary)
|
||||
}
|
||||
}
|
||||
.listStyle(.plain)
|
||||
.scrollContentBackground(.hidden)
|
||||
.background(Color.appBackgroundPrimary)
|
||||
.navigationTitle(contractor == nil ? "Add Contractor" : "Edit Contractor")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
@@ -258,16 +268,18 @@ struct ContractorFormSheet: View {
|
||||
}) {
|
||||
HStack {
|
||||
Text(spec)
|
||||
.foregroundColor(Color(.label))
|
||||
.foregroundColor(Color.appTextPrimary)
|
||||
Spacer()
|
||||
if specialty == spec {
|
||||
Image(systemName: "checkmark")
|
||||
.foregroundColor(.blue)
|
||||
.foregroundColor(Color.appPrimary)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.scrollContentBackground(.hidden)
|
||||
.background(Color.appBackgroundPrimary)
|
||||
.navigationTitle("Select Specialty")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
|
||||
Reference in New Issue
Block a user