eoria

Tokens

Every key in the theme, what it drives, and how to add your own.

The theme has colors, space, radius, fontSize with lineHeight, fontWeight, and four shape groups, control, stroke, shadow and font. A preset sets the colours and the shape. createThemes adds the scales. Theming shows how to pick and change a preset.

Colour keys

The colour keys are fixed so that components can rely on them. Four of them describe depth.

Key Used for
background Screens.
surface Cards and tiles. One step above the screen.
muted Controls: fields, chips, secondary buttons. One step up.
elevated Floating layers: menus, popovers, sheets.
foreground Default text and the active chip fill.
mutedForeground Secondary text.
primary, primaryForeground Primary button, checked switch, progress bar.
secondary, secondaryForeground Reserved. The secondary button uses muted.
accent, accentForeground Tinted badges, pressed menu rows.
destructive, destructiveForeground Destructive buttons, badges and toasts.
destructiveText Error text, invalid borders, destructive menu rows.
border Separators and hairlines on floating layers.
input Unchecked switch track.
ring Focus ring on fields and open selects.

Keeping surface and muted one step apart is what lets a filled input sit inside a filled card and still read as a control. If you change one, move the other.

Shape

Group What it drives
radius sm to 2xl and full are steps. control shapes buttons, fields, chips and segmented tabs; card shapes cards, contained accordions and alerts.
control Heights for the sm, md and lg sizes of buttons, fields, selects and OTP cells.
stroke Border width on cards, contained accordions, alerts and filled fields. 0 is a filled look, 1 outlined.
shadow Opacity, blur and offset under elevated cards, menus, popovers and toasts.
font Optional body and heading families, one name per platform. Headings cover the title and heading text variants and card, dialog, alert and popover titles, and fall back to the body family.

Scales

Group Keys
space 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16 (4pt grid)
radius sm, md, lg, xl, 2xl, full, control, card. From the preset.
fontSize xs 12, sm 14, md 16, lg 18, xl 20, 2xl 24, 3xl 30
lineHeight matched to each font size
fontWeight normal, medium, semibold, bold. Mapped by the preset.

Box exposes the spacing and colour scales as props, so <Box p={4} bg="surface" rounded="xl"> reads the theme without a stylesheet.

Your own tokens

The core keys are fixed. Extra keys are yours. Augment the interface, add the values, and the theme is typed everywhere, including inside recipes.

declare module '@eoria/core' {
interface EoriaTheme {
brand: { coral: string; ink: string }
}
}
const light = { ...lightTheme, brand: { coral: '#ff6b57', ink: '#101828' } }