Capture · Roots: roots drop w_full; hosts give the width

145 component roots drop w_full, the early returns included. Three
field rows keep it, Input, InputGroup and TagInput: stretched without
a width, taffy 0.9 laid the field's flex_1 share at no width in the
template picker at 280px, and the placeholder drew nothing. Container
keeps it, since mx_auto needs a width to fill.

Hosts that relied on a root's width now give it: MessageList boxes
each row at the list's width, the splash gives its bar the column's,
and test stages that mount a component as the window's root sit in a
size_full box. Tests hold a narrow row across the list and the splash
bar across its column; each goes red without its fix.

The gallery gains --narrow <px>, which lays each page in a padded
card at that width and shoots it without its script. The page
header wraps: the title takes the room and the theme switcher drops
below, where a long summary used to push it past the edge. A file
panel step waits for the panel to become key instead of a fixed
pause, which lost a race in a capture.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-09-28 13:07:22 -04:00
1 parent 486f618ecc
commit 5779daef82
126 files changed
+275 -276

No files matched your search

+16 -20
View File
@@ -208,27 +208,23 @@ impl RenderOnce for ReadingProgress {
let theme = cx.theme();
let (track, bar) = (theme.colors.border, theme.colors.accent);
let scroll = self.scroll;
div()
.w_full()
.h(theme.progress_thickness())
.bg(track)
.child(
canvas(
|_, _, _| {},
move |bounds, _, window, _| {
let share = read_share(
f32::from(scroll.offset().y),
f32::from(scroll.max_offset().height),
);
let filled = Bounds::new(
bounds.origin,
size(bounds.size.width * share, bounds.size.height),
);
window.paint_quad(fill(filled, bar));
},
)
.size_full(),
div().h(theme.progress_thickness()).bg(track).child(
canvas(
|_, _, _| {},
move |bounds, _, window, _| {
let share = read_share(
f32::from(scroll.offset().y),
f32::from(scroll.max_offset().height),
);
let filled = Bounds::new(
bounds.origin,
size(bounds.size.width * share, bounds.size.height),
);
window.paint_quad(fill(filled, bar));
},
)
.size_full(),
)
}
}