The sidebar's attachments group drops to the bottom of the stack

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
This commit is contained in:
2026-08-09 10:37:55 -04:00
parent 200fbce276
commit 2a8fef258d
+12 -3
View File
@@ -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))