Build the attachments sidebar section
The card's complete file inventory: compact QuickLook-thumbnail rows over Card.attachments — no reference tracking, subfolders tolerated and unsurfaced — with a quiet header add affordance and the drop hint empty state. The whole window is the file-drop surface, Edit mode included (the editor's drag types were already filtered; now tested), sharing the board's folder-refusal semantics literally: FinderDrop moved verbatim into its own file so both windows run the same partition and loss row. Dragged text still lands at the caret and is inert elsewhere — the window delegate accepts file payloads only. Rows open on double-click or Return, drag out their file URL, and Remove is a bracketed write through FileManager.trashItem — the system Trash, never a hard delete, returning the in-Trash URL so the promise is testable; the attachment listing is the guard, so traversal and subfolder names refuse in one line. Keyboard-native per 05: the section is one Tab stop, arrows walk rows by name, Space toggles the shared QuickLook panel, Backspace removes. File > Add Attachment (shift-cmd-A) comes alive through the same import path. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -631,6 +631,13 @@ public final class BannerCenter {
|
||||
"Couldn't import '\(filename)'"
|
||||
case .listAttachments:
|
||||
"Couldn't read this card's attachments"
|
||||
case let .removeAttachment(filename):
|
||||
// **Finder's phrasing, deliberately** — and the one place in this app that is allowed
|
||||
// it. The naming constraint above reserves "move to the Trash" for the *system* Trash,
|
||||
// and this is the operation that uses it: the file really did go (or fail to go) where
|
||||
// Finder's own ⌘⌫ sends things, so saying anything else — "remove", "delete" — would
|
||||
// describe the board's quasi-lane instead and promise the wrong recovery.
|
||||
"Couldn't move '\(filename)' to the Trash"
|
||||
case .renumberChildren:
|
||||
"Couldn't renumber cards"
|
||||
case let .relocateLooseFile(filename):
|
||||
|
||||
Reference in New Issue
Block a user