Browse Source

Merge branch 'release'

zhangyumei.0319 1 year ago
parent
commit
9df610bbed
57 changed files with 680 additions and 298 deletions
  1. 1 0
      content/input/datepicker/index-en-US.md
  2. 1 1
      content/input/datepicker/index.md
  3. 1 0
      content/input/timepicker/index-en-US.md
  4. 1 0
      content/input/timepicker/index.md
  5. 3 0
      content/show/calendar/index-en-US.md
  6. 3 0
      content/show/calendar/index.md
  7. 1 0
      content/show/sidesheet/index-en-US.md
  8. 1 0
      content/show/sidesheet/index.md
  9. 1 0
      content/show/table/index-en-US.md
  10. 1 0
      content/show/table/index.md
  11. 15 1
      content/start/changelog/index-en-US.md
  12. 14 0
      content/start/changelog/index.md
  13. 11 0
      cypress/e2e/table.spec.js
  14. 1 1
      lerna.json
  15. 3 3
      packages/semi-animation-react/package.json
  16. 1 1
      packages/semi-animation-styled/package.json
  17. 1 1
      packages/semi-animation/package.json
  18. 1 1
      packages/semi-eslint-plugin/package.json
  19. 2 2
      packages/semi-foundation/package.json
  20. 1 0
      packages/semi-foundation/sideSheet/sideSheetFoundation.ts
  21. 1 1
      packages/semi-foundation/slider/foundation.ts
  22. 3 0
      packages/semi-foundation/table/table.scss
  23. 1 1
      packages/semi-icons-lab/package.json
  24. 1 1
      packages/semi-icons/package.json
  25. 1 1
      packages/semi-illustrations/package.json
  26. 2 2
      packages/semi-next/package.json
  27. 1 1
      packages/semi-rspack/package.json
  28. 1 1
      packages/semi-scss-compile/package.json
  29. 1 1
      packages/semi-theme-default/package.json
  30. 2 2
      packages/semi-ui/banner/index.tsx
  31. 1 1
      packages/semi-ui/breadcrumb/item.tsx
  32. 57 0
      packages/semi-ui/calendar/_story/calendar.stories.jsx
  33. 3 1
      packages/semi-ui/calendar/dayCalendar.tsx
  34. 6 7
      packages/semi-ui/calendar/dayCol.tsx
  35. 1 0
      packages/semi-ui/calendar/index.tsx
  36. 2 1
      packages/semi-ui/calendar/interface.ts
  37. 3 2
      packages/semi-ui/calendar/rangeCalendar.tsx
  38. 2 1
      packages/semi-ui/calendar/weekCalendar.tsx
  39. 1 1
      packages/semi-ui/modal/Modal.tsx
  40. 1 1
      packages/semi-ui/navigation/SubNav.tsx
  41. 7 7
      packages/semi-ui/package.json
  42. 1 1
      packages/semi-ui/popconfirm/index.tsx
  43. 6 2
      packages/semi-ui/sideSheet/SideSheetContent.tsx
  44. 10 0
      packages/semi-ui/sideSheet/__test__/sideSheet.test.js
  45. 6 1
      packages/semi-ui/table/Body/BaseRow.tsx
  46. 3 0
      packages/semi-ui/table/Body/ExpandedRow.tsx
  47. 18 9
      packages/semi-ui/table/Body/index.tsx
  48. 2 1
      packages/semi-ui/table/_story/table.stories.jsx
  49. 297 0
      packages/semi-ui/table/_story/v2/KeepDOM/index.tsx
  50. 1 0
      packages/semi-ui/table/_story/v2/index.js
  51. 1 0
      packages/semi-ui/table/interface.ts
  52. 5 0
      packages/semi-ui/timePicker/TimePicker.tsx
  53. 16 2
      packages/semi-ui/timePicker/_story/timepicker.stories.jsx
  54. 1 1
      packages/semi-ui/toast/toast.tsx
  55. 1 1
      packages/semi-webpack/package.json
  56. 150 150
      sitemap.xml
  57. 0 86
      yarn.lock

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

