One script tag. Every framework.
BMX components are standards-based custom elements. They work unchanged in plain HTML, React, Angular, Vue, Blazor and ASP.NET MVC — because the browser, not a framework, is what renders them. Everything on these pages is the same markup you would write.
The quickest way to judge them is a form: seven of them inside one <form>,
submitting real FormData with no adapter in between — or the settings panel,
where the switches take effect as you move them and everything else waits for Save. Then
open a record from a list, delete it, and watch where the focus goes.
The library
Eight families, all complete. Thirty-six components, plus six companion elements that take their content as markup rather than as a data array — forty-two custom elements in all. One page per family; everything below works.
Actions
The button itself — six variants, six tones, every size and state, the click effects, and the guards that stop an action being taken twice.
1 liveGroups
The two components built out of the button: a group that is one widget with one Tab stop however many buttons are in it, and a split button whose menu is the real bmx-menu rather than a copy of one.
Fields
Input, textarea, a virtualised select and combobox, a date picker and an upload field. The controls you type, search or drop into.
6 liveChoices
Checkbox, radio group, switch, slider and rating. The controls you toggle, slide or score with.
5 liveNavigation
Menu, tabs, accordion, a toolbar that collapses what does not fit into a menu, a breadcrumb that collapses its middle, pagination and a splitter.
7 liveFeedback
Dialog and drawer over a native modal in the browser's top layer, the tooltip and popover pair — one describes, the other contains — a toast with a queue behind it, and progress and skeletons for the waiting.
7 liveDisplay
Badge, chip, avatar and the two sets that hold them — the components that label what is already on the page. A count that reaches the control it belongs to, a chip that is three different elements, and a stack of faces that says who is behind it.
5 liveApplications
The large components — a carousel over the platform's own scroller, a calendar whose layout is arithmetic rather than pixels, and an org chart that is a tidy-tree algorithm behind a diagram. Applications in their own right rather than controls, and the tier is complete.
3 liveEvery component here is the same custom element you would write into your own markup — no wrapper, no framework, and nothing on these pages is a screenshot. The upload rows filling in on the Fields page are running the component's own queue against a stand-in server; the five thousand options in the select are really there, and really windowed.
Theming
Ten themes, switchable at any level of the page. Everything below is one attribute on a wrapper element.
<!-- Whole page -->
<html data-theme="ocean">
<!-- Or one panel, scoped -->
<div data-bmx-theme="ocean">
<bmx-button>Ocean</bmx-button>
</div>
<!-- Or override the seed colours and every state derives from them -->
<style>
:root {
--bmx-primary: #1d4ed8;
--bmx-radius-md: 2px;
--bmx-font-family: 'Your Brand Sans', system-ui;
}
</style>