A 2-step wizard (Settings → Mapping) for ingesting tabular files (CSV, XLSX, JSON) into structured records. Use this pattern any time the app accepts a user-provided file that needs column mapping before storage. Always pair with origin-aware navigation so users return to their starting context after upload.
The upload wizard is a specialization of the Wizard system. Step 1 collects the file plus ingestion options (auto-match, hierarchical, visibility). Step 2 is column mapping — detected source headers on the left, target fields on the right. Users return to their starting context on completion via the origin-aware breadcrumb.
| Part | Class | Role |
|---|---|---|
| File picker | .bn-drop + .bn-file-strip | Two states: empty drop zone before pick, collapsed file strip after. |
| Option rows | .bn-opt / .bn-radio | Title + one-liner help. Checkboxes for independent options, radios for one-of-N. |
| Folder picker | .bn-tree | Tree-view inside a wizard panel for "where do these records go?". |
| Sortable priority list | .bn-priority | Drag-to-reorder list for tie-break ordering. |
| Column mapping | .bn-map | Step 2. Source headers left, target fields right, dropdown per row. |
| Section title | .bn-section-title | Lightweight in-card title that breaks Settings into logical groups. |
Upload wizard composes the Wizard system chrome with these specialized parts. The header uses the WizardCrumbs variant and the origin crumb is set per launch context. See Breadcrumbs for how origin-aware navigation is implemented.