WIP: correct pinned empty state guidance

This commit is contained in:
Akshay Kolli
2026-06-30 10:48:14 -07:00
parent 890b500647
commit 9fb5e5987d
3 changed files with 14 additions and 1 deletions

View File

@@ -60,6 +60,7 @@ Use this checklist before a release or after changes to panel, pasteboard, setti
27. Confirm card headers use readable relative ages such as `3 minutes ago` or `2 hours ago`, including when viewing a named collection. 27. Confirm card headers use readable relative ages such as `3 minutes ago` or `2 hours ago`, including when viewing a named collection.
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. 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. 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.
## Copy And Paste ## Copy And Paste

View File

@@ -1146,7 +1146,7 @@ final class ClipboardPanelView: NSVisualEffectView, NSSearchFieldDelegate {
case .audio: case .audio:
return ("No audio yet", "Copied sound clips appear here.") return ("No audio yet", "Copied sound clips appear here.")
case .pinned: case .pinned:
return ("No pinned clips", "New copies appear under Most Recent. Select an item and press P to pin it.") return ("No pinned clips", "Use the Pin action on a card to keep important clips here.")
case .mostRecent, .mostUsed: case .mostRecent, .mostUsed:
return ("No clips in this view", "Switch filters or copy something new.") return ("No clips in this view", "Switch filters or copy something new.")
} }

View File

@@ -829,6 +829,18 @@ final class ClipboardPanelViewTests: XCTestCase {
XCTAssertEqual(fixture.view.debugEmptyStateText?.detail, "Image clips are saved when the clipboard contains image data.") XCTAssertEqual(fixture.view.debugEmptyStateText?.detail, "Image clips are saved when the clipboard contains image data.")
} }
func testPinnedEmptyStatePointsToPinAction() {
let fixture = makePanelFixture()
fixture.store.upsert(makeTextItem("Only text exists", store: fixture.store))
drainMainQueue()
fixture.viewModel.sortMode = .pinned
drainMainQueue()
XCTAssertEqual(fixture.view.debugEmptyStateText?.title, "No pinned clips")
XCTAssertEqual(fixture.view.debugEmptyStateText?.detail, "Use the Pin action on a card to keep important clips here.")
}
func testCardsExposeContextMenuActions() { func testCardsExposeContextMenuActions() {
let fixture = makePanelFixture() let fixture = makePanelFixture()
fixture.store.upsert(makeTextItem("Context menu text", store: fixture.store)) fixture.store.upsert(makeTextItem("Context menu text", store: fixture.store))