Every exported file is its own job, so each row of the dialog reports
its own state: waiting for a worker, running with the milestone of the
job and an animated bar, exported once the artifact downloads, or failed
in a red row with the hint of the job. The header only counts the files
and subtitles the artifact format and, once it exists, its size.
Closing changes too: the Close button is gone, the X cancels like Cancel
Export and the dialog stays with the terminal states, and Done dismisses
it. Success, failure and cancellation replace each other, so a row never
reports two outcomes at once, and rows are matched by id canonicalized
to string.
The retry button of the finished design is left out: no retry mechanism
exists on the client yet.
AI-assisted-by: muse-spark-1.3