A CLAUDE.md is just a markdown file at the root of your repo. Copy the content below into your own project's CLAUDE.md to give your agent the same context.
npx versuz@latest install ant-design-ant-design --kind=claude-mdcurl -o CLAUDE.md https://raw.githubusercontent.com/ant-design/ant-design/HEAD/CLAUDE.md# Ant Design 项目开发指南
> 本文件为 AI 编程助手提供项目上下文和开发规范。
## 项目信息
- React 组件库,发布为 npm 包 `antd`
- 使用 TypeScript 和 React 开发
- 采用 CSS-in-JS 架构(基于 `@ant-design/cssinjs`)
- 支持 Design Token 主题系统、暗色模式、RTL 布局、SSR、国际化(150+ 语言)
### 项目结构
```
ant-design/
├── components/ # 组件源代码(84+ 组件)
│ ├── component-name/ # 单个组件目录
│ │ ├── ComponentName.tsx # 主组件实现
│ │ ├── demo/ # 演示代码(*.tsx 和 *.md)
│ │ ├── style/ # 样式系统(index.ts / token.ts)
│ │ ├── __tests__/ # 单元测试
│ │ ├── index.en-US.md # 英文文档
│ │ ├── index.zh-CN.md # 中文文档
│ │ └── index.tsx # 导出入口
│ ├── _util/ # 共享工具函数库
│ ├── theme/ # 主题系统
│ └── locale/ # 国际化文本
├── tests/ # 测试工具和共享测试
├── docs/ # 站点文档
├── CHANGELOG.zh-CN.md # 中文更新日志
└── CHANGELOG.en-US.md # 英文更新日志
```
---
## 通用编码规范
- 判断数据类型时,优先使用 `components/_util/is.ts` 中已有的方法,例如 `isNumber`、`isString`、`isPlainObject`、`isFunction`、`isThenable`、`isPrimitive`、`isNonNullable`。
- 仅当 `components/_util/is.ts` 中没有合适方法,或当前场景需要更严格、更特殊的判断逻辑时,再使用内联 `typeof`、`instanceof` 等判断方式。
---
## Demo 导入规范
- 常规 `components/**/demo/` 文件在引入 Ant Design 组件、组件内部模块、工具方法、变量、类型定义时,一律使用绝对路径导入,不使用相对路径导入。
- `components/**/demo/_semantic*.tsx` 属于语义文档专用 demo,是例外场景:允许通过相对路径引用 `.dumi/hooks/useLocale`、`.dumi/theme/common/*` 等站点侧辅助模块。
- `.dumi/` 目录内部的站点实现文件可按现有目录结构使用相对路径引用本目录模块;当引用仓库内 Ant Design 组件入口时,优先使用项目公开入口或已配置别名。
- 允许的导入形式应优先使用项目公开入口或已配置别名,例如:`antd`、`antd/es/*`、`antd/lib/*`、`antd/locale/*`、`@@/*`。
- `.dumi/*` 不是仓库通用的 TS 路径别名;如需引用 `.dumi` 内部模块,请按文件位置使用相对路径。
- 常规 demo 文件中,禁止使用 `..`、`../xxx`、`../../xxx`、`./xxx` 这类相对路径去引用组件实现、内部模块、方法、变量、类型,包含跨 demo、跨目录复用的场景。
- 常规 demo 与 `.dumi` 文件之间不要互相相对引用(`_semantic*.tsx` 等站点语义 demo 复用 `.dumi` 辅助模块除外)。如果需要复用少量逻辑,优先内联,或提取到可通过绝对路径访问的公共位置。
## Test 导入规范
- 本规范适用于 `components/**/__tests__/` 下的测试文件。
- 在这些目录下引入 Ant Design 组件,或引入组件内部模块、工具方法、变量、类型定义时,一律使用相对路径导入,不使用绝对路径导入。
- 测试文件应优先从当前组件目录、相邻内部模块或共享测试工具目录通过相对路径引用,例如:`..`、`../index`、`../xxx`、`../../_util/*`、`../../../tests/shared/*`。
- 禁止在 `__tests__` 目录下使用 `antd`、`antd/es/*`、`antd/lib/*`、`antd/locale/*`、`.dumi/*`、`@@/*` 这类绝对路径或别名路径去引用仓库内代码。
- 如需引用仓库外第三方依赖,仍按依赖包名正常导入,例如 `react`、`@testing-library/react`、`dayjs`。
---
## 文档规范
### API 表格格式
| Property | Description | Type | Default | Version |
| -------- | ----------- | ---------------------- | --------- | ------- |
| disabled | 是否禁用 | boolean | false | - |
| type | 按钮类型 | `primary` \| `default` | `default` | - |
- 字符串默认值用反引号,布尔/数字直接写,无默认值用 `-`
- API 按字母顺序排列,新增属性需声明版本号
### 文档锚点 ID 规范
- 中文标题必须手动指定英文锚点:`## 中文标题 {#english-anchor-id}`
- 锚点 ID 符合 `^[a-zA-Z][\w-:\.]*$`,长度不超过 32 字符
- FAQ 章节下的锚点必须以 `faq-` 为前缀
- 同一问题的中英文锚点保持一致
### 国际化规范
- 本地化配置文件:`components/locale/`,命名如 `zh_CN.ts`、`en_US.ts`
- 添加或修改本地化配置时,需同时修改所有语言文件
- 类型入口:`components/locale/index.tsx`
---
## PR 规范
### 标题与内容
- PR 标题始终使用英文,格式:`类型: 简短描述`
- PR 内容默认使用英文,可根据用户语言习惯决定使用中文或英文
- 示例:`fix: fix button style issues in Safari browser`
### PR 模板(必须使用)
- 英文模板:`.github/PULL_REQUEST_TEMPLATE.md`
- 中文模板:`.github/PULL_REQUEST_TEMPLATE_CN.md`
- 使用 `gh pr create` 创建 PR 时,必须手动填充模板内容
### 分支策略
- 新特性开发需基于 `feature` 分支,PR 目标分支也需为 `feature`
- 其余提交至 `master` 分支
- 分支命名规范:
- 功能开发:`feat/description-of-feature`
- 问题修复:`fix/issue-number-or-description`
- 文档更新:`docs/what-is-changed`
- 代码重构:`refactor/what-is-changed`
### PR 改动类型
- 🆕 新特性提交
- 🐞 Bug 修复
- 📝 文档改进
- 📽️ 演示代码改进
- 💄 样式/交互改进
- 🤖 TypeScript 更新
- 📦 包体积优化
- ⚡️ 性能优化
- 🌐 国际化改进
---
## Changelog 规范
### 适用范围
- 本节仅适用于用户明确要求收集/生成 changelog、准备 release PR、版本发布,或正在编辑 `CHANGELOG.en-US.md` / `CHANGELOG.zh-CN.md` 的场景。
- 普通功能、修复、文档、demo PR 不要求直接修改 `CHANGELOG.en-US.md` / `CHANGELOG.zh-CN.md`;代码 CR 时也不应仅因缺少 CHANGELOG 文件改动而提出 finding。
- 普通 PR 如需填写 PR 模板中的 Change Log,仅描述本 PR 对用户或开发者的影响,或按模板填写 `N/A` / `No changelog required` / `无需更新日志`。正式 CHANGELOG 由 release owner 在发布流程中统一整理。
### 核心原则
- 文件位置:`CHANGELOG.en-US.md` 和 `CHANGELOG.zh-CN.md`
- 必须同时提供中英文两个版本
- 忽略用户无感知的改动(内部重构、纯测试更新、工具链优化等)
- 描述"对开发者的影响",而非"具体的实现细节"
- 尽量给出 PR 链接,并统一添加贡献者链接
### 格式规范
#### 条目格式
- **Emoji 置顶**:每条以 Emoji 开头
- **不加冒号**:组件名后不使用英文冒号
- **每条必含组件名**:正文必须出现对应组件名
- **组件名不用反引号**:Modal、Button 等;属性名/API 用反引号
- **中英空格**:中文与英文、数字、链接之间保留一个空格
#### 句式
| 语言 | 格式 | 示例 |
| --- | --- | --- |
| 中文 | `Emoji 动词 组件名 描述`(动词在前) | `🐞 修复 Button 在暗色主题下 \`color\` 的问题。` |
| 英文 | `Emoji 动词 组件名 描述`(动词在前) | `🐞 Fix Button reversed \`hover\` colors in dark theme.` |
#### 分组逻辑
- 同一组件有 2 条以上改动时,使用 `- 组件名` 作为分类标题
- 单项改动直接写单行条目
### Emoji 规范
| Emoji | 用途 |
| ------ | ---------------------- |
| 🐞 | 修复 Bug |
| 💄 | 样式更新或 token 更新 |
| 🆕 | 新增特性 / 新增属性 |
| 🔥 | 极其值得关注的新增特性 |
| 🇺🇸🇨🇳🇬🇧 | 国际化改动 |
| 📖 📝 | 文档或网站改进 |
| ✅ | 新增或更新测试用例 |
| 🛎 | 更新警告/提示信息 |
| ⌨️ ♿ | 可访问性增强 |
| 🗑 | 废弃或移除 |
| 🛠 | 重构或工具链优化 |
| ⚡️ | 性能提升 |
每条 Changelog 仅选择一个 Emoji,不要在同一条目中叠加多个 Emoji。
编写 Changelog 时,请参考 `CHANGELOG.zh-CN.md` 和 `CHANGELOG.en-US.md` 中已有条目的格式。
---
## 参考资源
- [API Naming Rules](https://github.com/ant-design/ant-design/wiki/API-Naming-rules) - API 命名规范
- [轮值规则和版本发布流程](https://github.com/ant-design/ant-design/wiki/%E8%BD%AE%E5%80%BC%E8%A7%84%E5%88%99%E5%92%8C%E7%89%88%E6%9C%AC%E5%8F%91%E5%B8%83%E6%B5%81%E7%A8%8B) - 版本发布流程
- [Unique Panel Component](https://github.com/ant-design/ant-design/wiki/Unique-Panel-Component) - 独立面板组件规范