diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 05225aaef0..c0141f37b9 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -12,9 +12,16 @@ jobs: name: 'publish a new version' runs-on: ubuntu-latest steps: + - name: gen token + run: | + git config --global user.name 'semi-team' + git config --global user.email 'semi-team@bytedance.com' + mkdir ~/.ssh + echo $SEMI_TEAM_PRIVATE_KEY > ~/.ssh/ssh-ed25519 + echo $SEMI_TEAM_PRIVATE_KEY_PUB > ~/.ssh/ssh-ed25519.pub + echo "Host\n github.com\n AddKeysToAgent yes\n UseKeychain yes\n IdentityFile ~/.ssh/id_ed25519" > ~/.ssh/config + - uses: actions/checkout@v4 - with: - token: ${{ secrets.PAT }} - name: Use Node.js 20 uses: actions/setup-node@v4 @@ -36,8 +43,8 @@ jobs: - name: publish run: | - git config --global user.name 'semi-bot' - git config --global user.email 'semi-bot@users.noreply.github.com' + git config --global user.name 'semi-team' + git config --global user.email 'semi-team@bytedance.com' node scripts/sitemap_update.js if [ -n "$(git status --porcelain)" ]; then echo "there are changes"; diff --git a/.vscode/settings.json b/.vscode/settings.json index 9fd2d42308..a627242cfd 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,9 +13,6 @@ "[javascriptreact]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, - "[less]": { - "editor.defaultFormatter": "michelemelluso.code-beautifier" - }, "[typescriptreact]": { "editor.defaultFormatter": "vscode.typescript-language-features" }, @@ -24,15 +21,8 @@ "[json]": { "editor.defaultFormatter": "vscode.json-language-features" }, - "[css]": { - "editor.defaultFormatter": "michelemelluso.code-beautifier" - }, "editor.tabSize": 4, - "eden-develop-environment.loose": true, - "eden-develop-environment.temporaryHideWarnings": true, "git.ignoreLimitWarning": true, - "edenDevelopEnvironment.loose": true, - "edenDevelopEnvironment.temporaryHideWarnings": true, "i18n-ally.localesPaths": [ "src/locale", "packages/semi-ui-react/locale", @@ -43,6 +33,11 @@ "cSpell.words": [ "backtop", "douyinfe", - "Splited" - ] + "Splited", + "bytedance", + "cascader", + "Cascader", + "Commonexclude", + ], + "typescript.tsdk": "node_modules/typescript/lib" } diff --git a/content/input/form/index.md b/content/input/form/index.md index 316868cda2..e8eab5bc9e 100644 --- a/content/input/form/index.md +++ b/content/input/form/index.md @@ -2119,13 +2119,13 @@ FormState 存储了所有 Form 内部的状态值,包括各表单控件的值 | Function | 说明 | example | | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |---------------------------------------------------------------------------------------------------------------------| -| getFormProps | 获取 Form 组件上当前所有props的值,例如可用于读取 disabled 等。v 2.57.0 后提供 | formApi.getFormProps(propNames?: string[]) | +| getFormProps | 获取 Form 组件上当前所有props的值,例如可用于读取 disabled 等。v2.57.0 后提供 | formApi.getFormProps(propNames?: string[]) | | getFormState | 获取 FormState | formApi.getFormState() | | submitForm | 可手动触发 submit 提交操作 | formApi.submitForm() | | reset | 可手动对 form 进行重置 | formApi.reset(fields?: Array ) | | validate | 可手动触发对表单的校验,不传参时默认触发整全体Field的校验(配置Form级别校验器后,Field级别校验器在submit或formApi.validate()时不会再被触发),若想触发部分field的校验,将目标field数组传入即可 | formApi.validate()
.then(values=>{})
.catch(errors=>{})
或 formApi.validate(\['fieldA','fieldB'\])
| | setValues | 设置整个表单的值。第二个参数中的 isOverride 默认为 false
默认情况下只会从`newValues`中取 Form 中已存在的 field 的值更新到`formState.values`中。
当 isOverride 为`true`时,会直接以 newValues 覆盖赋值给 formState.values | formApi.setValues(newValues: object, { isOverride: boolean }) | -| setValue | 提供直接修改 formState.values 方法,与 setValues 的区别是它仅修改单个 field | formApi.setValue(field: string, newFieldValue: any) | +| setValue | 提供直接修改 formState.values 方法,与 setValues 的区别是它仅修改单个 field。注意首个参数 field 必须有对应的 FieldComponent DOM实体(即属于 Form.XX 或 ArrayField 对应的 field path) | formApi.setValue(field: string, newFieldValue: any) | | getValue | 获取 单个 Field 的值 | formApi.getValue()
formApi.getValue(field: string) | | getValues | 获取 所有 Field 的值 | formApi.getValues() | | setTouched | 修改 formState.touched | formApi.setTouched(field: string, isTouched: boolean)
| diff --git a/content/plus/jsonviewer/index.md b/content/plus/jsonviewer/index.md index 695926515c..a6aee000f5 100644 --- a/content/plus/jsonviewer/index.md +++ b/content/plus/jsonviewer/index.md @@ -227,8 +227,8 @@ render(CustomRenderJsonComponent); | 属性 | 说明 | 类型 | 默认值 | |-------------------|------------------------------------------------|---------------------------------|--------------| | value | 展示内容 | string | - | -| height | 高度 | number | - | -| width | 宽度 | number | - | +| height | 高度 | number \| string | - | +| width | 宽度 | number \| string | - | | className | 类名 | string | - | | style | 内联样式 | object | - | | showSearch | 是否显示搜索Icon | boolean | true | diff --git a/content/start/changelog/index-en-US.md b/content/start/changelog/index-en-US.md index 0b86a6c916..a2924eea54 100644 --- a/content/start/changelog/index-en-US.md +++ b/content/start/changelog/index-en-US.md @@ -16,6 +16,10 @@ Version:Major.Minor.Patch (follow the **Semver** specification) --- +#### 🎉 2.76.0 (2025-03-07) +- 【Fix】 +- Fix JsonViewer type error issue [@anjiazhuyouxing](https://github.com/anjiazhuyouxing) [#2748](https://github.com/DouyinFE/semi-design/pull/2748) + #### 🎉 2.76.0-beta.0 (2025-03-04) - 【Feat】 - Chat supports enableUpload API to support users to set upload behavior [#2735](https://github.com/DouyinFE/semi-design/issues/2735) diff --git a/content/start/changelog/index.md b/content/start/changelog/index.md index 6f75c350f8..a9c7f0e3c4 100644 --- a/content/start/changelog/index.md +++ b/content/start/changelog/index.md @@ -13,6 +13,9 @@ Semi 版本号遵循 **Semver** 规范(主版本号-次版本号-修订版本 - 修订版本号(patch):仅会进行 bugfix,发布时间不限 - 不同版本间的详细关系,可查阅 [FAQ](/zh-CN/start/faq) +#### 🎉 2.76.0 (2025-03-07) +- 【Fix】 + - 修复 JsonViewer 类型错误问题 [@anjiazhuyouxing](https://github.com/anjiazhuyouxing) [#2748](https://github.com/DouyinFE/semi-design/pull/2748) #### 🎉 2.76.0-beta.0 (2025-03-04) - 【Feat】 diff --git a/cypress/e2e/scrollList.spec.js b/cypress/e2e/scrollList.spec.js index f095b583da..a2380f951e 100644 --- a/cypress/e2e/scrollList.spec.js +++ b/cypress/e2e/scrollList.spec.js @@ -7,22 +7,22 @@ describe('scrollList', () => { }); // todo: due to the https://github.com/DouyinFE/semi-design/pull/2723, temporarily skip this test case - it.skip('infinite scroll', () => { - cy.visit('http://127.0.0.1:6006/iframe.html?id=scrolllist--single-scroll-list&args=&viewMode=story'); - cy.wait(500); - cy.get('li[aria-selected="true"]').contains(0); - cy.get('.semi-scrolllist-item-wheel .semi-scrolllist-list-outer').scrollTo('right', { duration: 2000 }); - cy.wait(1000); - cy.get('.semi-scrolllist-item-wheel .semi-scrolllist-list-outer').scrollTo('top', { duration: 2000 }); - cy.wait(500); - cy.get('.semi-scrolllist-item-wheel .semi-scrolllist-list-outer').scrollTo('bottom', { duration: 2000 }); - }); + // it.skip('infinite scroll', () => { + // cy.visit('http://127.0.0.1:6006/iframe.html?id=scrolllist--single-scroll-list&args=&viewMode=story'); + // cy.wait(500); + // cy.get('li[aria-selected="true"]').contains(0); + // cy.get('.semi-scrolllist-item-wheel .semi-scrolllist-list-outer').scrollTo('right', { duration: 2000 }); + // cy.wait(1000); + // cy.get('.semi-scrolllist-item-wheel .semi-scrolllist-list-outer').scrollTo('top', { duration: 2000 }); + // cy.wait(500); + // cy.get('.semi-scrolllist-item-wheel .semi-scrolllist-list-outer').scrollTo('bottom', { duration: 2000 }); + // }); // todo: due to the https://github.com/DouyinFE/semi-design/pull/2723, temporarily skip this test case - it.skip('click option', () => { - cy.visit('http://127.0.0.1:6006/iframe.html?id=scrolllist--single-scroll-list&args=&viewMode=story'); - cy.get('li[aria-selected="true"]').contains(0); - cy.get('.semi-scrolllist-list-outer').contains(59).click(); - cy.get('li[aria-selected="true"]').contains(0); - }); + // it.skip('click options', () => { + // // cy.visit('http://127.0.0.1:6006/iframe.html?id=scrolllist--single-scroll-list&args=&viewMode=story'); + // // cy.get('li[aria-selected="true"]').contains(0); + // // cy.get('.semi-scrolllist-list-outer').contains(59).click(); + // // cy.get('li[aria-selected="true"]').contains(0); + // }); }); \ No newline at end of file diff --git a/lerna.json b/lerna.json index bb4d030d1a..ccf048ae57 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { "useWorkspaces": true, "npmClient": "yarn", - "version": "2.74.0" + "version": "2.76.0" } diff --git a/package.json b/package.json index a789c764fc..6c6346f89a 100644 --- a/package.json +++ b/package.json @@ -213,7 +213,7 @@ "svgo": "^2.7.0", "terser-webpack-plugin": "^4.2.3", "ts-loader": "^5.4.5", - "typescript": "^4.8.3", + "typescript": "^5.8.2", "webpack": "^5.77.0", "webpack-cli": "^5.1.4", "webpack-dev-server": "^3.11.2", diff --git a/packages/semi-animation-react/package.json b/packages/semi-animation-react/package.json index d5d1610685..3a9f0488c8 100644 --- a/packages/semi-animation-react/package.json +++ b/packages/semi-animation-react/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-animation-react", - "version": "2.74.0", + "version": "2.76.0", "description": "motion library for semi-ui-react", "keywords": [ "motion", @@ -25,8 +25,8 @@ "prepublishOnly": "npm run build:lib" }, "dependencies": { - "@douyinfe/semi-animation": "2.74.0", - "@douyinfe/semi-animation-styled": "2.74.0", + "@douyinfe/semi-animation": "2.76.0", + "@douyinfe/semi-animation-styled": "2.76.0", "classnames": "^2.2.6" }, "devDependencies": { @@ -42,5 +42,5 @@ "prop-types": "^15.7.2", "react-storybook-addon-props-combinations": "^1.1.0" }, - "gitHead": "eb34a4f25f002bb4cbcfa51f3df93bed868c831a" + "gitHead": "495c8a72c1811f44d980b1bfa562d3b18d354228" } diff --git a/packages/semi-animation-react/tsconfig.json b/packages/semi-animation-react/tsconfig.json index ab767e0450..d54788f233 100644 --- a/packages/semi-animation-react/tsconfig.json +++ b/packages/semi-animation-react/tsconfig.json @@ -10,7 +10,6 @@ "moduleResolution": "node", "noImplicitAny": false, "jsx": "react", - "suppressImplicitAnyIndexErrors": true, "forceConsistentCasingInFileNames": true, "allowSyntheticDefaultImports": true, "experimentalDecorators": true, diff --git a/packages/semi-animation-styled/package.json b/packages/semi-animation-styled/package.json index 48f5211bbe..97984eb925 100644 --- a/packages/semi-animation-styled/package.json +++ b/packages/semi-animation-styled/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-animation-styled", - "version": "2.74.0", + "version": "2.76.0", "description": "semi styled animation", "keywords": [ "semi", diff --git a/packages/semi-animation-styled/tsconfig.json b/packages/semi-animation-styled/tsconfig.json index 24f4552dbe..f199824617 100644 --- a/packages/semi-animation-styled/tsconfig.json +++ b/packages/semi-animation-styled/tsconfig.json @@ -9,7 +9,6 @@ "lib": ["es7", "dom"], "moduleResolution": "node", "noImplicitAny": false, - "suppressImplicitAnyIndexErrors": true, "forceConsistentCasingInFileNames": true, "allowSyntheticDefaultImports": true, "experimentalDecorators": true, diff --git a/packages/semi-animation/package.json b/packages/semi-animation/package.json index 8d718711e8..20a1f8174d 100644 --- a/packages/semi-animation/package.json +++ b/packages/semi-animation/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-animation", - "version": "2.74.0", + "version": "2.76.0", "description": "animation base library for semi-ui", "keywords": [ "animation", @@ -42,5 +42,5 @@ "merge2": "^1.4.1", "react-storybook-addon-props-combinations": "^1.1.0" }, - "gitHead": "eb34a4f25f002bb4cbcfa51f3df93bed868c831a" + "gitHead": "495c8a72c1811f44d980b1bfa562d3b18d354228" } diff --git a/packages/semi-animation/src/interpolate.ts b/packages/semi-animation/src/interpolate.ts index 2ffbe3b3af..dac70e2403 100644 --- a/packages/semi-animation/src/interpolate.ts +++ b/packages/semi-animation/src/interpolate.ts @@ -30,8 +30,7 @@ export default function interpolate(from: FromTo, to: FromTo, ratio = 0, parser: if (Array.isArray(from) && Array.isArray(to)) { from.forEach((fromVal, idx) => { fromVal = parseFloat(fromVal as string); - const toVal = parseFloat(to[idx]); - + const toVal = parseFloat(to[idx] as string); result.push((toVal - fromVal) * ratio + fromVal); }); } diff --git a/packages/semi-animation/tsconfig.json b/packages/semi-animation/tsconfig.json index 24f4552dbe..f199824617 100644 --- a/packages/semi-animation/tsconfig.json +++ b/packages/semi-animation/tsconfig.json @@ -9,7 +9,6 @@ "lib": ["es7", "dom"], "moduleResolution": "node", "noImplicitAny": false, - "suppressImplicitAnyIndexErrors": true, "forceConsistentCasingInFileNames": true, "allowSyntheticDefaultImports": true, "experimentalDecorators": true, diff --git a/packages/semi-eslint-plugin/package.json b/packages/semi-eslint-plugin/package.json index 951e6f81ed..b13d4a5298 100644 --- a/packages/semi-eslint-plugin/package.json +++ b/packages/semi-eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-semi-design", - "version": "2.74.0", + "version": "2.76.0", "description": "semi ui eslint plugin", "keywords": [ "semi", diff --git a/packages/semi-foundation/LICENSE b/packages/semi-foundation/LICENSE new file mode 100644 index 0000000000..c21c5cc79e --- /dev/null +++ b/packages/semi-foundation/LICENSE @@ -0,0 +1,83 @@ +MIT License + +Copyright (c) 2021 DouyinFE + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +The code implementation of the external library is referenced by DouyinFe are: + +- animate.css + + The MIT License (MIT) + + Copyright (c) 2020 Daniel Eden + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +- Ant Design + MIT LICENSE + + Copyright (c) 2015-present Ant UED, https://xtech.antfin.com/ + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +- rc-tree + + MIT LICENSE + + Copyright (c) 2015-present Alipay.com, https://www.alipay.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/semi-foundation/datePicker/monthFoundation.ts b/packages/semi-foundation/datePicker/monthFoundation.ts index 9061dc12eb..5fb8ce430e 100644 --- a/packages/semi-foundation/datePicker/monthFoundation.ts +++ b/packages/semi-foundation/datePicker/monthFoundation.ts @@ -19,8 +19,8 @@ export interface MonthFoundationProps { disabledDate: (day: Date, options?: { rangeStart: string; rangeEnd: string }) => boolean; weeksRowNum: number; onWeeksRowNumChange: (weeksRowNum: number) => void; - renderDate: () => void; - renderFullDate: () => void; + renderDate: (dayNumber: number, fullDate: string) => React.ReactNode; + renderFullDate: (dayNumber: number, fullDate: string, dayStatus: any) => React.ReactNode; hoverDay: string; // Real-time hover date startDateOffset: () => void; endDateOffset: () => void; @@ -35,10 +35,6 @@ export type MonthDayInfo = { dayNumber: number; dayNumberFull?: string; fullDate: string -} | { - dayNumber: string; - dayNumberFull?: string; - fullDate: string }; export interface MonthInfo { diff --git a/packages/semi-foundation/form/interface.ts b/packages/semi-foundation/form/interface.ts index 3d08e566f5..477085f218 100644 --- a/packages/semi-foundation/form/interface.ts +++ b/packages/semi-foundation/form/interface.ts @@ -38,56 +38,88 @@ export interface setValuesConfig { isOverride: boolean } -// FieldPath 类型定义,用于生成对象字段的路径字符串 -export type FieldPath = T extends object ? { - // 遍历对象的每个键 K - [K in keyof T]: T[K] extends object - // 如果键 K 对应的值是对象,则生成嵌套路径(递归调用 FieldPath) - ? `${string & K}.${FieldPath}` | `${string & K}` - // 否则,仅生成当前键的路径 - : `${string & K}`; -}[keyof T] - : never; - -// FieldPathValue 类型定义,用于从路径字符串中推导出实际的类型 -export type FieldPathValue> = - // 如果路径字符串 P 包含嵌套路径(使用模板字符串类型进行匹配) - P extends `${infer K}.${infer Rest}` - ? K extends keyof T - // 递归解析嵌套路径,逐层深入对象结构 - ? Rest extends FieldPath - ? FieldPathValue - : never - : never - // 如果路径字符串 P 是顶层键 - : P extends keyof T - ? T[P] - : never; - export type ScrollToErrorOptions = { field?: K; index?: number; scrollOpts?: ScrollIntoViewOptions } +// 支持 array[index] 和 array.index 两种形式 +type ArrayIndexPath = + | `${K}[${number}]` // 支持 array[index] + | `${K}[${number}].${FieldPath}` // 支持 array[index].child + | `${K}.${number}` // 支持 array.index + | `${K}.${number}.${FieldPath}`; // 支持 array.index.child + +type ArrayFieldPathValue = + P extends `${infer K}[${infer I}]${infer Rest}` + ? K extends keyof T + ? T[K] extends Array + ? I extends `${number}` + ? Rest extends '' + ? U // 索引路径 + : Rest extends `.${infer RestPath}` + ? FieldPathValue // 嵌套路径 + : never + : never + : never + : never + : never; + +/** + * FieldPath 这里针对 Date、Set、Map等不做辅助类型提取,采用层级深但更简单的方式做,避免推导中断(提取后实测无法通过 story 中测试用例) + */ + +// FieldPath 类型定义,支持对象和数组字段路径,支持数字索引(如 `[0]`),支持数组嵌套路径(如 `[0].field`) +export type FieldPath = T extends Array + ? `${number}` | `${number}.${FieldPath>}` + : T extends object + ? { + [K in keyof T]: K extends string + ? Exclude extends Date + ? `${K}` + : Exclude extends Set + ? `${K}` + : Exclude extends Map + ? `${K}` + : Exclude extends RegExp + ? `${K}` + : T[K] extends Array | object | undefined + ? `${K}` | `${K}.${FieldPath>}` |ArrayIndexPath // 嵌套处理 + : `${K}` + : never; + }[keyof T] + : never; + +// FieldPathValue 类型定义,支持从路径字符串中推导数组和对象的值 +export type FieldPathValue = + ArrayFieldPathValue | + (P extends `${infer K}.${infer Rest}` + ? K extends keyof T + ? FieldPathValue, Rest> // 添加 undefined过滤,避免用户 tsconfig strictNullChecks 为 true 时,无法正确推断 + : never + : P extends keyof T + ? T[P] + : never); + // use object replace Record, fix issue 933 -export interface BaseFormApi { +export interface BaseFormApi { /** get value of field */ - getValue:

