Archived
Fix reading-safety and accessibility majors from review
- Transcript: drag suspends auto-follow; long-press selection suspends following; Latest is a trailing outlined capsule that re-enables follow - Lightwell: pulse via isolated TimelineView (2.4s triangle wave), pauses when offscreen; Reduce Motion uses static geometry (no level resizing) - Increase Contrast: solid Rosewood lightwell fill, 2pt Rosewood selected outlines on mode buttons - Haptics: success only on entering ready, error only on entering failure
This commit is contained in:
1 parent
f043d6b078
commit
afe37ad5f4
3 files changed
+121
-55
No files matched your search
@@ -144,6 +144,7 @@ private struct ConversationContent: View {
|
||||
@FocusState private var composerFocused: Bool
|
||||
@Environment(\.dynamicTypeSize) private var typeSize
|
||||
@Environment(\.accessibilityReduceMotion) private var reduceMotion
|
||||
@Environment(\.colorSchemeContrast) private var contrast
|
||||
|
||||
init(settings: SettingsStore, session: VoiceSession) {
|
||||
self.settings = settings
|
||||
@@ -171,8 +172,14 @@ private struct ConversationContent: View {
|
||||
.onChange(of: session.state) { _, state in
|
||||
if state == .ready && settings.textMode { composerFocused = true }
|
||||
}
|
||||
.sensoryFeedback(.success, trigger: session.state == .ready ? true : false) { _, _ in true }
|
||||
.sensoryFeedback(.error, trigger: session.state.isFailed) { _, _ in true }
|
||||
.sensoryFeedback(.success, trigger: session.state == .ready) { old, new in
|
||||
// Success only on the transition INTO readiness, not out.
|
||||
!old && new
|
||||
}
|
||||
.sensoryFeedback(.error, trigger: session.state.isFailed) { old, new in
|
||||
// Error only on entering failure, not leaving it.
|
||||
!old && new
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Welcome (pre-connection, no history)
|
||||
@@ -378,11 +385,12 @@ private struct ConversationContent: View {
|
||||
.font(NearlightFont.control(typeSize))
|
||||
.foregroundStyle(selected ? Nearlight.rosewood : Nearlight.ink)
|
||||
.frame(maxWidth: .infinity, minHeight: 52)
|
||||
.background(selected ? Nearlight.selectedWash : Nearlight.surface,
|
||||
.background(selected && contrast == .increased ? Nearlight.surface : selected ? Nearlight.selectedWash : Nearlight.surface,
|
||||
in: RoundedRectangle(cornerRadius: Nearlight.radiusControl))
|
||||
.overlay(
|
||||
RoundedRectangle(cornerRadius: Nearlight.radiusControl)
|
||||
.strokeBorder(selected ? Nearlight.rosewood.opacity(0.4) : Nearlight.quiet, lineWidth: 1)
|
||||
.strokeBorder(selected && contrast == .increased ? Nearlight.rosewood : selected ? Nearlight.rosewood.opacity(0.4) : Nearlight.quiet,
|
||||
lineWidth: selected && contrast == .increased ? 2 : 1)
|
||||
)
|
||||
}
|
||||
.accessibilityIdentifier(id)
|
||||
|
||||
Reference in new issue
Block a user