Theme
Sound
Jump to a component
AniCanonKit · Characters
CharacterStats
Who a character is at a glance: each fact as its picker's icon, the value and what it is.
Live, from @anicanon/sakuga 2.0.0
Sakuga for iOS and Android is coming
iOS
Coming soon
CharacterStats for iOS is in the roughs. The tokens it will read are the ones on this page, the same on every platform.
Android
Coming soon
CharacterStats for Android is in the roughs. The tokens it will read are the ones on this page, the same on every platform.
- Use it for
- Who a character is at a glance: each fact as its picker's icon, the value and what it is, as tiles in a card or on a phone, or as pills across the character's page.
- Not for
- Who a character is at a point in the story, with since whenFactList
- The whole character as one cardCharacterCard
- What a character is ready withReadiness
- Words kept as tags, such as a visual vibeTagList
Guidelines
- Tiles (the default) in a
CharacterCardand on a phone, three across.changedrings a fact edited in this session. layout="pills"lays them across a character's page, beside the portrait.- The icon is the same one the picker shows, from the world's morphology (human, anthro, creature).
import { CharacterStats } from '@anicanon/sakuga/anicanonkit';
const stats = [
{ icon: 'gender-male', value: 'Male', label: 'Gender' },
{ icon: 'age-adult', value: 'Adult', label: 'Age' },
{ icon: 'height-tall', value: 'Tall', label: 'Height' },
{ icon: 'body-fit', value: 'Fit', label: 'Build', changed: true },
{ icon: 'faction-hero', value: 'Heros', label: 'Faction' },
{ icon: 'trait-leader', value: 'Leader', label: 'Role' },
];
const stats2 = [
{ icon: 'gender-male', value: 'Male', label: 'Gender' },
{ icon: 'age-adult', value: 'Adult', label: 'Age' },
{ icon: 'height-tall', value: 'Tall', label: 'Height' },
{ icon: 'body-fit', value: 'Fit', label: 'Build', changed: true },
{ icon: 'faction-hero', value: 'Heros', label: 'Faction' },
{ icon: 'trait-leader', value: 'Leader', label: 'Role' },
];
export default function CharacterStatsExample() {
return (
<>
<CharacterStats stats={stats} />
<CharacterStats layout="pills" stats={stats2} />
</>
);
}PropsCharacterStatsProps
statsrequiredCharacterStat[]layout'tiles' | 'pills'columnsnumberclassNamestringTypes
interface CharacterStat { icon?: IconName; value: string; label: string; changed?: boolean; }
Each token reads a role, and the role lands on a value in each theme. Change the role and every component that reads it follows.
Space and shape
character-stat-pill-icon-sizeicon-size-md20px
character-stat-icon-sizeicon-size-lg24px
character-stats-gapgap-sm6px
character-stat-gapgap-xs4px
character-stat-padding-yinset-sm8px
character-stat-padding-xinset-xs4px
character-stat-radiusradius-md12px
character-stat-changed-inset-ring-widthline-strong2px
character-stats-pills-gapgap-md8px
character-stats-pills-max-widthits own value
620px
character-stats-pills-stat-gapgap-md8px
character-stats-pills-stat-heightits own value
40px
character-stats-pills-stat-padding-rightinset-md12px
character-stats-pills-stat-padding-leftinset-sm8px
character-stats-pills-stat-radiusradius-full9999px
character-stats-pills-stat-inset-ring-widthline-hairline1px
character-stats-pills-small-margin-rightgap-2xs2px
Type
character-stat-fonttext-small-strong600 12px/16px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
character-stat-b-fonttext-caption-strong600 13px/18px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
character-stats-pills-stat-fonttext-caption-strong600 13px/18px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
character-stats-pills-small-fonttext-small500 12px/16px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
Motion
character-stat-durationmotion-fast160ms
character-stat-easingease-standardcubic-bezier(0.2, 0, 0, 1)
Checked automatically with axe-core 4.11.4 against WCAG 2.2 A and AA, on the live preview above, in light and dark, on 26 October 2026.
- Result
- No issues found, in light or in dark.
- By design
- Not focusable; each stat reads as text, its value then its name (its name then its value as pills), with "changed" after a changed one, and the icons are hidden.
- Not tested
- The automated check doesn't test keyboard use, focus order or what a screen reader says. The lines above are the design system's own account of them.