Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion clients/ios/Views/InputBarView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ struct InputBarView: View {
VButton(
label: "Stop generation",
iconOnly: VIcon.square.rawValue,
style: .contrast,
style: .primary,
action: onStop
)
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,7 @@ struct ComposerView: View {
VButton(
label: "Stop generation",
iconOnly: VIcon.square.rawValue,
style: .contrast,
style: .primary,
iconSize: composerActionButtonSize,
action: onStop
)
Expand Down Expand Up @@ -612,7 +612,7 @@ VStreamingWaveform(
VButton(
label: manager.state == .listening ? "Mute" : "Unmute",
iconOnly: manager.state == .listening ? VIcon.mic.rawValue : VIcon.micOff.rawValue,
style: .contrast,
style: .primary,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use contrasting style for voice mute button

Switching the voice-mode mute/unmute control to .primary makes it visually blend into the voice composer container in dark appearance: voiceConversationComposer uses VColor.contentEmphasized as its background, and VButton.Style.primary resolves to the same dark-mode token value (#FDFDFC) in ColorTokens.swift, so the button fill disappears and the control loses affordance. This regression is specific to voice mode and dark appearance, and the previous .contrast style at least preserved separation.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚩 Visual behavior change for voice conversation mute/unmute button

The mute/unmute button in the voice conversation composer (ComposerView.swift:615) sits inside a container with a VColor.contentEmphasized background (line 637). The old .contrast style used VColor.contentDefault as the button background — a neutral dark color designed to stand out against dark surfaces. The new .primary style uses VColor.primaryBase (the brand accent color). While this is an intentional design change, reviewers should verify the visual contrast is sufficient on the dark voice-conversation bar, especially in both light and dark modes.

Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

iconSize: composerActionButtonSize,
action: { manager.toggleListening() }
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ struct ButtonsGallerySection: View {
(label: "Danger", tag: VButton.Style.danger),
(label: "Danger Outline", tag: VButton.Style.dangerOutline),
(label: "Ghost", tag: VButton.Style.ghost),
(label: "Contrast", tag: VButton.Style.contrast),
],
selection: $selectedStyle
)
Expand Down Expand Up @@ -76,7 +75,7 @@ struct ButtonsGallerySection: View {

VCard {
HStack(spacing: VSpacing.xl) {
ForEach([VButton.Style.primary, .outlined, .danger, .dangerOutline, .ghost, .contrast], id: \.self) { style in
ForEach([VButton.Style.primary, .outlined, .danger, .dangerOutline, .ghost], id: \.self) { style in

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Dead .contrast style enum case and handling code not removed per AGENTS.md dead code rule

After this PR removes all consumer usages of VButton.Style.contrast, the .contrast enum case (clients/shared/DesignSystem/Core/Buttons/VButton.swift:4) and all its handling code in VButton.swift (lines 110, 230-234, 245) and VSplitButton.swift (lines 138-141, 158, 174-175, 182) become dead code with zero callers. The root AGENTS.md requires: "Proactively remove unused code during every change. Remove code your change makes unused." The gallery's styleName helper at clients/shared/DesignSystem/Gallery/Sections/ButtonsGallerySection.swift:321 and the component description at clients/shared/DesignSystem/Gallery/ComponentGalleryView.swift:55 (which still lists "contrast" as a style) should also be cleaned up.

Prompt for agents
The PR removes all consumer usages of VButton.Style.contrast but leaves the enum case and all its handling code in the design system. Per AGENTS.md dead code removal rule, the following should be cleaned up:

1. Remove `contrast` from the `Style` enum in clients/shared/DesignSystem/Core/Buttons/VButton.swift:4
2. Remove the `.contrast` cases from switch statements in VButton.swift (lines 110, 230-234, 245)
3. Remove the `.contrast` cases from switch statements in VSplitButton.swift (lines 138-141, 158, 174-175, 182)
4. Remove the `.contrast` case from the `styleName` function in ButtonsGallerySection.swift:321
5. Update the description string in ComponentGalleryView.swift:55 to remove mention of "contrast" from the style list
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

VStack(spacing: VSpacing.md) {
VButton(label: styleName(style), style: style) {}
VButton(label: "Disabled", style: style, isDisabled: true) {}
Expand Down Expand Up @@ -155,10 +154,6 @@ struct ButtonsGallerySection: View {
Text("Danger").font(VFont.labelDefault).foregroundStyle(VColor.contentTertiary)
VButton(label: "Delete", iconOnly: VIcon.trash.rawValue, style: .danger) {}
}
VStack(alignment: .leading, spacing: VSpacing.md) {
Text("Contrast").font(VFont.labelDefault).foregroundStyle(VColor.contentTertiary)
VButton(label: "Stop", iconOnly: VIcon.square.rawValue, style: .contrast) {}
}
}
}

Expand Down