Overview

A set of vanilla-JS web components and shared CSS patterns. Native elements first (<dialog>, Popover API, anchor positioning), light DOM, no build step, Open Props tokens.

Design principles

Where things live

public/ui/components/
Custom elements — one class per .mjs, tagged ui-* or x-*
public/ui/lib/
Shared helpers — dialog.mjs, toast.mjs, tooltip.mjs, theme.mjs, l10n.mjs, etc.
public/ui/ui.css
Central stylesheet — imports Open Props tokens, extras and forms.css, and defines the CSS that several components or plain markup share. A component's own CSS lives in its module.
public/ui/docs/
These docs
public/ui/test/
Tests per component — *.test.mjs runs under npm test (Node's test runner + happy-dom), *wpt.spec.mjs under npm run test:wpt (Playwright, Chromium and Firefox)
public/open-props/
Open Props token layer (vendored)
public/index.css
Project-level semantic aliases + dark-mode theme

Navigating the docs