WIP: enlarge card header source tile

This commit is contained in:
Akshay Kolli
2026-06-30 10:52:38 -07:00
parent 9fb5e5987d
commit e874f413b5
3 changed files with 28 additions and 12 deletions

View File

@@ -61,6 +61,7 @@ Use this checklist before a release or after changes to panel, pasteboard, setti
28. Confirm the selected card shows a green corner Stack control, the action rail does not duplicate Stack, and clips added to Stack keep a visible corner indicator when selection moves away.
29. Confirm single-line text cards do not repeat the same text in both title and body, while multi-line text cards show the remaining lines below the first line.
30. Confirm the Pinned empty state points to the Pin action instead of a plain-key shortcut.
31. Confirm each card's source or type badge reads as an attached header-corner tile instead of a small floating icon.
## Copy And Paste

View File

@@ -3077,7 +3077,15 @@ private final class ClipboardItemCardView: NSView, NSDraggingSource {
}
private var headerBadgeSize: CGFloat {
layout.isCompact ? 36 : 42
layout.headerHeight
}
private var headerBadgeCornerRadius: CGFloat {
layout.isCompact ? 13 : 15
}
private var headerBadgeIconInset: CGFloat {
layout.isCompact ? 9 : 10
}
private var stackCornerButtonSize: CGFloat {
@@ -3988,10 +3996,10 @@ private final class ClipboardItemCardView: NSView, NSDraggingSource {
private func iconBadge(for item: ClipboardItem) -> NSView {
let badge = NSView()
badge.wantsLayer = true
badge.layer?.cornerRadius = 8
badge.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.92).cgColor
badge.layer?.cornerRadius = headerBadgeCornerRadius
badge.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.95).cgColor
badge.layer?.borderWidth = 1
badge.layer?.borderColor = Palette.divider
badge.layer?.borderColor = NSColor.white.withAlphaComponent(0.52).cgColor
badge.translatesAutoresizingMaskIntoConstraints = false
if let bundleId = item.sourceAppBundleId,
let appURL = NSWorkspace.shared.urlForApplication(withBundleIdentifier: bundleId) {
@@ -4000,10 +4008,10 @@ private final class ClipboardItemCardView: NSView, NSDraggingSource {
icon.translatesAutoresizingMaskIntoConstraints = false
badge.addSubview(icon)
NSLayoutConstraint.activate([
icon.leadingAnchor.constraint(equalTo: badge.leadingAnchor, constant: 8),
icon.trailingAnchor.constraint(equalTo: badge.trailingAnchor, constant: -8),
icon.topAnchor.constraint(equalTo: badge.topAnchor, constant: 8),
icon.bottomAnchor.constraint(equalTo: badge.bottomAnchor, constant: -8)
icon.leadingAnchor.constraint(equalTo: badge.leadingAnchor, constant: headerBadgeIconInset),
icon.trailingAnchor.constraint(equalTo: badge.trailingAnchor, constant: -headerBadgeIconInset),
icon.topAnchor.constraint(equalTo: badge.topAnchor, constant: headerBadgeIconInset),
icon.bottomAnchor.constraint(equalTo: badge.bottomAnchor, constant: -headerBadgeIconInset)
])
} else {
let image = NSImage(systemSymbolName: headerBadgeSymbol(for: item.kind), accessibilityDescription: kindLabel(for: item.kind))
@@ -4015,11 +4023,12 @@ private final class ClipboardItemCardView: NSView, NSDraggingSource {
icon.contentTintColor = accentColor(for: item.kind)
icon.translatesAutoresizingMaskIntoConstraints = false
badge.addSubview(icon)
let symbolInset = headerBadgeIconInset + 2
NSLayoutConstraint.activate([
icon.leadingAnchor.constraint(equalTo: badge.leadingAnchor, constant: 9),
icon.trailingAnchor.constraint(equalTo: badge.trailingAnchor, constant: -9),
icon.topAnchor.constraint(equalTo: badge.topAnchor, constant: 9),
icon.bottomAnchor.constraint(equalTo: badge.bottomAnchor, constant: -9)
icon.leadingAnchor.constraint(equalTo: badge.leadingAnchor, constant: symbolInset),
icon.trailingAnchor.constraint(equalTo: badge.trailingAnchor, constant: -symbolInset),
icon.topAnchor.constraint(equalTo: badge.topAnchor, constant: symbolInset),
icon.bottomAnchor.constraint(equalTo: badge.bottomAnchor, constant: -symbolInset)
])
}
return badge

View File

@@ -437,6 +437,8 @@ final class ClipboardPanelViewTests: XCTestCase {
XCTAssertEqual(fixture.view.debugFirstCardVisibleActionRailWidth, 210)
XCTAssertFalse(fixture.view.debugFirstCardFooterDetailIsHidden)
XCTAssertFalse(fixture.view.debugFirstCardHeaderBadgeIsHidden)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.width, 56, accuracy: 0.5)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.height, 56, accuracy: 0.5)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.maxX, 320, accuracy: 0.5)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.maxY, 244, accuracy: 0.5)
@@ -451,6 +453,8 @@ final class ClipboardPanelViewTests: XCTestCase {
XCTAssertEqual(fixture.view.debugFirstCardVisibleActionRailWidth, 238)
XCTAssertFalse(fixture.view.debugFirstCardFooterDetailIsHidden)
XCTAssertFalse(fixture.view.debugFirstCardHeaderBadgeIsHidden)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.width, 56, accuracy: 0.5)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.height, 56, accuracy: 0.5)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.maxX, 320, accuracy: 0.5)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.maxY, 244, accuracy: 0.5)
}
@@ -467,6 +471,8 @@ final class ClipboardPanelViewTests: XCTestCase {
XCTAssertEqual(fixture.view.debugFirstCardVisibleActionRailWidth, 196)
XCTAssertLessThanOrEqual(fixture.view.debugFirstCardVisibleActionRailWidth, 197)
XCTAssertFalse(fixture.view.debugFirstCardHeaderBadgeIsHidden)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.width, 50, accuracy: 0.5)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.height, 50, accuracy: 0.5)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.maxX, 264, accuracy: 0.5)
XCTAssertEqual(fixture.view.debugFirstCardHeaderBadgeFrame.maxY, 220, accuracy: 0.5)
XCTAssertEqual(