尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Two React UI kits with one component API: Halo (soft, rounded, light-first) and Pro (sharp, dense, dark-first). 216 components, 690+ icons, glass surfaces, motion levels, shadcn-compatible theming, custom elements for plain HTML, and an MCP server for coding agents. MIT.
翻译准备中
正在加载完整 README。
查看完整 README ↗data-kit: markup and state stay, only the CSS changes. A parity test fails the build if the kits drift apart.--primary, --secondary, --muted, --accent, --destructive, --border, --ring, --radius, charts, sidebar) restyle every component in both kits, light and dark. Paste a theme from ui.shadcn.com/themes or build one live.surface="glass", FloatingLayout and Ambient turn panels, tiles, the whole app shell, menus and controls into translucent, blurred glass that stays readable over any backdrop, milky in Halo, dark and hairline-edged in Pro.motion="off" | "standard" | "expressive"; reduced motion always wins.bg-primary, text-muted-foreground).llms.txt and a Markdown version of every docs page, so Claude Code, Cursor and friends use the real components instead of guessing.The same JSX renders either way:
npx @twentyfirstmedia/ui init --kit halo # or --kit pro
init installs the kit, imports its styles (and the Tailwind preset if you use Tailwind), creates a UIProvider root and wires up the Next.js layout. Or set it up by hand:
npm install @twentyfirstmedia/halo
import "@twentyfirstmedia/halo/styles.css";
import { Button, Panel, TextField, UIProvider } from "@twentyfirstmedia/halo";
export function App() {
return (
<UIProvider theme="system">
<Panel title="Workspace">
<TextField label="Name" defaultValue="Northwind" />
<Button variant="primary">Save</Button>
</Panel>
</UIProvider>
);
}
Both kits in one app: import @twentyfirstmedia/ui-core/themes.css instead and switch with <UIProvider kit="pro"> or data-kit="pro" on <html>.
Tailwind v4: @import "@twentyfirstmedia/halo/tailwind.css"; after @import "tailwindcss"; maps every token to utilities (bg-surface, text-ink, rounded-lg, shadow-card).
Both kits read shadcn/ui's theme variables, so any shadcn theme works as it is, and every component follows it:
@import "@twentyfirstmedia/halo/styles.css";
:root {
--primary: oklch(0.546 0.245 262.881);
--primary-foreground: oklch(0.985 0 0);
--radius: 0.75rem;
}
.dark {
--primary: oklch(0.707 0.165 254.624);
}
Six brand presets ship as CSS (@twentyfirstmedia/halo/themes/violet.css), npx @twentyfirstmedia/ui theme ./shadcn-theme.css writes and imports a theme, <UIProvider tokens={…}> sets one at runtime, and the theme builder shows it live on real components. A test applies a theme to every example in both kits, light and dark, and fails if any part ignores it.
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@twentyfirstmedia/halo/dist/styles.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@twentyfirstmedia/elements/dist/elements.js"></script>
<tf-panel title="Workspace">
<tf-text-field label="Name" default-value="Northwind"></tf-text-field>
<tf-button variant="primary">Save</tf-button>
</tf-panel>
See Plain HTML and frameworks.
The CLI ships an MCP server with the docs of the version you installed. It runs offline, needs no account and has no runtime dependencies.
npx @twentyfirstmedia/ui mcp init
This registers it for Claude Code (.mcp.json), Cursor (.cursor/mcp.json) and VS Code (.vscode/mcp.json) and adds the kit's rules to AGENTS.md. To add it by hand:
claude mcp add twentyfirst-ui -- npx -y @twentyfirstmedia/ui mcp --kit halo
Tools: search_docs, list_components, get_component, get_pattern, get_guide, get_tokens, list_icons and check_usage. check_usage reviews code for unknown components, props or icons, missing required props and colour literals.
For any other LLM: /llms.txt, /llms-full.txt, and every page as Markdown: append .md to its path.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