浏览代码

Merge branch 'main' into release

pointhalo 1 年之前
父节点
当前提交
9d2aed22ec
共有 100 个文件被更改,包括 628 次插入385 次删除
  1. 2 2
      .github/workflows/chromatic.yml
  2. 3 3
      .github/workflows/lighthouse.yml
  3. 3 3
      .github/workflows/publish.yml
  4. 2 2
      .github/workflows/release.yml
  5. 6 6
      .github/workflows/test-coverage.yml
  6. 2 2
      .github/workflows/test.yml
  7. 1 0
      .storybook/base/base.js
  8. 5 1
      CONTRIBUTING-en-US.md
  9. 1 1
      content/input/treeselect/index.md
  10. 22 22
      content/input/upload/index.md
  11. 14 14
      content/navigation/navigation/index-en-US.md
  12. 250 191
      content/navigation/navigation/index.md
  13. 1 1
      content/plus/chat/index-en-US.md
  14. 1 1
      content/plus/chat/index.md
  15. 8 0
      content/start/changelog/index-en-US.md
  16. 7 0
      content/start/changelog/index.md
  17. 37 8
      content/start/tailwind/index-en-US.md
  18. 38 8
      content/start/tailwind/index.md
  19. 42 0
      create_symlinks.sh
  20. 4 1
      gatsby-node.js
  21. 1 1
      lerna.json
  22. 6 5
      package.json
  23. 3 3
      packages/semi-animation-react/package.json
  24. 1 1
      packages/semi-animation-styled/package.json
  25. 1 1
      packages/semi-animation/package.json
  26. 1 1
      packages/semi-eslint-plugin/package.json
  27. 2 0
      packages/semi-foundation/cascader/foundation.ts
  28. 22 17
      packages/semi-foundation/image/previewImageFoundation.ts
  29. 8 8
      packages/semi-foundation/navigation/foundation.ts
  30. 6 4
      packages/semi-foundation/navigation/itemFoundation.ts
  31. 2 2
      packages/semi-foundation/package.json
  32. 13 0
      packages/semi-foundation/slider/foundation.ts
  33. 1 1
      packages/semi-icons-lab/package.json
  34. 1 1
      packages/semi-icons/package.json
  35. 1 1
      packages/semi-illustrations/package.json
  36. 2 2
      packages/semi-next/package.json
  37. 1 1
      packages/semi-rspack/package.json
  38. 1 1
      packages/semi-scss-compile/package.json
  39. 1 1
      packages/semi-theme-default/package.json
  40. 1 1
      packages/semi-ui/_base/_story/a11y.jsx
  41. 0 1
      packages/semi-ui/anchor/index-en-US.md
  42. 0 1
      packages/semi-ui/anchor/index.md
  43. 0 1
      packages/semi-ui/autoComplete/index-en-US.md
  44. 0 1
      packages/semi-ui/autoComplete/index.md
  45. 0 1
      packages/semi-ui/avatar/index-en-US.md
  46. 0 1
      packages/semi-ui/avatar/index.md
  47. 0 1
      packages/semi-ui/backtop/index-en-US.md
  48. 0 1
      packages/semi-ui/backtop/index.md
  49. 0 1
      packages/semi-ui/badge/index-en-US.md
  50. 0 1
      packages/semi-ui/badge/index.md
  51. 0 1
      packages/semi-ui/banner/index-en-US.md
  52. 0 1
      packages/semi-ui/banner/index.md
  53. 0 1
      packages/semi-ui/breadcrumb/index-en-US.md
  54. 0 1
      packages/semi-ui/breadcrumb/index.md
  55. 0 1
      packages/semi-ui/button/index-en-US.md
  56. 0 1
      packages/semi-ui/button/index.md
  57. 0 1
      packages/semi-ui/calendar/index-en-US.md
  58. 0 1
      packages/semi-ui/calendar/index.md
  59. 0 1
      packages/semi-ui/card/index-en-US.md
  60. 0 1
      packages/semi-ui/card/index.md
  61. 0 1
      packages/semi-ui/carousel/index-en-US.md
  62. 0 1
      packages/semi-ui/carousel/index.md
  63. 0 1
      packages/semi-ui/cascader/index-en-US.md
  64. 0 1
      packages/semi-ui/cascader/index.md
  65. 2 2
      packages/semi-ui/chat/index.tsx
  66. 0 1
      packages/semi-ui/checkbox/index-en-US.md
  67. 0 1
      packages/semi-ui/checkbox/index.md
  68. 0 1
      packages/semi-ui/collapse/index-en-US.md
  69. 0 1
      packages/semi-ui/collapse/index.md
  70. 0 1
      packages/semi-ui/collapsible/index-en-US.md
  71. 0 1
      packages/semi-ui/collapsible/index.md
  72. 0 1
      packages/semi-ui/configProvider/index-en-US.md
  73. 0 1
      packages/semi-ui/configProvider/index.md
  74. 11 9
      packages/semi-ui/datePicker/datePicker.tsx
  75. 0 1
      packages/semi-ui/datePicker/index-en-US.md
  76. 0 1
      packages/semi-ui/datePicker/index.md
  77. 0 1
      packages/semi-ui/descriptions/index-en-US.md
  78. 0 1
      packages/semi-ui/descriptions/index.md
  79. 0 1
      packages/semi-ui/divider/index-en-US.md
  80. 0 1
      packages/semi-ui/divider/index.md
  81. 0 1
      packages/semi-ui/dropdown/index-en-US.md
  82. 0 1
      packages/semi-ui/dropdown/index.md
  83. 0 1
      packages/semi-ui/empty/index-en-US.md
  84. 0 1
      packages/semi-ui/empty/index.md
  85. 90 0
      packages/semi-ui/form/_story/ArrayField/asyncNested.jsx
  86. 0 1
      packages/semi-ui/form/index-en-US.md
  87. 0 1
      packages/semi-ui/form/index.md
  88. 0 1
      packages/semi-ui/grid/index-en-US.md
  89. 0 1
      packages/semi-ui/grid/index.md
  90. 0 1
      packages/semi-ui/highlight/index-en-US.md
  91. 0 1
      packages/semi-ui/highlight/index.md
  92. 0 1
      packages/semi-ui/icons/index-en-US.md
  93. 0 1
      packages/semi-ui/icons/index.md
  94. 1 0
      packages/semi-ui/image/_story/image.stories.jsx
  95. 0 1
      packages/semi-ui/image/index-en-US.md
  96. 0 1
      packages/semi-ui/image/index.md
  97. 0 1
      packages/semi-ui/input/index-en-US.md
  98. 0 1
      packages/semi-ui/input/index.md
  99. 0 1
      packages/semi-ui/inputNumber/index-en-US.md
  100. 0 1
      packages/semi-ui/inputNumber/index.md

+ 2 - 2
.github/workflows/chromatic.yml

@@ -30,9 +30,9 @@ jobs:
         # Job steps
         steps:
             - uses: actions/checkout@v1
-            - uses: actions/setup-node@v3
+            - uses: actions/setup-node@v4
               with:
-                  node-version: '16'
+                  node-version: '20'
             - name: Install dependencies
               run: npx lerna@^6 bootstrap
             - name: Pre-build libs

+ 3 - 3
.github/workflows/lighthouse.yml

@@ -12,10 +12,10 @@ jobs:
         runs-on: ubuntu-latest
         steps:
             - uses: actions/checkout@v3
-            - name: Use Node.js 16
-              uses: actions/setup-node@v3
+            - name: Use Node.js 20
+              uses: actions/setup-node@v4
               with:
-                  node-version: 16
+                  node-version: 20
             - name: npm install, build
               run: |
                   npm i -g lerna@^6 gulp

+ 3 - 3
.github/workflows/publish.yml

@@ -16,10 +16,10 @@ jobs:
               with:
                   token: ${{ secrets.PAT }}
 
-            - name: Use Node.js 16
-              uses: actions/setup-node@v3
+            - name: Use Node.js 20
+              uses: actions/setup-node@v4
               with:
-                  node-version: 16
+                  node-version: 20
 
             - name: npm install
               run: npm i -g lerna@^4.0.0 && npm run bootstrap

+ 2 - 2
.github/workflows/release.yml

@@ -9,9 +9,9 @@ jobs:
         steps:
             - uses: actions/checkout@v3
             - name: release
-              uses: actions/setup-node@v3
+              uses: actions/setup-node@v4
               with:
-                  node-version: 16
+                  node-version: 20
             - run: |
                   npm i -g lerna@^6 && npm run bootstrap
                   node scripts/release.js

+ 6 - 6
.github/workflows/test-coverage.yml

@@ -15,9 +15,9 @@ jobs:
         runs-on: ubuntu-latest
         steps:
             - uses: actions/checkout@v3
-            - uses: actions/setup-node@v3
+            - uses: actions/setup-node@v4
               with:
-                  node-version: '16'
+                  node-version: '20'
             - name: Run install
               run: npm i -g lerna@^6 && npm run bootstrap
             - name: Run Jest test
@@ -32,9 +32,9 @@ jobs:
         runs-on: ubuntu-latest
         steps:
             - uses: actions/checkout@v3
-            - uses: actions/setup-node@v3
+            - uses: actions/setup-node@v4
               with:
-                  node-version: '16'
+                  node-version: '20'
             - name: Run install
               run: |
                   npm i -g lerna@^6
@@ -58,9 +58,9 @@ jobs:
         needs: [jest, cypress]
         steps:
             - uses: actions/checkout@v3
-            - uses: actions/setup-node@v3
+            - uses: actions/setup-node@v4
               with:
-                  node-version: '16'
+                  node-version: '20'
             - name: Download Jest coverage
               uses: actions/download-artifact@v3
               with:

+ 2 - 2
.github/workflows/test.yml

@@ -15,9 +15,9 @@ jobs:
         runs-on: ubuntu-latest
         steps:
             - uses: actions/checkout@v3
-            - uses: actions/setup-node@v3
+            - uses: actions/setup-node@v4
               with:
-                  node-version: '16'
+                  node-version: '20'
             - name: Run install
               run: npm i -g lerna@^6 && npm run bootstrap
             - name: Run Jest test

+ 1 - 0
.storybook/base/base.js

