Bounds and counts
Every string has a maximum length and every list a designed count, and a record over its bound fails to parse.
A bound is the maximum length of a string or the designed count of a list. A record over a bound fails to parse, so it never renders.
A bound is design
Each maximum is the longest instance on the pages the Section types were drawn from, plus about a fifth. A hero title holds 64 characters because the hero was drawn at that length, and a longer title breaks the layout the bound protects.
A refusal
Set the quickstart's hero title to 71 characters and PageSchema.safeParse refuses it:
sections.1.block.title: Too big: expected string to have <=64 charactersThe fix is shorter content, never a looser bound. Refusals holds every bound by path.
Designed counts
A list's count is part of its design. Each Section type arranges itself from the count, and every count it holds fills its rows at every width.
| List | Holds |
|---|---|
nav.links | at most 6 items |
footer.columns | at most 4 items |
footer.social | at most 6 items |
hero.actions | at most 2 items |
hero.fine | at most 4 items |
stats.items | 3 to 4 items |
facts.items | 1 to 16 items |
feature-grid.items | 2, 3, 4, 6, 8 items |
feature-split.items | exactly 3 items |
bento.panels | 2 to 4 items |
steps.more | at most 2 items |
steps.steps | 3 to 5 items |
text-stack.items | 3 to 6 items |
terminal.lines | 1 to 32 items |
api-call.examples | 1 to 4 items |
endpoints.rows | 3 to 16 items |
agent-prompt.lines | 1 to 6 items |
pricing.tiers | 1 to 4 items |
plan-table.columns | 1 to 6 items |
plan-table.rows | 1 to 8 items |
faq.items | 1 to 10 items |
faq.groups | 1 to 4 items |
closing.fine | at most 4 items |
closing.stats | at most 4 items |
closing.actions | at most 2 items |
cta-form.fields | 1 to 8 items |
post-list.posts | 1 to 24 items |
product-head.chips | at most 9 items |
product-head.actions | 1 to 2 items |
product-list.sort | at most 4 items |
product-list.views | at most 2 items |
product-list.rows | at most 50 items |
Rules past the bounds
Some refusals depend on more than one field. A nav row holds a budget of units, spent on its links and the wider of its brand and button. A closing ends on buttons or one command, never both. Each rule is on Refusals, with the message safeParse returns.