Theme
Sound
Jump to a component
AniCanonKit · AniCanon™
ActivityPanel
ActivityPanel is the panel that opens from ActivityRow: jobs in groups (running with their progress, needing you with an action, earlier).
Live, from @anicanon/sakuga 2.0.0
Sakuga for iOS and Android is coming
iOS
Web only
ActivityPanel is made for the web, and isn’t part of Sakuga for iOS yet.
Android
Web only
ActivityPanel is made for the web, and isn’t part of Sakuga for Android yet.
- Use it for
- The list of running and finished work, opened from
ActivityRow.
Guidelines
groupsare{title, jobs}; a job has atitle, atext, animageorinitial, and aprogress(aProgress), atime, or anaction({label, primary, onClick}, a smallButton).onClosemakes it hold focus while shown: focus starts on the first job's action, and Escape and its Close runonClose.
import { ActivityPanel } from '@anicanon/sakuga/anicanonkit';
export default function ActivityPanelExample() {
return (
<ActivityPanel
groups={[
{
title: 'Running · 1',
jobs: [
{
initial: 'T',
title: 'Tattoo · new character',
text: 'Designing the look',
progress: 55,
time: '0:31',
},
],
},
{
title: 'Needs you',
jobs: [
{
initial: 'S',
title: 'Smith · new look',
text: 'Ready for your review',
action: { label: 'Review', primary: true },
},
],
},
]}
/>
);
}PropsActivityPanelProps
groupsrequired{ title: string; jobs: ActivityJob[]; }[]onClose() => voidWith it, the panel takes focus while shown; Escape and Close run it.
classNamestringstyleCSSPropertiesTypes
interface ActivityJob { title: string; text?: string; image?: string; initial?: string; progress?: number; time?: string; action?: { label: string; primary?: boolean; onClick?: MouseEventHandler; }; }
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.
Colour
activity-bgKit Activity: panel.bg-surfaceneutral-0#ffffffbg-surfaceneutral-900#111117activity-groupKit Activity: group heading.text-mutedneutral-600#5c5b67text-mutedneutral-400#a3a3a7Space and shape
activity-widthits own value
400px
activity-padding-bottominset-md12px
activity-radiusradius-xl24px
activity-inset-ring-widthline-hairline1px
activity-head-padding-topinset-lg16px
activity-head-padding-xinset-lg16px
activity-head-padding-bottominset-sm8px
activity-group-margin-topgap-md8px
activity-group-margin-xgap-xl16px
activity-group-margin-bottomgap-xs4px
activity-job-gapgap-lg12px
activity-job-padding-yinset-sm8px
activity-job-padding-xinset-lg16px
activity-job-av-sizeits own value
40px
activity-job-av-radiusradius-full9999px
activity-job-bar-margin-topgap-sm6px
Type
activity-font-familyfont-sansFunnel Sans
activity-head-b-fonttext-title-4700 17px/22px "Funnel Display", "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
activity-group-fonttext-eyebrow700 11px/14px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
activity-group-letter-spacingtracking-caps.06em
activity-job-av-fonttext-label-bold700 14px/18px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
activity-job-words-b-fonttext-caption-strong600 13px/18px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
activity-job-words-span-fonttext-small500 12px/16px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
activity-job-time-fonttext-small-strong600 12px/16px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
Motion
activity-rise-in-animationmotion-risesk-rise-in 240ms cubic-bezier(0, 0, 0, 1)
activity-job-durationmotion-fast160ms
activity-job-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
- A dialog named "Activity". With
onClose, focus moves to the first job's action, Tab stays inside, and Escape or "Close activity" runsonCloseand focus goes back. Each job's progress is a progress bar named by its title. - 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.