Fix major Nearlight deviations from design review

- Expose End conversation + readable draft during connecting/waiting
- Stop masking assistant speaking/thinking state in Type/muted modes
- Restrict failure diagnosis to real causes (no invented network text)
- Replace old blue tint with Rosewood everywhere
- Fix transcript short-content bottom-anchor (top-align short histories)
- Settings: visible Server URL label, focus on rejected save, edit clears
  saved confirmation, trim-aware unchanged detection
- Task detail: live store lookup with missing-task state
- Task rows: status text label restored
This commit is contained in:
snowspeeder committed 2026-09-12 08:20:43 -04:00
1 parent fa21c81787
commit f043d6b078
5 files changed
+72 -30

No files matched your search

+14 -2
View File
@@ -14,6 +14,7 @@ struct SettingsView: View {
@State private var showVoicePicker = false
@State private var urlJustSaved = false
@State private var showModelPicker = false
@FocusState private var urlFocused: Bool
init(settings: SettingsStore, session: VoiceSession) {
self.settings = settings
@@ -60,12 +61,21 @@ struct SettingsView: View {
}
} header: { Text("Intelligence") }
Section {
Text("Server URL")
.font(.footnote.weight(.semibold))
.foregroundStyle(Nearlight.quiet)
TextField(SettingsStore.defaultServerURL, text: $urlText)
.keyboardType(.URL)
.autocorrectionDisabled()
.textInputAutocapitalization(.never)
.accessibilityLabel("Server URL")
.focused($urlFocused)
.onAppear { urlText = settings.serverURL }
.onChange(of: urlText) { _, _ in
// Any edit clears the saved confirmation and error.
urlJustSaved = false
urlError = nil
}
.overlay(alignment: .trailing) {
if urlJustSaved {
Image(systemName: "checkmark.circle")
@@ -135,8 +145,10 @@ struct SettingsView: View {
urlText = trimmed
urlError = nil
urlJustSaved = true
urlFocused = false
case .failure(let error):
urlError = error.localizedDescription
urlFocused = true
}
}
}
@@ -160,7 +172,7 @@ struct VoicePickerView: View {
if settings.voiceID == voice.id {
Spacer()
Image(systemName: "checkmark")
.foregroundStyle(HopeStyle.tint)
.foregroundStyle(Nearlight.rosewood)
}
}
}
@@ -205,7 +217,7 @@ struct ModelPickerView: View {
if activeModelID == model.id {
Spacer()
Image(systemName: "checkmark")
.foregroundStyle(HopeStyle.tint)
.foregroundStyle(Nearlight.rosewood)
}
}
}