Documentation

Browser support & limits

Honest about what works where. Every component declares its platform support and how much JavaScript it needs.

What "js" means

Platform support

  • baseline — All evergreen browsers.
  • popover-api — Popover API — Chrome 114+, Safari 17+, Firefox 125+.
  • has-selector — CSS :has() — Chrome 105+, Safari 15.4+, Firefox 121+.
  • dialog — Native <dialog> showModal() — Chrome 37+, Safari 15.4+, Firefox 98+.
  • details — Native <details>/<summary> — all evergreen browsers.

Limitations (8 components need JS or are visual-only)

These are intentionally not "fake-accessible" CSS shells. They style the component; the interactive/keyboard layer is yours (or an optional helper).

  • calendar visual-only — Visual month grid; month nav + date logic need JS; add role=grid/row/gridcell for an interactive picker
  • carousel partial — Scroll-snap works with no JS; arrows/dots need JS; viewport is keyboard-focusable
  • command visual-only — Styled shell; fuzzy search + arrow-key nav + listbox/option roles need JS
  • context-menu partial — Right-click positioning needs oncontextmenu + showPopover(); add menu roles
  • input-otp partial — Visual boxes; auto-advance needs JS; per-input aria-label + group label
  • resizable visual-only — Visual layout; drag needs JS; handle: tabindex=0 role=separator aria-valuenow
  • slider stable — Native <input type=range>; fill-track tracking needs a one-line oninput; label it
  • toggle partial — Standalone needs JS to flip aria-pressed; use toggle-group for zero-JS

Full matrix

ComponentStatusJSSupport
accordionstablenonedetails
alertstablenonebaseline
alert-dialogstabletriggerdialog
aspect-ratiostablenonebaseline
avatarstablenonebaseline
badgestablenonebaseline
breadcrumbstablenonebaseline
buttonstablenonebaseline
calendarvisual-onlyconsumerbaseline
cardstablenonebaseline
carouselpartialconsumerbaseline
checkboxstablenonebaseline
collapsiblestablenonedetails
commandvisual-onlyconsumerpopover-api
containerstablenonebaseline
context-menupartialconsumerpopover-api
dialogstabletriggerdialog
drawerstabletriggerdialog
dropdownstabletriggerpopover-api
emptystablenonebaseline
fieldstablenonebaseline
hover-cardstablenonebaseline
inputstablenonebaseline
input-otppartialconsumerbaseline
kbdstablenonebaseline
labelstablenonebaseline
menubarstabletriggerpopover-api
navigation-menustablenonebaseline
paginationstablenonebaseline
popoverstabletriggerpopover-api
progressstablenonebaseline
radiostablenonebaseline
radio-groupstablenonehas-selector
resizablevisual-onlyconsumerbaseline
scroll-areastablenonebaseline
selectstablenonebaseline
separatorstablenonebaseline
sheetstabletriggerdialog
sidebarstablenonebaseline
skeletonstablenonebaseline
sliderstableconsumerbaseline
sonnerstabletriggerpopover-api
spinnerstablenonebaseline
switchstablenonebaseline
tablestablenonebaseline
tabsstablenonehas-selector
textareastablenonebaseline
toaststabletriggerpopover-api
togglepartialconsumerbaseline
toggle-groupstablenonehas-selector
tooltipstablenonebaseline
typographystablenonebaseline