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:
@@ -79,6 +79,27 @@ enum CardWindowMetrics {
|
||||
columnWidth(characters: bodyMinimumCharacters, bodyPointSize: bodyPointSize)
|
||||
}
|
||||
|
||||
// MARK: - The attachments section
|
||||
|
||||
/// An attachment row's thumbnail: a **small** square, one and a half ems on a side
|
||||
/// (05-card-window.md ▸ Attachments: "Compact rows: small QuickLook thumbnail (Finder-icon
|
||||
/// fallback) + middle-truncated filename, one row per file").
|
||||
///
|
||||
/// Derived rather than a point size, like everything else here, and deliberately *small*: this
|
||||
/// is an inventory, not a gallery — "viewing media is the card window's job" was settled about
|
||||
/// the window, not about this list, and a row tall enough to see a screenshot in would push the
|
||||
/// four sections beneath it off the sidebar.
|
||||
static func attachmentThumbnailSide(bodyPointSize: CGFloat) -> CGFloat {
|
||||
(bodyPointSize * 1.5).rounded()
|
||||
}
|
||||
|
||||
/// The inset inside an attachment row, and the gap between its thumbnail and its filename —
|
||||
/// half a gutter, the rendered body's rhythm, so the sidebar's list and the body's blocks are
|
||||
/// spaced by the same unit.
|
||||
static func attachmentRowPadding(bodyPointSize: CGFloat) -> CGFloat {
|
||||
previewPadding(bodyPointSize: bodyPointSize)
|
||||
}
|
||||
|
||||
// MARK: - The rendered body
|
||||
|
||||
/// One step of structural indent in Preview — a list level, a quote level. One and a half ems,
|
||||
|
||||
Reference in New Issue
Block a user