A frosted-glass React design system — components for layout, forms, overlays, data, diagnostics, agentic UI, and Dataverse / Power Platform tooling.
This repo contains two things — pick the right one for what you want:
| path | for | |
|---|---|---|
| The library | src/lib/ |
The publishable design system. 60+ components, themable accent, focus-trapped overlays, jest-axe-asserted a11y, virtualized data tables, agentic UI surfaces. See src/lib/README.md. |
| The showroom | src/ |
A live demo site that renders every component side-by-side. Used for design + reference. Not published. Run npm run dev to open it. |
npm install @allandecastro/lume react react-dom lucide-reactimport "@allandecastro/lume/styles";
import { Button, LumeProvider, notify, Toaster } from "@allandecastro/lume";
export function App() {
return (
<LumeProvider>
<Button variant="primary" onClick={() => notify.success("Saved")}>
Save changes
</Button>
<Toaster />
</LumeProvider>
);
}The lib README has the full surface: theming with two CSS variables, localization via LumeProvider, the component catalog, and the a11y / SSR / performance contracts.
npm install
npm run dev # showroom on http://localhost:5173 — every component live
npm test # Vitest smoke tests (jest-axe a11y assertions included)
npm run lint # ESLint flat config
npm run build:lib # build the publishable library → src/lib/dist/
npm run size # bundle-size budgetsFor deeper contributor info (repo layout, lib conventions, adding a component, release flow), see CONTRIBUTING.md.
.
├── .github/
│ ├── workflows/ ← ci.yml (PR checks) + publish.yml (tag → npm)
│ ├── ISSUE_TEMPLATE/ ← bug + feature forms
│ └── PULL_REQUEST_TEMPLATE.md
├── src/
│ ├── lib/ ← the publishable design system (npm-page docs here)
│ │ ├── *.tsx ← components — one per file, named exports
│ │ ├── styles/ ← tokens.css + base.css + showroom.css (wrapped in @layer lume)
│ │ ├── __tests__/ ← Vitest + jest-axe smoke tests
│ │ ├── index.ts ← public barrel
│ │ ├── package.json ← name, version, peers, exports map
│ │ └── README.md ← what npm displays
│ └── components/ ← showroom shell + sample pages
├── CHANGELOG.md
├── CONTRIBUTING.md
├── eslint.config.js
├── vite.config.ts ← showroom dev/build config
├── vite.lib.config.ts ← library-mode build config
└── vitest.config.ts
Releases are tag-driven:
# 1. Bump src/lib/package.json#version (e.g. 0.2.0 → 0.2.1)
# 2. Move CHANGELOG.md "## [Unreleased]" → "## [0.2.1] — YYYY-MM-DD"
# 3. Commit + tag
git commit -am "release: 0.2.1"
git tag v0.2.1
git push origin main --tagsThe .github/workflows/publish.yml workflow then:
- Asserts the tag matches
src/lib/package.json#version. - Runs the tests.
- Builds the library.
- Publishes
@allandecastro/lume@<version>to npm with provenance.
One-time setup: an NPM_TOKEN repo secret (npm Profile → Access Tokens → Automation). Repo must be public for npm provenance to attest.
See CONTRIBUTING.md. The short version:
- Branch off
main, one concern per PR npm test && npm run lint && npm run build:lib && npm run sizemust all pass- New components add a smoke test with
axe(container)and a showroom demo - Breaking changes get major-version bumps + a
CHANGELOG.mdmigration note
Issues use forms:
MIT — free for commercial and personal use.