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:
Trey t
2025-11-21 07:58:01 -06:00
parent a4ba6794d5
commit a2b81a244b
70 changed files with 920 additions and 417 deletions

View File

@@ -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 {