input is an AUP cross-device primitive, not a Web Device layout component and not a Web-only widget. It is one of the 18 names in AUP_PRIMITIVES and appears in every target's DeviceCaps.primitives map as native, webview, partial, or unsupported.
Contract
| Field | Value |
|---|---|
| Primitive name | input |
| Layer | AUP cross-device primitive (AUP_PRIMITIVES) |
| Public status | released |
| Document capability | native |
| Shared degradation chain | None (document reports native) |
| Author entry | AUP tree · Markdown ::input{…} (generic directive → type) |
| Document renderer / notes | renderer/primitives/input.ts; content-reader id promotion (arc#3321) |
| Showcase evidence | form-* Showcase pages; document path verified on live-example-contract |
When to use
You need a form control (text, select, checkbox, …) as a semantic node.
When not to use
Do not put bind, multi-field forms, or session writes on a public docs page. Give every field an explicit id.
Sample contract
| Field | Value |
|---|---|
| Purpose | Unbound document-target input |
| Boundaries | No bind, session patch, AFS write, exec, or multi-field form product |
| Author entry | ::input{…} |
| Surface | Web Device document |
| Public status | released |
| Fallback / failure | Missing id → unstable DOM id across fields; unknown type may degrade presentation |
| Verification | Routes below · arc --version = 2.0.0-beta.28 |
Document sample (unbound text input)
This field is an unbound AUP input. Typing changes only the browser form control. No document, manifest, AFS record, or session setting is written.
Source:
::input{id="docs-prim-input-name" type="text" label="Name" placeholder="Type only in this example" value="Ada"}Rendered:
Additional control (checkbox)
Source:
::input{id="docs-prim-input-ack" type="checkbox" label="I understand this stays local"}Rendered:
Full shared contract: Live examples: scope and contract.
Failure and limits
| Situation | Expected result |
|---|---|
No id on ::input | Field still renders; DOM id is unstable across fields on the same page |
bind / session fields in Markdown here | Not part of this contract; do not invent them on a docs page |
| Multi-field live form with submit | Out of contract for public docs |
| Narrow viewport | Label, control, and placeholder remain readable |
Verification evidence
| Item | Value |
|---|---|
| Baseline | 2026-08-09 · arc --version → 2.0.0-beta.28 |
| Capability row | docs/aup/capability-matrix.md (internal, non-routed) · input · ::input |
| Implementation | content-reader.ts (id promotion); renderer/primitives/input.ts |
| Public routes | /en/docs/aup/primitives/input/ · /zh/docs/aup/primitives/input/ |
| Local run | arc service start --blocklet blocklets/arcblock --port 4900 · type in the field; reload may restore browser form state only |
| Accept | Source matches control; typing stays local; no network write on change |
Evidence anchors
| Item | Value |
|---|---|
| Registry | packages/aup/src/aup-types.ts · AUP_PRIMITIVES |
| Document caps | providers/runtime/web-device/src/device-caps.ts · DEVICE_CAPS_DOCUMENT |
| Degradation | packages/aup/src/degradation.ts · DEGRADATION_CHAINS |
| Internal matrix | docs/aup/capability-matrix.md (internal, non-routed) |
| Taxonomy hub | Primitive taxonomy and evidence |
| Sample contract rules | Live examples: scope and contract |