What to build
An accessible, themeable button built on ArkUI's button primitive styled via a PandaCSS cva recipe.
Set up:
Button component using ArkUI's button primitive for keyboard accessibility, focus ring, and disabled states
- PandaCSS cva recipe with:
variant: primary, ghost, outline
size: sm, md, lg
isIconOnly: applies equal padding and circular border radius
isLoading: shows a spinner (using Icon), disables interaction
- All colors reference semantic tokens — no hardcoded values
- Full TypeScript props with JSDoc
- Storybook stories: one story per variant × size combination, plus
isLoading and isIconOnly states
Tests (Vitest + Testing Library):
- Disabled state prevents click handler from firing
isLoading renders a spinner and disables interaction
- All variant/size combinations render without errors
Acceptance criteria
Blocked by
What to build
An accessible, themeable button built on ArkUI's button primitive styled via a PandaCSS cva recipe.
Set up:
Buttoncomponent using ArkUI's button primitive for keyboard accessibility, focus ring, and disabled statesvariant:primary,ghost,outlinesize:sm,md,lgisIconOnly: applies equal padding and circular border radiusisLoading: shows a spinner (usingIcon), disables interactionisLoadingandisIconOnlystatesTests (Vitest + Testing Library):
isLoadingrenders a spinner and disables interactionAcceptance criteria
primary,ghost,outline) render correctly in light and dark modeisLoadingshows a spinner and the button is not clickableisIconOnlyapplies equal padding on all sidesBlocked by