Variants
Six visual treatments for different emphasis levels.
Atoms
Interactive button with loading state, icons, and variants.
pnpm add @quinkit/uiimport { Button } from "@quinkit/ui";Live previews · code · themes · viewport · dark mode
Six visual treatments for different emphasis levels.
Small, medium, large, and square icon buttons.
Leading and trailing icons align automatically.
The busy state disables interaction and shows a spinner.
Disabled buttons and destructive intent for risky actions.
A segmented control built from buttons with shared borders.
Button is a Week 3 atom in @quinkit/ui. It is implemented with strict TypeScript, design-token classes, dark-mode compatible colors, Storybook coverage, and unit tests.
aria-label for icon-only/unlabelled controls.focus-visible and the shared ring token.The component uses semantic tokens such as bg-background, text-foreground, border-input, bg-primary, and text-primary-foreground, so it adapts to .dark and theme palettes. Motion-sensitive styling uses motion-reduce:* or avoids required animation.
Public props are documented with JSDoc in packages/ui/src/components/atoms/button/button.tsx.
Button adheres to WAI-ARIA design patterns for accessible web components.
Keyboard Navigation
Tab / Shift + Tab — Focuses control and moves between interactive elements.Space / Enter — Triggers action or toggles selection.Escape — Closes open popovers, overlays, or dropdown menus.ARIA Standards
aria-* attributes.ring-ring) visible in both light & dark mode.Add a shadcn-compatible bridge file to your project that re-exports from @quinkit/ui.
npx shadcn@latest add https://quinkit-ui.vercel.app/r/button.json