個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證React components in dark glass: translucent surfaces, hairline borders that catch a pointer light, one accent colour. Tailwind v4, no runtime dependencies.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗React components in dark glass: translucent surfaces, hairline borders that catch a pointer light, and one accent colour carrying the UI. Built on native platform features (<dialog>, the Popover API, CSS anchor positioning, radio inputs) with no runtime dependencies.
Documentation · Showcase app · Storybook
pnpm add @rinzai/zen
React 19 is the only peer dependency.
Using Tailwind CSS v4? Add Zen's theme after Tailwind in your stylesheet. Your one Tailwind build then generates everything Zen's components use:
@import 'tailwindcss';
@import '@rinzai/zen/tailwind.css';
Not using Tailwind? Import the complete stylesheet once, near the root of your app. It includes the default theme:
import '@rinzai/zen/css';
Zen never styles your own elements. For its page setup (the background showing through), heading scale, inline code and quiet scrollbars, also add the optional base:
@import '@rinzai/zen/base.css';
The look is set in Geist; load it however you like.
import { Backdrop, Button, Card, CardHeader, CardTitle } from '@rinzai/zen';
export default function App() {
return (
<>
<Backdrop />
<Card>
<CardHeader>
<CardTitle>Budget</CardTitle>
</CardHeader>
<Button>Save changes</Button>
</Card>
</>
);
}
Every docs page ships with the package as markdown, matching the installed version: node_modules/@rinzai/zen/dist/docs (README.md lists them), with the CHANGELOG at the package root. Point your agent there from your AGENTS.md or CLAUDE.md:
UI components come from @rinzai/zen. Its docs, with every example's source, are in node_modules/@rinzai/zen/dist/docs; start at README.md there.
The site has them too: llms.txt, llms-full.txt (everything in one file) and /docs/<component>.md.
useMediaPlayer for your own <audio> or <video>, useMediaSession for the lock screen and media keys, formatDurationthemeWave (the theme spreads from the switch like a drop falling into water: ripples, glints and a rainbow edge, drawn on the GPU; prepareThemeWave readies it when the pointer reaches your own switch), useAnchoredPopup, useVirtualList, useTree, useSort, useCopyToClipboard, money, currency, month and date helpers, hexToOklch and oklchToHex, cx (Tailwind-aware class merging), cvaEvery component takes className, and a class you pass always overrides the component's default. Other props (id, aria-*, data-*, handlers) and ref reach its element, and parts that render a link or button take asChild to use your own (a router's Link, say).
Zen exports no icons. Use any icon set (the examples use Heroicons) and pass icons in as elements, such as icon={<HomeIcon />}.
Controls report changes with onValueChange (onCheckedChange for Checkbox and Toggle). Pass value to control one, or defaultValue to let it keep its own. Give a control a name and it's submitted with its form, the custom ones (Combobox, the date pickers, MoneyInput, ColorPicker, TagInput…) included, and goes back to its first value when the form is reset.
import { LocaleProvider } from '@rinzai/zen';
<LocaleProvider locale="fr-FR" messages={{ clear: 'Effacer', noResults: 'Aucun résultat' }}>
<App />
</LocaleProvider>;
The locale formats dates, numbers and money, and sets the week's first day. messages replaces any of the words Zen shows or announces (ENGLISH lists them all); the rest stay English. With dir="rtl" on the page or any element above, layout, arrow keys and chevrons mirror.
Dark is the default. Add the light class (or data-theme="light") for the light palette. Colours are OKLCH L C H triplets; override any token in your own CSS:
:root {
--primary: 0.72 0.13 200; /* teal instead of violet */
--glow: 0.7 0.13 200;
}
Or generate a whole theme at runtime:
import { applyPreset, applyTheme, DEFAULT_THEME } from '@rinzai/zen';
applyTheme(applyPreset(DEFAULT_THEME, 'ocean'));
For a page composited over something else, such as an OBS browser source, which never gets a pointer:
<html data-zen-glow="ambient" data-zen-page="transparent"></html>
data-zen-glow="ambient" sends the edge light round each glowing border by itself (on any element, it does so for what's inside). data-zen-page="transparent" paints nothing behind the content; it needs the base stylesheet.
Chrome and Edge 114+, Safari 17+ and Firefox 128+: the versions with the native Popover API that popups, menus and toasts are built on, and with what Tailwind v4 needs.
pnpm install
pnpm dev # Storybook
pnpm docs:dev # docs site
pnpm test
pnpm build