wip: Nearlight redesign implementation

This commit is contained in:
snowspeeder committed 2026-09-12 08:14:06 -04:00
1 parent c76afbd11e
commit fa21c81787
9 files changed
+904 -273

No files matched your search

+22 -4
View File
@@ -12,6 +12,7 @@ struct SettingsView: View {
@State private var urlText: String = ""
@State private var urlError: String?
@State private var showVoicePicker = false
@State private var urlJustSaved = false
@State private var showModelPicker = false
init(settings: SettingsStore, session: VoiceSession) {
@@ -55,7 +56,7 @@ struct SettingsView: View {
} else {
LabeledContent("Model", value: settings.modelID ?? "Server default")
Text("Connect from Talk to see the models available on your server.")
.font(.footnote).foregroundStyle(.secondary)
.font(.footnote).foregroundStyle(Nearlight.quiet)
}
} header: { Text("Intelligence") }
Section {
@@ -65,10 +66,24 @@ struct SettingsView: View {
.textInputAutocapitalization(.never)
.accessibilityLabel("Server URL")
.onAppear { urlText = settings.serverURL }
.overlay(alignment: .trailing) {
if urlJustSaved {
Image(systemName: "checkmark.circle")
.foregroundStyle(Nearlight.quiet)
.padding(.trailing, 8)
.accessibilityHidden(true)
}
}
if let urlError {
Text(urlError)
Label(urlError, systemImage: "exclamationmark.circle")
.font(.footnote)
.foregroundStyle(.red)
.foregroundStyle(Nearlight.alert)
.accessibilityIdentifier("settings.server.error")
} else if urlJustSaved {
Text("Server address saved.")
.font(.footnote)
.foregroundStyle(Nearlight.quiet)
.accessibilityIdentifier("settings.server.saved")
}
Button("Save server address") { applyServerURL() }
.disabled(!canApplyServerURL || urlText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || urlText == settings.serverURL)
@@ -77,7 +92,7 @@ struct SettingsView: View {
? "Waiting for failure cleanup to finish…"
: "End the conversation before changing servers.")
.font(.footnote)
.foregroundStyle(.secondary)
.foregroundStyle(Nearlight.quiet)
}
NavigationLink("Connection test") {
ConnectionTestView(settings: settings)
@@ -90,6 +105,7 @@ struct SettingsView: View {
}
.navigationTitle("Settings")
.navigationBarTitleDisplayMode(.inline)
.tint(Nearlight.quiet)
.sheet(isPresented: $showVoicePicker) {
VoicePickerView(settings: settings, session: session)
}
@@ -103,6 +119,7 @@ struct SettingsView: View {
/// left untouched so the active session keeps using its original URL.
/// Guarded: only applies when the session is idle (no active call).
private func applyServerURL() {
urlJustSaved = false
guard canApplyServerURL else {
urlError = "End the conversation before changing servers."
return
@@ -117,6 +134,7 @@ struct SettingsView: View {
settings.serverURL = trimmed
urlText = trimmed
urlError = nil
urlJustSaved = true
case .failure(let error):
urlError = error.localizedDescription
}