Components

Every component is a native custom element. Click View code under any example to see exactly the markup that produced it, and use the theme dots above to preview all four themes.

Buttons

Variants: primary, secondary, outline, ghost, soft, danger, link. All have a ripple press animation.

Primary Secondary Outline Ghost Soft Danger Link

Sizes, icons & states

Small Default Large Pill Saving… Disabled
AttributeValuesNotes
variantprimary · secondary · outline · ghost · soft · danger · linkdefault primary
sizesm · md · lg
icon / icon-righticon nameicon-only when no text
loading · disabled · block · pillbooleanloading also settable as a JS property

Text inputs

AttributeDescription
label, placeholder, hint, errorField texts. Setting error turns the control red and shows the message.
typeAny native type. password gets a show/hide toggle automatically.
icon, suffix, clearable, maxlengthLeading icon, trailing text, clear button, live character counter.
size, required, disabled, namesm · md · lg / boolean flags / form field name.
.valueJS property. Listen to native bubbling input / change events.

Textarea

Select

Single-value dropdown with optional search, clear button, option icons and groups. Fully keyboard operable ( Enter Esc).

Multi-select

Multi-value dropdown with chips, search, overflow counter (max-chips) and select-all footer.

Autocomplete (autofill select)

Typeahead with debouncing, match highlighting and async sources. Set .source to an array or an async function — perfect for backend lookups.

Checkbox & Switch

Radio group

Slider

Datepicker

Calendar popup with month/year picker (click the title), today highlight and locale-aware formatting. Value is always ISO yyyy-mm-dd.

Badges & Chips

Primary Secondary Active Pending Failed Info Neutral 12
Plain chip Filter: Open Removable Urgent

Avatar

Alerts

A new version of the API is available. Build #482 is live in production. Your trial expires in 3 days. This one is dismissible. The card ending in 4242 was declined.

Progress & loading

Tabs

Animated ink bar, icon + badge support, arrow-key navigation, and a pills variant.

Overview panel — the ink bar springs between tabs. Activity panel with a badge on the tab. Settings panel. You can't reach this. Daily view Weekly view Monthly view

Accordion

A framework-agnostic design system: design tokens, themes and native web components. Yes — custom elements are plain DOM. Set properties and listen to events like any element. Panels animate with CSS grid-template-rows, the smoothest height transition available.

Pagination

Backdrop blur, spring entrance, Esc / backdrop close (unless persistent), body scroll-lock. Buttons inside with data-modal-close / data-drawer-close close automatically.

Open modal Open drawer Confirm dialog

Toast notifications

Imperative API with four variants, auto-dismiss progress bar and slide-in animation.

Success Info Warning Danger

Tooltip

Add data-ema-tooltip to anything, or wrap in <ema-tooltip>.

Cards & Stats

Apollo Project

Live
Cards lift on hover. Compose header, body and footer freely.

Icons

50+ built-in stroke icons, used via EMA.icon('name') or the icon attribute on components.