From 2a8fef258ddf78cc99ef2b41ae9961b0d30b8114 Mon Sep 17 00:00:00 2001 From: rzen Date: Sun, 9 Aug 2026 10:02:56 -0400 Subject: [PATCH] The sidebar's attachments group drops to the bottom of the stack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Style, Details, Actions, Attachments — the trailing sidebar's own composition order in the card window, reordered so Attachments sits under everything else rather than leading it. Section internals are untouched; this is the VStack's child order and nothing more, so keyboard Tab order and VoiceOver's reading order follow it for free, and File ▸ Add Attachment… (⇧⌘A) is unaffected — it opens the panel through the focus system, not through this view's layout. Actions still sits above Attachments here: the paired card that removes the Actions section entirely lands as the next commit, so this one is an honest mid-flight state — style/details/actions/attachments now, style/details/ attachments once that follow-up lands. 05-card-window.md's sidebar order is now stale (still lists Attachments first); the amendment is owed and tracked on the card's own thread rather than made here. Claude-Session: https://claude.ai/code/session_014PtZdPwqZuqEDLc6wZMtEy --- Kanban/UI/Card/CardWindowView.swift | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Kanban/UI/Card/CardWindowView.swift b/Kanban/UI/Card/CardWindowView.swift index daa7dc7..edb4c99 100644 --- a/Kanban/UI/Card/CardWindowView.swift +++ b/Kanban/UI/Card/CardWindowView.swift @@ -398,7 +398,16 @@ struct CardWindowView: View { // MARK: - Attributes sidebar - /// The sidebar's sections, **in 05's settled order**: Attachments, Style, Details, Actions. + /// The sidebar's sections, **reordered 2026-08-09** (Pipeline card 8f26b029) so **Attachments + /// sits at the bottom of the stack**: Style, Details, Actions, Attachments. Section internals are + /// untouched — this is ordering only, and it is exactly the `VStack`'s child order, so keyboard + /// Tab order and VoiceOver's reading order follow it for free; ⇧⌘A (`AddAttachmentCommand`) + /// still opens the same file panel regardless of where the section sits in the stack, since it + /// reaches the window through the focus system rather than through this view's layout. + /// + /// 05-card-window.md ▸ The attributes sidebar still documents the pathfinder's original order + /// (Attachments, Style, Details, Actions) — an owed amendment, tracked on that card's own thread + /// rather than made here. /// /// One of the four is conditional, and the condition is the section's own rather than a rule /// restated here: **Details** renders nothing when the card carries no unknown frontmatter keys @@ -411,8 +420,6 @@ struct CardWindowView: View { private var sidebar: some View { ScrollView(.vertical) { VStack(alignment: .leading, spacing: bodyPointSize * 1.25) { - CardAttachmentsSection(attachments: attachments, thumbnails: thumbnails) - CardStyleSection(store: store, recents: recents, cardID: card.id, undo: undo) // The snapshot's own document, not a re-read: the loader parsed this file, unknown @@ -420,6 +427,8 @@ struct CardWindowView: View { CardDetailsSection(rows: CardDetails.rows(of: card.document)) CardActionsSection(store: store, cardID: card.id, cardFolder: cardFolder) + + CardAttachmentsSection(attachments: attachments, thumbnails: thumbnails) } .frame(maxWidth: .infinity, alignment: .leading) .padding(CardWindowMetrics.gutter(bodyPointSize: bodyPointSize))