@@ -927,6 +927,7 @@ function Demo() {
 | startDateOffset    | When type is dateRange, set the start date of the selected range                                                                                                                                                                              | (selectedDate?: Date) => Date;                                                                                                                                                                            | -                                                                                     | **1.10.0**                |
 | startYear | start year of the year scroll panel                                                                                                                                                                                                           | number | 100 years before current year | **2.36.0** |
 | endYear | end year of the year scroll panel                                                                                                                                                                                                             | number | 100 years after current year | **2.36.0** |
+| stopPropagation | Whether to prevent click events on the popup layer from bubbling | boolean | true | |
 | syncSwitchMonth    | In the scene of range, it supports synchronous switching of the month of the dual panel                                                                                                                                                       |boolean|false|**1.28.0**|
 | timePickerOpts     | For other parameters that can be transparently passed to the time selector, see [TimePicker·API Reference](/en-US/input/timepicker#API%20Reference)                                                                                           |                                                                                                                                                                                                           | object                                                                                | **1.1.0**                 |
 | topSlot            | Render the top extra area                                                                                                                                                                                                                     | ReactNode                                                                                                                                                                                                 |                                                | **1.22.0**                   |

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

@@ -892,7 +892,7 @@ function Demo() {
 | startDateOffset | type 为 dateRange 时,设置单击选择范围的开始日期                                                                     | <ApiType detail='(selectedDate?: Date) => Date '>(selectedDate) => Date </ApiType>| - | **1.10.0** |
 | startYear | 滚轮的开始年                                                                                               | number | 当前年前 100 年 | **2.36.0** |
 | endYear | 滚轮的结束年,结束年需要大于开始年                                                                                    | number | 当前年后 100 年 | **2.36.0** |
-| stopPropagation | 是否阻止弹出层上的点击事件冒泡                                                                                      | boolean | false |  |
+| stopPropagation | 是否阻止弹出层上的点击事件冒泡                                                                                      | boolean | true |  |
 | style | 自定义样式                                                                                                | CSSProperties |  |  |
 | syncSwitchMonth | 在范围选择的场景中,支持同步切换双面板的月份                                                                               | boolean | false | **1.28.0** |
 | timePickerOpts | 其他可以透传给时间选择器的参数,详见 [TimePicker·API 参考](/zh-CN/input/timepicker#API_参考)                               |  | object | **1.1.0** |

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

@@ -334,6 +334,7 @@ function Demo(props = {}) {
 | scrollItemProps | The props passed through to ScrollItem. The optional values are the same as [ScrollList#API](/zh-CN/show/scrolllist#ScrollItem)                                                                                                               | object |  | **0.31.0** |
 | secondStep | Second option interval                                                                                                                                                                                                                        | number | 1 |
 | showClear | Whether to show the clear button                                                                                                                                                                                                              | boolean | true | **0.35.0**|
+| stopPropagation | Whether to prevent click events on the popup layer from bubbling | boolean | true | **2.49.0** |
 | size  | Size of input box, one of 'default', 'small' and 'large'                                                                                                                                                                                      | string                                                                   | 'default'                                                              |                    |
 | triggerRender | Custom trigger rendering method                                                                                                                                                                                                               | ({ placeholder: string }) => ReactNode |  | **0.34.0** |
 | type | type                                                                                                                                                                                                                                          | "time"\|"timeRange" | "time" |

+ 1 - 0
content/input/timepicker/index.md

@@ -325,6 +325,7 @@ function Demo(props = {}) {
 | scrollItemProps     | 透传给 scrollItem 的属性,可选值同[ScrollList#API](/zh-CN/show/scrolllist#ScrollItem)                                                | object                                                           | | **0.31.0**         |
 | secondStep          | 秒选项间隔                                             | number                                                                            | 1                                                                 |                    |
 | showClear           | 是否展示清除按钮 **v>=0.35.0**                         | boolean                                                                           | true                                                              |                    |
+| stopPropagation | 是否阻止弹出层上的点击事件冒泡                                                                                      | boolean | true | **2.49.0**   |
 | size                | 输入框的大小,可选 'default','small','large'          | string                                                                   | 'default'                                                              |                    |
 | triggerRender       | 自定义触发器渲染方法                                   | ({ placeholder: string }) => ReactNode                                            | -                                                                 | **0.34.0**  |
 | type                | 类型                                                   | "time"\|"timeRange"                                                               | "time"                                                            |                    |

+ 3 - 0
content/show/calendar/index-en-US.md

@@ -190,6 +190,7 @@ class Demo extends React.Component {
             {
                 key: '6',
                 start: new Date(2019, 6, 23, 8, 32, 0),
+                end: new Date(2019, 6, 23, 8,42, 0),
                 children: <div style={dailyStyle}>July 23 8:32</div>,
             },
             {
@@ -229,6 +230,7 @@ class Demo extends React.Component {
                     mode={mode}
                     displayValue={displayValue}
                     events={events}
+                    minEventHeight={40}
                     range={mode === 'range' ? [new Date(2019, 6, 23), new Date(2019, 6, 26)] : []}
                 ></Calendar>
             </>
@@ -356,6 +358,7 @@ import { Avatar, Calendar } from '@douyinfe/semi-ui';
 | header       | Header                                                                                                 | React.Node            | -            |
 | height       | Height                                                                                                 | string\|number        | 600          |
 | markWeekend  | Toggle whether to distinguish weekend column with grey background from weekdays                        | boolean               | false        |
+| minEventHeight | The minimum height of events in daily view, multi-day view and weekly view(**>=2.49.0**) | number | Number.MIN_SAFE_INTEGER |
 | mode         | Mode, one of `day`, `week`, `month`, `range`(**>=1.5.0**)                                         | "day" \| "week" \| "month" \| "range" | `week` |
 | onClick      | Callback invoked when clicking on date, basic unit for day and week mode is 0.5h, for month mode is 1d | function(e: Event, date: Date) | -            |
 | onClose | Callback invoked when event display card close in the month mode | function(e: Event) | - |

+ 3 - 0
content/show/calendar/index.md

@@ -182,6 +182,7 @@ class Demo extends React.Component {
             {
                 key: '6',
                 start: new Date(2019, 6, 23, 8, 32, 0),
+                end: new Date(2019, 6, 23, 8, 42, 0),
                 children: <div style={dailyStyle}>7月23日 8:32</div>,
             },
             {
@@ -221,6 +222,7 @@ class Demo extends React.Component {
                     mode={mode}
                     displayValue={displayValue}
                     events={events}
+                    minEventHeight={40}
                     range={mode === 'range' ? [new Date(2019, 6, 23), new Date(2019, 6, 26)] : []}
                 ></Calendar>
             </>
@@ -333,6 +335,7 @@ import { Avatar, Calendar } from '@douyinfe/semi-ui';
 | header | 自定义头部内容 | ReactNode | - |
 | height | 日历高度 | string\|number | 600 |
 | markWeekend | 区分周末列和工作日,以灰色显示 | boolean | false |
+| minEventHeight | 日视图、多日视图以及周视图下事件的最小高度(**>=2.49.0**) | number | Number.MIN_SAFE_INTEGER |
 | mode | 初始模式,`day`, `week`, `month`, `range`(**>=1.5.0**) | "day" \| "week" \| "month" \| "range" | `week` |
 | onClick | 单击日期格的回调,日视图和周视图以半小时为单位,月视图以日为单位 | function(e: Event, date: Date) | - |
 | onClose | 月视图下,展示所有 event 的卡片关闭时的回调 | function(e: Event) | - |

+ 1 - 0
content/show/sidesheet/index-en-US.md

@@ -303,6 +303,7 @@ class Demo extends React.Component {
 | bodyStyle | Content style                                                                                                              | CSSProperties | - | - |
 | className | Class name                                                                                                                 | string | - | - |
 | closable | Toggle whether to show close button                                                                                        | boolean | true | - |
+| closeIcon         | Icon for close button                                                                                              | ReactNode | <IconClose /\>    | - |
 | closeOnEsc | oggle whether to allow close modal by keyboard event Esc                                                                   | boolean | false | 1.0.0 |
 | disableScroll | Toggle whether to add `overflow: hidden` to document.body element. Only works when not setting `getPopupContainer`         | boolean | true | - |
 | footer | Footer                                                                                                                     | ReactNode | null | 1.3.0 |

+ 1 - 0
content/show/sidesheet/index.md

@@ -308,6 +308,7 @@ class Demo extends React.Component {
 | bodyStyle | 面板内容的样式                                                                       | CSSProperties | - | - |
 | className | 类名                                                                            | string | - | - |
 | closable | 是否允许通过右上角的关闭按钮关闭                                                              | boolean | true | - |
+| closeIcon | 关闭按钮的 icon                                                                 | ReactNode | <IconClose /\> | - |
 | closeOnEsc | 允许通过键盘事件 Esc 触发关闭                                                             | boolean | false | 1.0.0 |
 | disableScroll | 默认渲染在 document.body 层时是否禁止 body 的滚动,即给 body 添加 `overflow: hidden`             | boolean | true | - |
 | footer | 侧边栏底部                                                                         | ReactNode | null | 1.3.0 |

+ 1 - 0
content/show/table/index-en-US.md

@@ -4992,6 +4992,7 @@ render(App);
 | groupBy | Grouping basis, generally a method of a key name or a return value of a string or number in the dataSource element | string\|number<br/>\|(record: any) => string\|number |  | **0.29.0** |
 | hideExpandedColumn | Whether to hide the expansion button column and turn off the rendering of the expansion button when it is turned on | boolean | true |
 | indentSize | indent size of TableCell | number | 20 |
+| keepDOM | Whether to not destroy the collapsed DOM when folding a row | boolean | false |
 | loading | Table is loading or not | boolean | false |
 | pagination | Paging component configuration | boolean\|TablePaginationProps | true |
 | prefixCls | Style name prefix | string |  |

+ 1 - 0
content/show/table/index.md

@@ -5003,6 +5003,7 @@ render(App);
 | groupBy | 分组依据,一般为 dataSource 元素中某个键名或者返回值为字符串、数字的一个方法 | string\|number<br/>\|(record: RecordType) => string\|number |  | **0.29.0** |
 | hideExpandedColumn | 当表格可展开时,展开按钮默认会与第一列文案渲染在同一个单元格内,设为 false 时默认将展开按钮单独作为一列渲染 | boolean | true |
 | indentSize | 树形结构 TableCell 的缩进大小 | number | 20 |
+| keepDOM | 折叠行时是否不销毁被折叠的 DOM | boolean | false |
 | loading | 页面是否加载中 | boolean | false |
 | pagination | 分页组件配置 | boolean\|TablePaginationProps | true |
 | prefixCls | 样式名前缀 | string |  |

+ 15 - 1
content/start/changelog/index-en-US.md

@@ -16,6 +16,21 @@ Version:Major.Minor.Patch (follow the **Semver** specification)
 
 ---
 
+
+#### 🎉 2.49.0-beta.0 (2023-12-11)
+- 【Feat】
+    - Table supports keepDOM and does not destroy folded rows when folding [#1969](https://github.com/DouyinFE/semi-design/pull/1969)
+    - Calendar adds the minEventHeight api to support the display of the event dom structure with a minimum height when the event start and end are very close in day, multi-day and week views [#702](https://github.com/DouyinFE/semi-design/issues/702)
+    - Timepicker adds stopPropagation to determine whether to prevent click events on the popup layer from bubbling [#1966](https://github.com/DouyinFE/semi-design/pull/1966)
+    - The SideSheet component supports custom closeIcon [@LonelySnowman](https://github.com/LonelySnowman) [#1948](https://github.com/DouyinFE/semi-design/issues/1948)
+- 【Fix】
+    - Fixed the issue where the tooltip on the Slider handle occasionally flickers when dragging [#1935](https://github.com/DouyinFE/semi-design/pull/1935)
+    - Fixed typography JS truncation calculation error for non-wrapped text [@marshcat0](https://github.com/marshcat0)
+    - Fixed the issue where Radio pure card clicks on the hotspot incorrectly under Safari [@nekocode](https://github.com/nekocode) [#1959](https://github.com/DouyinFE/semi-design/issues/1959)
+- 【Docs】
+    - Add VChart chart introduction
+
+
 #### 🎉 2.48.0 (2023-12-01)
 - 【Fix】
     - fixed the issue of incorrect defaultValue setting when TimePicker format is HH. (Note: If the value type originally passed in default or value is illegal, for example, a timestamp in numeric format is passed in in string form, type conversion will no longer be attempted)
@@ -23,7 +38,6 @@ Version:Major.Minor.Patch (follow the **Semver** specification)
     - add @douyinfe/semi-icons-lab description
 
 
-
 #### 🎉 2.48.0-beta.0 (2023-11-27)
 - 【Feat】
     - Slider adds `showMarkLabel` to control the visibility of the label, `tooltipOnMark` to display the tooltip on the mark, and `showArrow` to control the visibility of the tooltip triangle.

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

@@ -13,6 +13,20 @@ Semi 版本号遵循 **Semver** 规范(主版本号-次版本号-修订版本
 -   修订版本号(patch):仅会进行 bugfix,发布时间不限
 -   不同版本间的详细关系,可查阅 [FAQ](/zh-CN/start/faq)
 
+#### 🎉 2.49.0-beta.0 (2023-12-11)
+- 【Feat】
+    - Table 支持 keepDOM,在折叠时不销毁被折叠的行 [#1969](https://github.com/DouyinFE/semi-design/pull/1969)
+    - Calendar 新增 minEventHeight api 以支持在日、多日以及周视图下,当 event start 和 end 非常接近时,event dom 结构存在且有最小高度的展示 [#702](https://github.com/DouyinFE/semi-design/issues/702) 
+    - Timepicker 新增 stopPropagation 用于判断是否阻止弹出层上的点击事件冒泡 [#1966](https://github.com/DouyinFE/semi-design/pull/1966)
+    - SideSheet 组件支持自定义 closeIcon [@LonelySnowman](https://github.com/LonelySnowman) [#1948](https://github.com/DouyinFE/semi-design/issues/1948)
+- 【Fix】
+    - 修复 Slider 把手上的tooltip 在拖动时偶尔闪烁的问题 [#1935](https://github.com/DouyinFE/semi-design/pull/1935)
+    - 修复 Typography JS截断对于不换行文本的计算错误 [@marshcat0](https://github.com/marshcat0)
+    - 修复 Radio pure card 在 Safari 下点击热区不正确的问题 [@nekocode](https://github.com/nekocode) [#1959](https://github.com/DouyinFE/semi-design/issues/1959)
+- 【Docs】
+    - 新增 VChart 图表介绍
+
+
 #### 🎉 2.48.0 (2023-12-01)
 - 【Fix】
     - 修复 TimePicker format 为 HH 时,defaultValue 设置不正确问题。(注意:若原先 default 或 value 传入的值类型不合法,例如数字格式的时间戳以字符串形式传入,将不再尝试进行类型转换)

+ 11 - 0
cypress/e2e/table.spec.js

@@ -229,4 +229,15 @@ describe('table', () => {
             expect(style.height).eq('0px');
         });
     })
+
+    it('test keepDOM', () => {
+        cy.visit('http://localhost:6006/iframe.html?id=table--keep-dom&viewMode=story');
+        cy.get('[data-cy=expand] .semi-table-row-hidden').should('have.length', 3);
+        cy.get('[data-cy=tree] .semi-table-row-hidden').should('have.length', 5);
+        cy.get('[data-cy=tree] .semi-table-expand-icon').eq(0).click();
+        cy.get('[data-cy=tree] .semi-table-row-hidden').should('have.length', 3);
+        cy.get('[data-cy=section] .semi-table-row-hidden').should('have.length', 10);
+        cy.get('[data-cy=section] .semi-table-expand-icon').eq(0).click({ force: true });
+        cy.get('[data-cy=section] .semi-table-row-hidden').should('have.length', 7);
+    });
 });

+ 1 - 1
lerna.json

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

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

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-animation-react",
-    "version": "2.48.0",
+    "version": "2.49.0-beta.0",
     "description": "motion library for semi-ui-react",
     "keywords": [
         "motion",
@@ -25,8 +25,8 @@
         "prepublishOnly": "npm run build:lib"
     },
     "dependencies": {
-        "@douyinfe/semi-animation": "2.48.0",
-        "@douyinfe/semi-animation-styled": "2.48.0",
+        "@douyinfe/semi-animation": "2.49.0-beta.0",
+        "@douyinfe/semi-animation-styled": "2.49.0-beta.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.48.0",
+    "version": "2.49.0-beta.0",
     "description": "semi styled animation",
     "keywords": [
         "semi",

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

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-animation",
-    "version": "2.48.0",
+    "version": "2.49.0-beta.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.48.0",
+    "version": "2.49.0-beta.0",
     "description": "semi ui eslint plugin",
     "keywords": [
         "semi",

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

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

+ 1 - 0
packages/semi-foundation/sideSheet/sideSheetFoundation.ts

@@ -8,6 +8,7 @@ export interface SideSheetProps {
     bodyStyle?: Record<string, any>;
     className?: string;
     closable?: boolean;
+    closeIcon?: any;
     closeOnEsc?: boolean;
     disableScroll?: boolean;
     footer?: any;

+ 1 - 1
packages/semi-foundation/slider/foundation.ts

@@ -543,7 +543,7 @@ export default class SliderFoundation extends BaseFoundation<SliderAdapter> {
     onHandleLeave = () => {
         // this._adapter.setEventDefault(e);
         const disabled = this._adapter.getState('disabled');
-        if (!disabled) {
+        if (!disabled && this.getStates()['focusPos'] === "") {
             this._adapter.onHandleLeave();
         }
     };

+ 3 - 0
packages/semi-foundation/table/table.scss

@@ -296,6 +296,9 @@ $module: #{$prefix}-table;
                         background-color: $color-table_row_expanded-bg-default;
                     }
                 }
+                &-hidden {
+                    display: none;
+                }
             }
 
             & > .#{$module}-cell-fixed {

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

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

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

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

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

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

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

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

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

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

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

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-scss-compile",
-    "version": "2.48.0",
+    "version": "2.49.0-beta.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.48.0",
+    "version": "2.49.0-beta.0",
     "description": "semi-theme-default",
     "keywords": [
         "semi-theme",

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

@@ -42,8 +42,8 @@ export default class Banner extends BaseComponent<BannerProps, BannerState> {
         type: PropTypes.oneOf(types),
         title: PropTypes.node,
         description: PropTypes.node,
-        icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
-        closeIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
+        icon: PropTypes.node,
+        closeIcon: PropTypes.node,
         children: PropTypes.node,
         style: PropTypes.object,
         className: PropTypes.string,

+ 1 - 1
packages/semi-ui/breadcrumb/item.tsx

@@ -46,7 +46,7 @@ export default class BreadcrumbItem extends BaseComponent<BreadcrumbItemProps, B
         children: propTypes.node,
         active: propTypes.bool,
         shouldRenderSeparator: propTypes.bool,
-        icon: propTypes.oneOfType([propTypes.string, propTypes.node]),
+        icon: propTypes.node,
         separator: propTypes.node,
         noLink: propTypes.bool,
     };

+ 57 - 0
packages/semi-ui/calendar/_story/calendar.stories.jsx

@@ -720,3 +720,60 @@ export const Fix1892 = () => {
             </>
         );
     }
+// When event start and end are very close, the event dom structure exists and has a minimum height
+export const DayEventMinHeight = () => {
+
+  const [mode, setMode] = useState('day');
+
+  const dailyEventStyle = {
+    borderRadius: '3px',
+    boxSizing: 'border-box',
+    border: 'var(--semi-color-primary) 1px solid',
+    padding: '10px',
+    backgroundColor: 'var(--semi-color-primary-light-default)',
+    height: '100%',
+    overflow: 'hidden',
+  };  
+
+  const events = [
+    {
+      key: '1',
+      start: new Date(2019, 6, 23, 8, 22, 0),
+      end: new Date(2019, 6, 23, 8, 23, 0),
+      children: <div style={dailyEventStyle}>7月23日 8:32</div>,
+    },
+    {
+      key: '2',
+      start: new Date(2019, 6, 23, 8, 50, 0),
+      end: new Date(2019, 6, 23, 9, 30, 0),
+      children: <div style={dailyEventStyle}>7月23日 8:50</div>,
+    },
+    {
+      key: '3',
+      start: new Date(2019, 6, 23, 9, 50, 0),
+      end: new Date(2019, 6, 23, 11, 30, 0),
+      children: <div style={dailyEventStyle}>7月23日 9:50</div>,
+    },
+  ];
+
+  const displayValue = new Date(2019, 6, 23, 8, 32, 0);
+
+  return (
+    <>
+      <RadioGroup onChange={e => {setMode(e.target.value)}} value={mode}>
+        <Radio value={'day'}>日视图</Radio>
+        <Radio value={'week'}>周视图</Radio>
+        <Radio value={'range'}>多日视图</Radio>
+      </RadioGroup>
+      <br />
+      <br />
+      <Calendar
+        height={400}
+        mode={mode}
+        displayValue={displayValue}
+        events={events}
+        minEventHeight={50}
+        range={mode === 'range' ? [new Date(2019, 6, 23), new Date(2019, 6, 26)] : []}></Calendar>
+    </>
+  )
+} 

+ 3 - 1
packages/semi-ui/calendar/dayCalendar.tsx

@@ -31,6 +31,7 @@ export default class DayCalendar extends BaseComponent<DayCalendarProps, DayCale
         mode: PropTypes.string,
         renderTimeDisplay: PropTypes.func,
         markWeekend: PropTypes.bool,
+        minEventHeight: PropTypes.number,
         scrollTop: PropTypes.number,
         width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
         height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -154,7 +155,7 @@ export default class DayCalendar extends BaseComponent<DayCalendarProps, DayCale
     };
 
     render() {
-        const { dateGridRender, displayValue, showCurrTime, renderTimeDisplay, markWeekend, className, height, width, style, header } = this.props;
+        const { dateGridRender, displayValue, showCurrTime, renderTimeDisplay, markWeekend, className, height, width, style, header, minEventHeight } = this.props;
         const dayCls = cls(prefixCls, className);
         const dayStyle = {
             height,
@@ -182,6 +183,7 @@ export default class DayCalendar extends BaseComponent<DayCalendarProps, DayCale
                             handleClick={this.handleClick}
                             showCurrTime={showCurrTime}
                             isWeekend={this.isWeekend}
+                            minEventHeight={minEventHeight}
                             dateGridRender={dateGridRender}
                         />
                     </div>

+ 6 - 7
packages/semi-ui/calendar/dayCol.tsx

@@ -13,7 +13,7 @@ import '@douyinfe/semi-foundation/calendar/calendar.scss';
 const prefixCls = `${cssClasses.PREFIX}-grid`;
 
 function pad(d: number) {
-    return (d < 10) ? `0${ d.toString()}` : d.toString();
+    return (d < 10) ? `0${d.toString()}` : d.toString();
 }
 
 export interface DayColState {
@@ -30,6 +30,7 @@ export default class DayCol extends BaseComponent<DayColProps, DayColState> {
         currPos: PropTypes.number,
         handleClick: PropTypes.func,
         mode: PropTypes.string,
+        minEventHeight: PropTypes.number,
         isWeekend: PropTypes.bool,
         dateGridRender: PropTypes.func,
     };
@@ -39,7 +40,8 @@ export default class DayCol extends BaseComponent<DayColProps, DayColState> {
         showCurrTime: true,
         scrollHeight: 0,
         currPos: 0,
-        mode: 'dayCol'
+        mode: 'dayCol',
+        minEventHeight: Number.MIN_SAFE_INTEGER
     };
 
     static contextType = localeContext;
@@ -76,17 +78,14 @@ export default class DayCol extends BaseComponent<DayColProps, DayColState> {
     }
 
     renderEvents = () => {
-        const { events, scrollHeight } = this.props;
+        const { events, scrollHeight, minEventHeight } = this.props;
         const list = events.map((event, ind) => {
             const { startPos, endPos, children, key } = event;
             const top = startPos * scrollHeight;
             const height = (endPos - startPos) * scrollHeight;
-            if (!height) {
-                return undefined;
-            }
             const style = {
                 top: `${top}px`,
-                height: `${height}px`,
+                height: `${Math.max(minEventHeight, height)}px`,
             };
             return (
                 <li className={`${cssClasses.PREFIX}-event-item ${cssClasses.PREFIX}-event-day`} style={style} key={key || `${top}-${ind}`}>

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

@@ -31,6 +31,7 @@ class Calendar extends BaseComponent<CalendarProps, {}> {
         renderTimeDisplay: PropTypes.func,
         renderDateDisplay: PropTypes.func,
         markWeekend: PropTypes.bool,
+        minEventHeight: PropTypes.number,
         width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
         height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
         style: PropTypes.object,

+ 2 - 1
packages/semi-ui/calendar/interface.ts

@@ -16,6 +16,7 @@ export interface CalendarProps extends BaseProps {
     onClose?: (e: React.MouseEvent) => void;
     renderTimeDisplay?: (time: number) => React.ReactNode;
     markWeekend?: boolean;
+    minEventHeight?: number;
     width?: number | string;
     height?: number | string;
     renderDateDisplay?: (date: Date) => React.ReactNode;
@@ -25,7 +26,7 @@ export interface CalendarProps extends BaseProps {
 
 export type DayCalendarProps = Omit<CalendarProps, 'mode'>;
 
-type DayCalendarPropsKeys = 'events' | 'displayValue' | 'showCurrTime' | 'mode' | 'dateGridRender';
+type DayCalendarPropsKeys = 'events' | 'displayValue' | 'showCurrTime' | 'mode' | 'dateGridRender' | 'minEventHeight';
 export interface DayColProps extends Pick<CalendarProps, DayCalendarPropsKeys>, BaseProps {
     scrollHeight: number;
     currPos: number;

+ 3 - 2
packages/semi-ui/calendar/rangeCalendar.tsx

@@ -130,7 +130,7 @@ export default class RangeCalendar extends BaseComponent<RangeCalendarProps, Ran
         const { parsedEvents } = this.state;
         const events = parsedEvents.day;
         const { week } = this.RangeData;
-        const { markWeekend, dateGridRender } = this.props;
+        const { markWeekend, dateGridRender, minEventHeight } = this.props;
         const inner = week.map(day => {
             const dateString = day.date.toString();
             const dayEvents = events.has(dateString) ? events.get(dateString) : [];
@@ -145,6 +145,7 @@ export default class RangeCalendar extends BaseComponent<RangeCalendarProps, Ran
                     showCurrTime={this.props.showCurrTime}
                     isWeekend={markWeekend && day.isWeekend}
                     dateGridRender={dateGridRender}
+                    minEventHeight={minEventHeight}
                 />
             );
         });
@@ -217,7 +218,7 @@ export default class RangeCalendar extends BaseComponent<RangeCalendarProps, Ran
         const { allDay } = this.state.parsedEvents;
         const parsed = this.foundation.parseRangeAllDayEvents(allDay);
         const style = allDayEventsRender ? null : {
-            height: `${calcRowHeight(parsed) }em`
+            height: `${calcRowHeight(parsed)}em`
         };
         const { markWeekend } = this.props;
         const { week } = this.RangeData;

+ 2 - 1
packages/semi-ui/calendar/weekCalendar.tsx

@@ -132,7 +132,7 @@ export default class WeekCalendar extends BaseComponent<WeekCalendarProps, WeekC
         const { parsedEvents } = this.state;
         const events = parsedEvents.day;
         const { week } = this.weeklyData;
-        const { markWeekend, dateGridRender } = this.props;
+        const { markWeekend, dateGridRender, minEventHeight } = this.props;
         const inner = week.map(day => {
             const dateString = day.date.toString();
             const dayEvents = events.has(dateString) ? events.get(dateString) : [];
@@ -147,6 +147,7 @@ export default class WeekCalendar extends BaseComponent<WeekCalendarProps, WeekC
                     showCurrTime={this.props.showCurrTime}
                     isWeekend={markWeekend && day.isWeekend}
                     dateGridRender={dateGridRender}
+                    minEventHeight={minEventHeight}
                 />
             );
         });

+ 1 - 1
packages/semi-ui/modal/Modal.tsx

@@ -75,7 +75,7 @@ class Modal extends BaseComponent<ModalReactProps, ModalState> {
         getPopupContainer: PropTypes.func,
         getContainerContext: PropTypes.func,
         maskFixed: PropTypes.bool,
-        closeIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
+        closeIcon: PropTypes.node,
         closeOnEsc: PropTypes.bool,
         size: PropTypes.oneOf(strings.SIZE),
         keepDOM: PropTypes.bool,

+ 1 - 1
packages/semi-ui/navigation/SubNav.tsx

@@ -69,7 +69,7 @@ export default class SubNav extends BaseComponent<SubNavProps, SubNavState> {
         /**
          * Icon name on the left
          */
-        icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
+        icon: PropTypes.node,
         /**
          * Maximum height (for animation)
          */

+ 7 - 7
packages/semi-ui/package.json

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-ui",
-    "version": "2.48.0",
+    "version": "2.49.0-beta.0",
     "description": "A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.",
     "main": "lib/cjs/index.js",
     "module": "lib/es/index.js",
@@ -20,12 +20,12 @@
         "@dnd-kit/core": "^6.0.8",
         "@dnd-kit/sortable": "^7.0.2",
         "@dnd-kit/utilities": "^3.2.1",
-        "@douyinfe/semi-animation": "2.48.0",
-        "@douyinfe/semi-animation-react": "2.48.0",
-        "@douyinfe/semi-foundation": "2.48.0",
-        "@douyinfe/semi-icons": "2.48.0",
-        "@douyinfe/semi-illustrations": "2.48.0",
-        "@douyinfe/semi-theme-default": "2.48.0",
+        "@douyinfe/semi-animation": "2.49.0-beta.0",
+        "@douyinfe/semi-animation-react": "2.49.0-beta.0",
+        "@douyinfe/semi-foundation": "2.49.0-beta.0",
+        "@douyinfe/semi-icons": "2.49.0-beta.0",
+        "@douyinfe/semi-illustrations": "2.49.0-beta.0",
+        "@douyinfe/semi-theme-default": "2.49.0-beta.0",
         "async-validator": "^3.5.0",
         "classnames": "^2.2.6",
         "copy-text-to-clipboard": "^2.1.1",

+ 1 - 1
packages/semi-ui/popconfirm/index.tsx

@@ -59,7 +59,7 @@ export default class Popconfirm extends BaseComponent<PopconfirmProps, Popconfir
         prefixCls: PropTypes.string,
         className: PropTypes.string,
         style: PropTypes.object,
-        icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
+        icon: PropTypes.node,
         okText: PropTypes.string,
         okType: PropTypes.string,
         cancelText: PropTypes.string,

+ 6 - 2
packages/semi-ui/sideSheet/SideSheetContent.tsx

@@ -1,4 +1,4 @@
-import React, { CSSProperties } from 'react';
+import React, { CSSProperties, ReactNode } from 'react';
 import PropTypes from 'prop-types';
 import cls from 'classnames';
 import { cssClasses } from '@douyinfe/semi-foundation/sideSheet/constants';
@@ -14,6 +14,7 @@ const prefixCls = cssClasses.PREFIX;
 
 export interface SideSheetContentProps {
     onClose?: (e: React.MouseEvent) => void;
+    closeIcon?: ReactNode;
     mask?: boolean;
     maskStyle?: CSSProperties;
     maskClosable?: boolean;
@@ -38,6 +39,7 @@ export interface SideSheetContentProps {
 export default class SideSheetContent extends React.PureComponent<SideSheetContentProps> {
     static propTypes = {
         onClose: PropTypes.func,
+        closeIcon: PropTypes.node,
     };
 
     static defaultProps = {
@@ -92,6 +94,7 @@ export default class SideSheetContent extends React.PureComponent<SideSheetConte
             title,
             closable,
             headerStyle,
+            closeIcon,
         } = this.props;
         let header, closer;
         if (title) {
@@ -102,13 +105,14 @@ export default class SideSheetContent extends React.PureComponent<SideSheetConte
             );
         }
         if (closable) {
+            const iconType = closeIcon || <IconClose/>;
             closer = (
                 <Button
                     className={`${prefixCls}-close`}
                     key="close-btn"
                     onClick={this.close}
                     type="tertiary"
-                    icon={<IconClose/>}
+                    icon={iconType}
                     theme="borderless"
                     size="small"
                 />

+ 10 - 0
packages/semi-ui/sideSheet/__test__/sideSheet.test.js

@@ -1,5 +1,6 @@
 import { Icon, SideSheet, Modal } from '../../index';
 import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
+import { IconEyeClosed } from '@douyinfe/semi-icons';
 // import toJson from 'enzyme-to-json';
 
 function getSideSheet(SideSheetProps, children) {
@@ -316,4 +317,13 @@ describe('SideSheet', () => {
         sideSheet.unmount();
     });
 
+    it('closeIcon', () => {
+        let com = getSideSheet({
+            visible: true,
+            closeIcon: (<IconEyeClosed />)
+        });
+        let sideSheet = mount(com, { attachTo: document.getElementById('container') });
+        expect(sideSheet.find(`.${BASE_CLASS_PREFIX}-icon-eye_closed`).length).toBe(1);
+    });
+
 })

+ 6 - 1
packages/semi-ui/table/Body/BaseRow.tsx

@@ -60,7 +60,9 @@ export interface BaseRowProps {
     store?: Store;
     style?: React.CSSProperties;
     virtualized?: Virtualized;
-    visible: boolean // required
+    visible: boolean; // required
+    /** whether display none */
+    displayNone?: boolean;
 }
 
 export default class TableRow extends BaseComponent<BaseRowProps, Record<string, any>> {
@@ -74,6 +76,7 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
         expandIcon: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.node]),
         expandableRow: PropTypes.bool,
         expanded: PropTypes.bool,
+        displayNone: PropTypes.bool,
         expandedRow: PropTypes.bool,
         fixed: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
         height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
@@ -332,6 +335,7 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
             record,
             hovered,
             expanded,
+            displayNone,
             expandableRow,
             level,
             expandedRow,
@@ -356,6 +360,7 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
                         [`${prefixCls}-row-selected`]: selected,
                         [`${prefixCls}-row-expanded`]: expanded,
                         [`${prefixCls}-row-hovered`]: hovered,
+                        [`${prefixCls}-row-hidden`]: displayNone,
                     },
                     customClassName
                 );

+ 3 - 0
packages/semi-ui/table/Body/ExpandedRow.tsx

@@ -31,6 +31,7 @@ export interface TableExpandedRowProps {
     store?: Store;
     style?: React.CSSProperties;
     virtualized?: Virtualized
+    displayNone?: boolean;
 }
 
 /**
@@ -85,6 +86,7 @@ export default class TableExpandedRow extends PureComponent<TableExpandedRowProp
             virtualized,
             indentSize,
             cellWidths,
+            displayNone
         } = this.props;
         const { tableWidth, anyColumnFixed, getCellWidths } = this.context;
         const cell: ExpandedRowRenderReturnType = expandedRowRender(record, index, expanded);
@@ -147,6 +149,7 @@ export default class TableExpandedRow extends PureComponent<TableExpandedRowProp
                 virtualized={virtualized}
                 indentSize={indentSize}
                 cellWidths={baseRowCellWidths}
+                displayNone={displayNone}
             />
         );
     }

+ 18 - 9
packages/semi-ui/table/Body/index.tsx

@@ -73,7 +73,8 @@ export interface BodyProps extends BaseProps {
     rowExpandable?: RowExpandable<Record<string, any>>;
     renderExpandIcon: (record: Record<string, any>, isNested: boolean) => ReactNode | null;
     headerRef?: React.MutableRefObject<HTMLDivElement> | ((instance: any) => void);
-    onScroll?: VirtualizedOnScroll
+    onScroll?: VirtualizedOnScroll;
+    keepDOM?: boolean;
 }
 
 export interface BodyState {
@@ -488,6 +489,7 @@ class Body extends BaseComponent<BodyProps, BodyState> {
             index,
             rowKey,
             virtualized,
+            displayNone
         } = props;
         let key = getRecordKey(record, rowKey);
 
@@ -516,6 +518,7 @@ class Body extends BaseComponent<BodyProps, BodyState> {
                 virtualized={virtualized}
                 key={genExpandedRowKey(key)}
                 cellWidths={this.cellWidths}
+                displayNone={displayNone}
             />
         );
     };
@@ -595,7 +598,7 @@ class Body extends BaseComponent<BodyProps, BodyState> {
      * @returns {ReactNode[]} renderedRows
      */
     renderGroupedRows = () => {
-        const { groups, dataSource: data, rowKey, expandedRowKeys } = this.props;
+        const { groups, dataSource: data, rowKey, expandedRowKeys, keepDOM } = this.props;
         const { flattenedColumns } = this.context;
         const groupsInData = new Map();
         const renderedRows: ReactNode[] = [];
@@ -635,7 +638,7 @@ class Body extends BaseComponent<BodyProps, BodyState> {
             );
 
             // Render the grouped content when the group is expanded
-            if (expanded) {
+            if (expanded || keepDOM) {
                 const dataInGroup: any[] = [];
 
                 group.forEach((recordKey: string) => {
@@ -649,20 +652,21 @@ class Body extends BaseComponent<BodyProps, BodyState> {
                 /**
                  * Render the contents of the group row
                  */
-                renderedRows.push(this.renderBodyRows(dataInGroup));
+                renderedRows.push(this.renderBodyRows(dataInGroup, undefined, [], !expanded));
             }
         });
 
         return renderedRows;
     };
 
-    renderBodyRows(data: Record<string, any>[] = [], level = 0, renderedRows: ReactNode[] = []) {
+    renderBodyRows(data: Record<string, any>[] = [], level = 0, renderedRows: ReactNode[] = [], displayNone = false) {
         const {
             rowKey,
             expandedRowRender,
             expandedRowKeys,
             childrenRecordName,
             rowExpandable,
+            keepDOM
         } = this.props;
 
         const hasExpandedRowRender = typeof expandedRowRender === 'function';
@@ -684,6 +688,7 @@ class Body extends BaseComponent<BodyProps, BodyState> {
                     ...this.props,
                     columns: flattenedColumns,
                     expandBtnShouldInRow,
+                    displayNone,
                     record,
                     key,
                     level,
@@ -693,7 +698,8 @@ class Body extends BaseComponent<BodyProps, BodyState> {
 
             // render expand row
             const expanded = isExpanded(expandedRowKeys, key);
-            if (hasExpandedRowRender && rowExpandable && rowExpandable(record) && expanded) {
+            const shouldRenderExpandedRows = expanded || keepDOM;
+            if (hasExpandedRowRender && rowExpandable && rowExpandable(record) && shouldRenderExpandedRows) {
                 const currentExpandRow = this.renderExpandedRow({
                     ...this.props,
                     columns: flattenedColumns,
@@ -701,6 +707,7 @@ class Body extends BaseComponent<BodyProps, BodyState> {
                     index,
                     record,
                     expanded,
+                    displayNone: displayNone || !expanded,
                 });
                 /**
                   * If expandedRowRender returns falsy, this expanded row will not be rendered
@@ -712,8 +719,8 @@ class Body extends BaseComponent<BodyProps, BodyState> {
             }
 
             // render tree data
-            if (recordHasChildren && expanded) {
-                const nestedRows = this.renderBodyRows(recordChildren, level + 1);
+            if (recordHasChildren && shouldRenderExpandedRows) {
+                const nestedRows = this.renderBodyRows(recordChildren, level + 1, [], displayNone || !expanded);
                 renderedRows.push(...nestedRows);
             }
         });
@@ -838,7 +845,9 @@ export interface RenderExpandedRowProps {
     index?: number;
     rowKey?: RowKey<Record<string, any>>;
     virtualized?: Virtualized;
-    level?: number
+    level?: number;
+    keepDOM?: boolean;
+    displayNone?: boolean;
 }
 
 export interface RenderSectionRowProps {

+ 2 - 1
packages/semi-ui/table/_story/table.stories.jsx

@@ -104,7 +104,8 @@ export {
     FixedResizableRowSelection,
     SorterSortOrder,
     FixedPagination,
-    ShowHeader
+    ShowHeader,
+    KeepDOM
 } from './v2';
 export { default as FixSelectAll325 } from './Demos/rowSelection';
 

+ 297 - 0
packages/semi-ui/table/_story/v2/KeepDOM/index.tsx

@@ -0,0 +1,297 @@
+import React from 'react';
+import { Table, Avatar } from '@douyinfe/semi-ui';
+
+const ExpandDemo = () => {
+    const expandColumns = [
+        {
+            title: 'Name',
+            dataIndex: 'name',
+            width: 250,
+            fixed: 'left',
+            key: 'name',
+            render: (text, record, index, { expandIcon: realExpandIcon }) => (
+                <>
+                    {/* {record.description ? realExpandIcon : null} */}
+                    {text}
+                </>
+            ),
+        },
+        { title: 'Age', dataIndex: 'age', key: 'age', width: 200 },
+        { title: 'Address', dataIndex: 'address', key: 'address' },
+        {
+            width: 200,
+            title: 'Action',
+            dataIndex: '',
+            key: 'x',
+            render: () => <a>Delete</a>,
+            fixed: 'right',
+        },
+    ];
+
+    const expandData = [
+        {
+            key: 1,
+            name: 'John Brown',
+            age: 32,
+            address: 'New York No. 1 Lake Park',
+            description: 'My name is John Brown, I am 32 years old, living in New York No. 1 Lake Park.',
+        },
+        {
+            key: 2,
+            name: 'Jim Green',
+            age: 42,
+            address: 'London No. 1 Lake Park',
+            // description: 'My name is Jim Green, I am 42 years old, living in London No. 1 Lake Park.',
+        },
+        {
+            key: 3,
+            name: 'Joe Black',
+            age: 32,
+            address: 'Sidney No. 1 Lake Park',
+            description: 'My name is Joe Black, I am 32 years old, living in Sidney No. 1 Lake Park.',
+        },
+    ];
+
+    return (
+        <Table
+            data-cy="expand"
+            keepDOM
+            columns={expandColumns}
+            // defaultExpandAllRows
+            // rowKey={'kkk'}
+            expandedRowRender={(record, index, expanded) => (
+                <article style={{ margin: 0 }}>
+                    <p>
+                        {index}: {expanded ? 'expanded' : 'unexpanded'}
+                    </p>
+                    <p>{record.description}</p>
+                </article>
+            )}
+            onExpand={(expanded, expandedRow, domEvent) => {
+                domEvent && domEvent.stopPropagation();
+                console.log(expanded, expandedRow, domEvent);
+            }}
+            onRow={(record, index) => ({
+                onClick: () => {
+                    console.log(`Row ${index} clicked: `, record);
+                },
+            })}
+            hideExpandedColumn={false}
+            expandCellFixed={true}
+            dataSource={expandData}
+            scroll={{ x: '160%' }}
+        />
+    );
+};
+
+function TreeKeepDOM() {
+    const columns = [
+        {
+            title: 'Key',
+            dataIndex: 'dataKey',
+            key: 'dataKey',
+        },
+        {
+            title: '名称',
+            dataIndex: 'name',
+            key: 'name',
+            width: 200,
+        },
+        {
+            title: '数据类型',
+            dataIndex: 'type',
+            key: 'type',
+            width: 400,
+        },
+        {
+            title: '描述',
+            dataIndex: 'description',
+            key: 'description',
+        },
+        {
+            title: '默认值',
+            dataIndex: 'default',
+            key: 'default',
+            width: 100,
+        },
+    ];
+
+    const data = [
+        {
+            key: 1,
+            dataKey: 'videos_info',
+            name: '视频信息',
+            type: 'Object 对象',
+            description: '视频的元信息',
+            default: '无',
+            children: [
+                {
+                    key: 11,
+                    dataKey: 'status',
+                    name: '视频状态',
+                    type: 'Enum <Integer> 枚举',
+                    description: '视频的可见、推荐状态',
+                    default: '1',
+                },
+                {
+                    key: 12,
+                    dataKey: 'vid',
+                    name: '视频 ID',
+                    type: 'String 字符串',
+                    description: '标识视频的唯一 ID',
+                    default: '无',
+                    children: [
+                        {
+                            dataKey: 'video_url',
+                            name: '视频地址',
+                            type: 'String 字符串',
+                            description: '视频的唯一链接',
+                            default: '无',
+                        },
+                    ],
+                },
+            ],
+        },
+        {
+            key: 2,
+            dataKey: 'text_info',
+            name: '文本信息',
+            type: 'Object 对象',
+            description: '视频的元信息',
+            default: '无',
+            children: [
+                {
+                    key: 21,
+                    dataKey: 'title',
+                    name: '视频标题',
+                    type: 'String 字符串',
+                    description: '视频的标题',
+                    default: '无',
+                },
+                {
+                    key: 22,
+                    dataKey: 'video_description',
+                    name: '视频描述',
+                    type: 'String 字符串',
+                    description: '视频的描述',
+                    default: '无',
+                },
+            ],
+        },
+    ];
+
+    return <Table data-cy="tree" keepDOM columns={columns} dataSource={data} />;
+}
+
+function SectionDemo() {
+
+    const DAY = 24 * 60 * 60 * 1000;
+    const figmaIconUrl = 'https://lf3-static.bytednsdoc.com/obj/eden-cn/ptlz_zlp/ljhwZthlaukjlkulzlp/figma-icon.png';
+
+    const columns = [
+        {
+            title: '标题',
+            dataIndex: 'name',
+            width: 400,
+            render: (text, record, index) => {
+                return (
+                    <div>
+                        <Avatar size="small" shape="square" src={figmaIconUrl} style={{ marginRight: 12 }}></Avatar>
+                        {text}
+                    </div>
+                );
+            },
+            filters: [
+                {
+                    text: 'Semi Design 设计稿',
+                    value: 'Semi Design 设计稿',
+                },
+                {
+                    text: 'Semi D2C 设计稿',
+                    value: 'Semi D2C 设计稿',
+                },
+            ],
+            onFilter: (value, record) => record.name.includes(value),
+        },
+        {
+            title: '大小',
+            dataIndex: 'size',
+            sorter: (a, b) => (a.size - b.size > 0 ? 1 : -1),
+            render: text => `${text} KB`,
+        },
+        {
+            title: '所有者',
+            dataIndex: 'owner',
+            render: (text, record, index) => {
+                return (
+                    <div>
+                        <Avatar size="small" color={record.avatarBg} style={{ marginRight: 4 }}>
+                            {typeof text === 'string' && text.slice(0, 1)}
+                        </Avatar>
+                        {text}
+                    </div>
+                );
+            },
+        },
+        {
+            title: '更新日期',
+            dataIndex: 'updateTime',
+            sorter: (a, b) => (a.updateTime - b.updateTime > 0 ? 1 : -1),
+        },
+    ];
+
+    const getData = () => {
+        const data = [];
+        for (let i = 0; i < 46; i++) {
+            const isSemiDesign = i % 2 === 0;
+            const randomNumber = ((i * 1000) % 19) + 100;
+            data.push({
+                key: '' + i,
+                name: isSemiDesign ? `Semi Design 设计稿${i}.fig` : `Semi D2C 设计稿${i}.fig`,
+                owner: isSemiDesign ? '姜鹏志' : '郝宣',
+                size: randomNumber,
+                updateTime: new Date('2023-12-07').valueOf() + (i * 1000) % 199,
+                avatarBg: isSemiDesign ? 'grey' : 'red',
+            });
+        }
+        return data;
+    };
+
+    const data = getData();
+
+    const rowKey = record =>
+        `${record.owner && record.owner.toLowerCase()}-${record.name && record.name.toLowerCase()}`;
+
+    return (
+        <div style={{ padding: '20px 0px' }}>
+            <Table
+                data-cy="section"
+                keepDOM
+                dataSource={data}
+                rowKey={rowKey}
+                groupBy={'size'}
+                columns={columns}
+                renderGroupSection={groupKey => <strong>根据文件大小分组 {groupKey} KB</strong>}
+                onGroupedRow={(group, index) => {
+                    return {
+                        onClick: e => {
+                            console.log(`Grouped row clicked: `, group, index);
+                        },
+                    };
+                }}
+                clickGroupedRowToExpand // if you want to click the entire row to expand
+                scroll={{ y: 480 }}
+            />
+        </div>
+    );
+}
+
+export default function Demo() {
+    return (
+        <div>
+            <ExpandDemo />
+            <TreeKeepDOM />
+            <SectionDemo />
+        </div>
+    )
+}

+ 1 - 0
packages/semi-ui/table/_story/v2/index.js

@@ -25,3 +25,4 @@ export { default as FixedResizableRowSelection } from './FixedResizableRowSelect
 export { default as SorterSortOrder } from './SorterSortOrder';
 export { default as FixedPagination } from './FixedPagination';
 export { default as ShowHeader } from './ShowHeader';
+export { default as KeepDOM } from './KeepDOM';

+ 1 - 0
packages/semi-ui/table/interface.ts

@@ -49,6 +49,7 @@ export interface TableProps<RecordType extends Record<string, any> = any> extend
     hideExpandedColumn?: boolean;
     id?: string;
     indentSize?: number;
+    keepDOM?: boolean;
     loading?: boolean;
     pagination?: TablePagination;
     prefixCls?: string;

+ 5 - 0
packages/semi-ui/timePicker/TimePicker.tsx

@@ -82,6 +82,7 @@ export type TimePickerProps = {
     secondStep?: number;
     showClear?: boolean;
     size?: InputSize;
+    stopPropagation: boolean;
     style?: React.CSSProperties;
     timeZone?: string | number;
     triggerRender?: (props?: any) => React.ReactNode;
@@ -150,6 +151,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
         focusOnOpen: PropTypes.bool,
         autoFocus: PropTypes.bool,
         size: PropTypes.oneOf(strings.SIZE),
+        stopPropagation: PropTypes.bool,
         panels: PropTypes.arrayOf(PropTypes.shape(PanelShape)),
         onFocus: PropTypes.func,
         onBlur: PropTypes.func,
@@ -184,6 +186,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
         prefixCls: cssClasses.PREFIX,
         inputReadOnly: false,
         style: {},
+        stopPropagation: true,
         className: '',
         popupClassName: '',
         popupStyle: { left: '0px', top: '0px' },
@@ -470,6 +473,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
             triggerRender,
             motion,
             autoAdjustOverflow,
+            stopPropagation,
             ...rest
         } = this.props;
         const format = this.foundation.getDefaultFormatIfNeed();
@@ -534,6 +538,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
                     motion={motion}
                     margin={dropdownMargin}
                     autoAdjustOverflow={autoAdjustOverflow}
+                    stopPropagation={stopPropagation}
                 >
                     {useCustomTrigger ? (
                         <Trigger

+ 16 - 2
packages/semi-ui/timePicker/_story/timepicker.stories.jsx

@@ -1,6 +1,6 @@
 import React, { Component, useState } from 'react';
 import TimePickerPanel from '../index';
-import { TimePicker as BasicTimePicker, Button, Form } from '../../index';
+import { TimePicker as BasicTimePicker, Button, Form, Popover } from '../../index';
 import { strings } from '@douyinfe/semi-foundation/timePicker/constants';
 import { get } from 'lodash';
 
@@ -337,8 +337,22 @@ Fix1716.story = {
   name: 'Fix 1716',
 };
 
+export const StopPropagation = () => {
+  return (
+    <Popover 
+      content={
+        <div style={{ padding: 12 }}>
+          <TimePicker insetLabel="每天" style={{ width: '100%' }} stopPropagation={true} />
+        </div>
+      }
+      trigger="click"
+    >
+        <Button>click me</Button>
+    </Popover>
+  );
+}
 export const Fix1953 = () => {
   return (
     <TimePicker format={'HH'} defaultValue={'10'}/>
   );
-};
+};

+ 1 - 1
packages/semi-ui/toast/toast.tsx

@@ -43,7 +43,7 @@ class Toast extends BaseComponent<ToastReactProps, ToastState> {
         showClose: PropTypes.bool,
         stack: PropTypes.bool,
         stackExpanded: PropTypes.bool,
-        icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
+        icon: PropTypes.node,
         direction: PropTypes.oneOf(strings.directions),
     };
 

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

@@ -1,6 +1,6 @@
 {
     "name": "@douyinfe/semi-webpack-plugin",
-    "version": "2.48.0",
+    "version": "2.49.0-beta.0",
     "description": "",
     "author": "伍浩威 <[email protected]>",
     "homepage": "",

+ 150 - 150
sitemap.xml

@@ -2,22 +2,22 @@
 <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
     <url>
         <loc>https://juejin.cn/post/7267418854124699702</loc>
-        <lastmod>2023-12-01T09:31:10.602Z</lastmod>
+        <lastmod>2023-12-11T11:24:55.564Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://medium.com/front-end-weekly/how-we-test-semi-design-component-libraries-64b854f63b65</loc>
-        <lastmod>2023-12-01T09:31:10.461Z</lastmod>
+        <lastmod>2023-12-11T11:24:54.530Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://mp.weixin.qq.com/s/noHoWRuA25PgqFNcurhIUA</loc>
-        <lastmod>2023-12-01T09:31:13.337Z</lastmod>
+        <lastmod>2023-12-11T11:24:56.585Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://mp.weixin.qq.com/s/O3js-SZDNPEOjGxh-aAkbw</loc>
-        <lastmod>2023-12-01T09:31:13.123Z</lastmod>
+        <lastmod>2023-12-11T11:24:56.547Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
@@ -790,732 +790,732 @@
     </url>
     <url>
         <loc>https://semi.design/en-US/basic/divider</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/basic/grid</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/basic/icon</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/basic/layout</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/basic/space</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/basic/tokens</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/basic/typography</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/feedback/banner</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/feedback/notification</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/feedback/popconfirm</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/feedback/progress</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/feedback/skeleton</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/feedback/spin</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/feedback/toast</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/autocomplete</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/button</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/cascader</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/checkbox</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/datepicker</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/form</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/input</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/inputnumber</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/radio</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/rating</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/select</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/slider</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/switch</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/taginput</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/timepicker</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/transfer</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/treeselect</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/input/upload</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/navigation/anchor</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/navigation/backtop</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/navigation/breadcrumb</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/navigation/navigation</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/navigation/pagination</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/navigation/steps</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/navigation/tabs</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/navigation/tree</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/other/configprovider</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/other/locale</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/avatar</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/badge</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/calendar</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/card</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/carousel</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/collapse</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/collapsible</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/descriptions</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/dropdown</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/empty</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/highlight</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/image</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/list</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/modal</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/overflowlist</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/popover</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/scrolllist</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/sidesheet</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/table</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/tag</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/timeline</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/show/tooltip</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/start/accessibility</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/start/changelog</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/start/customize-theme</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/start/dark-mode</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/start/faq</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/start/getting-started</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/start/introduction</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/start/overview</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/en-US/start/update-to-v2</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/basic/divider</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/basic/grid</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/basic/icon</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/basic/layout</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/basic/space</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/basic/tokens</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/basic/typography</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/feedback/banner</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/feedback/notification</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/feedback/popconfirm</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/feedback/progress</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/feedback/skeleton</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/feedback/spin</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/feedback/toast</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/autocomplete</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/button</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/cascader</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/checkbox</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/datepicker</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/form</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/input</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/inputnumber</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/radio</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/rating</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/select</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/slider</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/switch</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/taginput</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/timepicker</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/transfer</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/treeselect</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/input/upload</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/navigation/anchor</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/navigation/backtop</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/navigation/breadcrumb</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/navigation/navigation</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/navigation/pagination</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/navigation/steps</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/navigation/tabs</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/navigation/tree</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/other/configprovider</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/other/locale</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/avatar</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/badge</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/calendar</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/card</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/carousel</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/collapse</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/collapsible</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/descriptions</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/dropdown</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/empty</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/highlight</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/image</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/list</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/modal</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/overflowlist</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/popover</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/scrolllist</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/sidesheet</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/table</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/tag</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/timeline</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/show/tooltip</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/start/accessibility</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/start/changelog</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/start/customize-theme</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/start/dark-mode</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/start/faq</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/start/getting-started</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/start/introduction</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/start/overview</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
     <url>
         <loc>https://semi.design/zh-CN/start/update-to-v2</loc>
-        <lastmod>2023-12-01T09:26:27.000Z</lastmod>
+        <lastmod>2023-12-11T11:19:27.000Z</lastmod>
         <changefreq>weekly</changefreq>
     </url>
 </urlset>

+ 0 - 86
yarn.lock

@@ -1519,25 +1519,11 @@
     "@douyinfe/semi-animation-styled" "2.23.2"
     classnames "^2.2.6"
 
-"@douyinfe/[email protected]":
-  version "2.47.1"
-  resolved "https://registry.npmjs.org/@douyinfe/semi-animation-react/-/semi-animation-react-2.47.1.tgz#1148e43e2e3cef8b7f57b42f484d403a71958f8e"
-  integrity sha512-5BzuEHSOW06IbNotshB1RsUoq0oJdY9IpmbQQL77kmvu8DvKnIsGDeYWP6TYwoKycCCMIDyCYsD13s+qMUGvwg==
-  dependencies:
-    "@douyinfe/semi-animation" "2.47.1"
-    "@douyinfe/semi-animation-styled" "2.47.1"
-    classnames "^2.2.6"
-
 "@douyinfe/[email protected]":
   version "2.23.2"
   resolved "https://registry.npmjs.org/@douyinfe/semi-animation-styled/-/semi-animation-styled-2.23.2.tgz#f18bc074515441c297cc636ed98521e249d093c9"
   integrity sha512-cKaA1yGHPF76Rx7EZDZicj+1oX1su2wnqb/UGFOTquAwqWmkTfgQ+EKxCd/N704WH+RtmGf4xbrJKpBvvcEdSQ==
 
-"@douyinfe/[email protected]":
-  version "2.47.1"
-  resolved "https://registry.npmjs.org/@douyinfe/semi-animation-styled/-/semi-animation-styled-2.47.1.tgz#2d8b8403ce239a14139e17fa13ee35d03a833cf1"
-  integrity sha512-jjEwbVMKaIh74A1svvLdSseGIiJYX0CiMisfiwWtp/f3OCJTB20CaIHrINGTti5R9bB/MD5Oe3GuHLoD6/JQMw==
-
 "@douyinfe/[email protected]":
   version "2.12.0"
   resolved "https://registry.npmjs.org/@douyinfe/semi-animation/-/semi-animation-2.12.0.tgz#51fe52d3911c2591a80a6e9fe96e6809c1511f13"
@@ -1553,13 +1539,6 @@
   dependencies:
     bezier-easing "^2.1.0"
 
-"@douyinfe/[email protected]":
-  version "2.47.1"
-  resolved "https://registry.npmjs.org/@douyinfe/semi-animation/-/semi-animation-2.47.1.tgz#aca61369ea6899a8dfc77109ba06ab04013b73b5"
-  integrity sha512-DG4bP3N3UZSeIoP4hDGFyKzNF83cd9vVjCJnxHUGTtVtFSpO1b47iQ0kD1qcgkUZghEqeixPFFu+6ilhq0qzZg==
-  dependencies:
-    bezier-easing "^2.1.0"
-
 "@douyinfe/[email protected]":
   version "2.33.1"
   resolved "https://registry.npmjs.org/@douyinfe/semi-foundation/-/semi-foundation-2.33.1.tgz#1dfe6233e35a4ed768cb580b0c9a677d1c34ffba"
@@ -1574,20 +1553,6 @@
     memoize-one "^5.2.1"
     scroll-into-view-if-needed "^2.2.24"
 
-"@douyinfe/[email protected]":
-  version "2.47.1"
-  resolved "https://registry.npmjs.org/@douyinfe/semi-foundation/-/semi-foundation-2.47.1.tgz#ca45941d057a1ebc71b93e7ec4f5980faf0b5dc4"
-  integrity sha512-2yO2kPO9TX+7gzRikmUy34CRckTB3Qkt+K9eIA2FMnIQ7R00yus7nAeoLaOaU8qUJd+OrqIEtwHGxthd0V1Wrg==
-  dependencies:
-    "@douyinfe/semi-animation" "2.47.1"
-    async-validator "^3.5.0"
-    classnames "^2.2.6"
-    date-fns "^2.29.3"
-    date-fns-tz "^1.3.8"
-    lodash "^4.17.21"
-    memoize-one "^5.2.1"
-    scroll-into-view-if-needed "^2.2.24"
-
 "@douyinfe/[email protected]", "@douyinfe/semi-icons@latest":
   version "2.33.1"
   resolved "https://registry.yarnpkg.com/@douyinfe/semi-icons/-/semi-icons-2.33.1.tgz#8e2871d9bc0ab7e12df74e3c71802d53d69b7425"
@@ -1595,23 +1560,11 @@
   dependencies:
     classnames "^2.2.6"
 
-"@douyinfe/[email protected]", "@douyinfe/semi-icons@^2.0.0":
-  version "2.47.1"
-  resolved "https://registry.npmjs.org/@douyinfe/semi-icons/-/semi-icons-2.47.1.tgz#100883e71a7eab9ca2abb91110f48a348b9ad895"
-  integrity sha512-+gC22MWuOCKSRwB5Yxq55+NUgoO9b7stYvIkuCmPuD3kYgjFhhGRR+o9dscQmDa8Wjd98wY05zI01S4BV/ptLw==
-  dependencies:
-    classnames "^2.2.6"
-
 "@douyinfe/[email protected]":
   version "2.33.1"
   resolved "https://registry.npmjs.org/@douyinfe/semi-illustrations/-/semi-illustrations-2.33.1.tgz#530ab851f4dc32a52221c4067c778c800b9b55d7"
   integrity sha512-tTTUN8QwnQiF++sk4VBNzfkG87aYZ4iUeqk2ys8/ymVUmCZQ7y46ys020GO1MfPHRR47OMFPI82FVcH1WQtE3g==
 
-"@douyinfe/[email protected]":
-  version "2.47.1"
-  resolved "https://registry.npmjs.org/@douyinfe/semi-illustrations/-/semi-illustrations-2.47.1.tgz#c4e1d4881cdc50ebb2f370b5cde299706dc5a5f6"
-  integrity sha512-ouhdAHzcBEW5kv5EFvHQsITSHIxlL0mnCMz63TVIywGA6QnCcxyMG6er0rlChAnu76FhlERR/Ys5Dlf2e5VhSQ==
-
 "@douyinfe/[email protected]":
   version "2.23.2"
   resolved "https://registry.npmjs.org/@douyinfe/semi-scss-compile/-/semi-scss-compile-2.23.2.tgz#30884bb194ee9ae1e81877985e5663c3297c1ced"
@@ -1685,40 +1638,6 @@
   dependencies:
     glob "^7.1.6"
 
-"@douyinfe/[email protected]":
-  version "2.47.1"
-  resolved "https://registry.npmjs.org/@douyinfe/semi-theme-default/-/semi-theme-default-2.47.1.tgz#5a43c71764bebe9ec0add75ea4de25dc42d05e35"
-  integrity sha512-GGWH6sBvwBft8eB+7V0VSueSVmsfLhabzSv/GXYwZeyljyuj4/JTRZa2qyiSgN1BOZbwn3vPW1si2QFioR0gQA==
-  dependencies:
-    glob "^7.1.6"
-
-"@douyinfe/semi-ui@^2.0.0":
-  version "2.47.1"
-  resolved "https://registry.npmjs.org/@douyinfe/semi-ui/-/semi-ui-2.47.1.tgz#7553114eeea38c285633a19acda2472f48676032"
-  integrity sha512-HxYvjn32DJsDPmcspM8jzHMY84f4skEAN6Zheg4FPW74uAUSnGILj5HXd/vZM4c6bbJeQSnxP0Grqa5qrZFpkg==
-  dependencies:
-    "@dnd-kit/core" "^6.0.8"
-    "@dnd-kit/sortable" "^7.0.2"
-    "@dnd-kit/utilities" "^3.2.1"
-    "@douyinfe/semi-animation" "2.47.1"
-    "@douyinfe/semi-animation-react" "2.47.1"
-    "@douyinfe/semi-foundation" "2.47.1"
-    "@douyinfe/semi-icons" "2.47.1"
-    "@douyinfe/semi-illustrations" "2.47.1"
-    "@douyinfe/semi-theme-default" "2.47.1"
-    async-validator "^3.5.0"
-    classnames "^2.2.6"
-    copy-text-to-clipboard "^2.1.1"
-    date-fns "^2.29.3"
-    date-fns-tz "^1.3.8"
-    lodash "^4.17.21"
-    prop-types "^15.7.2"
-    react-resizable "^3.0.5"
-    react-window "^1.8.2"
-    resize-observer-polyfill "^1.5.1"
-    scroll-into-view-if-needed "^2.2.24"
-    utility-types "^3.10.0"
-
 "@douyinfe/semi-ui@latest":
   version "2.33.1"
   resolved "https://registry.yarnpkg.com/@douyinfe/semi-ui/-/semi-ui-2.33.1.tgz#3234ca96eb3560b8299bc9750fbe59446522d9bb"
@@ -11665,11 +11584,6 @@ eslint-plugin-react@^7.20.6, eslint-plugin-react@^7.24.0:
     semver "^6.3.0"
     string.prototype.matchall "^4.0.8"
 
-eslint-plugin-semi-design@^2.33.0:
-  version "2.47.1"
-  resolved "https://registry.npmjs.org/eslint-plugin-semi-design/-/eslint-plugin-semi-design-2.47.1.tgz#9a3255c26a3c953079ce778941df5bdefa354915"
-  integrity sha512-UskPIiDJURTmeKfN3i6OUwTki3WxQ/hnZlXOPqaKMcDRHXjOIh2gACvQj5QBigkyWfulErmWwDvJREdAAroAHA==
-
 eslint-rule-composer@^0.3.0:
   version "0.3.0"
   resolved "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9"