From 8e51a55a18fff55928990fe72a9f4b753ca3d281 Mon Sep 17 00:00:00 2001
From: Tevin <tingquanren@163.com>
Date: Tue, 07 Apr 2026 15:58:08 +0800
Subject: [PATCH] config: 添加 Playwright MCP 配置和 Ant Design v6 迁移文档

---
 .mcp.json                  |    9 +
 antd-migration-v6.zh-CN.md |  389 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 398 insertions(+), 0 deletions(-)

diff --git a/.mcp.json b/.mcp.json
new file mode 100644
index 0000000..08a2ee7
--- /dev/null
+++ b/.mcp.json
@@ -0,0 +1,9 @@
+{
+  "mcpServers": {
+    "playwright": {
+      "command": "npx",
+      "args": ["@playwright/mcp", "start", "--port", "9090"],
+      "description": "Playwright browser automation for component testing"
+    }
+  }
+}
diff --git a/antd-migration-v6.zh-CN.md b/antd-migration-v6.zh-CN.md
new file mode 100644
index 0000000..ca9c3c7
--- /dev/null
+++ b/antd-migration-v6.zh-CN.md
@@ -0,0 +1,389 @@
+---
+group:
+  title: 迁移
+  order: 2
+order: 0
+title: 从 v5 到 v6
+---
+
+本文档将帮助你从 antd `5.x` 版本升级到 antd `6.x` 版本。本次升级为一次技术升级,虽然组件 API 保持兼容,但在升级前您需要确保您的环境满足新的要求。
+
+## 升级准备
+
+1. 请先升级到 **v5 最新版本**,按照控制台 warning 信息处理已废弃 API。
+2. 确认项目可以运行在 **React 18 及以上**版本,v6 不再支持 React 17 及以下。
+3. v6 仅支持现代浏览器,并默认使用 **CSS variables**,因此不再支持 IE。
+
+```bash
+npm install --save antd@6
+# 或
+yarn add antd@6
+# 或
+pnpm add antd@6
+```
+
+## v6 有哪些不兼容的变化
+
+### React 版本支持调整
+
+- `antd@6` 要求 React 版本 >= 18,不再支持 React 17 及以下。
+- 不再需要 `@ant-design/v5-patch-for-react-19` 来兼容 React 19,如果使用可以移除该依赖。
+
+```diff
+- import '@ant-design/v5-patch-for-react-19';
+```
+
+### @ant-design/icons 版本升级
+
+- `antd@6` 要求 `@ant-design/icons` 版本 >= 6.0.0。
+- ⚠️ **重要**:`@ant-design/icons@6` 与 `antd@5` 不兼容,请确保同时升级两个包。
+- 如果你的项目显式依赖 `@ant-design/icons`,需要同步升级到 v6 版本。
+
+```bash
+npm install --save @ant-design/icons@6
+# 或
+yarn add @ant-design/icons@6
+# 或
+pnpm add @ant-design/icons@6
+```
+
+如果你在升级过程中遇到构建错误,请检查 `@ant-design/icons` 版本是否与 `antd` 版本匹配。
+
+### DOM 调整
+
+- v6 对大量组件的 DOM 结构进行了升级和优化,以提升可维护性和一致性。
+- 对于大多数正常使用 antd 样式的项目,这不会产生影响。
+- ⚠️ 如果你的项目中存在针对组件内部 DOM 节点的自定义样式(例如依赖特定选择器或层级结构),升级后可能需要手动检查并调整样式。
+
+### API 调整
+
+⚠️ 下列 API 已被标记为**废弃(Deprecated)**。尽管这些属性当前仍可使用,但控制台会提示弃用警告,并将在 7.0 中被移除。为保持代码的可维护性和兼容性,**建议尽快迁移到对应的替代属性**。
+
+- `Alert`
+  - `closeText` 弃用,变为 `closable.closeIcon`。
+  - `message` 弃用,变为 `title`。
+
+- `Anchor`
+  - `Anchor children` 弃用,变为 `items`。
+
+- `AutoComplete`
+  - `dropdownMatchSelectWidth` 弃用,变为 `popupMatchSelectWidth`。
+  - `dropdownStyle` 弃用,变为 `styles.popup.root`。
+  - `dropdownClassName` 弃用,变为 `classNames.popup.root`。
+  - `popupClassName` 弃用,变为 `classNames.popup.root`。
+  - `dropdownRender` 弃用,变为 `popupRender`。
+  - `onDropdownVisibleChange` 弃用,变为 `onOpenChange`。
+  - `dataSource` 弃用,变为 `options`。
+
+- `Avatar.Group`
+  - `maxCount` 弃用,变为 `max={{ count: number }}`。
+  - `maxStyle` 弃用,变为 `max={{ style: CSSProperties }}`。
+  - `maxPopoverPlacement` 弃用,变为 `max={{ popover: PopoverProps }}`。
+  - `maxPopoverTrigger` 弃用,变为 `max={{ popover: PopoverProps }}`。
+
+- `BackTop`
+  - `BackTop` 弃用,变为 `FloatButton.BackTop`。
+
+- `Breadcrumb`
+  - `routes` 弃用,变为 `items`。
+  - `Breadcrumb.Item` 和 `Breadcrumb.Separator` 弃用,变为 `items`。
+
+- `Button.Group`
+  - `Button.Group` 弃用,变为 `Space.Compact`。
+
+- `Button`
+  - `iconPosition` 弃用,变为 `iconPlacement`。
+
+- `Calendar`
+  - `dateFullCellRender` 弃用,变为 `fullCellRender`。
+  - `dateCellRender` 弃用,变为 `cellRender`。
+  - `monthFullCellRender` 弃用,变为 `fullCellRender`。
+  - `monthCellRender` 弃用,变为 `cellRender`。
+
+- `Card`
+  - `headStyle` 弃用,变为 `styles.header`。
+  - `bodyStyle` 弃用,变为 `styles.body`。
+  - `bordered` 弃用,变为 `variant`。
+
+- `Carousel`
+  - `dotPosition` 弃用,变为 `dotPlacement`。
+
+- `Cascader`
+  - `dropdownClassName` 弃用,变为 `classNames.popup.root`。
+  - `dropdownStyle` 弃用,变为 `styles.popup.root`。
+  - `dropdownRender` 弃用,变为 `popupRender`。
+  - `dropdownMenuColumnStyle` 弃用,变为 `popupMenuColumnStyle`。
+  - `onDropdownVisibleChange` 弃用,变为 `onOpenChange`。
+  - `onPopupVisibleChange` 弃用,变为 `onOpenChange`。
+  - `bordered` 弃用,变为 `variant`。
+
+- `Collapse`
+  - `destroyInactivePanel` 弃用,变为 `destroyOnHidden`。
+  - `expandIconPosition` 弃用,变为 `expandIconPlacement`。
+
+- `Collapse.Panel`
+  - `disabled` 弃用,变为 `collapsible="disabled"`。
+
+- `ConfigProvider`
+  - `dropdownMatchSelectWidth` 弃用,变为 `popupMatchSelectWidth`。
+
+- `DatePicker.RangePicker`
+  - `dropdownClassName` 弃用,变为 `classNames.popup.root`。
+  - `popupClassName` 弃用,变为 `classNames.popup.root`。
+  - `popupStyle` 弃用,变为 `styles.popup.root`。
+  - `bordered` 弃用,变为 `variant`。
+  - `onSelect` 弃用,变为 `onCalendarChange`。
+
+- `DatePicker`
+  - `dropdownClassName` 弃用,变为 `classNames.popup.root`。
+  - `popupClassName` 弃用,变为 `classNames.popup.root`。
+  - `popupStyle` 弃用,变为 `styles.popup.root`。
+  - `bordered` 弃用,变为 `variant`。
+  - `onSelect` 弃用,变为 `onCalendarChange`。
+
+- `Descriptions`
+  - `labelStyle` 弃用,变为 `styles.label`。
+  - `contentStyle` 弃用,变为 `styles.content`。
+
+- `Divider`
+  - `type` 弃用,变为 `orientation`。
+  - `orientationMargin` 弃用,变为 `styles.content.margin`。
+
+- `Drawer`
+  - `headerStyle` 弃用,变为 `styles.header`。
+  - `bodyStyle` 弃用,变为 `styles.body`。
+  - `footerStyle` 弃用,变为 `styles.footer`。
+  - `contentWrapperStyle` 弃用,变为 `styles.wrapper`。
+  - `maskStyle` 弃用,变为 `styles.mask`。
+  - `drawerStyle` 弃用,变为 `styles.section`。
+  - `destroyInactivePanel` 弃用,变为 `destroyOnHidden`。
+  - `width` 弃用,变为 `size`。
+  - `height` 弃用,变为 `size`。
+
+- `Dropdown.Button`
+  - `Dropdown.Button` 弃用,变为 `Space.Compact + Dropdown + Button`。
+
+- `Dropdown`
+  - `dropdownRender` 弃用,变为 `popupRender`。
+  - `destroyPopupOnHide` 弃用,变为 `destroyOnHidden`。
+  - `overlayClassName` 弃用,变为 `classNames.root`。
+  - `overlayStyle` 弃用,变为 `styles.root`。
+  - `placement: xxxCenter` 弃用,变为 `placement: xxx`。
+
+- `Empty`
+  - `imageStyle` 弃用,变为 `styles.image`。
+
+- `FloatButton`
+  - `description` 弃用,变为 `content`。
+
+- `Image`
+  - `wrapperStyle` 弃用,变为 `styles.root`。
+  - `visible` 弃用,变为 `open`。
+  - `onVisibleChange` 弃用,变为 `onOpenChange`。
+  - `maskClassName` 弃用,变为 `classNames.cover`。
+  - `rootClassName` 弃用,变为 `classNames.root`。
+  - `toolbarRender` 弃用,变为 `actionsRender`。
+
+- `Input.Group`
+  - `Input.Group` 弃用,变为 `Space.Compact`。
+
+- `InputNumber`
+  - `bordered` 弃用,变为 `variant`。
+  - `addonAfter` 弃用,变为 `Space.Compact`。
+  - `addonBefore` 弃用,变为 `Space.Compact`。
+
+- `Mentions`
+  - `Mentions.Option` 弃用,变为 `options`。
+
+- `Menu`
+  - `children` 弃用,变为 `items`。
+
+- `Modal`
+  - `bodyStyle` 弃用,变为 `styles.body`。
+  - `maskStyle` 弃用,变为 `styles.mask`。
+  - `destroyOnClose` 弃用,变为 `destroyOnHidden`。
+
+- `Notification`
+  - `btn` 弃用,变为 `actions`。
+  - `message` 弃用,变为 `title`。
+
+- `Progress`
+  - `strokeWidth` 弃用,变为 `size`。
+  - `width` 弃用,变为 `size`。
+  - `trailColor` 弃用,变为 `railColor`。
+  - `gapPosition` 弃用,变为 `gapPlacement`。
+
+- `Select`
+  - `dropdownMatchSelectWidth` 弃用,变为 `popupMatchSelectWidth`。
+  - `dropdownStyle` 弃用,变为 `styles.popup.root`。
+  - `dropdownClassName` 弃用,变为 `classNames.popup.root`。
+  - `popupClassName` 弃用,变为 `classNames.popup.root`。
+  - `dropdownRender` 弃用,变为 `popupRender`。
+  - `onDropdownVisibleChange` 弃用,变为 `onOpenChange`。
+  - `bordered` 弃用,变为 `variant`。
+
+- `Slider`
+  - `tooltipPrefixCls` 弃用,变为 `tooltip.prefixCls`。
+  - `getTooltipPopupContainer` 弃用,变为 `tooltip.getPopupContainer`。
+  - `tipFormatter` 弃用,变为 `tooltip.formatter`。
+  - `tooltipPlacement` 弃用,变为 `tooltip.placement`。
+  - `tooltipVisible` 弃用,变为 `tooltip.open`。
+
+- `Space.Compact`
+  - `direction` 弃用,变为 `orientation`。
+
+- `Space`
+  - `direction` 弃用,变为 `orientation`。
+  - `split` 弃用,变为 `separator`。
+
+- `Splitter`
+  - `layout` 弃用,变为 `orientation`。
+
+- `Countdown`
+  - `<Statistic.Countdown />` 弃用,变为 `<Statistic.Timer type="countdown" />`。
+
+- `Statistic`
+  - `valueStyle` 弃用,变为 `styles.content`。
+
+- `Steps`
+  - `labelPlacement` 弃用,变为 `titlePlacement`。
+  - `progressDot` 弃用,变为 `type="dot"`。
+  - `direction` 弃用,变为 `orientation`。
+  - `items.description` 弃用,变为 `items.content`。
+
+- `Table`
+  - `pagination.position` 弃用,变为 `pagination.placement`。
+  - `onSelectInvert` 弃用,变为 `onChange`。
+  - `filterDropdownOpen` 弃用,变为 `filterDropdownProps.open`。
+  - `onFilterDropdownOpenChange` 弃用,变为 `filterDropdownProps.onOpenChange`。
+  - `filterCheckall` 弃用,变为 `locale.filterCheckAll`。
+
+- `Tabs`
+  - `popupClassName` 弃用,变为 `classNames.popup`。
+  - `tabPosition` 弃用,变为 `tabPlacement`。
+  - `destroyInactiveTabPane` 弃用,变为 `destroyOnHidden`。
+  - `Tabs.TabPane` 弃用,变为 `items`。
+
+- `Tag`
+  - `bordered={false}` 弃用,变为 `variant="filled"`。
+  - `color="xxx-inverse"` 弃用,变为 `variant="solid"`。
+
+- `TimePicker`
+  - `addon` 弃用,变为 `renderExtraFooter`。
+
+- `Timeline`
+  - `Timeline.Item` 弃用,变为 `items`。
+  - `pending` 弃用,变为 `items`。
+  - `pendingDot` 弃用,变为 `items`。
+  - `mode=left|right` 弃用,变为 `mode=start|end`。
+
+- `Tooltip`
+  - `overlayStyle` 弃用,变为 `styles.root`。
+  - `overlayInnerStyle` 弃用,变为 `styles.container`。
+  - `overlayClassName` 弃用,变为 `classNames.root`。
+  - `destroyTooltipOnHide` 弃用,变为 `destroyOnHidden`。
+
+- `Transfer`
+  - `listStyle` 弃用,变为 `styles.section`。
+  - `operationStyle` 弃用,变为 `styles.actions`。
+  - `operations` 弃用,变为 `actions`。
+
+- `TreeSelect`
+  - `dropdownMatchSelectWidth` 弃用,变为 `popupMatchSelectWidth`。
+  - `dropdownStyle` 弃用,变为 `styles.popup.root`。
+  - `dropdownClassName` 弃用,变为 `classNames.popup.root`。
+  - `popupClassName` 弃用,变为 `classNames.popup.root`。
+  - `dropdownRender` 弃用,变为 `popupRender`。
+  - `onDropdownVisibleChange` 弃用,变为 `onOpenChange`。
+  - `bordered` 弃用,变为 `variant`。
+
+### 弹层类组件(Modal、Drawer 等)
+
+- 新增 `mask` 蒙层功能,并支持模糊效果。
+- 默认开启,可通过以下方式关闭模糊:
+
+```tsx
+import { ConfigProvider, Drawer, Modal } from 'antd';
+
+export default () => (
+  <ConfigProvider
+    modal={{
+      mask: {
+        blur: false,
+      },
+    }}
+    drawer={{
+      mask: {
+        blur: false,
+      },
+    }}
+  >
+    <Modal />
+    <Drawer />
+  </ConfigProvider>
+);
+```
+
+### Tag margin 调整
+
+v6 移除了 `Tag` 组件末尾的默认外边距(以前 Tag 末尾会额外留出一段 `margin-inline-end`)。如果你的布局或自定义样式依赖这一行为,请使用 `ConfigProvider` 的 `tag.styles` 进行补充:
+
+```tsx
+import { ConfigProvider, Tag } from 'antd';
+
+export default () => (
+  <ConfigProvider
+    tag={{
+      styles: {
+        root: {
+          marginInlineEnd: 8,
+        },
+      },
+    }}
+  >
+    <Tag>Tag A</Tag>
+    <Tag>Tag B</Tag>
+    <Tag>Tag C</Tag>
+  </ConfigProvider>
+);
+```
+
+### Form `onFinish` 取值不再包含 Form.List 全部数据
+
+v5 版本中,Form.List 会被认为是一个 Field,以至于提交时会包含 Form.List 下的所有数据结构即便其子元素的 Form.Item 没有注册过。在 v6 中,Form.List 不再包含未注册的子项数据。因而你不再需要通过 `getFieldsValue({ strict: true })` 来过滤未注册字段。
+
+```diff
+    const onFinish = (values) => {
+--    const realValues = getFieldsValue({ strict: true });
+++    const realValues = values;
+
+      // ...
+    }
+
+    <Form onFinish={onFinish} />
+```
+
+### 浏览器支持调整
+
+- 默认开启 **CSS variables**,仅支持现代浏览器。
+- IE 浏览器不再支持,部分旧版国产浏览器可能存在兼容性问题,请在应用发布前确认目标浏览器的支持情况。
+
+### 原子级通过别名安装 v6
+
+- 如果你需要控制升级的影响范围,可以尝试[原子级迁移](https://github.com/ant-design/ant-design/discussions/55957)方案。请注意,这并非我们推荐的升级路径。
+
+## 升级影响排查 Checklist
+
+为了确保升级到 v6 后项目正常运行,请参考以下检查清单逐项确认:
+
+- **React 版本**:确认项目使用的 React 版本 >= 18,并且不再引入 `@ant-design/v5-patch-for-react-19`。
+- **@ant-design/icons 版本**:确认 `@ant-design/icons` 版本已升级到 >= 6.0.0,与 `antd@6` 匹配。
+- **浏览器兼容性**:确认目标用户浏览器均为现代浏览器,且支持 CSS variables。
+- **自定义样式检查**:如果有针对组件内部 DOM 节点的 CSS 定制,验证在 v6 下是否依然生效。
+- **弹层蒙层配置**:Modal、Drawer 等弹层是否需要关闭 `mask` 的模糊效果,如不需要可保持默认。
+- **构建工具配置**:确认升级后构建无报错,CSS 变量和 CSS-in-JS 能正常工作。
+- **控制台 warning**:运行应用并观察控制台,处理所有 `legacy API` 的提示。
+
+## 遇到问题
+
+如果您在升级过程中遇到问题,请到 [GitHub issues](https://new-issue.ant.design/) 进行反馈。我们会尽快响应并在文档中完善相关说明。

--
Gitblit v1.9.1