A reusable React + TypeScript component library for building dashboards and applications. Components are accessible by default, themeable via CSS variables, and tree-shakeable.
Package: @lumen-ui/react
npm install @lumen-ui/reactPeer dependencies:
npm install react react-domImport components from the package entry:
import { Button, Input, Card, CardHeader, CardTitle, CardContent, Badge } from "@lumen-ui/react";
import "@lumen-ui/react/styles.css";<Button variant="primary" onClick={() => console.log("clicked")}>
Save changes
</Button>
<Button variant="destructive" loading>
Deleting…
</Button>
<Button variant="outline" icon={<span>→</span>} iconPosition="end" fullWidth>
Continue
</Button><Input
label="Email"
type="email"
placeholder="you@example.com"
helperText="We'll never share your email."
/>
<Input label="Email" error="Enter a valid email address." /><Card>
<CardHeader>
<CardTitle>Revenue</CardTitle>
<CardDescription>Last 30 days</CardDescription>
</CardHeader>
<CardContent>
<p>$12,400</p>
</CardContent>
</Card><Badge variant="success">Active</Badge>Global design tokens live in tokens.css and are applied when you import the library (or styles.css in consuming apps).
Override globally:
:root {
--lumen-color-primary: #7c3aed;
--lumen-color-background: #0f172a;
--lumen-color-text: #f8fafc;
}Override a single component instance:
.my-custom-button {
--lumen-button-bg: #000;
--lumen-button-color: #fff;
}<Button className="my-custom-button">Custom</Button>src/
components/
Button/
Input/
Card/
Badge/
styles/
tokens.css # Design tokens
globals.css # Base utilities
hooks/
utils/
index.ts # Barrel exports
Each component folder contains:
Component.tsx— implementationComponent.css— plain CSS with.lumen-*classesComponent.stories.tsx— Storybook docsComponent.test.tsx— Vitest testsindex.ts— public exports
| Command | Description |
|---|---|
npm run dev |
Build library in watch mode |
npm run build |
Typecheck + production build to dist/ |
npm run storybook |
Start Storybook on port 6006 |
npm run build-storybook |
Static Storybook build |
npm run test |
Run Vitest component tests |
npm run lint |
ESLint |
npm run format |
Prettier write |
git clone <repository-url>
cd lumen-react
npm install
npm run storybookFrom this package directory:
npm run build
npm linkIn your consumer app:
npm link @lumen-ui/reactImport styles in the consumer (if not bundled automatically):
import "@lumen-ui/react/styles.css";- Update version in
package.json - Run
npm run buildandnpm run test - Log in to npm:
npm login - Publish:
npm publish --access public
The files field publishes only dist/. React and React DOM remain peer dependencies.
- React 18/19
- TypeScript
- Vite (library mode)
- Storybook
- Plain CSS + CSS variables
- ESLint + Prettier
- Vitest + Testing Library
MIT