Part of #1.
The core wizard interaction. Questions built from the active MIxS combination via the existing organizeForm() (src/lib/mixs/sample-form.ts) — no new field registry.
Interaction spec
- One input per page. State:
mainQueue[], skipped[] (FIFO), answers{}, cursor.
- Action button reads Skip while empty/invalid; flips to Next the instant the value is non-empty and valid (
$derived validity from the slot's MIxS type/pattern).
Skip → push key to skipped[], advance. Next → commit, advance.
- After
mainQueue drains, re-present skipped[] as a second pass; second-pass Skip = leave blank, advances without re-queuing (loop terminator).
- Complete always present → validate required-only → jump to first unanswered required, else review screen (answers + blanks/skips highlighted, tap to edit) → finalize.
- Header progress
Q n / N · k skipped, plus Back.
- Sticky carry-forward: project/site/date+time/weather/people/env_medium captured once per burst (wizard-shaped
fillRight/applyFirstToEmpty).
Done when
- A full sample can be captured by tapping Next/Skip through the queue, skips loop back, and Complete enforces required fields.
Part of #1.
The core wizard interaction. Questions built from the active MIxS combination via the existing
organizeForm()(src/lib/mixs/sample-form.ts) — no new field registry.Interaction spec
mainQueue[],skipped[](FIFO),answers{},cursor.$derivedvalidity from the slot's MIxS type/pattern).Skip→ push key toskipped[], advance.Next→ commit, advance.mainQueuedrains, re-presentskipped[]as a second pass; second-pass Skip = leave blank, advances without re-queuing (loop terminator).Q n / N · k skipped, plus Back.fillRight/applyFirstToEmpty).Done when