Why the user's last action was refused before it reached the server (a malformed email, a missing
detail) — the model's own Problem only covers what the SERVER said. Cleared by the next action.
Name of the agent, for the "Suggested by …" marker.
True while an action is in flight from THIS surface (disables double-submits).
The code the user is typing. Never leaves this component except through SubmitCode.
Where the user's actions go — wired by the channel; a no-op until then.
The unconfirmed drafts the user is typing, per field.
Seconds until another send is allowed (0 = now). Recomputed on a 1s tick while a cooldown runs.
The current snapshot, or null until a model is bound.
The state engine this surface renders.
Commits what the user typed in a field (blur / Enter) — the user's own value, confirmed by being theirs.
The agent or host suggested this value and the user has not approved it yet.
A callback method that performs custom clean-up, invoked immediately before a directive, pipe, or service instance is destroyed.
What to show in an input: the user's draft, else the stored value.
The IDENTITY VERIFICATION surface (
mj-identity-verification-surface) — a small, accessible form that renders the channel's state and sends the user's own actions back through it. It owns no rules: whether a value counts as confirmed, whether a code can be sent, what a failure means are the IdentityVerificationModel's decisions; this only shows them.Details the agent filled in are marked "Suggested" and carry a Confirm control until the user approves them; a value the user types is theirs and needs no confirmation. Mobile-first: one column, 44px tap targets, 16px inputs (no iOS zoom), the right keyboard and autofill hints per field. Colour comes only from
--mj-*design tokens, so it follows the host's theme (including dark mode).