Button
Interactive button component with semantic variants, styles, sizes, and states. Works by default, enhances with data attributes.
Example
<button class="omni-button">Default</button>
<button class="omni-button" data-variant="primary">Primary</button>
<button class="omni-button" data-variant="secondary">Secondary</button>
<button class="omni-button" data-variant="success">Success</button>
<button class="omni-button" data-variant="danger">Danger</button>
Variants
Semantic Variants
Use data-variant to convey meaning through color:
Style Variants
Use data-variant-style to adjust visual emphasis:
Solid (default)
Outline
Ghost
Soft
Sizes
Use data-size to adjust button dimensions:
<button class="omni-button" data-variant="primary" data-size="sm">Small</button>
<button class="omni-button" data-variant="primary">Medium</button>
<button class="omni-button" data-variant="primary" data-size="lg">Large</button>
With Icons
Add SVG icons before or after button text:
Icon-Only
Use data-type="icon" for square buttons. Always include aria-label:
States
Disabled
Loading
Full Width
API Reference
| Attribute | Values | Default | Description |
|---|---|---|---|
data-variant |
primary, secondary, success, warning, danger, info | — | Semantic color variant |
data-variant-style |
solid, outline, ghost, soft | solid | Visual style treatment |
data-size |
sm, md, lg | md | Button dimensions |
data-type |
icon | — | Square button for icons |
data-width |
auto, full | auto | Button width behavior |
data-state |
loading, disabled | — | Interactive state |
Accessibility
- Full keyboard navigation support (Tab, Enter, Space)
- Focus visible indicators with semantic color-matched rings
- Disabled state prevents interaction and conveys state visually
- Loading state provides visual feedback and prevents duplicate submissions
- Icon-only buttons require
aria-labelfor screen readers - Works with both
<button>and<a>elements - Respects
prefers-reduced-motionfor animations