asChild pattern.
Installation
The Button component is built with:class-variance-authorityfor variant managementradix-uiSlot for composition- Custom utility functions from
@/lib/utils
Basic Usage
Variants
The Button component supports 6 visual variants:- Default
- Outline
- Secondary
- Ghost
- Destructive
- Link
Sizes
Real-World Examples
Hero CTA Buttons
Frommodules/landing/components/Hero.tsx:55-67:
Navigation Buttons
Fromcomponents/layout/navbar.tsx:48-52:
Form Submit Button
Frommodules/auth/components/LoginForm.tsx:106-112:
Password Toggle Button
Frommodules/auth/components/LoginForm.tsx:77-85:
Props
Visual style variantOptions:
default | outline | secondary | ghost | destructive | linkButton size presetOptions:
xs | sm | default | lg | icon-xs | icon-sm | icon | icon-lgWhen
true, the button will render its child component instead of a <button> element. Useful for wrapping Link components.Additional CSS classes to apply to the button
Disables the button and applies disabled styles (50% opacity, pointer-events disabled)
HTML button typeOptions:
button | submit | resetAccessibility
- Includes
focus-visiblestyles with ring and border for keyboard navigation - Supports
aria-invalidstate with destructive styling - Automatically handles
disabledstate with appropriate styling - Icon-only buttons should include
aria-labelfor screen readers
Styling Details
- Base height: 32px (h-8) for default size
- Border radius:
rounded-lg(8px) - Focus ring: 3px ring with 50% opacity
- Transition: All properties with transition-all
- SVG icons: Automatically sized to 16px (size-4) unless overridden
- Group context: Uses
group/buttonfor nested element styling
