Component library
Semantic by construction
41 components across 7 categories. Every one is built on a real
HTML element — <button>, <dialog>,
<details>, <table> — with data-bn-*
attributes for variants and zero CSS classes.
No components match.
Form Controls
Input primitives wired to native form events with help text, error states, and field semantics.
-
Button
<button>Primary, secondary, destructive, and ghost variants on a native button.
-
Input
<input>Text, email, password, and search inputs with label, help, and error states.
-
Textarea
<textarea>Auto-sizing textarea with field-sizing: content and a vertical resize handle.
-
Select
<select>Native select with appearance: base-select progressive enhancement.
-
Checkbox
<input>Native checkbox with custom indicator built from CSS pseudo-elements.
-
Radio Group
<fieldset>Grouped radio inputs inside a fieldset/legend with keyboard support.
-
Toggle
<input>Switch-style checkbox with role="switch" and animated thumb.
-
Combobox
<div>Filterable single-select with listbox semantics and keyboard navigation.
-
Multiselect
<div>Tag-based multi-value select over a hidden select multiple; initMultiselect adds chip removal, Backspace and datalist entry.
-
Field
<div>The form-field unit: label, control, help text and error composed as one piece of markup, with the help/error ids the controls’ aria-describedby points at.
-
Form Field
<div>Compose a whole field in one call: name a built-in control (input, textarea, select, checkbox, radio, toggle) or pass pre-rendered markup, plus the shared label, help and error options.
Feedback
Status surfaces — alerts, toasts, progress, spinners, and loading skeletons.
-
Alert
<div>Inline status box with info, success, warning, and error variants.
-
Progress
<progress>Native progress element with deterministic and indeterminate states.
-
Spinner
<span>CSS-only loading indicator with three sizes and a screen-reader label.
-
Skeleton
<div>Animated placeholder for content that is still loading.
-
Badge
<span>Compact status pill with semantic color variants.
Cards & Layout
Article-shaped cards, accordions, and tabs that use native disclosure semantics.
-
Card
<article>Article element with header/body/footer slots and hover affordance.
-
Accordion
<details>Native details/summary stack — exclusive or multi-open.
-
Tabs
<div>Tablist with proper ARIA wiring; initTabs adds the APG arrow-key navigation.
-
Avatar
<span>Initials fallback with optional image source and four sizes.
-
App Shell
<main>The minimal page shell: skip link, header slot, main landmark and footer slot, with the skip link and the main id kept in sync by construction.
Data Display
Tables and grids — from a basic table to a virtualized data grid and tree.
-
Table
<table>Native table with caption, sticky header, and hover row highlight.
-
Data Grid
<table>Sortable, selectable grid built on native table; initDataGrid adds sorting, selection and arrow-key cell navigation.
-
Tree
<ul>role="tree" list; initTree adds expand/collapse, selection state and the APG tree keys.
-
Virtual List
<div>Windowed list — the server renders only the first slice; initVirtualList re-slices it on scroll.
Overlays
Layered surfaces built on native dialog and the Popover API.
-
Dialog
<dialog>Native modal dialog with backdrop, focus trap, and escape-to-close.
-
Drawer
<aside>Side sheet for settings and secondary tasks. Slides in from the left or right.
-
Dropdown Menu
<menu>Popover-anchored menu with shortcuts; open, Escape and light dismiss are native, initDropdownMenu adds the arrow keys and close-on-select.
-
Tooltip
<span>Popover-anchored tooltip with role="tooltip" and four positions.
-
Toast
<output>Live region for non-blocking notifications. Auto-dismisses.
Marketing & Content
The content shapes marketing pages are built from — hero, pricing, feature and stat cards, and FAQ — with copy as escaped data.
-
Hero
<section>Opening section of a marketing page: badge, heading, lead, actions, social proof and an optional visual; the page variant renders the compact heading-and-lead hero for interior pages.
-
Pricing Card
<article>One plan: badge, name, price, tagline, check-marked features and a CTA; a featured plan is stamped and its CTA turns primary. renderPricingCards renders the whole list.
-
Feature Card
<article>Icon, tag, title and description for feature grids; the description is escaped text or a body HTML slot.
-
Stat Card
<div>A value, its label and an optional up/down trend indicator, for dashboards and proof sections.
-
FAQ
<dl>A definition-list FAQ: each item is a question/answer pair in a faq-item wrapper; renderFaqItem renders a single entry.
Design axioms
-
No namespace theater
Components are built on W3C primitives. No
app-button, nomy-dialog. A button is a<button>. -
Zero inline styles
All CSS lives in cascade layers. No
style="", no CSS-in-JS. Variants are addressed withdata-variant="". -
display: contentson hostsWrappers don't affect layout. The component you ask for is the box you get.
-
Trinity standard
State, logic, and template fuse in one file. No splitting across three.