安装
通过安装软件包并导入组件来开始使用 Lark。
NPM 注册表
@lark-ui/core 包已发布到公共 npm 注册表。安装无需任何特殊配置。
安装软件包
使用你偏好的包管理器安装 Lark。当前版本为 v3.0.2。
npm
npm install @lark-ui/core
pnpm
pnpm add @lark-ui/core
yarn
yarn add @lark-ui/core
peer 依赖
Lark 需要以下 peer 依赖。大多数 React 项目中已经安装了它们:
# Required peer dependencies
pnpm add react react-dom @phosphor-icons/react
导入组件
从主包导入组件,或使用按需导入以获得更好的 tree-shaking 效果:
主包导入
import { Button, Input, LayerCard } from "@lark-ui/core";
按需导入(推荐)
import { Button } from "@lark-ui/core/components/button";
import { Input } from "@lark-ui/core/components/input";
Base UI 基础组件
Lark 构建在 Base UI 之上,这是一个无样式、无障碍的 React 组件库。对于需要访问底层基础组件的高级用例,Lark 同时提供统一导出和按需导出两种方式,重新导出了全部 37 个 Base UI 组件:
统一导出(便捷)
// Import multiple primitives at once
import { Popover, Slider, Accordion } from "@lark-ui/core/primitives";
按需导出(性能更优,推荐)
// Import individual primitives for better tree-shaking
import { Popover } from "@lark-ui/core/primitives/popover";
import { Slider } from "@lark-ui/core/primitives/slider";
import { Accordion } from "@lark-ui/core/primitives/accordion";
按需导出只会打包你真正使用的基础组件,因此产出的包体积更小。
可用的基础组件(共 37 个): 布局 · Accordion、Collapsible、 Separator、ScrollArea、Toolbar——浮层 · AlertDialog、Dialog、Popover、 PreviewCard、Tooltip、Toast——菜单 · Menu、Menubar、ContextMenu、 NavigationMenu——表单控件 · Autocomplete、Button、Checkbox、 CheckboxGroup、Combobox、Input、NumberField、Radio、RadioGroup、Select, Slider、Switch、Toggle、ToggleGroup——表单结构 · Field、Fieldset、Form—— 展示 · Avatar、Meter、Progress、Tabs
注意: 请优先使用已有的、带样式的 Lark 组件。基础组件适用于构建 Lark 中 尚不存在的自定义组件,或需要对样式和行为进行细粒度控制的场景。
导入样式
Lark 根据你的搭建方式提供两种 CSS 分发方案:
面向 Tailwind CSS 用户(推荐)
如果你的应用使用 Tailwind CSS,请把 Lark 的源文件加入内容配置,并导入样式。导入顺序很重要——Lark 样式必须位于 @import "tailwindcss" 之前,这样 Lark 的主题 token 才会先被注册:
重要: Tailwind CSS v4 默认不会扫描 node_modules/。你
必须添加 @source 指令,让 Tailwind 能发现 Lark 组件使用的工具类。
否则组件渲染时可能缺少样式(例如对话框无法居中)。
/* app.css or main.css */
@source "../node_modules/@lark-ui/core/dist/**/*.{js,jsx,ts,tsx}";
@import "@lark-ui/core/styles/tailwind";
@import "tailwindcss";
/* Your custom styles */
@source 路径相对于你的 CSS 文件。请根据项目结构调整——例如
如果 CSS 位于 src/styles/,你可能需要 ../../node_modules/@lark-ui/core/dist/**/*.{"{"}js,jsx,ts,tsx{"}"}。
注意:你也可以使用默认导出 @lark-ui/core/styles,它等价于 styles/tailwind。
面向非 Tailwind 用户(独立构建)
如果你的应用不使用 Tailwind CSS,请使用包含全部已编译样式的独立构建:
// In your app entry point (e.g., main.tsx, index.tsx)
import "@lark-ui/core/styles/standalone";
独立构建已预编译所有 Tailwind 工具类和 Lark 组件样式,无需任何 Tailwind 配置!
隔离你的应用根节点
Lark 的浮层组件(Select、Combobox、Dropdown、Popover、Tooltip、Dialog 等)会把弹层渲染到 document.body 末尾的 portal 中。由于 Lark 不会给这些弹层设置 z-index,你自己布局中任何正值的 z-index(例如吸顶头部)都可能覆盖在打开的弹层之上。
为避免这种情况,请按照 Base UI 的建议 在应用的根元素上添加 isolation: isolate:
/* The element that wraps your entire app, e.g. #root or #app */
.root {
isolation: isolate;
}
或者使用 Tailwind:
<div id="root" className="isolate">
{/* Your app */}
</div>
这会为你的应用内容创建一个独立的层叠上下文,因此无论布局内部使用了怎样的 z-index 值,通过 portal 渲染的弹层始终显示在最上层。请把它加在包裹应用内容的元素上,而不是 <body> 上——隔离 body 会让 portal 处于同一个层叠上下文中,从而失去意义。
如果你发现自己在不断调高 z-index,好让 Lark 弹层显示在自己的 UI 之上,
那说明某个地方出了问题。解决办法几乎总是像上面那样隔离应用根节点,而不是提高
弹层的 z-index 或去定位 Base UI 的内部 data 属性。
使用示例
下面是在 Tailwind CSS 中使用 Lark 组件的完整示例:
CSS 文件(app.css)
@source "../node_modules/@lark-ui/core/dist/**/*.{js,jsx,ts,tsx}";
@import "@lark-ui/core/styles/tailwind";
@import "tailwindcss";
注意:@source 路径相对于你的 CSS 文件。请根据项目结构调整。
组件文件(App.tsx)
import { Button, Input, LayerCard } from "@lark-ui/core";
import "./app.css";
export default function App() {
return (
<LayerCard className="p-6">
<h1 className="mb-4 text-2xl font-bold">Welcome to Lark</h1>
<Input placeholder="Enter your name..." className="mb-4" />
<Button variant="primary">Submit</Button>
</LayerCard>
);
}
区块与组件
Lark 为你的应用提供两类构件:
组件(NPM 导出)
组件以 NPM 导出的形式发布,可以直接从包中导入。这些是核心 UI 基础元素,例如 Button、Input 和 Dialog。
import { Button, Input, Dialog } from "@lark-ui/core";
当你需要风格统一、预先配好样式且能与应用无缝集成的 UI 基础元素时,请使用组件。组件有版本管理、支持 tree-shaking,并能自动获得更新。
区块(CLI 安装)
区块是更高层级的组合实现(例如 PageHeader 和 ResourceListPage),通过 Lark CLI 安装。区块让你完全拥有代码,可以按自身需求自由定制。
# Initialize Lark configuration
npx @lark-ui/core init
# List available blocks
npx @lark-ui/core blocks
# Install a block
npx @lark-ui/core add PageHeader
安装完成后,区块会留在你的项目中(例如 src/components/lark/),可按需定制。CLI 会自动把相对路径的导入转换为 @lark-ui/core,实现无缝集成。
import { PageHeader } from "src/components/lark/page-header/page-header";
- 你需要超出属性范围的组件定制
- 你希望完全掌控实现
- 你要构建应用特定的布局
- 对于某些代码,你更偏好复制粘贴而不是依赖包
工具函数
Lark 还导出了一些常用任务的工具函数:
import { cn, safeRandomId, LinkProvider } from "@lark-ui/core";
// Merge class names with Tailwind
const className = cn("base-class", condition && "conditional-class");
// Generate safe random IDs
const id = safeRandomId();
// Configure link component for your framework (maps href to your router)
<LinkProvider component={YourAppLink}>{/* Your app */}</LinkProvider>;