Generic export-request form. User picks scope, format, and delivery (download or email), then submits. Distilled from the data-export-request flow in admin-keys-and-export — use this when an export form lives standalone (settings panel, admin shell, in-context "Export…" affordance).
Standalone export forms: dataset → file → delivery. Sync (download now) or async (email when ready). Distinct from admin-keys-and-export (compliance + workspace migration; always async) and from a single "Download CSV" button (no choices to make).
Small datasets (< 10 k rows). User picks format, browser downloads on click. Submit button copy = the verb ("Download CSV"); format-picker change updates the button label.
Large datasets (≥ 10 k rows / known-slow exports). Submit queues a job; the user gets an email with a download link when the archive is ready. The form acknowledges the latency up front in an info alert + uses the verb "Request" instead of "Download".
When both make sense (medium datasets, user preference matters). Radio choice up top toggles which submit verb fires; email field hides when "download" is selected.
<modal-ui> for in-context "Export…" affordances, OR render inline in a settings panel. The form composes; the surface choice is yours.