feat: East Africa + Southern Africa pills with regional sub-sections
- East Africa pill: merges Uganda + east-africa tags; Uganda pinned first via sub-sections - Southern Africa pill: covers SA, Namibia, Botswana, Zimbabwe, Zambia, Mozambique; SA/Namibia/Botswana prioritized - StoryStore.setPill now resets lastSyncedAt to bypass 30s rate-limit on filter switch - sectionSupplement background fetch populates sparse regional sections in All digest - SignalFeedView digestContent: flat hero+scroll path for pills without subSections (was showing max 5) - Theme: removed standalone Uganda pill, wired new sub-section layouts Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -20,7 +20,7 @@ struct ConnectivityView: View {
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
Color.black.ignoresSafeArea()
|
||||
Palette.background.ignoresSafeArea()
|
||||
ScrollView {
|
||||
VStack(alignment: .leading, spacing: 26) {
|
||||
header
|
||||
@@ -44,7 +44,7 @@ struct ConnectivityView: View {
|
||||
HStack {
|
||||
Text("Connectivity")
|
||||
.font(.system(size: 22, weight: .heavy))
|
||||
.foregroundStyle(.white)
|
||||
.foregroundStyle(Palette.primaryText)
|
||||
Spacer()
|
||||
Button { dismiss() } label: {
|
||||
Image(systemName: "xmark")
|
||||
@@ -84,7 +84,7 @@ struct ConnectivityView: View {
|
||||
VStack(alignment: .leading, spacing: 3) {
|
||||
Text("Use \(providerName) when remote")
|
||||
.font(.system(size: 16, weight: .heavy))
|
||||
.foregroundStyle(.white)
|
||||
.foregroundStyle(Palette.primaryText)
|
||||
Text("Connects via VPN when not on home network")
|
||||
.font(.system(size: 12))
|
||||
.foregroundStyle(Color(hex: "888888"))
|
||||
@@ -160,7 +160,7 @@ struct ConnectivityView: View {
|
||||
VStack(alignment: .leading, spacing: 3) {
|
||||
Text("Auto-connect on network change")
|
||||
.font(.system(size: 16, weight: .heavy))
|
||||
.foregroundStyle(.white)
|
||||
.foregroundStyle(Palette.primaryText)
|
||||
Text("Prefers the LAN on a trusted network; switches to \(providerName) when away")
|
||||
.font(.system(size: 12))
|
||||
.foregroundStyle(Color(hex: "888888"))
|
||||
@@ -175,7 +175,7 @@ struct ConnectivityView: View {
|
||||
HStack {
|
||||
Text("Wait before switching")
|
||||
.font(.system(size: 15, weight: .bold))
|
||||
.foregroundStyle(.white)
|
||||
.foregroundStyle(Palette.primaryText)
|
||||
Spacer()
|
||||
Stepper(value: $connectivity.switchDelaySeconds, in: 1...60, step: 1) {
|
||||
Text("\(connectivity.switchDelaySeconds)s")
|
||||
@@ -195,7 +195,7 @@ struct ConnectivityView: View {
|
||||
}
|
||||
Text("iOS can't start the \(providerName) tunnel for Jarvis — keep the \(providerName) app connected when away. Jarvis only picks the reachable address.")
|
||||
.font(.system(size: 11))
|
||||
.foregroundStyle(Color(hex: "666666"))
|
||||
.foregroundStyle(Palette.tertiaryText)
|
||||
.lineSpacing(2)
|
||||
}
|
||||
}
|
||||
@@ -231,7 +231,7 @@ struct ConnectivityView: View {
|
||||
Button { Task { await recheck() } } label: {
|
||||
Text("Re-check")
|
||||
.font(.system(size: 15, weight: .bold))
|
||||
.foregroundStyle(.white)
|
||||
.foregroundStyle(Palette.primaryText)
|
||||
.frame(maxWidth: .infinity).frame(height: 50)
|
||||
.background(Palette.surface2)
|
||||
.clipShape(RoundedRectangle(cornerRadius: 14))
|
||||
@@ -254,7 +254,7 @@ struct ConnectivityView: View {
|
||||
Text(t)
|
||||
.font(.system(size: 11, weight: .bold, design: .monospaced))
|
||||
.kerning(0.8)
|
||||
.foregroundStyle(Color(hex: "555555"))
|
||||
.foregroundStyle(Palette.tertiaryText)
|
||||
}
|
||||
|
||||
private func Card<Content: View>(@ViewBuilder _ content: () -> Content) -> some View {
|
||||
@@ -267,7 +267,7 @@ struct ConnectivityView: View {
|
||||
HStack(alignment: .center, spacing: 14) {
|
||||
Image(systemName: icon)
|
||||
.font(.system(size: 18, weight: .regular))
|
||||
.foregroundStyle(Color(hex: "999999"))
|
||||
.foregroundStyle(Palette.secondaryText)
|
||||
.frame(width: 26)
|
||||
content()
|
||||
}
|
||||
@@ -287,7 +287,7 @@ struct ConnectivityView: View {
|
||||
.foregroundStyle(Color(hex: "888888"))
|
||||
HStack(spacing: 8) {
|
||||
TextField("", text: text,
|
||||
prompt: Text(placeholder).foregroundColor(Color(hex: "444444")))
|
||||
prompt: Text(placeholder).foregroundColor(Palette.mutedText))
|
||||
.font(.system(size: 16, weight: .regular, design: .monospaced))
|
||||
.foregroundStyle(Palette.orange)
|
||||
.autocorrectionDisabled()
|
||||
@@ -312,7 +312,7 @@ struct ConnectivityView: View {
|
||||
case .reachable: return Color(hex: "33C25E")
|
||||
case .unreachable: return Color(hex: "C25555")
|
||||
case .checking: return Palette.healthFailing
|
||||
case .unknown: return Color(hex: "555555")
|
||||
case .unknown: return Palette.tertiaryText
|
||||
}
|
||||
}
|
||||
private func dot(for r: Reachability) -> some View {
|
||||
|
||||
Reference in New Issue
Block a user