>(field?: P) => FieldPathValue; + getValue: >(field?: F) => FieldPathValue; /** set value of field */ - setValue: >(field: K, newFieldValue: any) => void; + setValue: >(field: F, newFieldValue: any) => void; /** get error of field */ - getError: (field: K) => any; + getError: >(field: F) => any; /** set error of field */ - setError: (field: K, fieldError: any) => void; + setError: >(field: F, fieldError: any) => void; /** get touched of field */ - getTouched: (field: K) => boolean; + getTouched: >(field: F) => boolean; /** set touch of field */ - setTouched: (field: K, fieldTouch: boolean) => void; + setTouched: >(field: F, fieldTouch: boolean) => void; /** judge field exist */ - getFieldExist: (field: K) => boolean; + getFieldExist: >(field: F) => boolean; /** get formState of form */ - getFormState: () => FormState; + getFormState: () => FormState; /** get formProps of form */ getFormProps: (keys?: Array) => ComponentProps; /** submit form manual */ @@ -95,14 +127,14 @@ export interface BaseFormApi { /** reset form manual */ reset: (fields?: Array) => void; /** trigger validate manual */ - validate: , V extends Params[number]>(fields?: Params) => Promise<{ [R in V]: T[R] }>; - getInitValue: (field: K) => any; + validate: , V extends Params[number]>(fields?: Params) => Promise<{ [R in V]: [R] }>; + getInitValue: >(field: F) => any; getInitValues: () => any; - getValues: () => T; + getValues: () => FormValuesType; /** set value of multiple fields */ - setValues: (fieldsValue: Partial, config?: setValuesConfig) => void; - scrollToField: (field: K, scrollConfig?: ScrollIntoViewOptions) => void; - scrollToError: (config?: ScrollToErrorOptions) => void + setValues: (fieldsValue: Partial, config?: setValuesConfig) => void; + scrollToField: >(field: F, scrollConfig?: ScrollIntoViewOptions) => void; + scrollToError: >(config?: ScrollToErrorOptions) => void } export interface CallOpts { @@ -139,7 +171,6 @@ export interface InternalFieldApi { reset: () => void; validate: (val: any, opts: CallOpts) => Promise } - export interface FieldStaff { field: string; fieldApi: InternalFieldApi; diff --git a/packages/semi-foundation/package.json b/packages/semi-foundation/package.json index ff4ce0f724..81e8f84e59 100644 --- a/packages/semi-foundation/package.json +++ b/packages/semi-foundation/package.json @@ -1,14 +1,14 @@ { "name": "@douyinfe/semi-foundation", - "version": "2.74.0", + "version": "2.76.0", "description": "", "scripts": { "build:lib": "node ./scripts/compileLib.js", "prepublishOnly": "npm run build:lib" }, "dependencies": { - "@douyinfe/semi-animation": "2.74.0", - "@douyinfe/semi-json-viewer-core": "2.74.0", + "@douyinfe/semi-animation": "2.76.0", + "@douyinfe/semi-json-viewer-core": "2.76.0", "@mdx-js/mdx": "^3.0.1", "async-validator": "^3.5.0", "classnames": "^2.2.6", @@ -29,7 +29,7 @@ "*.scss", "*.css" ], - "gitHead": "eb34a4f25f002bb4cbcfa51f3df93bed868c831a", + "gitHead": "bed6f4225c2b18d52841880f672e5c7e389ee1db", "devDependencies": { "@babel/plugin-transform-runtime": "^7.15.8", "@babel/preset-env": "^7.15.8", diff --git a/packages/semi-foundation/utils/object.ts b/packages/semi-foundation/utils/object.ts index 221a03acfb..c0bb5fec3c 100644 --- a/packages/semi-foundation/utils/object.ts +++ b/packages/semi-foundation/utils/object.ts @@ -14,7 +14,7 @@ type Many = T | ReadonlyArray; type PropertyName = string | number | symbol; type PropertyPath = Many; -type ObjectType = Record; +export type ObjectType = Record; const pathToArrayElem = (path: any) => { const pathArray = lodashToPath(path); diff --git a/packages/semi-icons-lab/package.json b/packages/semi-icons-lab/package.json index aafeb36e9c..862eef1d12 100644 --- a/packages/semi-icons-lab/package.json +++ b/packages/semi-icons-lab/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-icons-lab", - "version": "2.74.0", + "version": "2.76.0", "description": "semi icons lab", "keywords": [ "semi", diff --git a/packages/semi-icons/package.json b/packages/semi-icons/package.json index af77e05137..9d6b9fe0d6 100644 --- a/packages/semi-icons/package.json +++ b/packages/semi-icons/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-icons", - "version": "2.74.0", + "version": "2.76.0", "description": "semi icons", "keywords": [ "semi", diff --git a/packages/semi-illustrations/package.json b/packages/semi-illustrations/package.json index a2fa1fec7a..a98cef7343 100644 --- a/packages/semi-illustrations/package.json +++ b/packages/semi-illustrations/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-illustrations", - "version": "2.74.0", + "version": "2.76.0", "description": "semi illustrations", "keywords": [ "semi", diff --git a/packages/semi-illustrations/tsconfig.json b/packages/semi-illustrations/tsconfig.json index ab767e0450..d54788f233 100644 --- a/packages/semi-illustrations/tsconfig.json +++ b/packages/semi-illustrations/tsconfig.json @@ -10,7 +10,6 @@ "moduleResolution": "node", "noImplicitAny": false, "jsx": "react", - "suppressImplicitAnyIndexErrors": true, "forceConsistentCasingInFileNames": true, "allowSyntheticDefaultImports": true, "experimentalDecorators": true, diff --git a/packages/semi-json-viewer-core/package.json b/packages/semi-json-viewer-core/package.json index b9bd79af27..e5cfde21e2 100644 --- a/packages/semi-json-viewer-core/package.json +++ b/packages/semi-json-viewer-core/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-json-viewer-core", - "version": "2.74.0", + "version": "2.76.0", "description": "", "main": "lib/index.js", "module": "lib/index.js", @@ -52,5 +52,6 @@ "dist/umd/*.js" ], "author": "", - "license": "MIT" + "license": "MIT", + "gitHead": "495c8a72c1811f44d980b1bfa562d3b18d354228" } diff --git a/packages/semi-json-viewer-core/src/common/map.ts b/packages/semi-json-viewer-core/src/common/map.ts index 30a7979c7c..a2ca748daf 100644 --- a/packages/semi-json-viewer-core/src/common/map.ts +++ b/packages/semi-json-viewer-core/src/common/map.ts @@ -1,3 +1,4 @@ +// @ts-nocheck /** reference from https://github.com/microsoft/vscode */ interface Item { previous: Item | undefined; diff --git a/packages/semi-next/package.json b/packages/semi-next/package.json index be7cd0ae48..9113bc33d9 100644 --- a/packages/semi-next/package.json +++ b/packages/semi-next/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-next", - "version": "2.74.0", + "version": "2.76.0", "description": "Plugin that support Semi Design in Next.js", "author": "伍浩威 ", "homepage": "", @@ -22,7 +22,7 @@ "typescript": "^4" }, "dependencies": { - "@douyinfe/semi-webpack-plugin": "2.74.0" + "@douyinfe/semi-webpack-plugin": "2.76.0" }, - "gitHead": "eb34a4f25f002bb4cbcfa51f3df93bed868c831a" + "gitHead": "495c8a72c1811f44d980b1bfa562d3b18d354228" } diff --git a/packages/semi-rspack/package.json b/packages/semi-rspack/package.json index 231a5c2ea0..e4f34136d4 100644 --- a/packages/semi-rspack/package.json +++ b/packages/semi-rspack/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-rspack-plugin", - "version": "2.74.0", + "version": "2.76.0", "description": "", "homepage": "", "license": "MIT", diff --git a/packages/semi-rspack/src/loaders/semi-web-component-loader.ts b/packages/semi-rspack/src/loaders/semi-web-component-loader.ts index a06b359765..9d2f5d74f1 100644 --- a/packages/semi-rspack/src/loaders/semi-web-component-loader.ts +++ b/packages/semi-rspack/src/loaders/semi-web-component-loader.ts @@ -30,14 +30,14 @@ function getAllComponents(components: string[]) { Object.keys(specialCaseBefore).map(keyComponent => { if (originComponents.has(keyComponent)) { originComponents.delete(keyComponent); - originComponents.add(specialCaseBefore[keyComponent]); + originComponents.add(specialCaseBefore[keyComponent as keyof typeof specialCaseBefore]); } }); function getDependentComponents(components: string[]) { components.forEach((component) => { if (!resultComponents.has(component)) { - const dependents = componentDependentTree[component]; + const dependents = componentDependentTree[component as keyof typeof componentDependentTree]; dependents?.forEach((element: string) => { getDependentComponents([element]); }); @@ -51,7 +51,7 @@ function getAllComponents(components: string[]) { Object.keys(specialCaseAfter).map(keyComponent => { if (resultComponents.has(keyComponent)) { resultComponents.delete(keyComponent); - resultComponents.add(specialCaseAfter[keyComponent]); + resultComponents.add(specialCaseAfter[keyComponent as keyof typeof specialCaseAfter]); } }); @@ -74,8 +74,8 @@ function getScssImportPaths(components: string[]) { const cssPaths = ["Base", ...components].map(componentName => { const lowFirstLetter = componentName.slice(0, 1).toLowerCase() + componentName.slice(1); let pathName = ''; - if (specialCase[componentName]) { - pathName = specialCase[componentName]; + if (specialCase[componentName as keyof typeof specialCase]) { + pathName = specialCase[componentName as keyof typeof specialCase]; } else { pathName = `${pathsObj.foundationPath}${lowFirstLetter}/${lowFirstLetter}.scss`; } diff --git a/packages/semi-rspack/tsconfig.json b/packages/semi-rspack/tsconfig.json index 3c02ec232a..1f543c0d30 100644 --- a/packages/semi-rspack/tsconfig.json +++ b/packages/semi-rspack/tsconfig.json @@ -10,7 +10,6 @@ "moduleResolution": "node", "declaration": true, "noImplicitAny": true, - "suppressImplicitAnyIndexErrors": true, "forceConsistentCasingInFileNames": true, "allowSyntheticDefaultImports": true, "experimentalDecorators": true, diff --git a/packages/semi-scss-compile/package.json b/packages/semi-scss-compile/package.json index 348934b4fe..af7972c4e6 100644 --- a/packages/semi-scss-compile/package.json +++ b/packages/semi-scss-compile/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-scss-compile", - "version": "2.74.0", + "version": "2.76.0", "description": "compile semi scss to css", "author": "daiqiang@bytedance.com", "license": "MIT", diff --git a/packages/semi-theme-default/package.json b/packages/semi-theme-default/package.json index 706d31e732..4344305f12 100644 --- a/packages/semi-theme-default/package.json +++ b/packages/semi-theme-default/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-theme-default", - "version": "2.74.0", + "version": "2.76.0", "description": "semi-theme-default", "keywords": [ "semi-theme", diff --git a/packages/semi-ui/LICENSE b/packages/semi-ui/LICENSE new file mode 100644 index 0000000000..c21c5cc79e --- /dev/null +++ b/packages/semi-ui/LICENSE @@ -0,0 +1,83 @@ +MIT License + +Copyright (c) 2021 DouyinFE + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +The code implementation of the external library is referenced by DouyinFe are: + +- animate.css + + The MIT License (MIT) + + Copyright (c) 2020 Daniel Eden + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + +- Ant Design + MIT LICENSE + + Copyright (c) 2015-present Ant UED, https://xtech.antfin.com/ + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +- rc-tree + + MIT LICENSE + + Copyright (c) 2015-present Alipay.com, https://www.alipay.com/ + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/semi-ui/datePicker/month.tsx b/packages/semi-ui/datePicker/month.tsx index a5fc1d30cd..eca4448de0 100644 --- a/packages/semi-ui/datePicker/month.tsx +++ b/packages/semi-ui/datePicker/month.tsx @@ -15,7 +15,9 @@ const prefixCls = cssClasses.PREFIX; export interface MonthProps extends MonthFoundationProps, BaseProps { forwardRef: React.Ref; locale: Locale['DatePicker']; - focusRecordsRef: React.RefObject<{ rangeStart: boolean; rangeEnd: boolean }> + focusRecordsRef: React.RefObject<{ rangeStart: boolean; rangeEnd: boolean }>; + renderDate: (dayNumber: number, fullDate: string) => React.ReactNode; + renderFullDate: (dayNumber: number, fullDate: string, dayStatus: any) => React.ReactNode } export type MonthState = MonthFoundationState; @@ -350,7 +352,7 @@ export default class Month extends BaseComponent { [`${cssClasses.DAY}-main`]: true, }); - const fullDateArgs = [dayNumber, fullDate, dayStatus]; + const fullDateArgs: [number, string, any] = [dayNumber, fullDate, dayStatus]; const customRender = isFunction(renderFullDate); return ( diff --git a/packages/semi-ui/form/_story/TypeCheck/useFieldApiDemo.tsx b/packages/semi-ui/form/_story/TypeCheck/useFieldApiDemo.tsx new file mode 100644 index 0000000000..7236b49c30 --- /dev/null +++ b/packages/semi-ui/form/_story/TypeCheck/useFieldApiDemo.tsx @@ -0,0 +1,71 @@ +import { useFieldApi } from '@douyinfe/semi-ui/form'; + +interface FormData { + test: number; + test2: string; + optional?: { + testL: string; + testM?: { + testN?: { + testO?: Date; + testP: number; + testQ: RegExp; + testR: { + R1: string; + R2: number; + R3: Array<{ + R31: string; + R32: number; + R33: boolean + }> + }; + testS: Set; + testT: Map + } + } + } +} + +const FCDemo = () => { + let fieldApi = useFieldApi('test'); + let numberVal = fieldApi.getValue(); + numberVal.toFixed(2); + let field2Api = useFieldApi('test2'); + let stringVal = field2Api.getValue(); + stringVal.toLocaleUpperCase(); + + let fieldOptional = useFieldApi('optional'); + let optionalVal = fieldOptional.getValue(); + optionalVal.testM.testN.testO.getFullYear(); + let SSet = optionalVal.testM.testN.testS; + SSet.add('123'); + let TMap = optionalVal.testM.testN.testT; + TMap.set('123', 123); +}; + +// 单个泛型参数,没有办法收窄,暂不提供 +const OneParamsDemo = () => { + let fieldApi = useFieldApi('test'); + let numberVal = fieldApi.getValue(); + numberVal.toFixed(2); + let field2Api = useFieldApi('test2'); + let stringVal = field2Api.getValue(); + stringVal.toLocaleUpperCase(); +}; + +// +const WithOutGenericDemo = () => { + let fieldApi = useFieldApi('test'); + let numberVal = fieldApi.getValue(); + numberVal.toFixed(2); + let field2Api = useFieldApi('test2'); + let stringVal = field2Api.getValue(); + stringVal.toLocaleUpperCase(); +}; + +export default FCDemo; + +/* + + +*/ \ No newline at end of file diff --git a/packages/semi-ui/form/_story/form.stories.tsx b/packages/semi-ui/form/_story/form.stories.tsx index 628ea2d308..13c0a283f3 100644 --- a/packages/semi-ui/form/_story/form.stories.tsx +++ b/packages/semi-ui/form/_story/form.stories.tsx @@ -1,9 +1,5 @@ import React, { FunctionComponent } from 'react'; -import { storiesOf } from '@storybook/react'; import { Form, useFormState, useFormApi, withField, Input, Button, Upload, withFormApi, withFormState } from '../../index'; -const stories = storiesOf('Form', module); -import { FormApiContext } from '../context'; - import type { FormApi, FormFCChild, FormState } from '../interface'; @@ -22,36 +18,9 @@ const treeData = [ label: '西湖区', value: 'xihu', key: '0-0-0', - }, - { - label: '萧山区', - value: 'xiaoshan', - key: '0-0-1', - }, - { - label: '临安区', - value: 'linan', - key: '0-0-2', - }, - ], - }, - { - label: '宁波市', - value: 'ningbo', - key: '0-1', - children: [ - { - label: '海曙区', - value: 'haishu', - key: '0-1-0', - }, - { - label: '江北区', - value: 'jiangbei', - key: '0-1-1', - }, + } ], - }, + } ], }, ]; @@ -69,40 +38,38 @@ const Fields: FunctionComponent = ({ formState, values, formApi }) const ref = React.useRef(); return ( <> - + - + - + {/* */} - + - - console.log(v)} ref={ref} /> + + console.log(v)} /> - + - + - + - - - + + + = ({ formState, values, formApi }) @@ -135,9 +101,6 @@ const Fields: FunctionComponent = ({ formState, values, formApi }) ) }; - -stories.add('Form', () =>

{Fields}
); - interface IProps { [x:string]: any; } @@ -154,63 +117,96 @@ interface FData { }, test5: { kkk: { - jjj: number + jnumber: number } } testK: boolean; - // [x: string]: any; + array: [string, string], + nestedArray: Array<{ + id: number; + name: string; + }>; + recurNestedArray: Array<{ + obj: Array<{ time: string; rule: string }> + name: string; + }>; + optional?: { + testL: string; + testM?: { + testN?: { + testO?: Date; + testP: number; + testQ: RegExp; + testR: { + R1: string; + R2: number; + R3: Array<{ + R31: string; + R32: number; + R33: boolean; + }>; + }, + testS: Set; + testT: Map; + } + }; + }; } -class Demo extends React.Component { - - formApi: FormApi - - constructor(props:any) { - super(props); - this.state = { visible: false}; - } - - getFormApi(formApi) { - this.formApi = formApi; - } - setData() { - const formApi = this.formApi; - // set - formApi.setValue('test3', 123); - formApi.setValue('test4.event', 123); - formApi.setValue('test5.kkk', 123); - formApi.setValue('test5.kkk.jjj', 123); - formApi.setValue('keyNotExist', 123); - formApi.setValue('test4.notExist', 123); - formApi.setValue('test5.kkk.notExist', 123); - - // get - let test3 = formApi.getValue('test3'); - let test4 = formApi.getValue('test4'); - let test4event = formApi.getValue('test4.event'); - let test5kkk = formApi.getValue('test5.kkk'); - let test5kkkjjj = formApi.getValue('test5.kkk.jjj'); - - let a = formApi.getValue('keyNotExist'); - let b = formApi.getValue('test5.kkk.notExist'); - let c = formApi.getValue('test4.notExist'); - } - - render() { - const { visible } = this.state; - return ( - <> - - getFormApi={this.getFormApi} - onSubmit={values => console.log(values.test2)} - onChange={formState => formState.values.test} - validateFields={values => ({ test4: 'test4 empty', test2: '' }) } - > - - - ); - } - } +const FCDemo = () => { + const formApi = useFormApi(); + let optional = formApi.getValue('optional'); + let testO = formApi.getValue('optional.testM.testN.testO'); + let year = testO?.getFullYear(); + let testP = formApi.getValue('optional.testM.testN.testP'); + testP = testP + 1; + let testSet = formApi.getValue('optional.testM.testN.testS'); + let testMap = formApi.getValue('optional.testM.testN.testT'); + testMap.entries(); + + let NotExist = formApi.getValue('optional.testM.testN.NotExist'); + + // ✅ 应该合法的, 注意,setValue只对 fieldPath做校验,对 value 不做严格校验 + formApi.setValue('test3', '123'); + formApi.setValue('test4.event', 123); + formApi.setValue('test5.kkk', 123); + formApi.setValue('test5.kkk.jnumber', 'abc'); + formApi.setValue('array[0]', '2025') + formApi.setValue('array.0', '2025') + formApi.setValue('nestedArray[0].id', 123) + formApi.setValue('nestedArray[0].name', 'abc') + formApi.setValue('recurNestedArray[0].obj', 123); + formApi.setValue('recurNestedArray[0].obj[0].time', 123); + formApi.setValue('recurNestedArray[1].name', 123); + + + // ❌ 无法通过类型校验,应抛出错误的 + formApi.setValue('test5.kkk.notExist', 123); + formApi.setValue('keyNotExist', 123); + formApi.setValue('test4.notExist', 123); + formApi.setValue('test4.notExist', 123); + formApi.setValue('nestedArray[0].notExist', 123); + + formApi.setValue('recurNestedArray[0].name.notExist', 123); + formApi.setValue('recurNestedArray[0].name[0].notExist', 123); + formApi.setValue('recurNestedArray[1].obj.notExist', 123); + + // get 应该合法的 + let test3 = formApi.getValue('test3'); + let test4 = formApi.getValue('test4'); + let test4event = formApi.getValue('test4.event'); + let test5kkk = formApi.getValue('test5.kkk'); + let test5kkkjnumber = formApi.getValue('test5.kkk.jnumber'); + let recurNestedArrayObjTime = formApi.getValue('recurNestedArray[0].obj[0].time'); + let testM = formApi.getValue('optional.testM'); + let testL = formApi.getValue('optional.testL'); + + // ❌ 无法通过类型校验,应抛出错误的 + let a = formApi.getValue('keyNotExist'); + let b = formApi.getValue('test5.kkk.notExist'); + let c = formApi.getValue('test4.notExist'); + let testNoExist = formApi.getValue('optional.NotExist'); +} class WithoutGenericsType extends React.Component { @@ -251,10 +247,6 @@ class WithoutGenericsType extends React.Component { } -stories.add('Form render', () =>
}>
); - - - interface CodeProps { type?: 'email' | 'phone'; test?: 'a' | 'b' | 'c'; @@ -280,19 +272,20 @@ const DoubleWrap = withFormState(withFormApi(CodeC)); const OneWrap = withFormApi(CodeC); -stories.add('Form children', () =>
+const FormWithChildren = () => ( {({ formState, formApi, values }) => ( <> - - - - - - - - + + + + + + + + - ) + ) } ); + diff --git a/packages/semi-ui/form/hoc/withField.tsx b/packages/semi-ui/form/hoc/withField.tsx index 54fc860dfb..c298bf03db 100644 --- a/packages/semi-ui/form/hoc/withField.tsx +++ b/packages/semi-ui/form/hoc/withField.tsx @@ -637,6 +637,7 @@ function withField< return FieldComponent(); } }; + // @ts-ignore SemiField = forwardRef(SemiField); (SemiField as React.FC).displayName = getDisplayName(Component); return SemiField as any; diff --git a/packages/semi-ui/form/hoc/withFormApi.tsx b/packages/semi-ui/form/hoc/withFormApi.tsx index 9323c484de..3a94805bc3 100644 --- a/packages/semi-ui/form/hoc/withFormApi.tsx +++ b/packages/semi-ui/form/hoc/withFormApi.tsx @@ -14,6 +14,7 @@ function withFormApi< ); }; + // @ts-ignore WithApiCom = forwardRef(WithApiCom); return WithApiCom as R; } diff --git a/packages/semi-ui/form/hoc/withFormState.tsx b/packages/semi-ui/form/hoc/withFormState.tsx index bf670394eb..e883e837c4 100644 --- a/packages/semi-ui/form/hoc/withFormState.tsx +++ b/packages/semi-ui/form/hoc/withFormState.tsx @@ -14,6 +14,7 @@ function withFormState< ); }; + // @ts-ignore WithStateCom = forwardRef(WithStateCom); return WithStateCom as R; } diff --git a/packages/semi-ui/form/hooks/useFieldApi.tsx b/packages/semi-ui/form/hooks/useFieldApi.tsx index a18db609b1..f2cedc12e6 100644 --- a/packages/semi-ui/form/hooks/useFieldApi.tsx +++ b/packages/semi-ui/form/hooks/useFieldApi.tsx @@ -1,21 +1,29 @@ +/* eslint-disable @typescript-eslint/ban-types */ import React from 'react'; import useFormApi from './useFormApi'; -import { FormApi } from '../interface'; import { ReactFieldError as FieldError } from '../errorMessage'; +import { BaseFormApi as FormApi, FieldPath, FieldPathValue } from '@douyinfe/semi-foundation/form/interface'; -const buildFieldApi = (formApi: FormApi, field: string) => ({ +const buildFieldApi = >(formApi: FormApi, field: P) => ({ getError: () => formApi.getError(field), setError: (error: FieldError) => formApi.setError(field, error), getTouched: () => formApi.getTouched(field), setTouched: (isTouched: boolean) => formApi.setTouched(field, isTouched), - getValue: () => formApi.getValue(field), - setValue: (value: any) => formApi.setValue(field, value), + getValue: (): FieldPathValue => formApi.getValue(field), + setValue: (value: FieldPathValue) => formApi.setValue(field, value) }); -function useFieldApi(field: string) { - const formApi = useFormApi(); - const fieldApi = buildFieldApi(formApi, field); +function useFieldApi, P extends FieldPath = FieldPath>(field: P) { + const formApi = useFormApi(); + const fieldApi = buildFieldApi(formApi, field); return fieldApi; } -export default useFieldApi; \ No newline at end of file +// 理想状态是下面写法的单个泛型参数,实测无法自动推导,仍会作为联合类型推断出类型组合 +// function useFieldApi>(field: FieldPath) { +// const formApi = useFormApi(); +// const fieldApi = buildFieldApi(formApi, field); +// return fieldApi; +// } + +export default useFieldApi; diff --git a/packages/semi-ui/form/hooks/useFieldState.tsx b/packages/semi-ui/form/hooks/useFieldState.tsx index c12828882c..4f016b2ea4 100644 --- a/packages/semi-ui/form/hooks/useFieldState.tsx +++ b/packages/semi-ui/form/hooks/useFieldState.tsx @@ -5,8 +5,8 @@ import { FormState } from '../interface'; const buildFieldState = (formState: FormState, field: string) => ({ value: ObjectUtil.get(formState.values, field), - error: ObjectUtil.get(formState.errors, field), - touched: ObjectUtil.get(formState.touched, field), + error: ObjectUtil.get(formState.errors as ObjectUtil.ObjectType, field), + touched: ObjectUtil.get(formState.touched as ObjectUtil.ObjectType, field), }); function useFieldState(field: string) { diff --git a/packages/semi-ui/jsonViewer/index.tsx b/packages/semi-ui/jsonViewer/index.tsx index 9d3f97692d..8e767280db 100644 --- a/packages/semi-ui/jsonViewer/index.tsx +++ b/packages/semi-ui/jsonViewer/index.tsx @@ -21,14 +21,14 @@ import { } from '@douyinfe/semi-icons'; import BaseComponent, { BaseProps } from '../_base/baseComponent'; import { createPortal } from 'react-dom'; -import {isEqual} from "lodash"; +import { isEqual } from "lodash"; const prefixCls = cssClasses.PREFIX; export type { JsonViewerOptions }; export interface JsonViewerProps extends BaseProps { value: string; - width: number; - height: number; + width: number | string; + height: number | string; showSearch?: boolean; className?: string; style?: React.CSSProperties; diff --git a/packages/semi-ui/package.json b/packages/semi-ui/package.json index e8d5d92585..84431ba75f 100644 --- a/packages/semi-ui/package.json +++ b/packages/semi-ui/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-ui", - "version": "2.74.0", + "version": "2.76.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.74.0", - "@douyinfe/semi-animation-react": "2.74.0", - "@douyinfe/semi-foundation": "2.74.0", - "@douyinfe/semi-icons": "2.74.0", - "@douyinfe/semi-illustrations": "2.74.0", - "@douyinfe/semi-theme-default": "2.74.0", + "@douyinfe/semi-animation": "2.76.0", + "@douyinfe/semi-animation-react": "2.76.0", + "@douyinfe/semi-foundation": "2.76.0", + "@douyinfe/semi-icons": "2.76.0", + "@douyinfe/semi-illustrations": "2.76.0", + "@douyinfe/semi-theme-default": "2.76.0", "async-validator": "^3.5.0", "classnames": "^2.2.6", "copy-text-to-clipboard": "^2.1.1", @@ -78,7 +78,7 @@ ], "author": "", "license": "MIT", - "gitHead": "e78045febe3e4645c8afe6d42cfbcb4e97a67923", + "gitHead": "bed6f4225c2b18d52841880f672e5c7e389ee1db", "devDependencies": { "@babel/plugin-proposal-decorators": "^7.15.8", "@babel/plugin-transform-runtime": "^7.15.8", diff --git a/packages/semi-ui/select/_story/select.stories.tsx b/packages/semi-ui/select/_story/select.stories.tsx deleted file mode 100644 index 1a40ebf25a..0000000000 --- a/packages/semi-ui/select/_story/select.stories.tsx +++ /dev/null @@ -1,195 +0,0 @@ -import React from 'react'; -import { storiesOf } from '@storybook/react'; -import classNames from 'classnames'; -import { optionRenderProps, RenderMultipleSelectedItemFn, RenderSingleSelectedItemFn } from '@douyinfe/semi-ui/select/index'; -import { Checkbox } from '../../index'; -import { Select, Avatar, Tag, Space } from '../../index'; - -const stories = storiesOf('Select', module); - -let optionList = [ - { value: 'tony', label: 'Ironman' }, - { value: 'Thor', label: 'Thor' }, - { value: 'steve', label: 'Caption' }, - { value: 'peter', label: 'SpiderBoy' }, -]; - -stories.add('Select', () => ( - <> - - -)); - -const RenderOptionDemo = () => { - const renderOptionItem = (renderProps: optionRenderProps) => { - const { - disabled, - selected, - label, - value, - focused, - className, - style, - onMouseEnter, - onClick, - ...rest - } = renderProps; - - const optionCls = classNames({ - ['custom-option-render']: true, - ['custom-option-render-focused']: focused, - ['custom-option-render-disabled']: disabled, - ['custom-option-render-selected']: selected, - }); - // Notice: - // 1.props传入的style需在wrapper dom上进行消费,否则在虚拟化场景下会无法正常使用 - // 2.选中(selected)、聚焦(focused)、禁用(disabled)等状态的样式需自行加上,你可以从props中获取到相对的boolean值 - // 3.onMouseEnter需在wrapper dom上绑定,否则上下键盘操作时显示会有问题 - - return ( -
onClick(e)} onMouseEnter={e => onMouseEnter(e)}> - -
{label}
-
- ); - }; - - return ( - - {list.map(item => renderCustomOption(item))} - - - - ); -} - -stories.add('自定义已选标签渲染', () => ( - <> -
renderSelectedItem
- - -)); diff --git a/packages/semi-ui/tsconfig.json b/packages/semi-ui/tsconfig.json index fe5550452b..d2bb52b0ab 100644 --- a/packages/semi-ui/tsconfig.json +++ b/packages/semi-ui/tsconfig.json @@ -28,5 +28,5 @@ "strict": true }, "include": ["**/*.tsx", "**/*.ts"], - "exclude": ["node_modules", "packages/rollup-plugin-semi-svg"] + "exclude": ["node_modules"] } diff --git a/packages/semi-webpack/package.json b/packages/semi-webpack/package.json index 13be20450d..e72a582074 100644 --- a/packages/semi-webpack/package.json +++ b/packages/semi-webpack/package.json @@ -1,6 +1,6 @@ { "name": "@douyinfe/semi-webpack-plugin", - "version": "2.74.0", + "version": "2.76.0", "description": "", "author": "伍浩威 ", "homepage": "", @@ -38,5 +38,5 @@ "rimraf": "^3.0.2", "typescript": "^4" }, - "gitHead": "393946538cf42a2b9f9d8746bc25b0d5ee233985" + "gitHead": "495c8a72c1811f44d980b1bfa562d3b18d354228" } diff --git a/packages/semi-webpack/src/semi-prefix-loader.ts b/packages/semi-webpack/src/semi-prefix-loader.ts index 36a04d53a3..58f496bf80 100644 --- a/packages/semi-webpack/src/semi-prefix-loader.ts +++ b/packages/semi-webpack/src/semi-prefix-loader.ts @@ -13,6 +13,7 @@ export default function semiPrefixLoader(source: string) { const { node } = path; const replacerKeys = Object.keys(query.replacers); if (replacerKeys.includes((node.id as any).name)) { + // @ts-ignore (node.init as any).value = query.replacers[(node.id as any).name]; } } diff --git a/packages/semi-webpack/src/semi-web-component-loader.ts b/packages/semi-webpack/src/semi-web-component-loader.ts index a488ed9506..8bef7b61b4 100644 --- a/packages/semi-webpack/src/semi-web-component-loader.ts +++ b/packages/semi-webpack/src/semi-web-component-loader.ts @@ -29,14 +29,14 @@ function getAllComponents(components: string[]) { Object.keys(specialCaseBefore).map(keyComponent => { if (originComponents.has(keyComponent)) { originComponents.delete(keyComponent); - originComponents.add(specialCaseBefore[keyComponent]); + originComponents.add(specialCaseBefore[keyComponent as keyof typeof specialCaseBefore]); } }); function getDependentComponents(components: string[]) { components.forEach((component) => { if (!resultComponents.has(component)) { - const dependents = componentDependentTree[component]; + const dependents = componentDependentTree[component as keyof typeof componentDependentTree]; dependents?.forEach((element: string) => { getDependentComponents([element]); }); @@ -50,7 +50,7 @@ function getAllComponents(components: string[]) { Object.keys(specialCaseAfter).map(keyComponent => { if (resultComponents.has(keyComponent)) { resultComponents.delete(keyComponent); - resultComponents.add(specialCaseAfter[keyComponent]); + resultComponents.add(specialCaseAfter[keyComponent as keyof typeof specialCaseAfter]); } }); @@ -73,8 +73,8 @@ function getScssImportPaths(components: string[]) { const cssPaths = ["Base", ...components].map(componentName => { const lowFirstLetter = componentName.slice(0, 1).toLowerCase() + componentName.slice(1); let pathName = ''; - if (specialCase[componentName]) { - pathName = specialCase[componentName]; + if (specialCase[componentName as keyof typeof specialCase]) { + pathName = specialCase[componentName as keyof typeof specialCase]; } else { pathName = `${pathsObj.foundationPath}${lowFirstLetter}/${lowFirstLetter}.scss`; } diff --git a/packages/semi-webpack/tsconfig.json b/packages/semi-webpack/tsconfig.json index e865c5f7dc..9363720771 100644 --- a/packages/semi-webpack/tsconfig.json +++ b/packages/semi-webpack/tsconfig.json @@ -10,7 +10,6 @@ "moduleResolution": "node", "declaration": true, "noImplicitAny": true, - "suppressImplicitAnyIndexErrors": true, "forceConsistentCasingInFileNames": true, "allowSyntheticDefaultImports": true, "experimentalDecorators": true, diff --git a/sitemap.xml b/sitemap.xml index 2cc74a0690..07a1772f63 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,624 +2,568 @@ https://juejin.cn/post/7267418854124699702 - 2025-02-07T09:51:41.001Z + 2025-03-07T08:08:43.369Z weekly https://medium.com/front-end-weekly/how-we-test-semi-design-component-libraries-64b854f63b65 - 2025-02-07T09:51:41.042Z + 2025-03-07T08:08:43.805Z weekly https://mp.weixin.qq.com/s/noHoWRuA25PgqFNcurhIUA - 2025-02-07T09:51:44.214Z + 2025-03-07T08:08:45.385Z weekly https://mp.weixin.qq.com/s/O3js-SZDNPEOjGxh-aAkbw - 2025-02-07T09:51:44.092Z + 2025-03-07T08:08:45.141Z weekly https://semi.design/blogs - 2025-02-07T09:51:41.898Z + 2025-03-07T08:08:43.800Z weekly https://semi.design/code/en-US - 2025-02-07T09:51:42.901Z + 2025-03-07T08:08:43.802Z weekly https://semi.design/code/en-US/about/contact - 2025-02-07T09:51:43.001Z + 2025-03-07T08:08:44.171Z weekly https://semi.design/code/en-US/about/known-issues - 2025-02-07T09:51:43.053Z + 2025-03-07T08:08:44.144Z weekly https://semi.design/code/en-US/about/roadmap - 2025-02-07T09:51:42.919Z + 2025-03-07T08:08:44.407Z weekly https://semi.design/code/en-US/about/schema - 2025-02-07T09:51:43.054Z + 2025-03-07T08:08:44.424Z weekly https://semi.design/code/en-US/d2c/inspect - 2025-02-07T09:51:43.211Z + 2025-03-07T08:08:44.713Z weekly https://semi.design/code/en-US/d2c/mark - 2025-02-07T09:51:43.381Z + 2025-03-07T08:08:44.869Z weekly https://semi.design/code/en-US/d2c/mark-icon - 2025-02-07T09:51:43.682Z + 2025-03-07T08:08:44.871Z weekly https://semi.design/code/en-US/d2c/mark-library - 2025-02-07T09:51:43.654Z + 2025-03-07T08:08:44.877Z weekly https://semi.design/code/en-US/d2c/mark-table - 2025-02-07T09:51:44.758Z + 2025-03-07T08:08:45.244Z weekly https://semi.design/code/en-US/d2c/settings - 2025-02-07T09:51:44.665Z + 2025-03-07T08:08:45.036Z weekly https://semi.design/code/en-US/d2c/support-list - 2025-02-07T09:51:44.576Z + 2025-03-07T08:08:45.420Z weekly https://semi.design/code/en-US/d2c/transform-plugin - 2025-02-07T09:51:44.858Z + 2025-03-07T08:08:45.273Z weekly https://semi.design/code/en-US/d2c/translate-logic - 2025-02-07T09:51:45.218Z + 2025-03-07T08:08:45.267Z weekly https://semi.design/code/en-US/d2c/translate-page - 2025-02-07T09:51:44.897Z + 2025-03-07T08:08:45.370Z weekly https://semi.design/code/en-US/start/changelog - 2025-02-07T09:51:44.943Z + 2025-03-07T08:08:45.476Z weekly https://semi.design/code/en-US/start/faq - 2025-02-07T09:51:44.940Z + 2025-03-07T08:08:45.510Z weekly https://semi.design/code/en-US/start/introduction - 2025-02-07T09:51:44.907Z + 2025-03-07T08:08:45.701Z weekly https://semi.design/code/en-US/start/quick-start - 2025-02-07T09:51:44.997Z + 2025-03-07T08:08:45.620Z weekly https://semi.design/code/en-US/start/terms - 2025-02-07T09:51:44.935Z + 2025-03-07T08:08:45.780Z weekly https://semi.design/code/en-US/uikit/create - 2025-02-07T09:51:44.893Z + 2025-03-07T08:08:45.759Z weekly https://semi.design/code/en-US/uikit/figma-usage - 2025-02-07T09:51:45.174Z + 2025-03-07T08:08:46.042Z weekly https://semi.design/code/en-US/uikit/form-usage - 2025-02-07T09:51:45.003Z + 2025-03-07T08:08:45.797Z weekly https://semi.design/code/en-US/uikit/migrate - 2025-02-07T09:51:45.340Z + 2025-03-07T08:08:46.136Z weekly https://semi.design/code/en-US/uikit/rules - 2025-02-07T09:51:45.243Z + 2025-03-07T08:08:45.899Z weekly https://semi.design/code/en-US/uikit/table-usage - 2025-02-07T09:51:45.500Z + 2025-03-07T08:08:46.338Z weekly https://semi.design/code/zh-CN - 2025-02-07T09:51:45.469Z + 2025-03-07T08:08:46.134Z weekly https://semi.design/code/zh-CN/about/contact - 2025-02-07T09:51:45.679Z + 2025-03-07T08:08:46.329Z weekly https://semi.design/code/zh-CN/about/known-issues - 2025-02-07T09:51:45.620Z + 2025-03-07T08:08:46.357Z weekly https://semi.design/code/zh-CN/about/roadmap - 2025-02-07T09:51:45.821Z + 2025-03-07T08:08:46.513Z weekly https://semi.design/code/zh-CN/about/schema - 2025-02-07T09:51:45.793Z + 2025-03-07T08:08:46.625Z weekly https://semi.design/code/zh-CN/d2c/inspect - 2025-02-07T09:51:46.137Z + 2025-03-07T08:08:46.659Z weekly https://semi.design/code/zh-CN/d2c/mark - 2025-02-07T09:51:46.203Z + 2025-03-07T08:08:46.514Z weekly https://semi.design/code/zh-CN/d2c/mark-icon - 2025-02-07T09:51:46.314Z + 2025-03-07T08:08:46.862Z weekly https://semi.design/code/zh-CN/d2c/mark-library - 2025-02-07T09:51:46.280Z + 2025-03-07T08:08:46.704Z weekly https://semi.design/code/zh-CN/d2c/mark-table - 2025-02-07T09:51:47.140Z + 2025-03-07T08:08:47.014Z weekly https://semi.design/code/zh-CN/d2c/settings - 2025-02-07T09:51:46.462Z + 2025-03-07T08:08:46.975Z weekly https://semi.design/code/zh-CN/d2c/support-list - 2025-02-07T09:51:46.511Z + 2025-03-07T08:08:47.249Z weekly https://semi.design/code/zh-CN/d2c/transform-plugin - 2025-02-07T09:51:46.484Z + 2025-03-07T08:08:47.106Z weekly https://semi.design/code/zh-CN/d2c/translate-logic - 2025-02-07T09:51:46.743Z + 2025-03-07T08:08:47.399Z weekly https://semi.design/code/zh-CN/d2c/translate-page - 2025-02-07T09:51:47.925Z + 2025-03-07T08:08:47.250Z weekly https://semi.design/code/zh-CN/start/changelog - 2025-02-07T09:51:46.868Z + 2025-03-07T08:08:47.474Z weekly https://semi.design/code/zh-CN/start/faq - 2025-02-07T09:51:46.914Z + 2025-03-07T08:08:47.473Z weekly https://semi.design/code/zh-CN/start/introduction - 2025-02-07T09:51:47.214Z + 2025-03-07T08:08:47.625Z weekly https://semi.design/code/zh-CN/start/quick-start - 2025-02-07T09:51:47.250Z + 2025-03-07T08:08:47.602Z weekly https://semi.design/code/zh-CN/start/terms - 2025-02-07T09:51:47.114Z + 2025-03-07T08:08:47.959Z weekly https://semi.design/code/zh-CN/uikit/create - 2025-02-07T09:51:47.117Z + 2025-03-07T08:08:47.821Z weekly https://semi.design/code/zh-CN/uikit/figma-usage - 2025-02-07T09:51:47.328Z + 2025-03-07T08:08:47.938Z weekly https://semi.design/code/zh-CN/uikit/form-usage - 2025-02-07T09:51:47.275Z + 2025-03-07T08:08:48.044Z weekly https://semi.design/code/zh-CN/uikit/migrate - 2025-02-07T09:51:47.223Z + 2025-03-07T08:08:48.219Z weekly https://semi.design/code/zh-CN/uikit/rules - 2025-02-07T09:51:47.239Z + 2025-03-07T08:08:48.056Z weekly https://semi.design/code/zh-CN/uikit/table-usage - 2025-02-07T09:51:47.759Z + 2025-03-07T08:08:48.190Z weekly https://semi.design/design/zh-CN/feedback/banner - 2024-04-01T06:36:36.126Z + 2025-03-07T08:08:48.206Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/feedback/notification - 2024-03-18T12:30:42.781Z + 2025-03-07T08:08:48.359Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/feedback/popconfirm - 2024-03-18T12:30:42.754Z + 2025-03-07T08:08:48.331Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/feedback/progress - 2024-03-18T12:30:42.780Z + 2025-03-07T08:08:48.335Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/feedback/skeleton - 2024-03-22T10:17:56.474Z + 2025-03-07T08:08:48.377Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/feedback/spin - 2024-05-11T13:32:15.628Z + 2025-03-07T08:08:48.565Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/feedback/toast - 2024-03-18T12:30:43.173Z + 2025-03-07T08:08:49.035Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/handbook/intro - 2024-03-18T12:30:43.299Z + 2025-03-07T08:08:48.781Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/handbook/tools - 2024-06-24T10:29:27.533Z + 2025-03-07T08:08:48.787Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/button - 2024-03-18T12:30:43.351Z + 2025-03-07T08:08:48.981Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/cascader - 2024-03-18T12:30:43.393Z + 2025-03-07T08:08:48.951Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/checkbox - 2024-03-18T12:30:43.500Z + 2025-03-07T08:08:49.235Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/datepicker - 2024-03-18T12:30:43.605Z + 2025-03-07T08:08:49.087Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/form - 2024-03-18T12:30:43.604Z + 2025-03-07T08:08:49.280Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/input - 2024-04-01T06:36:36.705Z + 2025-03-07T08:08:49.280Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/inputnumber - 2024-03-18T12:30:43.561Z + 2025-03-07T08:08:49.445Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/radio - 2024-03-18T12:30:43.796Z + 2025-03-07T08:08:49.438Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/rating - 2024-06-18T12:09:42.451Z + 2025-03-07T08:08:49.422Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/select - 2024-03-18T12:30:43.994Z + 2025-03-07T08:08:49.454Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/slider - 2024-03-18T12:30:43.946Z + 2025-03-07T08:08:49.648Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/switch - 2024-03-18T12:30:44.187Z + 2025-03-07T08:08:49.638Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/taginput - 2024-03-18T12:30:44.214Z + 2025-03-07T08:08:49.835Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/timepicker - 2024-03-18T12:30:44.378Z + 2025-03-07T08:08:49.824Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/transfer - 2024-03-18T12:30:44.390Z + 2025-03-07T08:08:49.815Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/treeselect - 2024-03-22T10:17:57.760Z + 2025-03-07T08:08:49.802Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/input/upload - 2024-03-18T12:30:44.543Z + 2025-03-07T08:08:49.910Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/navigation/anchor - 2024-03-18T12:30:44.569Z + 2025-03-07T08:08:49.906Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/navigation/breadcrumb - 2024-03-18T12:30:44.673Z + 2025-03-07T08:08:49.885Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/navigation/navigation - 2024-03-18T12:30:44.911Z + 2025-03-07T08:08:49.875Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/navigation/pagination - 2024-03-18T12:30:44.834Z + 2025-03-07T08:08:49.986Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/navigation/steps - 2024-03-18T12:30:44.750Z + 2025-03-07T08:08:50.190Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/navigation/tabs - 2024-05-29T09:55:02.806Z + 2025-03-07T08:08:50.201Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/navigation/tree - 2024-06-24T10:29:27.666Z + 2025-03-07T08:08:50.310Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/avatar - 2024-03-18T12:30:45.393Z + 2025-03-07T08:08:50.408Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/badge - 2024-03-18T12:30:44.799Z + 2025-03-07T08:08:50.526Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/calendar - 2024-03-18T12:30:44.874Z + 2025-03-07T08:08:50.616Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/card - 2024-03-18T12:30:44.790Z + 2025-03-07T08:08:50.456Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/collapse - 2024-07-05T09:44:22.676Z + 2025-03-07T08:08:50.453Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/descriptions - 2024-04-16T06:49:59.191Z + 2025-03-07T08:08:50.539Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/dropdown - 2024-05-11T13:32:17.995Z + 2025-03-07T08:08:50.671Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/list - 2024-03-18T12:30:44.757Z + 2025-03-07T08:08:50.647Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/modal - 2024-03-18T12:30:44.902Z + 2025-03-07T08:08:50.885Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/popover - 2024-03-18T12:30:44.947Z + 2025-03-07T08:08:50.825Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/scrolllist - 2024-03-18T12:30:44.955Z + 2025-03-07T08:08:50.861Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/table - 2024-03-18T12:30:45.003Z + 2025-03-07T08:08:50.841Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/tag - 2024-03-18T12:30:44.950Z + 2025-03-07T08:08:51.056Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/timeline - 2024-03-18T12:30:44.959Z + 2025-03-07T08:08:51.077Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/show/tooltip - 2024-03-18T12:30:44.956Z + 2025-03-07T08:08:51.076Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/visual/colors - 2024-03-18T12:30:45.147Z + 2025-03-07T08:08:51.016Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/visual/dark-mode - 2024-03-18T12:30:45.154Z + 2025-03-07T08:08:51.227Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/visual/data-format - 2024-03-18T12:30:45.159Z + 2025-03-07T08:08:51.237Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/visual/grid - 2024-03-18T12:30:45.163Z + 2025-03-07T08:08:51.466Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/visual/iconography - 2024-04-16T06:49:59.841Z + 2025-03-07T08:08:51.494Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/visual/layout - 2024-04-03T07:36:20.335Z + 2025-03-07T08:08:51.475Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/visual/spacings - 2024-03-18T12:30:45.350Z + 2025-03-07T08:08:51.491Z weekly - 1.0.0.133 https://semi.design/design/zh-CN/visual/typography - 2024-03-18T12:30:45.482Z + 2025-03-07T08:08:51.499Z weekly - 1.0.0.133 https://semi.design/dsm_manual/zh-CN/introduction/case @@ -737,82 +681,82 @@ https://semi.design/dsm/landing - 2025-02-07T09:51:52.288Z + 2025-03-07T08:08:52.805Z weekly https://semi.design/en-US/basic/divider - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/basic/grid - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/basic/icon - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/basic/layout - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/basic/space - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/basic/tokens - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/basic/typography - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/feedback/banner - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/feedback/notification - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/feedback/popconfirm - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/feedback/progress - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/feedback/skeleton - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/feedback/spin - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/feedback/toast - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/autocomplete - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly @@ -822,362 +766,362 @@ https://semi.design/en-US/input/cascader - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/checkbox - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/datepicker - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/form - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/input - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/inputnumber - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/radio - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/rating - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/select - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/slider - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/switch - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/taginput - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/timepicker - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/transfer - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/treeselect - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/input/upload - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/navigation/anchor - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/navigation/backtop - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/navigation/breadcrumb - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/navigation/navigation - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/navigation/pagination - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/navigation/steps - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/navigation/tabs - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/navigation/tree - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/other/configprovider - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/other/locale - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/avatar - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/badge - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/calendar - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/card - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/carousel - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/collapse - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/collapsible - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/descriptions - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/dropdown - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/empty - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/highlight - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/image - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/list - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/modal - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/overflowlist - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/popover - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/scrolllist - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/sidesheet - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/table - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/tag - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/timeline - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/show/tooltip - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/start/accessibility - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/start/changelog - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/start/customize-theme - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/start/dark-mode - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/start/faq - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/start/getting-started - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/start/introduction - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/start/overview - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/en-US/start/update-to-v2 - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/basic/divider - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/basic/grid - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/basic/icon - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/basic/layout - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/basic/space - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/basic/tokens - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/basic/typography - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/feedback/banner - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/feedback/notification - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/feedback/popconfirm - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/feedback/progress - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/feedback/skeleton - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/feedback/spin - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/feedback/toast - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/autocomplete - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly @@ -1187,287 +1131,287 @@ https://semi.design/zh-CN/input/cascader - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/checkbox - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/datepicker - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/form - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/input - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/inputnumber - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/radio - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/rating - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/select - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/slider - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/switch - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/taginput - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/timepicker - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/transfer - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/treeselect - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/input/upload - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/navigation/anchor - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/navigation/backtop - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/navigation/breadcrumb - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/navigation/navigation - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/navigation/pagination - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/navigation/steps - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/navigation/tabs - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/navigation/tree - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/other/configprovider - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/other/locale - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/avatar - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/badge - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/calendar - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/card - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/carousel - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/collapse - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/collapsible - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/descriptions - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/dropdown - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/empty - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/highlight - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/image - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/list - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/modal - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/overflowlist - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/popover - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/scrolllist - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/sidesheet - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/table - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/tag - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/timeline - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/show/tooltip - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/start/accessibility - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/start/changelog - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/start/customize-theme - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/start/dark-mode - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/start/faq - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/start/getting-started - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/start/introduction - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/start/overview - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly https://semi.design/zh-CN/start/update-to-v2 - 2025-02-07T09:48:28.000Z + 2025-03-07T07:48:11.000Z weekly diff --git a/yarn.lock b/yarn.lock index e4d7d01eea..e12923c9ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1585,11 +1585,25 @@ "@douyinfe/semi-animation-styled" "2.65.0" classnames "^2.2.6" +"@douyinfe/semi-animation-react@2.75.0": + version "2.75.0" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-react/-/semi-animation-react-2.75.0.tgz#74607070adbc74e4cc91ac3542c2700eae549dac" + integrity sha512-EfvJTqRDZ+osPk9delLVML9io4RcqftzUeet2pGubPJ7xbFmAl5vbf21kzKy3g0KgpSOZ7EPjeozqXdrrces+Q== + dependencies: + "@douyinfe/semi-animation" "2.75.0" + "@douyinfe/semi-animation-styled" "2.75.0" + classnames "^2.2.6" + "@douyinfe/semi-animation-styled@2.65.0": version "2.65.0" resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-styled/-/semi-animation-styled-2.65.0.tgz#8c56047a5704a45b05cc9809a2a126cc24526ea1" integrity sha512-YFF8Ptcz/jwS0phm28XZV7ROqMQ233sjVR0Uy33FImCITr6EAPe5wcCeEmzVZoYS7x3tUFR30SF+0hSO01rQUg== +"@douyinfe/semi-animation-styled@2.75.0": + version "2.75.0" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-styled/-/semi-animation-styled-2.75.0.tgz#ddbe0ef3624d59ba3fa24c7f8166bb0a04a3b50a" + integrity sha512-BSHqhlfQjUszKzktAxkeScq3Ua9yb6BQFUXT1P2mdaNanqRHqe0ORClHJsneDO2iUQFFWf+iWFDwHG9FVyTLpw== + "@douyinfe/semi-animation@2.65.0": version "2.65.0" resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation/-/semi-animation-2.65.0.tgz#f544a6b420c3e948c09836019e6b63f1382cd12c" @@ -1597,6 +1611,13 @@ dependencies: bezier-easing "^2.1.0" +"@douyinfe/semi-animation@2.75.0": + version "2.75.0" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation/-/semi-animation-2.75.0.tgz#427438b78cace3c27563f93708c1949317214786" + integrity sha512-89P+AjRPPKCJ5VswPyeWHi+EIiWoAMgfN/51/TgPaA1pC4jmaZlHFPxkFRPJlFXyJ9uZe1VdTx6+TUQuQHjQbA== + dependencies: + bezier-easing "^2.1.0" + "@douyinfe/semi-foundation@2.65.0": version "2.65.0" resolved "https://registry.yarnpkg.com/@douyinfe/semi-foundation/-/semi-foundation-2.65.0.tgz#20466a9b4baacdde2249930fb709ba035c5a7bea" @@ -1616,6 +1637,26 @@ remark-gfm "^4.0.0" scroll-into-view-if-needed "^2.2.24" +"@douyinfe/semi-foundation@2.75.0": + version "2.75.0" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-foundation/-/semi-foundation-2.75.0.tgz#38ac2b3c9316a764b5c8237bcf3077cd734dfd6e" + integrity sha512-iPjB3QuNqMolidQxvG59u2ORJhsXaz5NZWMtiCttQjqFZ4NLAbphCYIaCjy5o+FQGi0iKiTOiUbffHasQvFfHg== + dependencies: + "@douyinfe/semi-animation" "2.75.0" + "@douyinfe/semi-json-viewer-core" "2.75.0" + "@mdx-js/mdx" "^3.0.1" + async-validator "^3.5.0" + classnames "^2.2.6" + date-fns "^2.29.3" + date-fns-tz "^1.3.8" + fast-copy "^3.0.1 " + lodash "^4.17.21" + lottie-web "^5.12.2" + memoize-one "^5.2.1" + prismjs "^1.29.0" + remark-gfm "^4.0.0" + scroll-into-view-if-needed "^2.2.24" + "@douyinfe/semi-icons@2.65.0", "@douyinfe/semi-icons@latest": version "2.65.0" resolved "https://registry.yarnpkg.com/@douyinfe/semi-icons/-/semi-icons-2.65.0.tgz#af39cbd5431ebccedcf7d9ce689646e54bebc432" @@ -1623,11 +1664,30 @@ dependencies: classnames "^2.2.6" +"@douyinfe/semi-icons@2.75.0", "@douyinfe/semi-icons@^2.0.0": + version "2.75.0" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-icons/-/semi-icons-2.75.0.tgz#eb3ffc9759bcfb037296ef223322d50015c21527" + integrity sha512-0wCYigF6GGin7ioxCV6+bxc8SFjUEISKPWZH5goHVJwlv0i5ooIwDE+RicfKr/H/8Wskii9BYropWp/sgBntSw== + dependencies: + classnames "^2.2.6" + "@douyinfe/semi-illustrations@2.65.0": version "2.65.0" resolved "https://registry.yarnpkg.com/@douyinfe/semi-illustrations/-/semi-illustrations-2.65.0.tgz#9916c540c91222a1d9f48cd34a941d28b8a05d2f" integrity sha512-1IhOztyBYiSu8WrcvN+oWWtcJTC9+x6zbnYtufx4ToISs5UO1te1PQofABpkDzIJYFtW9yYLxg4uoL4wGjqYMA== +"@douyinfe/semi-illustrations@2.75.0": + version "2.75.0" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-illustrations/-/semi-illustrations-2.75.0.tgz#50ec5c540504ad8499b53b82e530a362afded01e" + integrity sha512-IdytD645vmQBhHV0RSJ+kr3hOSIg0YpdldHrVaUjU7lZfWJO3h7fQMkRGQpmAh5tR0hxWVxh8m+MTmESTtiV2w== + +"@douyinfe/semi-json-viewer-core@2.75.0": + version "2.75.0" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-json-viewer-core/-/semi-json-viewer-core-2.75.0.tgz#9c9082c68d4bc1e3efd4aac90cd77acb9d6c86c5" + integrity sha512-8zT9IQZDjcEQv2ky6V0VB6tObnJf1tkmucIV26PuKaRAEW6IHuM8uOfHmESqbEuENdq2R/oeL8oU4y8Oa64kiA== + dependencies: + jsonc-parser "^3.3.1" + "@douyinfe/semi-scss-compile@2.23.2": version "2.23.2" resolved "https://registry.yarnpkg.com/@douyinfe/semi-scss-compile/-/semi-scss-compile-2.23.2.tgz#30884bb194ee9ae1e81877985e5663c3297c1ced" @@ -1699,6 +1759,39 @@ resolved "https://registry.yarnpkg.com/@douyinfe/semi-theme-default/-/semi-theme-default-2.61.0.tgz#a7e9bf9534721c12af1d0eeb5d5a2de615896a23" integrity sha512-obn/DOw4vZyKFAlWvZxHTpBLAK9FO9kygTSm2GROgvi+UDB2PPU6l20cuUCsdGUNWJRSqYlTTVZ1tNYIyFZ5Sg== +"@douyinfe/semi-theme-default@2.75.0": + version "2.75.0" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-theme-default/-/semi-theme-default-2.75.0.tgz#5cb0b586be3249b6b7badd3256a3e106629ec4f1" + integrity sha512-2mk5mCyPuMcYzfod8jbWqIVDhnjEyWkTJCiOtOnIjSY0irwSy4vykB56zW7EavZ6SYclYyP5YGij+WPo61dLcw== + +"@douyinfe/semi-ui@^2.0.0": + version "2.75.0" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-ui/-/semi-ui-2.75.0.tgz#a900ac699b5514cc576c90e85dbda4ab18fab88d" + integrity sha512-8O2NypLbNklv+wQwjHaWBJfLFOyUwArZ+nuCRxryPGjmGSgS9yqohVtAfqnVF3FtIRByeeXEYgzhLBSJRE2T/Q== + dependencies: + "@dnd-kit/core" "^6.0.8" + "@dnd-kit/sortable" "^7.0.2" + "@dnd-kit/utilities" "^3.2.1" + "@douyinfe/semi-animation" "2.75.0" + "@douyinfe/semi-animation-react" "2.75.0" + "@douyinfe/semi-foundation" "2.75.0" + "@douyinfe/semi-icons" "2.75.0" + "@douyinfe/semi-illustrations" "2.75.0" + "@douyinfe/semi-theme-default" "2.75.0" + 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" + fast-copy "^3.0.1 " + jsonc-parser "^3.3.1" + lodash "^4.17.21" + prop-types "^15.7.2" + react-resizable "^3.0.5" + react-window "^1.8.2" + scroll-into-view-if-needed "^2.2.24" + utility-types "^3.10.0" + "@douyinfe/semi-ui@latest": version "2.65.0" resolved "https://registry.yarnpkg.com/@douyinfe/semi-ui/-/semi-ui-2.65.0.tgz#295eb0dd8e9e961adb4ddd7c7bbce3468d1b7430" @@ -11981,6 +12074,11 @@ eslint-plugin-react@^7.20.6, eslint-plugin-react@^7.24.0: string.prototype.matchall "^4.0.11" string.prototype.repeat "^1.0.0" +eslint-plugin-semi-design@^2.33.0: + version "2.75.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-semi-design/-/eslint-plugin-semi-design-2.75.0.tgz#360cd9fa76e5dd1e6d6b1b51adbf15ffa7205f31" + integrity sha512-2XrZZDaFaJL6o63892L4YBtoiyVqfOAwlOleSAkRJxarOI9vgxIEEi5zS4whOVZ6olRf+bjb40geWnRqoh8jVg== + eslint-rule-composer@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9" @@ -25186,8 +25284,7 @@ string-similarity@^1.2.2: lodash.map "^4.6.0" lodash.maxby "^4.6.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - name string-width-cjs +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -25205,6 +25302,15 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^2.0.0, string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" @@ -25348,7 +25454,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -25376,6 +25482,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -26539,11 +26652,16 @@ types-ramda@^0.29.4: dependencies: ts-toolbelt "^9.6.0" -typescript@^4, typescript@^4.4.4, typescript@^4.8.3: +typescript@^4, typescript@^4.4.4: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.8.2: + version "5.8.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" + integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== + ufo@^1.5.3, ufo@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" @@ -27970,8 +28088,7 @@ worker-loader@^3.0.8: loader-utils "^2.0.0" schema-utils "^3.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - name wrap-ansi-cjs +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -28006,6 +28123,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"