style: align uninstall and translation visuals

This commit is contained in:
Valdemar Lorenzen
2026-10-15 13:22:17 +02:00
parent 6a7a0eb0ab
commit c0e53a1d53
5 changed files with 14 additions and 15 deletions
+1 -1
View File
@@ -149,7 +149,7 @@ The red **Uninstall application** action morphs the existing launcher into a fil
The application's name and keyboard guidance remain visible throughout file review: Return toggles inclusion; Command-Return opens confirmation. Filtering preserves discovery progress or errors until discovery succeeds, then shows selection counts and no-match feedback without changing checked files. The application's name and keyboard guidance remain visible throughout file review: Return toggles inclusion; Command-Return opens confirmation. Filtering preserves discovery progress or errors until discovery succeeds, then shows selection counts and no-match feedback without changing checked files.
Keyboard file toggles update the existing checkbox without reloading or fading the list, preserving both the highlighted row and scroll position. The launcher's footer Open and Actions labels use 12-point medium text. All custom shortcut hints—in the launcher footer, numbered application rows, uninstall footer, and actions selector—use `ShortcutIndicator` from `Sources/Conjure/ShortcutIndicator.swift` (for example, `ShortcutIndicator("⌘", "K")`). It owns 12-point medium key text, square 18×18-point containers, visible-glyph centering, border styling, and 2-point gaps between adjacent keys; callers position or hide the whole indicator, and numbered rows update their single key without rebuilding the cell. Native menus and shortcut-recording controls retain their platform styling. Keyboard file toggles update the existing checkbox without reloading or fading the list, preserving both the highlighted row and scroll position. Launcher, Translate, and uninstall footer buttons use 12-point medium text, with plain brown-filled action pills inset 8 points from the right and bottom edges. Uninstall retains destructive red text and Command-Return confirmation. All custom shortcut hints—in the launcher footer, numbered application rows, uninstall footer, and actions selector—use `ShortcutIndicator` from `Sources/Conjure/ShortcutIndicator.swift` (for example, `ShortcutIndicator("⌘", "K")`). It owns 12-point medium key text, square 18×18-point containers, visible-glyph centering, border styling, and 2-point gaps between adjacent keys; callers position or hide the whole indicator, and numbered rows update their single key without rebuilding the cell. Native menus and shortcut-recording controls retain their platform styling.
Numbered row overlays use 13-point numbers in 22×22-point boxes with a lighter opaque warm-brown backing. Their label fade begins 36 points before the badge, twice the original lead-in; other shortcut hints retain their 12-point text and 18×18-point boxes. Numbered row overlays use 13-point numbers in 22×22-point boxes with a lighter opaque warm-brown backing. Their label fade begins 36 points before the badge, twice the original lead-in; other shortcut hints retain their 12-point text and 18×18-point boxes.
@@ -131,7 +131,7 @@ final class SettingsWindowController: NSWindowController, NSWindowDelegate {
for label in [instructions, statusLabel, spotlight, loginStatus] { for label in [instructions, statusLabel, spotlight, loginStatus] {
label.textColor = SunsetPalette.secondaryText label.textColor = SunsetPalette.secondaryText
} }
for button in [recorder, commandSpaceButton, clearButton, keyboardSettings, loginToggle, loginSettings] { for button in [recorder, commandSpaceButton, clearButton, keyboardSettings, loginToggle, loginSettings, recoveryButton] {
button.contentTintColor = SunsetPalette.accent button.contentTintColor = SunsetPalette.accent
} }
let loginHeading = NSTextField(labelWithString: "Startup") let loginHeading = NSTextField(labelWithString: "Startup")
@@ -25,6 +25,7 @@ final class TranslationController: NSViewController, NSTextFieldDelegate, NSText
view = NSView() view = NSView()
let title = NSTextField(labelWithString: "Conjure Translate · English → Japanese") let title = NSTextField(labelWithString: "Conjure Translate · English → Japanese")
title.font = .systemFont(ofSize: 13, weight: .semibold) title.font = .systemFont(ofSize: 13, weight: .semibold)
title.textColor = SunsetPalette.text
let back = NSButton(title: "", target: self, action: #selector(goBack)) let back = NSButton(title: "", target: self, action: #selector(goBack))
back.image = IconStyle.symbol("chevron.left", for: title.font!) back.image = IconStyle.symbol("chevron.left", for: title.font!)
back.imageScaling = .scaleProportionallyDown back.imageScaling = .scaleProportionallyDown
@@ -101,7 +101,7 @@ final class UninstallReviewController: NSViewController, NSSearchFieldDelegate,
remove.action = #selector(confirmUninstall) remove.action = #selector(confirmUninstall)
remove.contentTintColor = .systemRed remove.contentTintColor = .systemRed
remove.isBordered = false remove.isBordered = false
remove.font = .systemFont(ofSize: 14, weight: .medium) remove.font = .systemFont(ofSize: 12, weight: .medium)
remove.keyEquivalent = "\r" remove.keyEquivalent = "\r"
remove.keyEquivalentModifierMask = .command remove.keyEquivalentModifierMask = .command
remove.toolTip = "Confirm uninstall (Command-Return). Return toggles the highlighted file." remove.toolTip = "Confirm uninstall (Command-Return). Return toggles the highlighted file."
@@ -124,14 +124,12 @@ final class UninstallReviewController: NSViewController, NSSearchFieldDelegate,
scroll.autohidesScrollers = true scroll.autohidesScrollers = true
scroll.drawsBackground = false scroll.drawsBackground = false
scroll.contentView.drawsBackground = false scroll.contentView.drawsBackground = false
let pill = NSVisualEffectView() let pill = NSView()
pill.material = .popover pill.wantsLayer = true
pill.blendingMode = .withinWindow pill.layer?.cornerRadius = 18
pill.state = .active
roundMaterialCorners(pill, radius: 18)
pill.layer?.borderWidth = 0.5 pill.layer?.borderWidth = 0.5
pill.layer?.borderColor = SunsetPalette.accent.withAlphaComponent(0.35).cgColor pill.layer?.borderColor = SunsetPalette.accent.withAlphaComponent(0.35).cgColor
pill.layer?.backgroundColor = SunsetPalette.accent.withAlphaComponent(0.08).cgColor pill.layer?.backgroundColor = SunsetPalette.background.withAlphaComponent(0.25).cgColor
let shortcut = ShortcutIndicator("⌘", "↵") let shortcut = ShortcutIndicator("⌘", "↵")
for child in [remove, shortcut] { for child in [remove, shortcut] {
child.translatesAutoresizingMaskIntoConstraints = false child.translatesAutoresizingMaskIntoConstraints = false
@@ -174,8 +172,8 @@ final class UninstallReviewController: NSViewController, NSSearchFieldDelegate,
scroll.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -12), scroll.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -12),
scroll.bottomAnchor.constraint(equalTo: footer.topAnchor, constant: -16), scroll.bottomAnchor.constraint(equalTo: footer.topAnchor, constant: -16),
footer.leadingAnchor.constraint(equalTo: search.leadingAnchor), footer.leadingAnchor.constraint(equalTo: search.leadingAnchor),
footer.trailingAnchor.constraint(equalTo: search.trailingAnchor), footer.trailingAnchor.constraint(equalTo: content.trailingAnchor, constant: -8),
footer.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -16), footer.bottomAnchor.constraint(equalTo: content.bottomAnchor, constant: -8),
footer.heightAnchor.constraint(equalToConstant: 36) footer.heightAnchor.constraint(equalToConstant: 36)
]) ])
} }
+4 -4
View File
@@ -13,12 +13,12 @@
### Visual consistency ### Visual consistency
- [ ] Match uninstall footer text to the launcher/Translate baseline: 12pt medium rather than 14pt; retain destructive red. - [x] Match uninstall footer text to the launcher/Translate baseline: 12pt medium rather than 14pt; retain destructive red.
- [ ] Align the uninstall footer with launcher/Translate: 8pt right/bottom insets rather than 24pt right and 16pt bottom. - [x] Align the uninstall footer with launcher/Translate: 8pt right/bottom insets rather than 24pt right and 16pt bottom.
- [ ] Use the launcher/Translate footer's plain brown-filled view for uninstall instead of adding a popover material and orange tint. - [x] Use the launcher/Translate footer's plain brown-filled view for uninstall instead of adding a popover material and orange tint.
- [x] Apply Actions' SF Symbol optical-inset handling to launcher icons. Native layout measured a 22×29pt command icon view versus 22×22pt action icon views. - [x] Apply Actions' SF Symbol optical-inset handling to launcher icons. Native layout measured a 22×29pt command icon view versus 22×22pt action icon views.
- [x] Render application and command favorite markers consistently: use the configured star symbol rather than a literal ★ for commands. - [x] Render application and command favorite markers consistently: use the configured star symbol rather than a literal ★ for commands.
- [ ] Apply the existing Sunset palette to Translate's custom heading and the Settings recovery button, matching equivalent headings/actions. - [x] Apply the existing Sunset palette to Translate's custom heading and the Settings recovery button, matching equivalent headings/actions.
### Documentation and visual verification ### Documentation and visual verification