@@ -86,6 +86,7 @@ module.exports = {
         config.resolve.alias = {
             '@douyinfe/semi-foundation': resolve('packages/semi-foundation'),
             '@douyinfe/semi-icons': resolve('packages/semi-icons/src'),
+            '@douyinfe/semi-icons-lab': resolve('packages/semi-icons-lab/src'),
             '@douyinfe/semi-ui': resolve('packages/semi-ui'),
             '@douyinfe/semi-theme-default': resolve('packages/semi-theme-default'),
             '@douyinfe/semi-illustrations': resolve('packages/semi-illustrations/src'),

+ 5 - 1
CONTRIBUTING-en-US.md

@@ -22,8 +22,12 @@ cd semi-design
 git checkout -b <TOPIC_BRANCH_NAME>
 ```
 >Before installing the enviroment,make sure that there is a dependency of `lerna` and `yarn` locally, if not, should run:
+```base
+corepack enable
+```
+
 ```bash
-npm install --global lerna yarn
+npm install --global lerna
 ```
  - Install the dependencies
 ```bash

+ 1 - 1
content/input/treeselect/index.md

@@ -1420,7 +1420,7 @@ function Demo() {
 | filterTreeNode | 是否根据输入项进行筛选,默认用 `treeNodeFilterProp` 的值作为要筛选的 `TreeNodeData` 的属性值, data 参数自 v2.28.0 开始提供                         | boolean\| <ApiType detail='(inputValue: string, treeNodeString: string, data?: TreeNodeData) => boolean'>Function</ApiType> | false |
 | getPopupContainer  | 指定父级 DOM,弹层将会渲染至该 DOM 中,自定义需要设置 `position: relative` 这会改变浮层 DOM 树位置,但不会改变视图渲染位置。                                                                                       | function():HTMLElement | - |
 | insetLabel | 前缀标签别名,主要用于 Form                                                                                                                     | ReactNode | - |
-| labelEllipsis | 是否开启label的超出省略,默认虚拟化状态下开启                                                                                                   | boolean | false\|true | 
+| labelEllipsis | 是否开启label的超出省略,默认虚拟化状态下开启                                                                                                   | boolean | false\|true(虚拟化) | 
 | leafOnly | 多选模式下是否开启 onChange 回调入参及展示标签只有叶子节点                                                                                            | boolean | false |
 | loadData | 异步加载数据,需要返回一个Promise                                                                                                                 | (treeNode: TreeNodeData) => Promise |- |
 | loadedKeys | (受控)已经加载的节点,配合 loadData 使用                                                                                                       | Set< string > | - |

+ 22 - 22
content/input/upload/index.md

@@ -1303,45 +1303,45 @@ import { IconUpload } from '@douyinfe/semi-icons';
 |accept | `html` 原生属性,接受上传的[文件类型](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-accept)。<br/>`accept` 的值为你允许选择文件的[MIME types 字符串](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types)或文件后缀(.jpg等) | string | |  |
 |action | 文件上传地址,必填 | string |  |  |
 |addOnPasting | 按下 ctrl/command + v时,是否自动将剪贴板中的文件添加至 fileList,当前仅支持图片类型; 需用户授权同意 | boolean | false | 2.43.0 |
-|afterUpload | 文件上传后的钩子,根据 return 的 object 更新文件状态 | function(auProps) => afterUploadResult |  | 1.0.0 |
-|beforeClear|清空文件前回调,按照返回值来判断是否继续移除,返回false、Promise.resolve(false)、Promise.reject()会阻止移除|(fileList: Array<FileItem \>) => boolean\|Promise||1.31.0|
-|beforeRemove|移除文件前的回调,按照返回值来判断是否继续移除,返回false、Promise.resolve(false)、Promise.reject()会阻止移除|(file: <FileItem\>, fileList: Array<FileItem \>) => boolean\|Promise||1.31.0|
-|beforeUpload | 上传文件前的钩子,根据 return 的 object 更新文件状态,控制是否上传 | function(buProps) => beforeUploadResult \| Promise \| boolean |  | 1.0.0 |
+|afterUpload | 文件上传后的钩子,根据 return 的 object 更新文件状态 | function(auProps) => afterUploadResult |  |  |
+|beforeClear|清空文件前回调,按照返回值来判断是否继续移除,返回false、Promise.resolve(false)、Promise.reject()会阻止移除|(fileList: Array<FileItem \>) => boolean\|Promise|| |
+|beforeRemove|移除文件前的回调,按照返回值来判断是否继续移除,返回false、Promise.resolve(false)、Promise.reject()会阻止移除|(file: <FileItem\>, fileList: Array<FileItem \>) => boolean\|Promise|| |
+|beforeUpload | 上传文件前的钩子,根据 return 的 object 更新文件状态,控制是否上传 | function(buProps) => beforeUploadResult \| Promise \| boolean |  |  |
 |capture | 文件上传控件中媒体拍摄的方式 | boolean\|string\|undefined | | |
 |className | 类名 | string |  |  |
-|customRequest | 自定义上传使用的异步请求方法 | (object: customRequestArgs) => void |  | 1.5.0 |
+|customRequest | 自定义上传使用的异步请求方法 | (object: customRequestArgs) => void |  |  |
 |data | 上传时附带的额外参数或返回上传额外参数的方法 | object\|(file: [File](https://developer.mozilla.org/zh-CN/docs/Web/API/File)) => object | {} |  |
 |defaultFileList | 已上传的文件列表 | Array<FileItem\> | [] |  |
-|directory | 文件夹类型上传 | boolean | false | 1.20.0 |
+|directory | 文件夹类型上传 | boolean | false |  |
 |disabled | 是否禁用 | boolean | false |  |
 |dragIcon | 拖拽区左侧 Icon | ReactNode | `<IconUpload />` |  |
 |dragMainText | 拖拽区主文本 | ReactNode | '点击上传文件或拖拽文件到这里' | |
 |dragSubText | 拖拽区帮助文本 | ReactNode | '' |  |
 |draggable | 是否支持拖拽上传 | boolean | false |  |
-|fileList | 已上传的文件列表,传入该值时,upload 即为受控组件 | Array<FileItem\> |  | 1.0.0 |
-|fileName | 作用与 name 相同,主要在 Form.Upload 中使用,为了避免与 Field 的 props.name 冲突,此处另外提供一个重命名的 props | string |  | 1.0.0 |
+|fileList | 已上传的文件列表,传入该值时,upload 即为受控组件 | Array<FileItem\> |  |  |
+|fileName | 作用与 name 相同,主要在 Form.Upload 中使用,为了避免与 Field 的 props.name 冲突,此处另外提供一个重命名的 props | string |  | |
 |headers | 上传时附带的 headers 或返回上传额外 headers 的方法 | object\|(file: [File](https://developer.mozilla.org/zh-CN/docs/Web/API/File)) => object | {} |  |
 |hotSpotLocation | 照片墙点击热区的放置位置,可选值 `start`, `end` | string | 'end' | 2.5.0 |
-|itemStyle | fileCard 的内联样式 | CSSProperties |  | 1.0.0 |
+|itemStyle | fileCard 的内联样式 | CSSProperties |  |  |
 |limit | 最大允许上传文件个数 | number |  |  |
 |listType | 文件列表展示类型,可选`picture`、`list` | string | 'list' |  |
 |maxSize | 文件体积最大限制,单位 KB | number |  |  |
 |minSize | 文件体积最小限制,单位 KB | number |  |  |
 |multiple | 是否允许单次选中多个文件 | boolean | false |  |
 |name | 上传时使用的文件名 | string | '' |  |
-|onAcceptInvalid | 当接收到的文件不符合accept规范时触发(一般是因为文件夹选择了全部类型文件/拖拽不符合格式的文件时触发) | (files: File[]) => void | | 1.24.0 |
-|onChange | 文件状态发生变化时调用,包括上传成功,失败,上传中,回调入参为 Object,包含 fileList、currentFile 等值 | ({fileList: Array<FileItem\>, currentFile?: FileItem}) => void |  | 1.0.0 |
-|onClear | 点击清空时的回调 | () => void |  | 1.1.0 |
-|onDrop | 当拖拽的元素在拖拽区上被释放时触发 | (e, files: Array<File\>, fileList: Array<FileItem\>) => void |  | 1.9.0 |
+|onAcceptInvalid | 当接收到的文件不符合accept规范时触发(一般是因为文件夹选择了全部类型文件/拖拽不符合格式的文件时触发) | (files: File[]) => void | |  |
+|onChange | 文件状态发生变化时调用,包括上传成功,失败,上传中,回调入参为 Object,包含 fileList、currentFile 等值 | ({fileList: Array<FileItem\>, currentFile?: FileItem}) => void |  |  |
+|onClear | 点击清空时的回调 | () => void |  |  |
+|onDrop | 当拖拽的元素在拖拽区上被释放时触发 | (e, files: Array<File\>, fileList: Array<FileItem\>) => void |  |  |
 |onError | 上传错误时的回调 | (error: Error, file: [File](https://developer.mozilla.org/zh-CN/docs/Web/API/File), fileList: Array<FileItem\>, xhr: XMLHttpRequest) => void |  |  |
 |onExceed | 上传文件总数超出 `limit` 时的回调 | (fileList:Array<FileItem\>) => void |  |  |
 |onFileChange | 选中文件后的回调 | (Array<File\>) => void |  |  |
-|onOpenFileDialog | 打开系统文系统文件选择弹窗时触发 | () => void |  | 1.18.0 |
-|onPreviewClick | 点击文件卡片时的回调 | (fileItem: FileItem) => void |  | 1.8.0 |
+|onOpenFileDialog | 打开系统文系统文件选择弹窗时触发 | () => void |  |  |
+|onPreviewClick | 点击文件卡片时的回调 | (fileItem: FileItem) => void |  |  |
 |onProgress | 上传文件时的回调 | (percent: number, file: [File](https://developer.mozilla.org/zh-CN/docs/Web/API/File), fileList: Array<FileItem\>) => void |  |  |
 |onPastingError | addOnPasting为true时,粘贴读取失败时的回调 | (Error\|PermissionState) |  | 2.43.0 |
 |onRemove | 移除文件的回调 | (currentFile: [File](https://developer.mozilla.org/zh-CN/docs/Web/API/File), fileList:Array<FileItem\>, currentFileItem: FileItem) => void |  |  |
-|onRetry | 上传重试的回调 | (file: <FileItem\>) => void |  | 1.18.0 |
+|onRetry | 上传重试的回调 | (file: <FileItem\>) => void |  |  |
 |onSizeError | 文件尺寸非法的回调 | (file:[File](https://developer.mozilla.org/zh-CN/docs/Web/API/File), fileList:Array<FileItem\>) => void |  |  |
 |onSuccess | 上传成功后的回调 | (responseBody: object, file: [File](https://developer.mozilla.org/zh-CN/docs/Web/API/File), fileList:Array<FileItem\>) => void |  |
 |picHeight | 图片墙模式下,可通过该 API 定制图片展示高度 | string\|number |  | 2.42.0 |
@@ -1349,20 +1349,20 @@ import { IconUpload } from '@douyinfe/semi-icons';
 |previewFile | 自定义预览逻辑,该函数返回内容将会替换原缩略图 | (fileItem: FileItem) => ReactNode |  |  |
 |prompt | 自定义插槽,可用于插入提示文本。与直接在 `children` 中写的区别时,`prompt` 的内容在点击时不会触发上传<br/>(图片墙模式下,v1.3.0 后才支持传入 prompt) | ReactNode |  |  |
 |promptPosition | 提示文本的位置,当 listType 为 list 时,参照物为 children 元素;当 listType 为 picture 时,参照物为图片列表。可选值 `left`、`right`、`bottom`<br/>(图片墙模式下,v1.3.0 后才支持使用 promptPosition) | string | 'right' |  |
-|renderFileItem | fileCard 的自定义渲染 | (renderProps: RenderFileItemProps) => ReactNode |  | 1.0.0 |
+|renderFileItem | fileCard 的自定义渲染 | (renderProps: RenderFileItemProps) => ReactNode |  |  |
 |renderFileOperation | 自定义列表项操作区 | (renderProps: RenderFileItemProps)=>ReactNode | | 2.5.0 |
 |renderPicInfo| 自定义照片墙信息,只在照片墙模式下有效| (renderProps: RenderFileItemProps)=>ReactNode | | 2.2.0 |
 |renderPicPreviewIcon| 自定义照片墙hover时展示的预览图标,只在照片墙模式下有效 | (renderProps: RenderFileItemProps)=>ReactNode | | 2.5.0 |
 |renderThumbnail| 自定义图片墙缩略图,只在照片墙模式下有效| (renderProps: RenderFileItemProps)=>ReactNode | | 2.2.0 |
-|showClear | 在 limit 不为 1 且当前已上传文件数大于 1 时,是否展示清空按钮 | boolean | true | 1.0.0 |
+|showClear | 在 limit 不为 1 且当前已上传文件数大于 1 时,是否展示清空按钮 | boolean | true |  |
 |showPicInfo| 是否显示图片信息,只在照片墙模式下有效| boolean| false | 2.2.0 |
-|showReplace | 上传成功时,是否展示在 fileCard 内部展示替换按钮 | boolean | false | 1.21.0 |
-|showRetry | 上传失败时,是否展示在 fileCard 内部展示重试按钮 | boolean | true | 1.0.0 |
+|showReplace | 上传成功时,是否展示在 fileCard 内部展示替换按钮 | boolean | false |  |
+|showRetry | 上传失败时,是否展示在 fileCard 内部展示重试按钮 | boolean | true |  |
 |showUploadList | 是否显示文件列表 | boolean | true |  |
 |style | 样式 | CSSProperties |  |  |
-|transformFile | 选中文件后,上传文件前的回调函数,可用于对文件进行自定义转换处理 | (file:[File](https://developer.mozilla.org/zh-CN/docs/Web/API/File)) => FileItem |  | 1.0.0 |
+|transformFile | 选中文件后,上传文件前的回调函数,可用于对文件进行自定义转换处理 | (file:[File](https://developer.mozilla.org/zh-CN/docs/Web/API/File)) => FileItem |  |  |
 |uploadTrigger | 触发上传时机,可选值 `auto`、`custom` | string | 'auto' |  |
-|validateMessage | Upload 整体的错误信息 | ReactNode |  | 1.0.0 |
+|validateMessage | Upload 整体的错误信息 | ReactNode |  |  |
 |withCredentials | 是否带上 Cookie 信息 | boolean | false |  |
 
 

+ 14 - 14
content/navigation/navigation/index-en-US.md

@@ -760,16 +760,16 @@ function NavApp (props = {}) {
 
 ### Nav.Item
 
-| Properties   | Description                                                                                                       | Type                                                                 | Default  | Version |
+| Properties   | Description                                                                                                       | Type                                                                 | Default  |
 | ------------ | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -------- | ------- |
-| disabled     | Disabled state                                                                                                    | boolean                                                              | false    | 1.17.0  |
-| icon         | Navigation project icon name or component                                                                         | ReactNode                                                            |          |         |
-| indent       | If the icon is empty, keep its space or not. Only effective for first level navigation                            | boolean                                                              | false    |         |
-| itemKey      | Navigation project only key                                                                                       | string                                                               | ""       |         |
-| level        | The nesting level of the current item. When limitIndent is true, it is used to customize the indentation position | number                                                               |          | 1.27.0  |
-| link         | Navigation item href link, when imported, the navigation item will be wrapped with an a tag                       | string                                                               | -        | 1.0.0   |
-| linkOptions  | Parameters transparently passed to the a tag                                                                      | object                                                               | -        | 1.0.0   |
-| text         | Navigation project copy or element                                                                                | string \| ReactNode                                                  | ""       |         |
+| disabled     | Disabled state                                                                                                    | boolean                                                              | false    |
+| icon         | Navigation project icon name or component                                                                         | ReactNode                                                            |          | 
+| indent       | If the icon is empty, keep its space or not. Only effective for first level navigation                            | boolean                                                              | false    |
+| itemKey      | Unique item identifier, no duplication allowed                                                                    | string                                                               | ""       |
+| level        | The nesting level of the current item. When limitIndent is true, it is used to customize the indentation position | number                                                               |          |
+| link         | Navigation item href link, when imported, the navigation item will be wrapped with an a tag                       | string                                                               | -        |
+| linkOptions  | Parameters transparently passed to the a tag                                                                      | object                                                               | -        |
+| text         | Navigation project copy or element                                                                                | string \| ReactNode                                                  | ""       |
 | onClick      | Callback of click                                                                                                 | function({ itemKey: string, domEvent: MouseEvent, isOpen: boolean }) | () => {} |
 | onMouseEnter | Callback of mouse enter event                                                                                     | function(e) => {}                                                    | () => {} |
 | onMouseLeave | Callback of mouse leave event                                                                                     | function(e) => {}                                                    | () => {} |
@@ -778,14 +778,14 @@ function NavApp (props = {}) {
 
 | Properties    | Description                                                                                                       | Type                | Default  |
 | ------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------- | -------- |
-| disabled      | Disabled state                                                                                                    | boolean             | false    | 1.17.0 |
-| dropdownStyle | Style of dropdown layer                                                                                           | CSSProperties       |          |        |
+| disabled      | Disabled state                                                                                                    | boolean             | false    |
+| dropdownStyle | Style of dropdown layer                                                                                           | CSSProperties       |          |
 | icon          | Navigation project icon name or component                                                                         | ReactNode           |          |
 | indent        | If the icon is empty, keep its space or not. Only effective for first level navigation                            | boolean             | false    |
 | isCollapsed   | Whether it is a controlled attribute in the collapsed state, only `mode = "vertical"`                             | boolean             | false    |
 | isOpen        | Control open state                                                                                                | boolean             | false    |
 | itemKey       | Navigation project only key                                                                                       | string              | ""       |
-| level         | The nesting level of the current item. When limitIndent is true, it is used to customize the indentation position | number              | 1.27.0   |
+| level         | The nesting level of the current item. When limitIndent is true, it is used to customize the indentation position | number              |          |
 | maxHeight     | max height                                                                                                        | number              | 999      |
 | text          | Navigation project copy or component                                                                              | string \| ReactNode | ""       |
 | onMouseEnter  | Callback of mouse enter event                                                                                     | function(e) => {}   | () => {} |
@@ -797,8 +797,8 @@ function NavApp (props = {}) {
 | ----------- | ------------------------------------------------------------------------------------------- | ------------------- | ------- | ------- |
 | children    | Sub element                                                                                 | ReactNode           |         |         |
 | className   | Outermost style name                                                                        | string              |         |         |
-| link        | Navigation item href link, when imported, the navigation item will be wrapped with an a tag | string              | -       | 1.0.0   |
-| linkOptions | Parameters transparently passed to the a tag                                                | object              | -       | 1.0.0   |
+| link        | Navigation item href link, when imported, the navigation item will be wrapped with an a tag | string              | -       |         |
+| linkOptions | Parameters transparently passed to the a tag                                                | object              | -       |         |
 | logo        | Logo, can be a string or component                                                          | string \| ReactNode |         |         |
 | style       | Outermost style                                                                             | object              |         |         |
 | text        | Logo copy, which can be a string or component                                               | string \| ReactNode |         |         |

+ 250 - 191
content/navigation/navigation/index.md

@@ -36,7 +36,7 @@ import { Nav } from '@douyinfe/semi-ui';
 
 参数详见 [Nav.Header](#Nav.Header) 和 [Nav.Footer](#Nav.Footer)。
 
-```jsx live=true dir="column"
+```jsx live=true width=78%
 import React from 'react';
 import { Nav } from '@douyinfe/semi-ui';
 import { IconSemiLogo } from '@douyinfe/semi-icons';
@@ -79,7 +79,7 @@ Navigation 目前提供了个两个参数用于定义导航样式:`style` 和
 
 例如你需要一个中间列表可以滚动,导航头部和底部固定的导航组件,可以这么使用:
 
-```jsx live=true dir="column"
+```jsx live=true width=78%
 import React from 'react';
 import { Nav } from '@douyinfe/semi-ui';
 import { IconSemiLogo } from '@douyinfe/semi-icons';
@@ -126,7 +126,7 @@ class NavApp extends React.Component {
 
 可以使用 JSX 写法定义导航头部、导航项以及导航底部。使用 JSX写法时,在 Nav 的 children 层级,你除了可以使用 Nav.Header、Nav.Item、Nav.Sub、Nav.Footer外,你也可以置入其他自定义的 ReactNode 元素
 
-```jsx live=true dir="column"
+```jsx live=true width=78%
 import React from 'react';
 import { Nav } from '@douyinfe/semi-ui';
 import { IconStar, IconUser, IconUserGroup, IconSemiLogo } from '@douyinfe/semi-icons';
@@ -136,7 +136,7 @@ class NavApp extends React.Component {
     render() {
         return (
             <Nav
-                bodyStyle={{ height: 320 }}
+                bodyStyle={{ height: 300 }}
                 defaultOpenKeys={['user', 'union']}
                 onSelect={data => console.log('trigger onSelect: ', data)}
                 onClick={data => console.log('trigger onClick: ', data)}
@@ -201,17 +201,17 @@ import { Nav } from '@douyinfe/semi-ui';
             ]}
         ></Nav>
     );
-}
+};
 ```
 
 
 
-### 导航方向
+### 垂直与水平布局
 
 Navigation 目前提供两种方向的导航:
 
--   垂直方向(默认),  `mode = "vertical"`
--   水平方向, `mode = "horizontal"`
+-   垂直布局(默认) `mode = "vertical"`
+-   水平布局 `mode = "horizontal"`
 
 
 特别注意的是,有一些功能(参数)仅在 `mode = "vertical"` 时有效:
@@ -220,9 +220,9 @@ Navigation 目前提供两种方向的导航:
 -   `defaultOpenKeys` | `openKeys` (指定默认的以及受控的展开子导航项 key 数组,这个参数仅在 `mode = "vertical"` 且 `isCollapsed = false` 有效)
 -   `Footer` 组件的 `collapseButton` 收起侧边栏功能按钮
 
-#### 竖直方向
+#### 垂直布局
 
-```jsx live=true dir="column"
+```jsx live=true width=78%
 import React from 'react';
 import { Nav } from '@douyinfe/semi-ui';
 import { IconSemiLogo } from '@douyinfe/semi-icons';
@@ -234,7 +234,7 @@ class NavApp extends React.Component {
         return (
             <div style={{ width: '100%' }}>
                 <Nav
-                    bodyStyle={{ height: 320 }}
+                    bodyStyle={{ height: 300 }}
                     items={[
                         { itemKey: 'user', text: '用户管理', icon: <IconBadge /> },
                         { itemKey: 'union', text: '活动管理', icon: <IconTreeSelect/> },
@@ -266,7 +266,7 @@ class NavApp extends React.Component {
 }
 ```
 
-#### 水平方向
+#### 水平布局
 
 ```jsx live=true dir="column"
 import React from 'react';
@@ -339,113 +339,172 @@ class NavApp extends React.Component {
 
 ```jsx live=true dir="column"
 import React from 'react';
-import { Nav, Avatar, Dropdown, Select, Button } from '@douyinfe/semi-ui';
-import { IconStar, IconUser, IconUserGroup, IconSetting, IconEdit, IconLanguage, IconSemiLogo } from '@douyinfe/semi-icons';
-
-class NavApp extends React.Component {
-    constructor() {
-        this.items = [
-            { itemKey: 'user', text: '用户管理', icon: <IconUser /> },
-            { itemKey: 'union', text: '活动管理', icon: <IconStar /> },
-            {
-                itemKey: 'union-management',
-                text: '任务管理',
-                icon: <IconUserGroup />,
-                items: ['公告设置', '任务查询', '信息录入']
-            },
-            {
-                itemKey: 'approve-management',
-                text: '审批管理',
-                icon: <IconEdit />,
-                items: [
-                    '入驻审核',
-                    {
-                        itemKey: 'operation-management',
-                        text: '运营管理',
-                        items: [
-                            '人员管理',
-                            '人员变更'
-                        ]
-                    }
-                ]
-            },
-            {
-                text: '任务平台',
-                icon: <IconSetting />,
-                itemKey: 'job',
-                items: ['任务管理', '用户任务查询'],
-            },
-        ];
-
-        this.renderHorizontal = this.renderHorizontal.bind(this);
-        this.renderVertical = this.renderVertical.bind(this);
-    }
+import { Nav, Avatar, Dropdown, Select, Button, Layout, Breadcrumb, Skeleton } from '@douyinfe/semi-ui';
+import { IconStar, IconLanguage, IconSemiLogo, IconBytedanceLogo, IconBell, IconHelpCircle } from '@douyinfe/semi-icons';
+import { IconTreeSelect, IconForm, IconBreadcrumb, IconBanner, IconBadge, IconNotification, IconSteps, IconTree, IconTabs, IconNavigation } from '@douyinfe/semi-icons-lab';
 
-    renderHorizontal() {
-        return (
-            <Nav
-                mode={'horizontal'}
-                onSelect={key => console.log(key)}
-                header={{
-                    logo: <IconSemiLogo style={{ height: '36px', fontSize: 36 }} />,
-                    text: 'Semi 运营后台'
-                }}
-                footer={
-                    <>
-                        <Select defaultValue='Chinese' style={{ width: 120, marginRight: 10 }} insetLabel={<IconLanguage />}>
-                            <Select.Option value='Chinese'>中文</Select.Option>
-                            <Select.Option value='English'>English</Select.Option>
-                            <Select.Option value='Korean'>한국어</Select.Option>
-                            <Select.Option value='Japanese'>日本語</Select.Option>
-                        </Select>
-                        <Button style={{ marginRight: 10 }}>切换至全球版</Button>
-                        <Dropdown
-                            position="bottomRight"
-                            render={
-                                <Dropdown.Menu>
-                                    <Dropdown.Item>详情</Dropdown.Item>
-                                    <Dropdown.Item>退出</Dropdown.Item>
-                                </Dropdown.Menu>
-                            }
+() => {
+    const { Header, Footer, Sider, Content } = Layout;
+
+    const TopHeader = () => (
+        <Header style={{ backgroundColor: 'var(--semi-color-bg-1)' }}>
+            <div>
+                <Nav mode="horizontal" defaultSelectedKeys={['Home']}>
+                    <Nav.Header>
+                        <IconSemiLogo style={{ height: '36px', fontSize: 36 }} />
+                    </Nav.Header>
+                    <span
+                        style={{
+                            color: 'var(--semi-color-text-2)',
+                        }}
+                    >
+                        <span
+                            style={{
+                                marginRight: '24px',
+                                color: 'var(--semi-color-text-0)',
+                                fontWeight: '600',
+                            }}
                         >
-                            <Avatar size="small" color='light-blue' style={{ margin: 4 }}>BD</Avatar>
-                            <span>Bytedancer</span>
-                        </Dropdown>
-                    </>
-                }
-            />
-        );
-    }
+                            模版推荐
+                        </span>
+                        <span style={{ marginRight: '24px' }}>所有模版</span>
+                        <span>我的模版</span>
+                    </span>
+                    <Nav.Footer>
+                        <Button
+                            theme="borderless"
+                            icon={<IconBell size="large" />}
+                            style={{
+                                color: 'var(--semi-color-text-2)',
+                                marginRight: '12px',
+                            }}
+                        />
+                        <Button
+                            theme="borderless"
+                            icon={<IconHelpCircle size="large" />}
+                            style={{
+                                color: 'var(--semi-color-text-2)',
+                                marginRight: '12px',
+                            }}
+                        />
+                        <Avatar color="orange" size="small">
+                            YJ
+                        </Avatar>
+                    </Nav.Footer>
+                </Nav>
+            </div>
+        </Header>
+    );
 
-    renderVertical() {
-        return (
-            <Nav
-                bodyStyle={{ height: 320 }}
-                items={this.items}
-                onSelect={key => console.log(key)}
-                footer={{
-                    collapseButton: true,
+    const LeftNav = () => (
+        <Nav
+            style={{ maxWidth: 220, height: '100%' }}
+            defaultSelectedKeys={['Home']}
+            items={[
+                {
+                    itemKey: 'approve-management',
+                    text: '审批管理',
+                    icon: <IconBreadcrumb />,
+                    items: [
+                        '入驻审核',
+                        {
+                            itemKey: 'operation-management',
+                            text: '运营管理',
+                            items: [
+                                '人员管理',
+                                '人员变更'
+                            ]
+                        }
+                    ]
+                },
+                {
+                    text: '任务平台',
+                    icon: <IconSteps />,
+                    itemKey: 'job',
+                    items: ['任务管理', '用户任务查询'],
+                },
+                { itemKey: 'user', text: '用户管理', icon: <IconBadge /> },
+                { itemKey: 'union', text: '活动管理', icon: <IconTreeSelect /> },
+            ]}
+            footer={{
+                collapseButton: true,
+            }}
+        />
+    );
+
+    const FooterContent = () => (
+        <>
+            <span
+                style={{
+                    display: 'flex',
+                    alignItems: 'center',
                 }}
-            />
-        );
-    }
+            >
+                <IconBytedanceLogo size="large" style={{ marginRight: '8px' }} />
+                <span>Copyright © {new Date().getFullYear()} ByteDance. All Rights Reserved. </span>
+            </span>
+            <span>
+                <span style={{ marginRight: '24px' }}>平台客服</span>
+                <span>反馈建议</span>
+            </span>
+        </>
+    );
+    return (
+        <Layout style={{ border: '1px solid var(--semi-color-border)' }}>
+            <TopHeader />
+            <Layout>
+                <Sider style={{ backgroundColor: 'var(--semi-color-bg-1)' }}>
+                    <LeftNav />
+                </Sider>
+                <Content
+                    style={{
+                        padding: '24px',
+                        backgroundColor: 'var(--semi-color-bg-0)',
+                    }}
+                >
+                    <Breadcrumb
+                        style={{
+                            marginBottom: '24px',
+                        }}
+                        routes={['首页', '当这个页面标题很长时需要省略', '上一页', '详情页']}
+                    />
+                    <div
+                        style={{
+                            borderRadius: '10px',
+                            border: '1px solid var(--semi-color-border)',
+                            height: '376px',
+                            padding: '32px',
+                        }}
+                    >
+                        <Skeleton placeholder={<Skeleton.Paragraph rows={2} />} loading={true}>
+                            <p>Hi, Bytedance dance dance.</p>
+                            <p>Hi, Bytedance dance dance.</p>
+                        </Skeleton>
+                    </div>
+                </Content>
+            </Layout>
+            <Footer
+                style={{
+                    display: 'flex',
+                    justifyContent: 'space-between',
+                    padding: '20px',
+                    color: 'var(--semi-color-text-2)',
+                    backgroundColor: 'rgba(var(--semi-grey-0), 1)',
+                }}
+            >
+                <FooterContent />
+            </Footer>
+        </Layout>
+    );
+};
 
-    render() {
-        return (
-            <>
-                {this.renderHorizontal()}
-                {this.renderVertical()}
-            </>
-        );
-    }
-}
 ```
 
 ### 展开收起箭头位置
 
 可通过 `toggleIconPosition` 改变 NavSub 展开收起箭头的位置,默认为 'right' 右侧展示,可改为 'left'
 
-```jsx live=true dir=column
+```jsx live=true width=78%
 import React from 'react';
 import { Nav } from '@douyinfe/semi-ui';
 import { IconUser, IconStar, IconSetting, IconSemiLogo } from '@douyinfe/semi-icons';
@@ -457,7 +516,7 @@ class NavApp extends React.Component {
             <Nav
                 toggleIconPosition={'left'}
                 defaultOpenKeys={['job']}
-                bodyStyle={{ height: 320 }}
+                bodyStyle={{ height: 300 }}
                 items={[
                     { itemKey: 'user', text: '用户管理', icon: <IconBadge /> },
                     { itemKey: 'union', text: '活动管理', icon: <IconBanner /> },
@@ -488,7 +547,7 @@ class NavApp extends React.Component {
 - 当以 Jsx 方式用 Nav.Item 传入导航项时,请手动给 Nav.Item 传入 `level` props。
 - 以 items 方式传入导航项时,无需关心 level
 
-```jsx live=true dir=column
+```jsx live=true width=78%
 import React from 'react';
 import { Nav } from '@douyinfe/semi-ui';
 import { IconUser, IconStar, IconSetting, IconSemiLogo } from '@douyinfe/semi-icons';
@@ -500,7 +559,7 @@ class NavApp extends React.Component {
             <Nav
                 limitIndent={false}
                 defaultOpenKeys={['job', 'mission1']}
-                bodyStyle={{ height: 320 }}
+                bodyStyle={{ height: 300 }}
                 items={[
                     { itemKey: 'user', text: '用户管理', icon: <IconBadge /> },
                     {
@@ -546,7 +605,7 @@ class NavApp extends React.Component {
 -   `defaultOpenKeys`(默认展开的导航项 `key` 数组,仅 `mode = "vertical"` 且 `isCollapsed` | `defaultIsCollapsed = false` 的情况下有效)
 -   `defaultIsCollapsed`(侧边栏默认是否收起,仅 `mode = "vertical"` 时有效)
 
-```jsx live=true dir="column"
+```jsx live=true width=78%
 import React from 'react';
 import { Nav } from '@douyinfe/semi-ui';
 import { IconSemiLogo } from '@douyinfe/semi-icons';
@@ -559,7 +618,7 @@ class NavApp extends React.Component {
                 defaultOpenKeys={['job']}
                 defaultSelectedKeys={['信息录入']}
                 defaultIsCollapsed={true}
-                bodyStyle={{ height: 320 }}
+                bodyStyle={{ height: 300 }}
                 items={[
                     { itemKey: 'user', text: '用户管理', icon: <IconBadge /> },
                     { itemKey: 'union', text: '活动管理', icon: <IconBanner /> },
@@ -606,7 +665,7 @@ Navigation 组件提供了几个受控属性,配合各种回调,可以很轻
 -   `onSelect({ itemKey: string, selectedKeys: string[], domEvent: MouseEvent, isOpen: boolean }): void`
 -   `onOpenChange({ itemKey: string, openKeys: string[], domEvent: MouseEvent, isOpen: boolean }): void`
 
-```jsx live=true dir="column"
+```jsx live=true width=78%
 import React, { useMemo, useState } from 'react';
 import { Nav } from '@douyinfe/semi-ui';
 import { IconSemiLogo } from '@douyinfe/semi-icons';
@@ -652,7 +711,7 @@ function NavApp (props = {}) {
             isCollapsed={isCollapsed}
             openKeys={openKeys}
             selectedKeys={selectedKeys}
-            bodyStyle={{ height: 360 }}
+            bodyStyle={{ height: 300 }}
             items={items}
             header={{
                 logo: <IconSemiLogo style={{ height: '36px', fontSize: 36 }} />,
@@ -673,92 +732,92 @@ function NavApp (props = {}) {
 
 ### Nav
 
-| 属性                  | 描述                                                                                      | 类型                                                                                                                                                                  | 默认值                     |
-|---------------------|-----------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------|
-| bodyStyle           | 导航项列表的自定义样式                                                                             | CSSProperties                                                                                                                                                       |                         |
-| className           | 最外层元素的样式名                                                                               | string                                                                                                                                                              |                         |
-| defaultIsCollapsed  | 默认是否处于收起状态,仅 `mode = "vertical"` 时有效                                                    | boolean                                                                                                                                                             | false                   |
-| defaultOpenKeys     | 初始打开的子导航 `itemKey` 数组,仅 `mode = "vertical"` 且侧边栏处于展开状态时有效                               | string[]                                                                                                                                                            | []                      |
-| defaultSelectedKeys | 初始选中的导航项 `itemKey` 数组                                                                   | string[]                                                                                                                                                            | []                      |
-| expandIcon          | 默认下拉箭头Icon, v>=2.36                                                                     | ReactNode                                                                                                                                                     |                       |
-| footer              | 底部区域配置对象或元素,详见 [Nav.Footer](#Nav.Footer)                                                | object\                                                                                                                                                             | ReactNode               |                      |
-| getPopupContainer   | 垂直 Nav 折叠或 水平 Nav中 Dropdown 的 getPopupContainer 配置,可指定弹出层容器 这会改变浮层 DOM 树位置,但不会改变视图渲染位置。 , v>=2.24.0                 | Function |                      |
-| header              | 头部区域配置对象或元素,详见 [Nav.Header](#Nav.Header)                                                | object\                                                                                                                                                             | ReactNode               |                      |
-| isCollapsed         | 是否处于收起状态的受控属性,仅 `mode = "vertical"` 时有效                                                 | boolean                                                                                                                                                             |                         |
-| items               | 导航项目列表,每一项可以继续带有 items 属性。如果为 string 数组,则会取每一项作为 text 和 itemKey                         | object\| string[]\| [Item](#Nav.Item)[] \| [Sub](#Nav.Sub)[] |  |
-| limitIndent         | 解除缩进限制,可使用 level 自定义导航项缩进,水平模式只能为true >=1.27.0                                          | boolean                                                                                                                                                             | true                    |
-| mode                | 导航类型,目前支持横向与竖直,可选值:`vertical`/                                                          | `horizontal`                                                                                                                                                        | string                  | `vertical`           |
-| openKeys            | 受控的打开的子导航 `itemKey` 数组,配合 `onOpenChange` 回调控制子导航项展开,仅 `mode = "vertical"` 且侧边栏处于展开状态时有效 | string[]                                                                                                                                                            |                         |
-| prefixCls           | 类名前缀                                                                                    | string                                                                                                                                                              | `semi`                  |
-| renderWrapper       | 自定义导航项外层组件,v>=2.24.0                                                                    |  <ApiType detail='(data:{ itemElement:ReactElement, isSubNav:boolean, isInSubNav:boolean, props:SubNavProps\| ItemProps }) => ReactNode'>(data) => ReactNode</ApiType>  | |
-| selectedKeys        | 受控的导航项 `itemKey` 数组,配合 `onSelect` 回调控制导航项选择                                             | string[]                                                                                                                                                            |                         |
-| style               | 最外层元素的自定义样式                                                                             | CSSProperties                                                                                                                                                       |                         |
-| subNavCloseDelay    | 子导航浮层关闭的延迟。collapse 为 true 或 mode 为 "horizontal" 时有效,单位为 ms                             | number                                                                                                                                                              | 100                     |
-| subNavMotion        | 子导航折叠动画                                                                                 | boolean                                                                                                                                                             | true                    |
-| subNavOpenDelay     | 子导航浮层显示的延迟。collapse 为 true 或 mode 为 "horizontal" 时有效,单位为 ms                             | number                                                                                                                                                              | 0                       |
-| toggleIconPosition  | 带有子导航项的的父级导航项箭头位置 v>=1.27.0                                                             | 'left' \                                                                                                                                                            | 'right'                 | 'right'              |
-| tooltipHideDelay    | tooltip 隐藏的延迟,collapse 为 true 时有效,单位为 ms                                                | number                                                                                                                                                              | 100                     |
-| tooltipShowDelay    | tooltip 显示的延迟,collapse 为 true 时有效,单位为 ms                                                | number                                                                                                                                                              | 0                       |
-| onClick             | 点击任意导航项时触发                                                                              | <ApiType detail='({ itemKey: string, domEvent: MouseEvent, isOpen: boolean }) => void'>(itemKey, event, isOpen) => void</ApiType>                                   | () => {}                |
-| onCollapseChange    | 收起状态变化时的回调                                                                              | <ApiType detail='(isCollapsed: boolean) => void'>(isCollapsed)=> void </ApiType>                                                                                       | () => {}                |
-| onOpenChange        | 切换某个子导航项目显隐状态时触发                                                                        | <ApiType detail='({ itemKey: string, openKeys: string[], domEvent: MouseEvent, isOpen: boolean }) => void'> ({itemKey, openKeys, event, isOpen})=>{}</ApiType>      | () => {}                |
-| onSelect            | 第一次选中某个可选中导航项目时触发                                                                       | <ApiType detail='({ itemKey: string, selectedKeys: string[], selectedItems: Item[], domEvent: MouseEvent, isOpen: boolean }) => void'>(onSelectProps)=>{}</ApiType> | () => {}                |
+| 属性                | 描述                                                                                                                                        | 类型                                                                                                                                                                  | 默认值     |
+| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |
+| bodyStyle           | 导航项列表的自定义样式                                                                                                                      | CSSProperties                                                                                                                                                         |            |
+| className           | 最外层元素的样式名                                                                                                                          | string                                                                                                                                                                |            |
+| defaultIsCollapsed  | 默认是否处于收起状态,仅 `mode = "vertical"` 时有效                                                                                         | boolean                                                                                                                                                               | false      |
+| defaultOpenKeys     | 初始打开的子导航 `itemKey` 数组,仅 `mode = "vertical"` 且侧边栏处于展开状态时有效                                                          | string[]                                                                                                                                                              | []         |
+| defaultSelectedKeys | 初始选中的导航项 `itemKey` 数组                                                                                                             | string[]                                                                                                                                                              | []         |
+| expandIcon          | 默认下拉箭头Icon, v>=2.36                                                                                                                   | ReactNode                                                                                                                                                             |            |
+| footer              | 底部区域配置对象或元素,详见 [Nav.Footer](#Nav.Footer)                                                                                      | object\|ReactNode                                                                                                                                                     |            |
+| getPopupContainer   | 垂直 Nav 折叠或 水平 Nav中 Dropdown 的 getPopupContainer 配置,可指定弹出层容器 这会改变浮层 DOM 树位置,但不会改变视图渲染位置。 v>=2.24.0 | Function                                                                                                                                                              |            |
+| header              | 头部区域配置对象或元素,详见 [Nav.Header](#Nav.Header)                                                                                      | object\|ReactNode                                                                                                                                                     |            |
+| isCollapsed         | 是否处于收起状态的受控属性,仅 `mode = "vertical"` 时有效                                                                                   | boolean                                                                                                                                                               |            |
+| items               | 导航项目列表,每一项可以继续带有 items 属性。如果为 string 数组,则会取每一项作为 text 和 itemKey                                           | object\| string[]\| [Item](#Nav.Item)[] \| [Sub](#Nav.Sub)[]                                                                                                          |            |
+| limitIndent         | 解除缩进限制,可使用 level 自定义导航项缩进,水平模式只能为true                                                                             | boolean                                                                                                                                                               | true       |
+| mode                | 导航类型,目前支持横向与竖直,可选值:`vertical`或`horizontal`                                                                              | string                                                                                                                                                                | `vertical` |
+| openKeys            | 受控的打开的子导航 `itemKey` 数组,配合 `onOpenChange` 回调控制子导航项展开,仅 `mode = "vertical"` 且侧边栏处于展开状态时有效              | string[]                                                                                                                                                              |            |
+| prefixCls           | 类名前缀                                                                                                                                    | string                                                                                                                                                                | `semi`     |
+| renderWrapper       | 自定义导航项外层组件,v>=2.24.0                                                                                                             | <ApiType detail='(data:{ itemElement:ReactElement, isSubNav:boolean, isInSubNav:boolean, props:SubNavProps\| ItemProps }) => ReactNode'>(data) => ReactNode</ApiType> |            |
+| selectedKeys        | 受控的导航项 `itemKey` 数组,配合 `onSelect` 回调控制导航项选择                                                                             | string[]                                                                                                                                                              |            |
+| style               | 最外层元素的自定义样式                                                                                                                      | CSSProperties                                                                                                                                                         |            |
+| subNavCloseDelay    | 子导航浮层关闭的延迟。collapse 为 true 或 mode 为 "horizontal" 时有效,单位为 ms                                                            | number                                                                                                                                                                | 100        |
+| subNavMotion        | 子导航折叠动画                                                                                                                              | boolean                                                                                                                                                               | true       |
+| subNavOpenDelay     | 子导航浮层显示的延迟。collapse 为 true 或 mode 为 "horizontal" 时有效,单位为 ms                                                            | number                                                                                                                                                                | 0          |
+| toggleIconPosition  | 带有子导航项的的父级导航项箭头位置,可选 `left`或 `right`                                                                                   | string                                                                                                                                                                | 'right'    |
+| tooltipHideDelay    | tooltip 隐藏的延迟,collapse 为 true 时有效,单位为 ms                                                                                      | number                                                                                                                                                                | 100        |
+| tooltipShowDelay    | tooltip 显示的延迟,collapse 为 true 时有效,单位为 ms                                                                                      | number                                                                                                                                                                | 0          |
+| onClick             | 点击任意导航项时触发                                                                                                                        | <ApiType detail='({ itemKey: string, domEvent: MouseEvent, isOpen: boolean }) => void'>(itemKey, event, isOpen) => void</ApiType>                                     | () => {}   |
+| onCollapseChange    | 收起状态变化时的回调                                                                                                                        | <ApiType detail='(isCollapsed: boolean) => void'>(isCollapsed)=> void </ApiType>                                                                                      | () => {}   |
+| onOpenChange        | 切换某个子导航项目显隐状态时触发                                                                                                            | <ApiType detail='({ itemKey: string, openKeys: string[], domEvent: MouseEvent, isOpen: boolean }) => void'> ({itemKey, openKeys, event, isOpen})=>{}</ApiType>        | () => {}   |
+| onSelect            | 第一次选中某个可选中导航项目时触发                                                                                                          | <ApiType detail='({ itemKey: string, selectedKeys: string[], selectedItems: Item[], domEvent: MouseEvent, isOpen: boolean }) => void'>(onSelectProps)=>{}</ApiType>   | () => {}   |
 
 ### Nav.Item
 
-| 属性        | 描述                                               | 类型              | 默认值 | 版本          |
-|-------------|--------------------------------------------------|-------------------|--------|---------------|
-| disabled    | 是否禁用                                           | boolean | false     | 1.17.0              |
-| icon        | 导航项目图标                             | ReactNode |      |               |
-| indent      | 如果 icon 为空,是否保留其占位,仅对一级导航生效       | boolean           | false  |               |
-| itemKey     | 导航项目唯一 key                                   | string            | ""     |               |
-| level       | 当前项所在嵌套层级,limitIndent 为 true时,用于自定义缩进位置| number | | 1.27.0 | 
-| link        | 导航项 href 链接,传入时导航项整体会包裹一个 a 标签 | string            | -      | 1.0.0 |
-| linkOptions | 透传给 a 标签的参数                                | object            | -      | 1.0.0 |
-| text        | 导航项目文案或元素                                 | string\|ReactNode | ""     |               |
-| onClick     | 点击任意导航项时触发 |function({ itemKey: string, domEvent: MouseEvent, isOpen: boolean }) |  () => {}   | 
-| onMouseEnter| mouse enter 时触发 |function(e) => {} | () => {}   | 
-| onMouseLeave| mouse leave 时触发 |function(e) => {} | () => {}   | 
+| 属性         | 描述                                                          | 类型                                                                                                                                   | 默认值   |
+| ------------ | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------- |
+| disabled     | 是否禁用                                                      | boolean                                                                                                                                | false    |
+| icon         | 导航项目图标                                                  | ReactNode                                                                                                                              |          |
+| indent       | 如果 icon 为空,是否保留其占位,仅对一级导航生效              | boolean                                                                                                                                | false    |
+| itemKey      | 导航项目唯一 key                                              | string                                                                                                                                 | ""       |
+| level        | 当前项所在嵌套层级,limitIndent 为 true时,用于自定义缩进位置 | number                                                                                                                                 |          |
+| link         | 导航项 href 链接,传入时导航项整体会包裹一个 a 标签           | string                                                                                                                                 | -        |
+| linkOptions  | 透传给 a 标签的参数                                           | object                                                                                                                                 | -        |
+| text         | 导航项目文案或元素                                            | string\|ReactNode                                                                                                                      | ""       |
+| onClick      | 点击任意导航项时触发                                          | <ApiType detail='({ itemKey: string, domEvent: MouseEvent, isOpen: boolean }) => void'>({itemKey, domEvent, isOpen}) => void</ApiType> | () => {} |
+| onMouseEnter | mouse enter 时触发                                            | function(e) => {}                                                                                                                      | () => {} |
+| onMouseLeave | mouse leave 时触发                                            | function(e) => {}                                                                                                                      | () => {} |
 
 ### Nav.Sub
 
-| 属性    | 描述                           | 类型              | 默认值 |
-| ------- | ------------------------------ | ----------------- | ------ |
-| disabled    | 是否禁用                                           | boolean | false     | 1.17.0             |
-| dropdownStyle | 弹出层的 style                                           | CSSProperties |     |              |
-| icon    | 导航项目图标       | ReactNode |      |
-| indent  | 如果 icon 为空,是否保留其占位,仅对一级导航生效 | boolean           | false  |
-| isCollapsed         |  是否处于收起状态的受控属性,仅 `mode = "vertical"`      | boolean  |    false        |
-| isOpen         |  是否打开      | boolean  |    false        |
-| itemKey | 导航项目唯一 key               | string            | ""     |
-| level       | 当前项所在嵌套层级,limitIndent 为 true时,用于自定义缩进位置| number | 0 | 1.27.0 |
-| maxHeight       | 最大高度 | number | 999 |
-| text    | 导航项目文案或组件             | string\|ReactNode | ""     |
-| onMouseEnter| mouse enter 时触发 |function(e) => {} | () => {}   | 
-| onMouseLeave| mouse leave 时触发 |function(e) => {} | () => {}   | 
+| 属性          | 描述                                                          | 类型              | 默认值   |
+| ------------- | ------------------------------------------------------------- | ----------------- | -------- |
+| disabled      | 是否禁用                                                      | boolean           | false    |  |
+| dropdownStyle | 弹出层的 style                                                | CSSProperties     |          |  |
+| icon          | 导航项目图标                                                  | ReactNode         |          |
+| indent        | 如果 icon 为空,是否保留其占位,仅对一级导航生效              | boolean           | false    |
+| isCollapsed   | 是否处于收起状态的受控属性,仅 `mode = "vertical"`            | boolean           | false    |
+| isOpen        | 是否打开                                                      | boolean           | false    |
+| itemKey       | 导航项目唯一 key                                              | string            | -        |
+| level         | 当前项所在嵌套层级,limitIndent 为 true时,用于自定义缩进位置 | number            | 0        |  |
+| maxHeight     | 最大高度                                                      | number            | 999      |
+| text          | 导航项目文案或组件                                            | string\|ReactNode | ""       |
+| onMouseEnter  | mouse enter 时触发                                            | function(e) => {} | () => {} |
+| onMouseLeave  | mouse leave 时触发                                            | function(e) => {} | () => {} |
 
 ### Nav.Header
 
-| 属性        | 描述                                               | 类型              | 默认值 | 版本          |
-|-------------|--------------------------------------------------|-------------------|--------|---------------|
-| children    | 子元素                                             | ReactNode         |        |               |
-| className   | 最外层样式名                                       | string            |        |               |
-| link        | 导航项 href 链接,传入时导航项整体会包裹一个 a 标签 | string            | -      | 1.0.0 |
-| linkOptions | 透传给 a 标签的参数                                | object            | -      | 1.0.0 |
-| logo        | Logo                         | ReactNode |        |               |
-| style       | 最外层样式                                         | CSSProperties            |        |               |
-| text        | Logo 文案                       | ReactNode |        |               |
+| 属性        | 描述                                                | 类型          | 默认值 |
+| ----------- | --------------------------------------------------- | ------------- | ------ |
+| children    | 子元素                                              | ReactNode     |        |
+| className   | 最外层样式名                                        | string        |        |
+| link        | 导航项 href 链接,传入时导航项整体会包裹一个 a 标签 | string        | -      |
+| linkOptions | 透传给 a 标签的参数                                 | object        | -      |
+| logo        | Logo                                                | ReactNode     |        |
+| style       | 最外层样式                                          | CSSProperties |        |
+| text        | Logo 文案                                           | ReactNode     |        |
 
 ### Nav.Footer
 
-| 属性           | 描述                                                                                     | 类型                                      | 默认值 |
-| -------------- | ---------------------------------------------------------------------------------------- | ----------------------------------------- | ------ |
-| children       | 子元素                                                                                   | ReactNode                                 |        |         
-| className      | 最外层样式名                                                                             | string                                    |        |      
-| collapseButton | 是否展示底部“收起侧边栏”按钮,mode="vertical" 且 Footer 组件的 children 参数为空才有效果 | boolean\|ReactNode                        | false  |          
-| collapseText   | “收起”按钮的文案                                                                         | (collapsed:boolean) => string\|ReactNode |        |
-| style          | 最外层样式                                                                               | CSSProperties                                    |        |  
-| onClick        | 点击事件回调                                                                             | (event) => void                              |        |  
+| 属性           | 描述                                                                                     | 类型                             | 默认值 |
+| -------------- | ---------------------------------------------------------------------------------------- | -------------------------------- | ------ |
+| children       | 子元素                                                                                   | ReactNode                        |        |
+| className      | 最外层样式名                                                                             | string                           |        |
+| collapseButton | 是否展示底部“收起侧边栏”按钮,mode="vertical" 且 Footer 组件的 children 参数为空才有效果 | boolean\|ReactNode               | false  |
+| collapseText   | “收起”按钮的文案                                                                         | (collapsed:boolean) => ReactNode |        |
+| style          | 最外层样式                                                                               | CSSProperties                    |        |
+| onClick        | 点击事件回调                                                                             | (event) => void                  |        |
 
 ## Accessibility
 - ### 键盘和焦点
@@ -773,8 +832,8 @@ function NavApp (props = {}) {
 - 导航栏菜单使用句子大小写格式
 - 尽量精简
 
-| ✅ 推荐用法 | ❌ 不推荐用法 |   
-| --- | --- | 
+| ✅ 推荐用法    | ❌ 不推荐用法  |
+| ------------- | ------------- |
 | Appeal center | Appeal Center |
 
 

+ 1 - 1
content/plus/chat/index-en-US.md

@@ -1,6 +1,6 @@
 ---
 localeCode: en-US
-order: 82
+order: 83
 category: Plus
 title:  Chat
 icon: doc-chat

+ 1 - 1
content/plus/chat/index.md

@@ -1,6 +1,6 @@
 ---
 localeCode: zh-CN
-order: 82
+order: 83
 category: Plus
 title:  Chat 对话
 icon: doc-chat

+ 8 - 0
content/start/changelog/index-en-US.md

@@ -16,6 +16,14 @@ Version:Major.Minor.Patch (follow the **Semver** specification)
 
 ---
 
+
+#### 🎉 2.64.0 (2024-08-12)
+- 【Feat】
+  - Added the ColorPicker component, which allows users to quickly select colors and supports eyedropper screen color selection. [#2218](https://github.com/DouyinFE/semi-design/pull/2218)
+- 【Fix】
+  - Fix Tooltip triggerDOM not defined in some case  [commit](https://github.com/DouyinFE/semi-design/commit/05878dd7b7c20f2e924f8e0b3cf71ad0eaa3aaf3)
+
+
 #### 🎉 2.64.0-beta.0 (2024-08-05)
 - 【Feat】
     - Events with exactly the same start and end times in Calendar day view are displayed side by side without covering each other

+ 7 - 0
content/start/changelog/index.md

@@ -13,6 +13,13 @@ Semi 版本号遵循 **Semver** 规范(主版本号-次版本号-修订版本
 -   修订版本号(patch):仅会进行 bugfix,发布时间不限
 -   不同版本间的详细关系,可查阅 [FAQ](/zh-CN/start/faq)
 
+
+#### 🎉 2.64.0 (2024-08-12)
+- 【Feat】
+  - 新增 颜色选择器 ColorPicker 组件,用户快速选择颜色,支持滴管屏幕取色 [#2218](https://github.com/DouyinFE/semi-design/pull/2218)
+- 【Fix】
+  - 修复 Tooltip triggerDOM 特殊场景下未定义的问题  [commit](https://github.com/DouyinFE/semi-design/commit/05878dd7b7c20f2e924f8e0b3cf71ad0eaa3aaf3)
+
 #### 🎉 2.64.0-beta.0 (2024-08-05)
 - 【Feat】
     - Calendar 日视图中起止时间完全相同的事件支持并排显示,不互相遮盖 [#2393](https://github.com/DouyinFE/semi-design/pull/2393)

+ 37 - 8
content/start/tailwind/index-en-US.md

@@ -48,13 +48,42 @@ No matter which side of Tailwind or the component library has higher priority, p
 ```shell
 yarn add -D @douyinfe/semi-webpack-plugin
 ```
-** 2. In the configuration file of the project (webpack.config.js, etc.), import the Semi webpack plug-in and enable cssLayer (users who use non-webpack builds, please refer to the principle to wrap the semi css layer by yourself) **
+** 2. In the configuration file in the project **
+
+- Webpack user: import Semi webpack plugin and enable cssLayer in the webpack.config.js
+
 ```js
-new SemiWebpackPlugin({
-     cssLayer:true,
-     /* ...options */
-});
+const SemiPlugin = require('@douyinfe/semi-webpack-plugin').default;
+
+module.exports = {
+    // ...
+    plugins: [
+        new SemiPlugin({
+            cssLayer:true,
+            /* ...options */
+        })
+    ]
+    // ...
+};
+
 ```
+- Rspack user:  import Semi webpack plugin and enable cssLayer in the rspack.config.js
+
+```js
+const {SemiRspackPlugin} = require('@douyinfe/semi-rspack-plugin');
+
+module.exports = {
+    // ...
+    plugins: [
+        new SemiRspackPlugin({
+            cssLayer:true
+        })
+    ]
+};
+```
+
+For users who use neither webpack or rspack build, please refer to the principle to layer-wrap semi's css yourself
+
 ** 3. Modify Tailwind entry configuration**
 
 The CSS of Tailwind entry is usually a file containing the following three lines
@@ -66,7 +95,7 @@ The CSS of Tailwind entry is usually a file containing the following three lines
 
 Modify it to (copy directly):
 ```css
-@layer tailwind-base,semi,components,utils;
+@layer tailwind-base,semi,tailwind-components,tailwind-utils;
 @layer tailwind-base{
      @tailwind base;
 }
@@ -93,7 +122,7 @@ After enabling the plugin, all Semi styles will be wrapped by `@layer {xxxx}`. I
 
 In addition, we configured the priority order of various Layers:
 ```css
-@layer tailwind-base,semi,components,utils;
+@layer tailwind-base,semi,tailwind-components,tailwind-utils;
 ```
 The meaning of the above CSS is that base (including Preflight) has the lowest priority, followed by Semi. The atomic class styles set by the user (padding-[xxx], etc.) have the highest priority, which can solve the above problems.
 
@@ -224,4 +253,4 @@ module.export = {
         }
     }
 }
-```
+```

+ 38 - 8
content/start/tailwind/index.md

@@ -50,13 +50,43 @@ Semi 不依赖任何第三方样式库,没有安装 Tailwind 一样可以运
 ```shell
 yarn add -D @douyinfe/semi-webpack-plugin
 ```
-** 2. 在项目中的配置文件中(webpack.config.js 等)引入Semi webpack 插件并开启 cssLayer (使用非 webpack 构建的用户请参照原理自行对 semi 的 css 进行 layer 包裹) **
+** 2. 在项目中的配置文件中 **
+
+- webpack 用户: 在webpack.config.js 引入Semi webpack 插件并开启 cssLayer
+
+```js
+const SemiPlugin = require('@douyinfe/semi-webpack-plugin').default;
+
+module.exports = {
+    // ...
+    plugins: [
+        new SemiPlugin({
+            cssLayer:true,
+            /* ...options */
+        })
+    ]
+    // ...
+};
+
+```
+- rspack 用户: 在 rspack.config.js  引入Semi webpack 插件并开启 cssLayer
+
 ```js
-new SemiWebpackPlugin({
-    cssLayer:true,
-    /* ...options */
-});
+const {SemiRspackPlugin} = require('@douyinfe/semi-rspack-plugin');
+
+module.exports = {
+    // ...
+    plugins: [
+        new SemiRspackPlugin({
+            cssLayer:true
+        })
+    ]
+};
 ```
+
+使用非 webpack rspack 构建的用户请参照原理自行对 semi 的 css 进行 layer 包裹
+
+
 ** 3. 修改 Tailwind 入口配置**
 
 Tailwind 入口的 CSS 通常是包含了下面三行的文件
@@ -68,7 +98,7 @@ Tailwind 入口的 CSS 通常是包含了下面三行的文件
 
 将其修改为(直接复制)
 ```css
-@layer tailwind-base,semi,components,utils;
+@layer tailwind-base,semi,tailwind-components,tailwind-utils;
 @layer tailwind-base{
     @tailwind base;
 }
@@ -95,7 +125,7 @@ CSS Layer 要求浏览器版本高于 Chromium 99 <a target="_blank" href="https
 
 另外,我们配置了各种 Layer 的优先级顺序:
 ```css
-@layer tailwind-base,semi,components,utils;
+@layer tailwind-base,semi,tailwind-components,tailwind-utils;
 ```
 上述 CSS 的含义为, base (含 Preflight)优先级最低,Semi 次之,用户设置的原子类样式(padding-[xxx] 等)优先级最高,这样即可解决上面遇到的问题。
 
@@ -224,4 +254,4 @@ module.export = {
         }
     }
 }
-```
+```

+ 42 - 0
create_symlinks.sh

@@ -0,0 +1,42 @@
+#!/bin/bash
+
+# 定义源目录和目标目录
+source_dir="content"
+target_dir="packages/semi-ui"
+
+# 遍历 content 目录下的二级子文件夹
+for type_dir in "$source_dir"/*; do
+  if [ -d "$type_dir" ]; then
+    for component_dir in "$type_dir"/*; do
+      if [ -d "$component_dir" ]; then
+        # 获取组件名称
+        component_name=$(basename "$component_dir")
+
+        # 确认目标目录中存在同名文件夹
+        if [ -d "$target_dir/$component_name" ]; then
+          echo "Found directory $target_dir/$component_name, creating symlinks..."
+
+          # 创建 index.md 符号链接
+          if [ -f "$component_dir/index.md" ]; then
+            ln -sf "../../../$component_dir/index.md" "$target_dir/$component_name/index.md"
+            echo "Created symlink: $target_dir/$component_name/index.md -> ../../../$component_dir/index.md"
+          else
+            echo "No index.md found in $component_dir"
+          fi
+
+          # 创建 index-en-US.md 符号链接
+          if [ -f "$component_dir/index-en-US.md" ]; then
+            ln -sf "../../../$component_dir/index-en-US.md" "$target_dir/$component_name/index-en-US.md"
+            echo "Created symlink: $target_dir/$component_name/index-en-US.md -> ../../../$component_dir/index-en-US.md"
+          else
+            echo "No index-en-US.md found in $component_dir"
+          fi
+        else
+          echo "Directory $target_dir/$component_name not found, skipping..."
+        fi
+      fi
+    done
+  fi
+done
+
+echo "符号链接创建完毕。"

+ 4 - 1
gatsby-node.js

@@ -102,7 +102,10 @@ exports.onCreateWebpackConfig = ({ stage, rules, loaders, plugins, actions }) =>
             alias: {
                 "vfile/do-not-use-conditional-minurl":isSSR ? "vfile/lib/minurl.js":"vfile/lib/minurl.browser.js",
                 "vfile/do-not-use-conditional-minproc":isSSR?"vfile/lib/minproc.js":"vfile/lib/minproc.browser.js",
-                "vfile/do-not-use-conditional-minpath": isSSR ? "vfile/lib/minpath.js":"vfile/lib/minpath.browser.js",
+                "vfile/do-not-use-conditional-minpath": isSSR ? "vfile/lib/minpath.js" : "vfile/lib/minpath.browser.js",
+                "#minpath": isSSR ? "vfile/lib/minpath.js" : "vfile/lib/minpath.browser.js",
+                "#minproc": isSSR ? "vfile/lib/minproc.js" : "vfile/lib/minproc.browser.js",
+                "#minurl": isSSR ? "vfile/lib/minurl.js" : "vfile/lib/minurl.browser.js",
                 "estree-util-visit/do-not-use-color": isSSR ? "estree-util-visit/lib/color.node.js":"estree-util-visit/lib/color.js",
                 "devlop":"devlop/lib/default.js",
                 "unist-util-visit-parents/do-not-use-color": isSSR?"unist-util-visit-parents/lib/color.node.js":"unist-util-visit-parents/lib/color.js",

+ 1 - 1
lerna.json

@@ -1,5 +1,5 @@
 {
     "useWorkspaces": true,
     "npmClient": "yarn",
-    "version": "2.64.0-beta.0"
+    "version": "2.64.0"
 }

+ 6 - 5
package.json

@@ -183,7 +183,7 @@
         "eslint-plugin-semi-design": "^2.33.0",
         "fs-extra": "^8.1.0",
         "glob": "^7.1.7",
-        "html-webpack-plugin": "^3.2.0",
+        "html-webpack-plugin": "^5.6.0",
         "husky": "^1.3.1",
         "jest": "^24.9.0",
         "jest-date-mock": "^1.0.8",
@@ -194,10 +194,10 @@
         "lint-staged": "^10.5.4",
         "marked": "^2.1.3",
         "mini-css-extract-plugin": "^0.12.0",
-        "null-loader": "^3.0.0",
+        "null-loader": "^4.0.1",
         "postcss-loader": "^2.1.6",
         "prettier": "^1.19.1",
-        "progress-bar-webpack-plugin": "^1.12.1",
+        "progress-bar-webpack-plugin": "^2.1.0",
         "react-dnd-cjs": "^9.5.1",
         "react-storybook-addon-props-combinations": "^1.1.0",
         "rimraf": "^2.7.1",
@@ -227,7 +227,8 @@
     "resolutions": {
         "@types/react": "^18.0.5",
         "@types/react-dom": "^18.0.1",
-        "babel-plugin-lodash/@babel/types": "~7.20.0"
+        "babel-plugin-lodash/@babel/types": "~7.20.0",
+        "cheerio": "1.0.0-rc.12"
     },
     "lint-staged": {
         "src/**/*.{js,jsx,ts,tsx}": [
@@ -241,4 +242,4 @@
         ]
     },
     "license": "MIT"
-}
+}

+ 3 - 3
packages/semi-animation-react/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-animation-react",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "motion library for semi-ui-react",
     "keywords": [
         "motion",
@@ -25,8 +25,8 @@
         "prepublishOnly": "npm run build:lib"
     },
     "dependencies": {
-        "@douyinfe/semi-animation": "2.64.0-beta.0",
-        "@douyinfe/semi-animation-styled": "2.64.0-beta.0",
+        "@douyinfe/semi-animation": "2.64.0",
+        "@douyinfe/semi-animation-styled": "2.64.0",
         "classnames": "^2.2.6"
     },
     "devDependencies": {

+ 1 - 1
packages/semi-animation-styled/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-animation-styled",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "semi styled animation",
     "keywords": [
         "semi",

+ 1 - 1
packages/semi-animation/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-animation",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "animation base library for semi-ui",
     "keywords": [
         "animation",

+ 1 - 1
packages/semi-eslint-plugin/package.json

@@ -1,6 +1,6 @@
 {
     "name": "eslint-plugin-semi-design",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "semi ui eslint plugin",
     "keywords": [
         "semi",

+ 2 - 0
packages/semi-foundation/cascader/foundation.ts

@@ -926,6 +926,7 @@ export default class CascaderFoundation extends BaseFoundation<CascaderAdapter,
             filteredKeys: new Set(filteredKeys),
         });
         this._adapter.notifyOnSearch(sugInput);
+        this._adapter.rePositionDropdown();
     }
 
     handleClear() {
@@ -1039,6 +1040,7 @@ export default class CascaderFoundation extends BaseFoundation<CascaderAdapter,
         }
         const removedItem = keyEntities[key] ?? {};
         !removedItem?.data?.disable && this._handleMultipleSelect(removedItem);
+        this._adapter.rePositionDropdown();
     }
 
     handleTagRemoveInTrigger = (pos: string) => {

+ 22 - 17
packages/semi-foundation/image/previewImageFoundation.ts

@@ -209,23 +209,28 @@ export default class PreviewImageFoundation<P = Record<string, any>, S = Record<
         };
 
         if (e && imageDOM && e.target === imageDOM) {
-            const { x: offsetX, y: offsetY } = this.calcBoundingRectMouseOffset({
-                width,
-                height,
-                offset: {
-                    x: e.offsetX,
-                    y: e.offsetY
-                },
-                rotation
-            });
-
-            const imageNewCenterX = e.clientX + (imageBound.width / 2 - offsetX) * changeScale;
-            const imageNewCenterY = e.clientY + (imageBound.height / 2 - offsetY) * changeScale;
-            const containerCenterX = this.containerWidth / 2;
-            const containerCenterY = this.containerHeight / 2;
-
-            newTranslateX = imageNewCenterX - containerCenterX;
-            newTranslateY = imageNewCenterY - containerCenterY;
+            let angle = rotation % 360;
+            angle < 0 && (angle = 360 + angle);
+            switch (angle) {
+                case 0:
+                    newTranslateX = (e.offsetX - 0.5 * width) * (1 - newZoom / currZoom) + translate.x;
+                    newTranslateY = (e.offsetY - 0.5 * height) * (1 - newZoom / currZoom) + translate.y;
+                    break;
+                case 90:
+                    newTranslateX = (0.5 * height - e.offsetY) * (1 - newZoom / currZoom) + translate.x;
+                    newTranslateY = (e.offsetX - 0.5 * width) * (1 - newZoom / currZoom) + translate.y;
+                    break;
+                case 180:
+                    newTranslateX = (0.5 * width - e.offsetX) * (1 - newZoom / currZoom) + translate.x;
+                    newTranslateY = (0.5 * height - e.offsetY) * (1 - newZoom / currZoom) + translate.y;
+                    break;
+                case 270:
+                    newTranslateX = (e.offsetY - 0.5 * height) * (1 - newZoom / currZoom) + translate.x; 
+                    newTranslateY = (0.5 * width - e.offsetX ) * (1 - newZoom / currZoom) + translate.y;
+                    break;
+                default:
+                    break;
+            }
         }
 
         const newTranslate = this.getSafeTranslate(newImageBound.width, newImageBound.height, newTranslateX, newTranslateY);

+ 8 - 8
packages/semi-foundation/navigation/foundation.ts

@@ -1,6 +1,6 @@
 import BaseFoundation, { DefaultAdapter } from '../base/foundation';
 import NavItem from './NavItem';
-import { ItemProps } from './itemFoundation';
+import { ItemProps, ItemKey } from './itemFoundation';
 import { strings } from './constants';
 import { get } from 'lodash';
 import isNullOrUndefined from '../utils/isNullOrUndefined';
@@ -10,18 +10,18 @@ export interface ItemKey2ParentKeysMap {
 }
 
 export interface OnClickData {
-    itemKey: string | number;
+    itemKey: ItemKey;
     domEvent: any;
     isOpen: boolean
 }
 
 export interface OnSelectData extends OnClickData {
-    selectedKeys: (string | number)[];
+    selectedKeys: ItemKey[];
     selectedItems: ItemProps[]
 }
 
 export interface OnOpenChangeData extends OnClickData {
-    openKeys: (string | number)[]
+    openKeys: ItemKey[]
 }
 
 export interface NavItemType {
@@ -52,7 +52,7 @@ export default class NavigationFoundation<P = Record<string, any>, S = Record<st
     }
 
     /* istanbul ignore next */
-    static getZeroParentKeys(itemKeysMap = {}, ...itemKeys: (string | number)[]) {
+    static getZeroParentKeys(itemKeysMap = {}, ...itemKeys: ItemKey[]) {
         const willAddKeys = [];
         if (itemKeys.length) {
             for (const itemKey of itemKeys) {
@@ -182,7 +182,7 @@ export default class NavigationFoundation<P = Record<string, any>, S = Record<st
         return [...willOpenKeys];
     }
 
-    getShouldOpenKeys(itemKeysMap: ItemKey2ParentKeysMap = {}, selectedKeys: (string | number)[] = []) {
+    getShouldOpenKeys(itemKeysMap: ItemKey2ParentKeysMap = {}, selectedKeys: ItemKey[] = []) {
         const willOpenKeySet = new Set();
 
         if (Array.isArray(selectedKeys) && selectedKeys.length) {
@@ -202,7 +202,7 @@ export default class NavigationFoundation<P = Record<string, any>, S = Record<st
 
     destroy() {}
 
-    selectLevelZeroParentKeys(itemKeysMap: ItemKey2ParentKeysMap, itemKeys: (string | number)[]) {
+    selectLevelZeroParentKeys(itemKeysMap: ItemKey2ParentKeysMap, itemKeys: ItemKey[]) {
         const _itemKeysMap = isNullOrUndefined(itemKeysMap) ? this.getState('itemKeysMap') : itemKeysMap;
         // console.log(itemKeysMap);
 
@@ -236,7 +236,7 @@ export default class NavigationFoundation<P = Record<string, any>, S = Record<st
     }
 
     /* istanbul ignore next */
-    judgeIfOpen(openKeys: (string | number)[], items: NavItemType[]): boolean {
+    judgeIfOpen(openKeys: ItemKey[], items: NavItemType[]): boolean {
         let shouldBeOpen = false;
 
         const _openKeys = Array.isArray(openKeys) ? openKeys : openKeys && [openKeys];

+ 6 - 4
packages/semi-foundation/navigation/itemFoundation.ts

@@ -17,10 +17,12 @@ export interface ItemProps {
     children?: any
 }
 
+export type ItemKey = string | number;
+
 export interface SelectedItemProps<Props = ItemProps> {
-    itemKey: string | number;
+    itemKey: ItemKey;
     text?: any;
-    selectedKeys?: string | number[];
+    selectedKeys?: ItemKey[];
     selectedItems?: Props[];
     domEvent?: any
 }
@@ -29,8 +31,8 @@ export interface ItemAdapter<P = Record<string, any>, S = Record<string, any>> e
     cloneDeep(value: any, customizer?: (value: any) => void): any;
     updateTooltipShow(showTooltip: boolean): void;
     updateSelected(selected: boolean): void;
-    updateGlobalSelectedKeys(keys: string[]): void;
-    getSelectedKeys(): string[];
+    updateGlobalSelectedKeys(keys: ItemKey[]): void;
+    getSelectedKeys(): ItemKey[];
     getSelectedKeysIsControlled(): boolean;
     notifyGlobalOnSelect(item: SelectedItemProps): void;
     notifyGlobalOnClick(item: SelectedItemProps): void;

+ 2 - 2
packages/semi-foundation/package.json

@@ -1,13 +1,13 @@
 {
     "name": "@douyinfe/semi-foundation",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "",
     "scripts": {
         "build:lib": "node ./scripts/compileLib.js",
         "prepublishOnly": "npm run build:lib"
     },
     "dependencies": {
-        "@douyinfe/semi-animation": "2.64.0-beta.0",
+        "@douyinfe/semi-animation": "2.64.0",
         "@mdx-js/mdx": "^3.0.1",
         "async-validator": "^3.5.0",
         "classnames": "^2.2.6",

+ 13 - 0
packages/semi-foundation/slider/foundation.ts

@@ -686,7 +686,16 @@ export default class SliderFoundation extends BaseFoundation<SliderAdapter> {
         }
     }
 
+    _noTooltip = () => {
+        const { tipFormatter, tooltipVisible } = this.getProps();
+        return tipFormatter === null || tooltipVisible === false;
+    }
+
     onFocus = (e: any, handler: 'min'| 'max') => {
+        const noTooltip = this._noTooltip();
+        if (noTooltip) {
+            return;
+        }
         handlePrevent(e);
         const { target } = e;
         try {
@@ -703,6 +712,10 @@ export default class SliderFoundation extends BaseFoundation<SliderAdapter> {
     }
 
     onBlur = (e: any, handler: 'min'| 'max') => {
+        const noTooltip = this._noTooltip();
+        if (noTooltip) {
+            return;
+        }
         const { firstDotFocusVisible, secondDotFocusVisible } = this.getStates();
         if (handler === 'min') {
             firstDotFocusVisible && this._adapter.setStateVal('firstDotFocusVisible', false);

+ 1 - 1
packages/semi-icons-lab/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@douyinfe/semi-icons-lab",
-  "version": "2.64.0-beta.0",
+  "version": "2.64.0",
   "description": "semi icons lab",
   "keywords": [
     "semi",

+ 1 - 1
packages/semi-icons/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-icons",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "semi icons",
     "keywords": [
         "semi",

+ 1 - 1
packages/semi-illustrations/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-illustrations",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "semi illustrations",
     "keywords": [
         "semi",

+ 2 - 2
packages/semi-next/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-next",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "Plugin that support Semi Design in Next.js",
     "author": "伍浩威 <[email protected]>",
     "homepage": "",
@@ -22,7 +22,7 @@
         "typescript": "^4"
     },
     "dependencies": {
-        "@douyinfe/semi-webpack-plugin": "2.64.0-beta.0"
+        "@douyinfe/semi-webpack-plugin": "2.64.0"
     },
     "gitHead": "eb34a4f25f002bb4cbcfa51f3df93bed868c831a"
 }

+ 1 - 1
packages/semi-rspack/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-rspack-plugin",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "",
     "homepage": "",
     "license": "MIT",

+ 1 - 1
packages/semi-scss-compile/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-scss-compile",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "compile semi scss to css",
     "author": "[email protected]",
     "license": "MIT",

+ 1 - 1
packages/semi-theme-default/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-theme-default",
-    "version": "2.64.0-beta.0",
+    "version": "2.64.0",
     "description": "semi-theme-default",
     "keywords": [
         "semi-theme",

+ 1 - 1
packages/semi-ui/_base/_story/a11y.jsx

@@ -336,7 +336,7 @@ export default function SemiA11y() {
                             style={{ marginRight: 12 }}
                         ></Avatar>
                         {/* 宽度计算方式为单元格设置宽度 - 非文本内容宽度 */}
-                        <Text heading={5} ellipsis={{ showTooltip: true }} style={{ width: 'calc(400px - 76px)' }}>
+                        <Text ellipsis={{ showTooltip: true }} style={{ width: 'calc(400px - 76px)' }}>
                             {text}
                         </Text>
                     </span>

+ 0 - 1
packages/semi-ui/anchor/index-en-US.md

@@ -1 +0,0 @@
-../../../content/navigation/anchor/index-en-US.md

+ 0 - 1
packages/semi-ui/anchor/index.md

@@ -1 +0,0 @@
-../../../content/navigation/anchor/index.md

+ 0 - 1
packages/semi-ui/autoComplete/index-en-US.md

@@ -1 +0,0 @@
-../../../content/input/autocomplete/index-en-US.md

+ 0 - 1
packages/semi-ui/autoComplete/index.md

@@ -1 +0,0 @@
-../../../content/input/autocomplete/index.md

+ 0 - 1
packages/semi-ui/avatar/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/avatar/index-en-US.md

+ 0 - 1
packages/semi-ui/avatar/index.md

@@ -1 +0,0 @@
-../../../content/show/avatar/index.md

+ 0 - 1
packages/semi-ui/backtop/index-en-US.md

@@ -1 +0,0 @@
-../../../content/navigation/backtop/index-en-US.md

+ 0 - 1
packages/semi-ui/backtop/index.md

@@ -1 +0,0 @@
-../../../content/navigation/backtop/index.md

+ 0 - 1
packages/semi-ui/badge/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/badge/index-en-US.md

+ 0 - 1
packages/semi-ui/badge/index.md

@@ -1 +0,0 @@
-../../../content/show/badge/index.md

+ 0 - 1
packages/semi-ui/banner/index-en-US.md

@@ -1 +0,0 @@
-../../../content/feedback/banner/index-en-US.md

+ 0 - 1
packages/semi-ui/banner/index.md

@@ -1 +0,0 @@
-../../../content/feedback/banner/index.md

+ 0 - 1
packages/semi-ui/breadcrumb/index-en-US.md

@@ -1 +0,0 @@
-../../../content/navigation/breadcrumb/index-en-US.md

+ 0 - 1
packages/semi-ui/breadcrumb/index.md

@@ -1 +0,0 @@
-../../../content/navigation/breadcrumb/index.md

+ 0 - 1
packages/semi-ui/button/index-en-US.md

@@ -1 +0,0 @@
-../../../content/input/button/index-en-US.md

+ 0 - 1
packages/semi-ui/button/index.md

@@ -1 +0,0 @@
-../../../content/input/button/index.md

+ 0 - 1
packages/semi-ui/calendar/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/calendar/index-en-US.md

+ 0 - 1
packages/semi-ui/calendar/index.md

@@ -1 +0,0 @@
-../../../content/show/calendar/index.md

+ 0 - 1
packages/semi-ui/card/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/card/index-en-US.md

+ 0 - 1
packages/semi-ui/card/index.md

@@ -1 +0,0 @@
-../../../content/show/card/index.md

+ 0 - 1
packages/semi-ui/carousel/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/carousel/index-en-US.md

+ 0 - 1
packages/semi-ui/carousel/index.md

@@ -1 +0,0 @@
-../../../content/show/carousel/index.md

+ 0 - 1
packages/semi-ui/cascader/index-en-US.md

@@ -1 +0,0 @@
-../../../content/input/cascader/index-en-US.md

+ 0 - 1
packages/semi-ui/cascader/index.md

@@ -1 +0,0 @@
-../../../content/input/cascader/index.md

+ 2 - 2
packages/semi-ui/chat/index.tsx

@@ -17,7 +17,7 @@ import { Locale } from "../locale/interface";
 import { Button, Upload } from '../index';
 
 const prefixCls = cssClasses.PREFIX;
-const { CHAT_ALIGN, MODE, SEND_HOT_KEY } = strings;
+const { CHAT_ALIGN, MODE, SEND_HOT_KEY, MESSAGE_STATUS } = strings;
 
 class Chat extends BaseComponent<ChatProps, ChatState> {
 
@@ -283,7 +283,7 @@ class Chat extends BaseComponent<ChatProps, ChatState> {
         const lastChat = chats.length > 0 && chats[chats.length - 1];
         let disableSend = false;
         if (lastChat && showStopGenerate) {
-            const lastChatOnGoing = lastChat.status && lastChat.status !== 'complete';
+            const lastChatOnGoing = lastChat.status && [MESSAGE_STATUS.LOADING, MESSAGE_STATUS.INCOMPLETE].includes(lastChat.status);
             disableSend = lastChatOnGoing;
             showStopGenerate && (showStopGenerateFlag = lastChatOnGoing);
         }

+ 0 - 1
packages/semi-ui/checkbox/index-en-US.md

@@ -1 +0,0 @@
-../../../content/input/checkbox/index-en-US.md

+ 0 - 1
packages/semi-ui/checkbox/index.md

@@ -1 +0,0 @@
-../../../content/input/checkbox/index.md

+ 0 - 1
packages/semi-ui/collapse/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/collapse/index-en-US.md

+ 0 - 1
packages/semi-ui/collapse/index.md

@@ -1 +0,0 @@
-../../../content/show/collapse/index.md

+ 0 - 1
packages/semi-ui/collapsible/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/collapsible/index-en-US.md

+ 0 - 1
packages/semi-ui/collapsible/index.md

@@ -1 +0,0 @@
-../../../content/show/collapsible/index.md

+ 0 - 1
packages/semi-ui/configProvider/index-en-US.md

@@ -1 +0,0 @@
-../../../content/other/configprovider/index-en-US.md

+ 0 - 1
packages/semi-ui/configProvider/index.md

@@ -1 +0,0 @@
-../../../content/other/configprovider/index.md

+ 11 - 9
packages/semi-ui/datePicker/datePicker.tsx

@@ -312,7 +312,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
                 }
                 switch (rangeInputFocus) {
                     case 'rangeStart':
-                        const inputStartNode = get(this, 'rangeInputStartRef.current');
+                        const inputStartNode = get(this, 'rangeInputStartRef.current') as HTMLInputElement;
                         inputStartNode && inputStartNode.focus({ preventScroll });
                         /**
                          * 解决选择完startDate,切换到endDate后panel被立马关闭的问题。
@@ -332,7 +332,7 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
                         }, 0);
                         break;
                     case 'rangeEnd':
-                        const inputEndNode = get(this, 'rangeInputEndRef.current');
+                        const inputEndNode = get(this, 'rangeInputEndRef.current') as HTMLInputElement;
                         inputEndNode && inputEndNode.focus({ preventScroll });
                         /**
                          * 解决选择完startDate,切换到endDate后panel被立马关闭的问题。
@@ -363,14 +363,14 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
                 switch (rangeInputFocus) {
                     case 'rangeEnd':
                         if (document.activeElement !== this.rangeInputEndRef.current) {
-                            const inputEndNode = get(this, 'rangeInputEndRef.current');
+                            const inputEndNode = get(this, 'rangeInputEndRef.current') as HTMLInputElement;
                             inputEndNode && inputEndNode.focus({ preventScroll });
                         }
                         break;
                     case 'rangeStart':
                     default:
                         if (document.activeElement !== this.rangeInputStartRef.current) {
-                            const inputStartNode = get(this, 'rangeInputStartRef.current');
+                            const inputStartNode = get(this, 'rangeInputStartRef.current') as HTMLInputElement;
                             inputStartNode && inputStartNode.focus({ preventScroll });
                         }
                         break;
@@ -378,20 +378,20 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
             },
             setInputFocus: () => {
                 const { preventScroll } = this.props;
-                const inputNode = get(this, 'inputRef.current');
+                const inputNode = get(this, 'inputRef.current') as HTMLInputElement;
                 inputNode && inputNode.focus({ preventScroll });
             },
             setInputBlur: () => {
-                const inputNode = get(this, 'inputRef.current');
+                const inputNode = get(this, 'inputRef.current') as HTMLInputElement;
                 inputNode && inputNode.blur();
             },
             setRangeInputBlur: () => {
                 const { rangeInputFocus } = this.state;
                 if (rangeInputFocus === 'rangeStart') {
-                    const inputStartNode = get(this, 'rangeInputStartRef.current');
+                    const inputStartNode = get(this, 'rangeInputStartRef.current') as HTMLInputElement;
                     inputStartNode && inputStartNode.blur();
                 } else if (rangeInputFocus === 'rangeEnd') {
-                    const inputEndNode = get(this, 'rangeInputEndRef.current');
+                    const inputEndNode = get(this, 'rangeInputEndRef.current') as HTMLInputElement;
                     inputEndNode && inputEndNode.blur();
                 }
                 this.adapter.setRangeInputFocus(false);
@@ -882,6 +882,8 @@ export default class DatePicker extends BaseComponent<DatePickerProps, DatePicke
         const inner = this.renderInner(pick(this.props, innerPropKeys));
         const wrappedInner = this.wrapPopover(inner);
 
-        return <div {...outerProps}>{wrappedInner}</div>;
+        return <div {...outerProps}>
+            {wrappedInner}
+        </div>;
     }
 }

+ 0 - 1
packages/semi-ui/datePicker/index-en-US.md

@@ -1 +0,0 @@
-../../../content/input/datepicker/index-en-US.md

+ 0 - 1
packages/semi-ui/datePicker/index.md

@@ -1 +0,0 @@
-../../../content/input/datepicker/index.md

+ 0 - 1
packages/semi-ui/descriptions/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/descriptions/index-en-US.md

+ 0 - 1
packages/semi-ui/descriptions/index.md

@@ -1 +0,0 @@
-../../../content/show/descriptions/index.md

+ 0 - 1
packages/semi-ui/divider/index-en-US.md

@@ -1 +0,0 @@
-../../../content/basic/divider/index-en-US.md

+ 0 - 1
packages/semi-ui/divider/index.md

@@ -1 +0,0 @@
-../../../content/basic/divider/index.md

+ 0 - 1
packages/semi-ui/dropdown/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/dropdown/index-en-US.md

+ 0 - 1
packages/semi-ui/dropdown/index.md

@@ -1 +0,0 @@
-../../../content/show/dropdown/index.md

+ 0 - 1
packages/semi-ui/empty/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/empty/index-en-US.md

+ 0 - 1
packages/semi-ui/empty/index.md

@@ -1 +0,0 @@
-../../../content/show/empty/index.md

+ 90 - 0
packages/semi-ui/form/_story/ArrayField/asyncNested.jsx

@@ -0,0 +1,90 @@
+import { IconPlusCircle } from "@douyinfe/semi-icons";
+import { ArrayField, Button, Card, Form } from "@douyinfe/semi-ui";
+import React, { useEffect, useState } from "react";
+
+const AsyncComponent = ({ field }) => {
+    const [done, setDone] = useState(false);
+    useEffect(() => {
+        setTimeout(() => {
+            setDone(true);
+        }, 10);
+    }, []);
+    const ret = done ? (
+        <Form.Input
+            field={field}
+            style={{ width: 100, marginRight: 12 }}
+        ></Form.Input>
+    ) : null;
+    return <>{ret} 这里是异步组件</>;
+};
+
+const NestedField = (props) => {
+    const rowStyle = {
+        marginTop: 12,
+        marginLeft: 12,
+    };
+    return (
+        <Form.Slot label="内层">
+            <ArrayField field={`${props.field}.rules`}>
+                {({ add, arrayFields }) => (
+                    <React.Fragment>
+                        {arrayFields.map(({ field, key }) => (
+                            <div style={{ display: "flex" }} key={key}>
+                                <AsyncComponent field={`${field}[itemName]`} />
+                            </div>
+                        ))}
+                        <Button
+                            icon={<IconPlusCircle />}
+                            style={rowStyle}
+                            onClick={() => {
+                                return add();
+                            }}
+                        />
+                    </React.Fragment>
+                )}
+            </ArrayField>
+        </Form.Slot>
+    );
+};
+
+const AsyncNestArrayField = () => {
+    return (
+        <Form labelPosition="left" style={{ textAlign: "left" }}>
+            <Form.Slot label="外层">
+                <ArrayField field="group">
+                    {({ add, arrayFields }) => (
+                        <React.Fragment>
+                            <Button
+                                icon={<IconPlusCircle />}
+                                theme="solid"
+                                onClick={() => {
+                                    return add();
+                                }}
+                            >
+                                新增收信规则
+                            </Button>
+                            {arrayFields.map(({ field, key, remove }, i) => (
+                                <div
+                                    key={key}
+                                    style={{ width: 1000, display: "flex", flexWrap: "wrap" }}
+                                >
+                                    <Card
+                                        shadow="hover"
+                                        style={{
+                                            width: 620,
+                                            margin: "12px 0 0 24px",
+                                        }}
+                                    >
+                                        <NestedField field={field} />
+                                    </Card>
+                                </div>
+                            ))}
+                        </React.Fragment>
+                    )}
+                </ArrayField>
+            </Form.Slot>
+        </Form>
+    );
+};
+
+export default AsyncNestArrayField;

+ 0 - 1
packages/semi-ui/form/index-en-US.md

@@ -1 +0,0 @@
-../../../content/input/form/index-en-US.md

+ 0 - 1
packages/semi-ui/form/index.md

@@ -1 +0,0 @@
-../../../content/input/form/index.md

+ 0 - 1
packages/semi-ui/grid/index-en-US.md

@@ -1 +0,0 @@
-../../../content/basic/grid/index-en-US.md

+ 0 - 1
packages/semi-ui/grid/index.md

@@ -1 +0,0 @@
-../../../content/basic/grid/index.md

+ 0 - 1
packages/semi-ui/highlight/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/highlight/index-en-US.md

+ 0 - 1
packages/semi-ui/highlight/index.md

@@ -1 +0,0 @@
-../../../content/show/highlight/index.md

+ 0 - 1
packages/semi-ui/icons/index-en-US.md

@@ -1 +0,0 @@
-../../../content/basic/icon/index-en-US.md

+ 0 - 1
packages/semi-ui/icons/index.md

@@ -1 +0,0 @@
-../../../content/basic/icon/index.md

+ 1 - 0
packages/semi-ui/image/_story/image.stories.jsx

@@ -468,6 +468,7 @@ export const CustomContainer = () => {
                 style={{ 
                     height: 400, 
                     position: "relative",
+                    margin: '100px 200px',
                 }} 
             >
                 <ImagePreview

+ 0 - 1
packages/semi-ui/image/index-en-US.md

@@ -1 +0,0 @@
-../../../content/show/image/index-en-US.md

+ 0 - 1
packages/semi-ui/image/index.md

@@ -1 +0,0 @@
-../../../content/show/image/index.md

+ 0 - 1
packages/semi-ui/input/index-en-US.md

@@ -1 +0,0 @@
-../../../content/input/input/index-en-US.md

+ 0 - 1
packages/semi-ui/input/index.md

@@ -1 +0,0 @@
-../../../content/input/input/index.md

+ 0 - 1
packages/semi-ui/inputNumber/index-en-US.md

@@ -1 +0,0 @@
-../../../content/input/inputnumber/index-en-US.md

+ 0 - 1
packages/semi-ui/inputNumber/index.md

@@ -1 +0,0 @@
-../../../content/input/inputnumber/index.md

部分文件因为文件数量过多而无法显示