The file browser is a List, and nothing more
Every affordance here already exists in SwiftUI: row layout, separator inset, swipe rubber-banding, the context menu's blur and lifted preview, the empty state. Draw none of them.
Raw filenames, always. No parsing, no posters, no thumbnails.
Subtitle is size · relative date in Berkeley Mono.
Every file-type icon is yellow, all four tiers. The iOS 15 folder-only tint is retired.
9:41
Your Files
Files
Transfers
Activity
Account
List · .swipeActionsLeading-edge swipe reveals system destructive and secondary actions at their own widths.
9:41
The.Wire.S03E04.Back.Burners.1080p.BluRay.x264-DEMAND.mkv
3.42 GB · 2 days ago
Play
Download
Share Link
Rename
Move to…
Delete
.contextMenuThe blur, the lifted preview and the menu material are the system's. put.io only writes the menu items.
9:41
Films
Files
Transfers
Activity
Account
ContentUnavailableViewEvery blank on iOS is this view, never the web illustrated empty state, never a custom layout.
Row
60pt · 17 / 15pt
two-line List row, Dynamic Type
Separator
inset to 52pt
aligned to the label, not the icon
File icon
Phosphor 24pt
--yellow-solid · every type
Subtitle
Berkeley Mono
size · relative date, tabular
Swipe · delete
--red-solid
system role, system width
Context menu
system material
14pt corner, 44pt items
Empty state
52pt glyph
--solid · title 20pt, body 15pt
Offline mark
--yellow-solid
trailing arrow-down-circle, 15pt
Do not re-create the web file row here. .file-row, its hover fill, its 6px radius and its checkbox column are tier-1 recipes.
On iOS the equivalents are a List row, .listRowBackground, edit mode and .swipeActions: and no poster, no parsed title, no thumbnail on any of them.