Agent work
Task rows
Progressive task rows with stable identity and readable state.
Starts when it scrolls into view
NORD FROST · DARK · RADIUS 6/10 · BASE 16PX · SHADOW
Code
Cut from the gallery story this page runs, so it stays true.
v_flex()
.child(TaskRow::new(&Progressive::complete(
TaskSnapshot::new("index-catalog", "Index supplier catalog")
.detail("3,214 rows"),
)))
.child(TaskRow::new(&Progressive::running(
TaskSnapshot::new("compare-prices", "Compare unit prices")
.elapsed(elapsed),
)))
.child(TaskRow::new(&Progressive::pending(TaskSnapshot::new(
"draft-emails",
"Draft supplier emails",
))))
.child(TaskRow::new(&Progressive::failed(
TaskSnapshot::new("sync-history", "Sync order history"),
"auth expired",
)))
Events and ownership
- Who owns the state
- TaskRow renders state supplied by the application; it does not own durable work.
- What it emits
- This presentation surface adds no component-specific interaction event.
- What it means
- Progressive task rows with stable identity and readable state.
- Overflow and motion
- Wide content retains context in a bounded surface; reduced motion preserves a useful state.
What the demo does and does not show
The demo above is the same Rust as the native component, compiled to WebAssembly and drawn on a WebGPU canvas — not a mock-up, a recording, or a re-implementation. What it paints is what the component paints: layout, colour from the live theme, and motion.
The live browser specimen requires WebGPU; the native component remains the authoritative runtime.
A canvas cannot stand in for the platform, so treat everything that goes through the operating system as unproven here: keyboard handling and shortcuts, screen reader semantics, text input and IME, the clipboard, file drops, and the frame rate you would get on your own GPU. Judge those in a native build. If your browser has no WebGPU, the frame says so rather than showing an empty box.