The single-line string family — one stored contract, three variants that differ only in what the boundary promises.
The single-line string family. One stored contract — a string, one
line, no markup — and three variants that differ only in what the write
boundary promises about the value:
| Variant | The contract adds | Reach for it when |
|---|---|---|
| Text input | nothing — the base field | names, taglines, labels, anything short and free |
| a valid address, by the HTML standard's own rule | the value will sit in a mailto: or a send list |
|
| URL | parses as http(s), by the platform's parser |
the value will be printed into an href |
The variants are validation, not storage: all three store the same
string, read the same way in templates and the API, and a text input
can become an email field later by adding the rule — existing values are
simply judged by it from then on. That is the
data type vs editor split's
quieter sibling: format is part of the contract axis too, and it
composes onto the base field instead of forking it.
Paragraphs are not in this family. The moment line breaks are content, you want long text — a different data type, not a variant of this one.