Jump to a component
AniCanonKit · AniCanon™
Stages
A job's stages in order, while it runs and after: done ones ticked with the time they took, the running one with AniCanon™'s loader, the rest numbered.
Live, from @anicanon/sakuga 2.0.0
Sakuga for iOS and Android is coming
iOS
Coming soon
Stages 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
Stages 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
- A job's stages in order, while it runs and after: done ones with the time they took, the running one with AniCanon™'s loader, a failed one with why ("Designing the first look").
- Not for
- Where a person is in a flow they step throughStepper
- What a character is ready withReadiness
- How far one job has come as a shareProgress
- Every running and finished jobActivityPanel
Guidelines
- A
failedstage is ringed and says why in its text, in the creator's words; the stages after it wait. size="sm"on a phone.- Say what each stage makes ("Designing the first look"), never the model or the provider.
import { Stages } from '@anicanon/sakuga/anicanonkit';
const items = [
{
title: 'Face locked in',
text: 'Studied the reference and drew the face sheet',
state: 'done',
time: '0:52',
},
{
title: 'Designing the first look',
text: 'Putting together the gray pinstripe dress',
state: 'running',
time: '0:31',
},
{
title: 'Composing the identity sheet',
text: 'The card every scene draws Kiko from',
state: 'todo',
},
];
export default function StagesExample() {
return <Stages items={items} />;
}PropsStagesProps
itemsrequired{ title: string; text?: string; state?: 'done' | 'running' | 'todo' | 'failed'; time?: string; }[]size'md' | 'sm'labelstringclassNamestringEach 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
stages-item-mark-icon-sizeicon-size-smstages-gapgap-lgstages-item-gapgap-lgstages-item-paddinginset-lgstages-item-radiusradius-lgstages-item-inset-ring-widthline-hairlinestages-item-mark-sizestages-item-mark-radiusradius-fullstages-item-mark-inset-ring-widthline-strongstages-item-running-inset-ring-widthline-strongstages-item-mark-running-inset-ring-widthline-strongstages-item-failed-inset-ring-widthline-strongstages-item-mark-failed-inset-ring-widthline-strongstages-item-words-gapgap-2xsstages-gap-smgap-mdstages-item-padding-y-sminset-mdstages-item-padding-x-sminset-mdstages-item-mark-size-smstages-item-mark-radius-smradius-fullstages-item-sel-focus-outline-offsetfocus-ring-offsetType
stages-font-familyfont-sansstages-item-mark-fonttext-caption-strongstages-item-words-b-fonttext-labelstages-item-words-span-fonttext-captionstages-item-time-fonttext-caption-strongstages-item-font-size-smtext-small-sizestages-item-line-height-smtext-small-line-heightMotion
stages-item-mark-durationmotion-basestages-item-mark-easingease-standardstages-item-mark-settle-animationmotion-settleChecked 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; an ordered list named by
label(default "Stages"), each stage read as its title, with "done" or "failed" where it applies, then its text and time. The running one is marked "current step", and its loader says the title once when it appears. - 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.