@lailai0916/ui

中文文档
0.3.19发布于 2026/11/01MITTypeScriptES Module构建来源已验证

Shared React components and design tokens for lailai's websites.

原始使用文档
文档目录7 节
  1. 项目简介
  2. 项目特性
  3. 快速开始
  4. 项目结构
  5. 组件清单
  6. 开发
  7. 许可协议

laikit UI

English · 简体中文

项目简介

laikit UI 是从 lailai's Home 抽出的共享 React 组件库,以 @lailai0916/ui 发布。

原 GitHub 包 @lailai/ui 的组件已合并到此库,仓库由 laikit-ui 重命名为 ui。Home、Tools 和 Academy 共用这一 npm 包;旧项目请参考迁移指南。

项目特性

🧩 共享组件 — 64 个组件覆盖卡片、表单、控件、图表、导航和窗口面板,提供 TypeScript 类型声明与按组件导入入口。

🎨 统一主题 — 共用 CSS 变量、深浅配色及减少动画支持,让多个网站保持一致。

🔌 框架适配 — 原生链接和标题无需 Docusaurus 即可使用;需要时可通过 LaikitProvider 接入宿主路由、标题渲染和翻译。

🌐 中英双语 — 内置英文和简体中文,覆盖组件库自身的标签;应用内容由调用方传入。

快速开始

支持 React 18.3.1 和 React 19。开发需要 Node.js 20.19+;CI 使用 Node.js 24。

npm install @lailai0916/ui react react-dom
import { Button, LaikitProvider, TitleCard } from '@lailai0916/ui';
import '@lailai0916/ui/theme.css';
import '@lailai0916/ui/styles.css';

export function App() {
  return (
    <LaikitProvider locale="zh-Hans">
      <TitleCard title="欢迎">
        <Button onClick={() => alert('你好!')}>打个招呼</Button>
      </TitleCard>
    </LaikitProvider>
  );
}

在应用入口按上述顺序各导入一次 CSS。组件库不安装全局 CSS reset,也不覆盖宿主的正文字体。请在应用中设置基础排版和 box-sizing;主题提供 --lk-font-family、--lk-font-size 和 --lk-line-height 默认值。

在 <html> 上设置 data-theme="light" 或 data-theme="dark" 选择主题;未指定时,配色跟随系统。导入组件库后覆盖 --lk-* 变量即可定制颜色。独立 React 应用可使用 ThemeProvider 和 ThemeControl 保存主题偏好;Docusaurus 等已有主题管理的宿主继续使用自身的管理方式。 顶部栏可使用受控的 LanguageButton 与 ThemeButton;ThemeProvider mode="system" 在系统变化和重新加载时跟随系统,并允许当前页临时切换。

按组件导入可写为 import Button from '@lailai0916/ui/Button'。Page、Markdown、Field、Layout 和 Panel 子路径使用具名导出;所有组件也都支持从包根入口具名导入。

项目结构

ui/
├── demo/                           # 独立 React 示例
├── docs/                           # 接入和发布指南
├── scripts/                        # 构建和发布辅助脚本
├── src/                            # 组件、主题与适配层
├── tests/                          # 包入口与 SSR 测试
├── package.json                    # 依赖、入口和命令
└── vite.config.ts                  # ESM 与 CSS 构建

组件清单

分类导出
布局Card, TitleCard, LinkCard, DataCard, ShareCard, PageHeader, PageTitle, PageContent, PageContainer, SiteHeader, Stack, Cluster, Panel, PanelHeader, PanelBody, PanelFooter, Divider
控件Button, ButtonLink, CopyButton, IconButton, LanguageButton, ThemeButton, Segmented, Tabs, Slider, Switch, ThemeControl
图表Chart, Donut, Progress, Table
展示Alert, Dialog, Badge, Icon, IconBlock, Hint, Tooltip, Skeleton, DataState, TrafficLights, WindowBar, WindowPanel, MDTitle, Quote, GitHub, Avatar, Brand, EmptyState
表单Input, TextArea, Select, DropdownSelect, TextField, TextAreaField, SelectField, DropdownSelectField, PasswordInput, PasswordField, Checkbox, Radio
导航Paginator, SkipLink

数量不含 LaikitProvider、ThemeProvider、路由辅助组件、hooks 及 Tooltip.Label / Tooltip.Value。共享工具包括 useImageStatus、useMeasuredHeight、formatCompact 和 formatBytes。

Divider 提供不附带间距的横向或纵向分割线;列表和容器边框共用其 --lk-divider-color 与 --lk-divider-width 变量。具体约定见分割线说明。

Select 和 SelectField 保留原生 <select> 属性与选项子节点。DropdownSelect 和 DropdownSelectField 根据字符串值的 options 提供主题化弹层,支持键盘操作、表单提交和对话框。 具体行为见下拉选择契约和双语示例。

接入指南 说明路由适配、服务端渲染、主题定制和组件约定。交互示例 在不依赖 Docusaurus 的环境中展示全部组件。

完整的使用文档包含组件预览、API、主题定制和维护发布流程。

开发

git clone https://github.com/lailai0916/ui.git
cd ui
npm ci
npm run dev
npm run check

npm run check 验证格式、lint、类型、发布产物、服务端渲染测试和示例构建。npm run build 将包输出到 dist/;npm run build:demo 将示例输出到 demo-dist/。另见发布说明和贡献指南。

推送到 main 后,通过验证的新稳定版本会经 npm Trusted Publishing 自动发布。推送前同步更新 package.json 和 package-lock.json 的版本号,并补充更新日志。已经发布的版本会跳过;各网站仍需更新依赖并重新部署。

许可协议

本项目代码采用 MIT 许可协议。

版本与发布记录

@lailai0916/ui 共发布 24 个版本,首次发布于 2026/09/15;过去 12 个月发布了 24 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.3.19latest2026/11/011 天前
0.3.182026/11/012 天前
0.3.172026/11/012 天前
0.3.162026/11/012 天前
0.3.152026/10/312 天前
0.3.142026/10/313 天前

关于 @lailai0916/ui 的常见问题

@lailai0916/ui 是什么?

为来来网站共享React组件和设计令牌。

如何安装 @lailai0916/ui?

在项目目录运行 npm install @lailai0916/ui,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(^18.3.1 || ^19.0.0)、react-dom(^18.3.1 || ^19.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@lailai0916/ui 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@lailai0916/ui 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@lailai0916/ui 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.19。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@lailai0916/ui 可以商用吗?

@lailai0916/ui 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@lailai0916/ui 还在维护吗?

最新版本 0.3.19 发布于 2026/11/01(1 天前);至今共发布 24 个版本,其中过去 12 个月发布了 24 个;首次发布于 2026/09/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。