Spec Sheet
An item's measurable attributes: a species' size and range, a product's dimensions, a menu item's allergens. It wraps the spec grid and the leader list with the sheet's heading, lead, provenance line, optional figure and "More Details" disclosure. The densest module: rules only, no ornament.
import { SpecGridItem, SpecListItem, SpecSheet } from '@fairgarden-private/design/components/SpecSheet'
kind picks the build: glance (default) is the rule-topped At a Glance grid of SpecGridItems; leader a single column of "Label ···· Value" SpecListItems; form-box the grid inside a ruled box; manual a double-line frame for a full-page item. heading is the chapter-stack H2 in the section-head color; at headingLevel 3 or 4 it becomes a module head.
At a Glance and the split
At a Glance and the split
On reference pages identity heads the reading column: the portrait, the common name and the italic secondary name. With split, from 1024 px of viewport the lead and provenance line take the first half of the reading span and the grid the second; the grid's own container keeps it 2-up. Below 1024 px the lead stacks above the grid. Nothing is sticky: Audubon's sticky rail and aside cards are not adopted. more adds a "More Details" Collapsible that prints expanded; a linked book title in the provenance line is a Link around a cite.
Wood Thrush
Hylocichla mustelina
At a Glance
A plump, cinnamon-backed thrush of eastern hardwood forests, best known for its flute-like, two-voiced song at dawn and dusk.
Text adapted from Lives of North American Birds(example.org/lives).
- Category
- Thrushes
- Conservation status
- Near threatened
- Habitat
- Deciduous forest
- Length
- 18–21 cm (7–8 in)
- Population
- ≈ 11 million
- Region
- Eastern North America
- Nest
- Cup of dead leaves and mud
- Eggs
- 3–4, pale blue
import { Avatar, AvatarFallback } from '@fairgarden-private/design/components/Avatar'
import { Link } from '@fairgarden-private/design/components/Link'
import { SpecGridItem, SpecSheet } from '@fairgarden-private/design/components/SpecSheet'
/** A reference page's At a Glance: the identity block, then the lead beside the grid from 1024 px. */
export function SpecSheetGlance() {
return (
<SpecSheet
split
heading="At a Glance"
identity={{
portrait: (
<Avatar size="lg">
<AvatarFallback>WT</AvatarFallback>
</Avatar>
),
commonName: 'Wood Thrush',
secondaryName: 'Hylocichla mustelina',
}}
lead={
<p>
A plump, cinnamon-backed thrush of eastern hardwood forests, best known for its
flute-like, two-voiced song at dawn and dusk.
</p>
}
provenance={
<>
Text adapted from{' '}
<Link href="https://example.org/lives">
<cite>Lives of North American Birds</cite>
</Link>
.
</>
}
more={{
label: 'More Details',
openLabel: 'Fewer Details',
children: (
<>
<SpecGridItem label="Nest">Cup of dead leaves and mud</SpecGridItem>
<SpecGridItem label="Eggs">3–4, pale blue</SpecGridItem>
</>
),
}}
>
<SpecGridItem label="Category">Thrushes</SpecGridItem>
<SpecGridItem label="Conservation status">Near threatened</SpecGridItem>
<SpecGridItem label="Habitat">Deciduous forest</SpecGridItem>
<SpecGridItem label="Length">18–21 cm (7–8 in)</SpecGridItem>
<SpecGridItem label="Population" estimated>
11 million
</SpecGridItem>
<SpecGridItem label="Region">Eastern North America</SpecGridItem>
</SpecSheet>
)
}
Leader, form box and manual
Leader, form box and manual
The leader list holds its value column to the reading measure; a value that would wrap drops under its label and loses the leader. The form box draws a ruled box around the grid. The manual page frames its content in a double line. A figure sits beside the sheet from 1024 px of the sheet's own width (sheet 5, figure 7).
Bench, Oak
- Width
- 180 cm (71 in)
- Depth
- 45 cm (18 in)
- Seat height
- 46 cm (18 in)
- Finish
- Oiled, food-safe
Survey Record
- Plot
- B-14
- Observer
- A. Díaz
- Date
- 22 Sept 2026
- Cover
- ≈ 60%
Garden Plate
- Roasted roots, warm
- Leaves from the east beds
- Seed crumble
import {
SpecGridItem,
SpecListItem,
SpecSheet,
} from '@fairgarden-private/design/components/SpecSheet'
import styles from './kinds.module.css'
/** The leader list, the form box and the manual page. */
export function SpecSheetKinds() {
return (
<div className={styles.stack}>
<SpecSheet kind="leader" heading="Bench, Oak" headingLevel={3}>
<SpecListItem label="Width">180 cm (71 in)</SpecListItem>
<SpecListItem label="Depth">45 cm (18 in)</SpecListItem>
<SpecListItem label="Seat height">46 cm (18 in)</SpecListItem>
<SpecListItem label="Finish">Oiled, food-safe</SpecListItem>
</SpecSheet>
<SpecSheet kind="form-box" heading="Survey Record" headingLevel={3}>
<SpecGridItem label="Plot">B-14</SpecGridItem>
<SpecGridItem label="Observer">A. Díaz</SpecGridItem>
<SpecGridItem label="Date">22 Sept 2026</SpecGridItem>
<SpecGridItem label="Cover" estimated>
60%
</SpecGridItem>
</SpecSheet>
<SpecSheet kind="manual" label="Menu item: Garden Plate">
<p className={styles.title}>Garden Plate</p>
<ol className={styles.steps}>
<li>Roasted roots, warm</li>
<li>Leaves from the east beds</li>
<li>Seed crumble</li>
</ol>
</SpecSheet>
</div>
)
}
Grounds and print
Page grounds are the home; on forest or the night band the rules and labels take that scope's roles, and on a saturated field only a quick-facts block of up to 4 cells belongs. The sheet prints as on screen, stacked, with black 0.75 pt rules and leaders; cells never split across pages.
API Reference
SpecSheet
A spec sheet. It prints as on screen, stacked, with black 0.75 pt rules and leaders; cells never split across pages.
| Prop | Type | Description |
|---|---|---|
label | | Accessible name for the grid when no |
figure | | An optional figure (a §8.5 Figure). From 1024 px of the sheet it sits beside the grid (5 / 7). |
heading | | The section head: the chapter-stack H2 (“At a Glance”) in |
headingLevel | | The heading level. Default |
identity | | Reference pages: the identity block above the sheet, heading the reading column [D188]. |
kind | |
|
lead | | The lead, |
more | | The “More Details” disclosure for long sheets; it prints expanded. |
primary | | Primary Radix scale: rules, labels, values, frames and focus rings. Never defaulted; omitted, it inherits the scope [D133]. |
provenance | | The provenance line, |
secondary | | Secondary Radix scale: only a linked provenance title’s underline. Never defaulted. |
split | | The At a Glance split, on reference pages [D188]: from |
children | | The spec cells: |
SpecGridItem and SpecListItem
One spec cell: icon and caps label on line 1, the value (type-body-ui)
below, flush under the icon. Units sit outside the figure after a
no-break space, metric in parentheses: “28–34 cm (11–13 in)".
| Prop | Type | Description |
|---|---|---|
label | | The caps label ( |
estimated | | An estimated value: dotted top rule and a leading “≈". Don’t write the “≈” yourself. |
icon | | A decorative data icon before the label (Material Symbols Rounded, inline tier, FILL 0). The label carries the meaning. |
One pair: “Label ········ Value”. The leader stops --size-px-2 short of
each text and sits on the label’s last baseline; a long value wraps and
stays right-aligned. A label never splits from its value in print.
| Prop | Type | Description |
|---|---|---|
label | | The caps label ( |
Additional types
SpecGridItemProps
Props for SpecGridItem: div props, the label, an optional icon and the estimate flag.
type SpecGridItemProps = React.ClassAttributes<HTMLDivElement> &
React.HTMLAttributes<HTMLDivElement> & {
label: React.ReactNode;
icon?:
| 'menu'
| 'search'
| 'circle'
| 'arrow_forward'
| 'arrow_upward'
| 'expand_more'
| 'close'
| 'remove'
| 'add'
| 'check'
| 'chevron_right'
| 'chevron_left'
| 'more_horiz'
| 'play_arrow'
| 'pause'
| 'download'
| 'zoom_in'
| 'zoom_out'
| 'recenter'
| 'help'
| 'mail';
estimated?: boolean;
}SpecListItemProps
Props for SpecListItem: div props and the label.
type SpecListItemProps = React.ClassAttributes<HTMLDivElement> &
React.HTMLAttributes<HTMLDivElement> & { label: React.ReactNode }SpecSheetIdentity
The reference-page identity block [D188]: portrait, common name and secondary name.
type SpecSheetIdentity = {
/** A §10.12 Avatar at one of its fixed steps (e.g. `size="xl"`, 128 px). */
portrait?: React.ReactNode;
/** The common name, `type-itemhead` in `--primary12`. */
commonName: React.ReactNode;
/** The secondary (scientific) name, `type-secondary-name` in italic. */
secondaryName?: React.ReactNode;
}SpecSheetMore
The optional “More Details” disclosure (§10.13).
type SpecSheetMore = {
/** The trigger label, title case: "More Details" [D160]. */
label: React.ReactNode;
/** The label while open, e.g. "Fewer Details". Omitted, `label` stays. */
openLabel?: React.ReactNode;
/** The further spec rows (SpecGridItems, or SpecListItems in a leader sheet). */
children: React.ReactNode;
}SpecSheetProps
Props for SpecSheet: section props, the kind and split, the sheet’s
parts and the color axes. split is accepted only with kind="glance".
type SpecSheetProps =
SpecSheetGlanceProps | SpecSheetLeaderProps | SpecSheetManualProps | SpecSheetFormBoxPropsSpecification: DESIGN-SYSTEM.md §12.7 (spec sheet, D188), §8.3 (spec grid) and §5.10.2 (module reflow).