Fix sheet peek for async content, and rework several screens' details
showNooSheet's peek detection previously measured content once, right
after the first frame - Details' Versions/Activity tabs fetch their
data asynchronously, so that one-shot measurement only ever saw the
initial loading-spinner height, never the eventual (often long) list,
and the sheet still snapped to full height once data arrived. Replaced
it with a ScrollMetricsNotification-based check that keeps content
capped at the peek height from frame one and upgrades to a draggable
sheet whenever it actually overflows that cap, however and whenever
that happens - fixed for good this time, with a regression test that
mirrors the async-load shape.
Also, in the same pass:
- Upload/Move/Copy's bottom bar meta line now always reads as a count
("Uploading 3 items"), never a filename for the single-item case,
and is centered rather than left-aligned - matches the approved
design and removes a bespoke marquee/chip implementation that only
Upload had.
- Upload/Move/Copy now show the same FilesControlsRow (sort, filter,
List/Grid) Files itself uses, including a folder-grid rendering
path for when List/Grid is set to grid.
- Files' filter chip reads "Filters" instead of "All types" when idle.
- Trash's overflow button - whose only action is "Delete forever" -
is now a direct delete icon (mobile) / "Delete" danger pill
(desktop) instead of a generic "..." menu that hid a single action
behind an extra tap.
- The media viewer's floating chrome (top bar, bottom action bar,
video transport row) now follows the app's light/dark theme instead
of a fixed dark panel - a dark panel read as out of place over a
light-theme stage. Panel tint and icon/text colors come from the
theme's own surface/fg1 tokens (at a higher blur opacity to stay
legible over arbitrary photo/video brightness), and the edge scrim
gradients fade toward the panel's own tint instead of a fixed black.
Mirrored the same change into the design canvas's Main.dc.html/
MainAndroid.dc.html mockups (now with a theme prop) so they match.
This commit is contained in:
@@ -343,13 +343,16 @@ Sidebar items are 38px tall with radius 12, an 18px icon and a 14/500 label. The
|
||||
- **Media viewer** (the full-screen photo/video viewer): the stage is `bg`,
|
||||
following the app's own theme rather than a fixed black - a black stage
|
||||
in light mode read as jarringly out of place. A translucent, blurred top
|
||||
bar (back, filename, meta) and bottom bar float over the media in a fixed
|
||||
dark panel regardless of theme (it needs to read over arbitrary photo/
|
||||
video brightness, not over `bg`); this is the one deliberate exception to
|
||||
"no blur" in product UI, since it's chrome over photo/video content, not
|
||||
over the app's own surfaces. Both bars' background extends edge-to-edge
|
||||
behind the status bar/gesture area, with only their content padded clear
|
||||
of it. Back is a plain arrow (`arrow-left`), not the iOS
|
||||
bar (back, filename, meta) and bottom bar float over the media in a
|
||||
`surface`-tinted panel (also theme-following, at a higher opacity than a
|
||||
typical blur so it stays legible over arbitrary photo/video brightness
|
||||
underneath - icons/text are `fg1`, matching); this is the one deliberate
|
||||
exception to "no blur" in product UI, since it's chrome over photo/video
|
||||
content, not over the app's own surfaces. A short edge gradient outside
|
||||
each panel (toward `surface`, not a fixed black) extends that same
|
||||
contrast a little past the panel's hard edge. Both bars' background
|
||||
extends edge-to-edge behind the status bar/gesture area, with only their
|
||||
content padded clear of it. Back is a plain arrow (`arrow-left`), not the iOS
|
||||
chevron+label pushed-screen pattern - platform split still to do. The
|
||||
bottom bar holds every action in one row (share, favorite, open
|
||||
externally, download, delete, details) on every platform; don't add a
|
||||
@@ -369,10 +372,13 @@ Sidebar items are 38px tall with radius 12, an 18px icon and a 14/500 label. The
|
||||
- **Upload / Move / Copy destination picker:** a pushed screen (outside the
|
||||
tab shell, so it carries its own complete top bar) titled "Upload to" /
|
||||
"Move to" / "Copy to". Back arrow (Android) or "Cancel" text (iOS) leading,
|
||||
no trailing action. Breadcrumb row, then a folder-only list (no files: this
|
||||
screen only browses folders) using the standard file row/tile at the
|
||||
folder kind. Bottom bar: a meta line ("Moving 3 items") above a full-width
|
||||
52px primary CTA ("Upload here" / "Move here" / "Copy here").
|
||||
no trailing action. The same `FilesControlsRow` (sort chip, filter chip,
|
||||
List/Grid toggle right-anchored) Files itself uses, then a breadcrumb row,
|
||||
then a folder-only list/grid (no files: this screen only browses folders)
|
||||
using the standard file row/tile/grid-card at the folder kind. Bottom bar:
|
||||
a centered meta line ("Moving 3 items") above a full-width 52px primary
|
||||
CTA ("Upload here" / "Move here" / "Copy here") - a count, never a
|
||||
filename, even for a single item.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user