From c49a9aa6c319b8626db60d026b7f3993d11a51ea Mon Sep 17 00:00:00 2001 From: tangjinzhou <415800467@qq.com> Date: Thu, 24 Jul 2025 22:06:11 +0800 Subject: [PATCH] chore: use monorepo --- .antd-tools.config.js | 36 - .codecov.yml | 2 - .editorconfig | 11 - .eslintignore | 13 - .eslintrc.js | 112 --- .gitignore | 44 +- .husky/pre-commit | 4 - .huskyrc | 7 - .jest.js | 60 -- .prettierignore | 31 - .prettierrc | 17 - .stylelintrc | 23 - .stylelintrc.json | 43 - .vcmrc | 17 - apps/playground/assets/tailwind.css | 17 + apps/playground/eslint.config.js | 3 + apps/playground/favicon.ico | 0 apps/playground/index.html | 12 + apps/playground/package.json | 50 + apps/playground/prettier.config.js | 3 + apps/playground/src/App.vue | 3 + apps/playground/src/main.ts | 12 + apps/playground/src/routes.ts | 4 + apps/playground/src/shims-vue.d.ts | 5 + apps/playground/src/utils/glob.ts | 99 ++ apps/playground/vite.config.ts | 70 ++ babel.config.js | 19 - build.sh | 5 - components/version/token-meta.json | 1 + components/version/token.json | 1 + components/version/version.ts | 1 + eslint.config.js | 13 + package.json | 334 +------ packages-config/eslint-config/config.d.ts | 5 + .../eslint-config/eslint.config.base.js | 21 + .../eslint-config/eslint.config.ignore.js | 20 + .../eslint-config/eslint.config.typescript.js | 31 + .../eslint-config/eslint.config.vue.js | 77 ++ packages-config/eslint-config/package.json | 27 + packages-config/prettier-config/config.d.ts | 5 + packages-config/prettier-config/package.json | 22 + .../prettier-config/prettier.config.base.js | 15 + .../prettier.config.tailwind.js | 11 + packages-config/tailwind-config/package.json | 21 + packages-config/tailwind-config/tailwind.css | 35 + .../tailwind-config/themes/light.css | 22 + .../typescript-config/package.json | 5 + .../typescript-config/tsconfig.node.json | 8 + .../typescript-config/tsconfig.vite.json | 22 + .../typescript-config/tsconfig.vue.json | 7 + packages-config/vite-config/config.d.ts | 5 + packages-config/vite-config/index.d.ts | 8 + packages-config/vite-config/index.js | 14 + packages-config/vite-config/package.json | 32 + .../vite-config/vite.config.lib.js | 67 ++ .../vite-config/vite.config.typescript.js | 16 + .../vite-config/vite.config.vue.js | 28 + packages/ui/README.md | 0 packages/ui/eslint.config.js | 4 + packages/ui/package.json | 88 ++ packages/ui/prettier.config.js | 3 + packages/ui/src/index.ts | 24 + packages/ui/src/shims-app.d.ts | 5 + packages/ui/tsconfig.json | 11 + packages/ui/tsconfig.node.json | 4 + packages/ui/typings/global.d.ts | 5 + packages/ui/vite.config.ts | 23 + postcss.config.js | 3 - prettier.config.js | 3 + scripts/generate-token-meta.js | 102 --- site/404.html | 102 --- site/debugger/demo/demo.vue | 17 - site/debugger/index.tsx | 10 - site/index.html | 81 -- site/public/favicon.ico | Bin 4286 -> 0 bytes site/scripts/genrateRoutes.js | 40 - site/scripts/pushToOSS.js | 59 -- site/src/App.vue | 148 --- site/src/SiteToken.vue | 7 - site/src/SymbolKey.ts | 1 - site/src/assets/ant-design-vue.svg | 11 - site/src/assets/logo.png | Bin 158274 -> 0 bytes site/src/assets/logo.svg | 29 - site/src/components/ColorChunk/index.tsx | 56 -- .../components/ComponentTokenTable/index.tsx | 205 ----- site/src/components/Contributors/constants.ts | 4 - site/src/components/Contributors/index.vue | 112 --- site/src/components/DemoBox.vue | 265 ------ site/src/components/SimpleLayout.vue | 5 - site/src/components/TokenTable/index.tsx | 143 --- .../antdv-token-previewer/ColorPanel.tsx | 364 -------- .../antdv-token-previewer/ColorPreview.tsx | 80 -- .../antdv-token-previewer/FilterPanel.tsx | 133 --- .../antdv-token-previewer/IconSwitch.tsx | 102 --- .../antdv-token-previewer/PreviewDemo.tsx | 35 - .../antdv-token-previewer/ThemeEditor.tsx | 168 ---- .../antdv-token-previewer/ThemeSelect.tsx | 240 ----- .../antdv-token-previewer/TokenInput.tsx | 250 ----- .../component-demos/alert/alert.tsx | 24 - .../component-demos/alert/error.tsx | 28 - .../component-demos/alert/index.ts | 11 - .../component-demos/alert/info.tsx | 27 - .../component-demos/alert/success.tsx | 27 - .../component-demos/alert/warning.tsx | 28 - .../component-demos/anchor/anchor.tsx | 26 - .../component-demos/anchor/anchorInLayout.tsx | 33 - .../component-demos/anchor/index.ts | 8 - .../autoComplete/auto-complete.tsx | 59 -- .../component-demos/autoComplete/index.ts | 7 - .../component-demos/avatar/avatar.tsx | 19 - .../component-demos/avatar/index.tsx | 13 - .../component-demos/badge/badge.tsx | 32 - .../component-demos/badge/index.ts | 10 - .../component-demos/badge/progress.tsx | 22 - .../component-demos/badge/success.tsx | 22 - .../component-demos/badge/warning.tsx | 22 - .../component-demos/breadcrumb/breadcrumb.tsx | 28 - .../component-demos/breadcrumb/index.ts | 7 - .../component-demos/button/button-icon.tsx | 32 - .../component-demos/button/button.tsx | 33 - .../component-demos/button/dangerButton.tsx | 41 - .../component-demos/button/defaultButton.tsx | 13 - .../component-demos/button/disabled.tsx | 37 - .../component-demos/button/index.ts | 17 - .../component-demos/calendar/calendar.tsx | 12 - .../component-demos/calendar/disabled.tsx | 12 - .../component-demos/calendar/index.ts | 8 - .../component-demos/card/card.tsx | 52 -- .../component-demos/card/cardGrid.tsx | 36 - .../component-demos/card/index.ts | 9 - .../component-demos/card/inner.tsx | 23 - .../component-demos/carousel/carousel.tsx | 42 - .../component-demos/carousel/index.ts | 7 - .../component-demos/cascader/cascader.tsx | 14 - .../component-demos/cascader/data.ts | 26 - .../component-demos/cascader/disable.tsx | 19 - .../component-demos/cascader/highlight.tsx | 18 - .../component-demos/cascader/index.ts | 9 - .../component-demos/checkbox/checkbox.tsx | 19 - .../component-demos/checkbox/disabled.tsx | 12 - .../component-demos/checkbox/index.ts | 8 - .../component-demos/collapse/collapse.tsx | 32 - .../component-demos/collapse/index.ts | 7 - .../component-demos/datePicker/danger.tsx | 12 - .../datePicker/date-picker.tsx | 31 - .../component-demos/datePicker/disabled.tsx | 25 - .../component-demos/datePicker/icon.tsx | 12 - .../component-demos/datePicker/index.ts | 11 - .../component-demos/datePicker/warning.tsx | 12 - .../descriptions/descriptions.tsx | 24 - .../component-demos/descriptions/index.ts | 7 - .../component-demos/divider/divider.tsx | 44 - .../component-demos/divider/index.ts | 7 - .../component-demos/drawer/drawer.tsx | 39 - .../component-demos/drawer/index.ts | 7 - .../component-demos/dropdown/dropdown.tsx | 33 - .../dropdown/dropdownError.tsx | 48 - .../component-demos/dropdown/index.ts | 7 - .../component-demos/dropdown/menu.tsx | 25 - .../component-demos/empty/empty.tsx | 12 - .../component-demos/empty/index.ts | 7 - .../component-demos/form/danger.tsx | 43 - .../component-demos/form/form.tsx | 77 -- .../component-demos/form/index.tsx | 10 - .../component-demos/form/warning.tsx | 43 - .../component-demos/grid/grid.tsx | 56 -- .../component-demos/grid/index.ts | 7 - .../component-demos/icon/icon.tsx | 28 - .../component-demos/icon/index.ts | 7 - .../component-demos/image/disabled.tsx | 15 - .../component-demos/image/image.tsx | 20 - .../component-demos/image/index.ts | 8 - .../component-demos/index.ts | 125 --- .../component-demos/input/clearIcon.tsx | 17 - .../component-demos/input/danger.tsx | 19 - .../component-demos/input/disabled.tsx | 12 - .../component-demos/input/index.ts | 12 - .../component-demos/input/input.tsx | 12 - .../component-demos/input/success.tsx | 30 - .../component-demos/input/warning.tsx | 19 - .../component-demos/input/withAddon.tsx | 17 - .../component-demos/inputNumber/danger.tsx | 21 - .../component-demos/inputNumber/disabled.tsx | 12 - .../component-demos/inputNumber/index.ts | 10 - .../inputNumber/inputNumber.tsx | 24 - .../component-demos/inputNumber/warning.tsx | 21 - .../component-demos/list/index.ts | 7 - .../component-demos/list/list.tsx | 41 - .../component-demos/mentions/danger.tsx | 43 - .../component-demos/mentions/disabled.tsx | 39 - .../component-demos/mentions/index.ts | 10 - .../component-demos/mentions/mentions.tsx | 47 - .../component-demos/mentions/warning.tsx | 43 - .../component-demos/menu/data.tsx | 42 - .../component-demos/menu/index.ts | 9 - .../component-demos/menu/menu.tsx | 46 - .../component-demos/menu/menuDanger.tsx | 40 - .../component-demos/menu/menuInLayout.tsx | 34 - .../component-demos/message/error.tsx | 21 - .../component-demos/message/index.ts | 11 - .../component-demos/message/info.tsx | 20 - .../component-demos/message/message.tsx | 21 - .../component-demos/message/success.tsx | 21 - .../component-demos/message/warning.tsx | 21 - .../component-demos/modal/index.ts | 11 - .../component-demos/modal/info.tsx | 33 - .../component-demos/modal/modal.tsx | 43 - .../component-demos/modal/modalWithButton.tsx | 43 - .../component-demos/modal/success.tsx | 29 - .../component-demos/modal/warning.tsx | 29 - .../component-demos/notification/error.tsx | 25 - .../component-demos/notification/index.ts | 11 - .../component-demos/notification/info.tsx | 25 - .../notification/notification.tsx | 25 - .../component-demos/notification/success.tsx | 25 - .../component-demos/notification/warning.tsx | 25 - .../component-demos/pagination/disabled.tsx | 17 - .../component-demos/pagination/index.tsx | 9 - .../component-demos/pagination/outline.tsx | 22 - .../component-demos/pagination/pagination.tsx | 23 - .../component-demos/popconfirm/index.ts | 7 - .../component-demos/popconfirm/popconfirm.tsx | 47 - .../component-demos/popover/index.ts | 7 - .../component-demos/popover/popover.tsx | 31 - .../component-demos/progress/danger.tsx | 26 - .../component-demos/progress/index.ts | 11 - .../component-demos/progress/info.tsx | 26 - .../component-demos/progress/progress.tsx | 27 - .../component-demos/progress/progressInBg.tsx | 30 - .../component-demos/progress/success.tsx | 21 - .../component-demos/radio/button.tsx | 31 - .../component-demos/radio/disabled.tsx | 12 - .../component-demos/radio/index.ts | 9 - .../component-demos/radio/radio.tsx | 12 - .../component-demos/rate/index.ts | 7 - .../component-demos/rate/rate.tsx | 13 - .../component-demos/result/danger.tsx | 18 - .../component-demos/result/index.ts | 11 - .../component-demos/result/info.tsx | 18 - .../component-demos/result/result.tsx | 30 - .../component-demos/result/resultWithDesc.tsx | 21 - .../component-demos/result/success.tsx | 25 - .../component-demos/result/warning.tsx | 18 - .../component-demos/segmented/index.ts | 7 - .../component-demos/segmented/segmented.tsx | 20 - .../component-demos/select/danger.tsx | 38 - .../component-demos/select/data.ts | 9 - .../component-demos/select/disabled.tsx | 32 - .../component-demos/select/icon.tsx | 36 - .../component-demos/select/index.ts | 12 - .../component-demos/select/select.tsx | 46 - .../component-demos/select/selectTag.tsx | 44 - .../component-demos/select/warning.tsx | 38 - .../component-demos/skeleton/index.ts | 7 - .../component-demos/skeleton/skeleton.tsx | 13 - .../component-demos/slider/index.ts | 8 - .../component-demos/slider/slider.tsx | 30 - .../component-demos/slider/sliderInBg.tsx | 34 - .../component-demos/space/index.ts | 7 - .../component-demos/space/space.tsx | 31 - .../component-demos/spin/index.ts | 7 - .../component-demos/spin/spin.tsx | 12 - .../component-demos/statistic/index.ts | 7 - .../component-demos/statistic/statistic.tsx | 32 - .../component-demos/steps/danger.tsx | 35 - .../component-demos/steps/index.ts | 8 - .../component-demos/steps/steps.tsx | 37 - .../component-demos/switch/index.ts | 7 - .../component-demos/switch/switch.tsx | 20 - .../component-demos/table/filterTable.tsx | 109 --- .../component-demos/table/index.ts | 8 - .../component-demos/table/table.tsx | 95 -- .../component-demos/tabs/cardTabs.tsx | 31 - .../component-demos/tabs/index.ts | 8 - .../component-demos/tabs/tabs.tsx | 31 - .../component-demos/tag/closable.tsx | 12 - .../component-demos/tag/error.tsx | 12 - .../component-demos/tag/index.ts | 21 - .../component-demos/tag/info.tsx | 12 - .../component-demos/tag/multiTags.tsx | 19 - .../component-demos/tag/success.tsx | 12 - .../component-demos/tag/tag.tsx | 105 --- .../component-demos/tag/warning.tsx | 12 - .../component-demos/timePicker/index.ts | 7 - .../timePicker/time-picker.tsx | 12 - .../component-demos/timeline/danger.tsx | 24 - .../component-demos/timeline/index.ts | 9 - .../component-demos/timeline/success.tsx | 24 - .../component-demos/timeline/timeline.tsx | 24 - .../component-demos/tooltip/index.ts | 7 - .../component-demos/tooltip/tooltip.tsx | 22 - .../component-demos/transfer/danger.tsx | 44 - .../component-demos/transfer/data.ts | 9 - .../component-demos/transfer/disabled.tsx | 48 - .../component-demos/transfer/index.ts | 10 - .../component-demos/transfer/transfer.tsx | 41 - .../component-demos/transfer/warning.tsx | 50 - .../component-demos/tree/disabled.tsx | 50 - .../component-demos/tree/index.ts | 8 - .../component-demos/tree/tree.tsx | 49 - .../component-demos/treeSelect/disabled.tsx | 47 - .../component-demos/treeSelect/index.ts | 8 - .../treeSelect/tree-select.tsx | 52 -- .../component-demos/typography/Heading4.tsx | 14 - .../component-demos/typography/error.tsx | 26 - .../component-demos/typography/index.tsx | 11 - .../component-demos/typography/success.tsx | 26 - .../component-demos/typography/typography.tsx | 42 - .../typography/typographyFull.tsx | 100 -- .../component-demos/typography/warning.tsx | 26 - .../typography/warningText.tsx | 23 - .../typography/warningTitle.tsx | 25 - .../component-demos/upload/avatar.tsx | 34 - .../component-demos/upload/danger.tsx | 48 - .../component-demos/upload/index.ts | 9 - .../component-demos/upload/upload.tsx | 36 - .../component-panel/ComponentCard.tsx | 108 --- .../component-panel/ComponentDemoGroup.tsx | 228 ----- .../component-panel/ComponentTokenDrawer.tsx | 248 ----- .../component-panel/ComponentTree.tsx | 201 ---- .../component-panel/index.tsx | 346 ------- .../hooks/useControlledTheme.tsx | 98 -- .../antdv-token-previewer/icons/Arrow.tsx | 67 -- .../antdv-token-previewer/icons/Brush.tsx | 49 - .../antdv-token-previewer/icons/Compact.tsx | 58 -- .../antdv-token-previewer/icons/Control.tsx | 99 -- .../antdv-token-previewer/icons/Dark.tsx | 58 -- .../antdv-token-previewer/icons/Light.tsx | 65 -- .../antdv-token-previewer/icons/Margin.tsx | 54 -- .../antdv-token-previewer/icons/Motion.tsx | 54 -- .../antdv-token-previewer/icons/Pick.tsx | 57 -- .../icons/SearchDropdown.tsx | 64 -- .../antdv-token-previewer/icons/ShapeLine.tsx | 54 -- .../icons/TokenPanel.tsx | 67 -- .../antdv-token-previewer/icons/index.ts | 16 - .../antdv-token-previewer/index.tsx | 12 - .../antdv-token-previewer/interface.ts | 38 - .../antdv-token-previewer/locale/context.ts | 19 - .../antdv-token-previewer/locale/en-US.ts | 20 - .../antdv-token-previewer/locale/index.ts | 4 - .../locale/interface.tsx | 16 - .../antdv-token-previewer/locale/zh-CN.ts | 20 - .../meta/TokenRelation.ts | 188 ---- .../antdv-token-previewer/meta/category.ts | 238 ----- .../antdv-token-previewer/meta/index.ts | 1 - .../antdv-token-previewer/meta/interface.ts | 61 -- .../antdv-token-previewer/overviews/Error.tsx | 49 - .../overviews/Primary.tsx | 55 -- .../overviews/Success.tsx | 41 - .../overviews/Warning.tsx | 49 - .../antdv-token-previewer/overviews/index.ts | 4 - .../antdv-token-previewer/previewer.tsx | 348 ------- .../token-panel-pro/AliasPanel.tsx | 258 ------ .../token-panel-pro/ComponentDemoPro.tsx | 148 --- .../token-panel-pro/InputNumberPlus.tsx | 45 - .../token-panel-pro/TokenContent.tsx | 864 ------------------ .../token-panel-pro/TokenDetail.tsx | 137 --- .../token-panel-pro/TokenPreview.tsx | 223 ----- .../token-panel-pro/index.tsx | 124 --- .../token-panel/index.tsx | 327 ------- .../token-panel/token-card/index.tsx | 227 ----- .../token-panel/token-item/index.tsx | 354 ------- .../utils/classifyToken.ts | 85 -- .../utils/deepUpdateObj.ts | 22 - .../utils/getColorBgImg.ts | 7 - .../utils/getDesignToken.ts | 19 - .../utils/getValueByPath.ts | 11 - .../antdv-token-previewer/utils/isColor.ts | 3 - .../antdv-token-previewer/utils/makeStyle.tsx | 43 - .../antdv-token-previewer/utils/statistic.ts | 30 - site/src/components/demoContainer.vue | 79 -- site/src/components/demoSort.jsx | 46 - site/src/components/rice/CarbonAds.vue | 124 --- site/src/components/rice/GoogleAds.vue | 36 - site/src/components/rice/GoogleAdsMin.vue | 43 - site/src/components/rice/GoogleAdsTop.vue | 34 - site/src/components/rice/WWAds.vue | 40 - site/src/components/rice/geektime.vue | 45 - site/src/components/rice/geektime_ads.vue | 64 -- .../src/components/rice/right_bottom_rice.vue | 64 -- site/src/components/rice/sponsors.vue | 71 -- site/src/components/rice/top_rice.vue | 64 -- site/src/components/surelyVue.vue | 97 -- .../components/HexColorPicker.tsx | 27 - .../components/RgbaColorPicker.tsx | 27 - .../vue-colorful/components/common/Alpha.tsx | 73 -- .../components/common/AlphaColorPicker.tsx | 51 -- .../components/common/ColorInput.tsx | 68 -- .../components/common/ColorPicker.tsx | 48 - .../vue-colorful/components/common/Hue.tsx | 61 -- .../components/common/Interactive.tsx | 171 ---- .../components/common/Pointer.tsx | 37 - .../components/common/Saturation.tsx | 67 -- .../components/vue-colorful/css/styles.css | 107 --- .../vue-colorful/css/styles.css.d.ts | 2 - .../hooks/useColorManipulation.ts | 70 -- .../vue-colorful/hooks/useEventCallback.ts | 12 - .../vue-colorful/hooks/useStyleSheet.ts | 29 - site/src/components/vue-colorful/index.ts | 2 - site/src/components/vue-colorful/types.ts | 59 -- .../components/vue-colorful/utils/clamp.ts | 6 - .../components/vue-colorful/utils/compare.ts | 32 - .../components/vue-colorful/utils/convert.ts | 209 ----- .../components/vue-colorful/utils/format.ts | 1 - .../components/vue-colorful/utils/nonce.ts | 21 - .../components/vue-colorful/utils/round.ts | 3 - .../components/vue-colorful/utils/validate.ts | 13 - site/src/demo.js | 411 --------- .../directives/clipboard/clipboard-action.js | 208 ----- site/src/directives/clipboard/clipboard.js | 134 --- site/src/directives/clipboard/closest.js | 33 - site/src/directives/clipboard/delegate.js | 80 -- site/src/directives/clipboard/index.js | 92 -- site/src/directives/clipboard/is.js | 55 -- site/src/directives/clipboard/listen.js | 94 -- site/src/directives/clipboard/select.js | 40 - site/src/directives/clipboard/tiny-emitter.js | 65 -- site/src/hooks/useMediaQuery.ts | 80 -- site/src/hooks/useMenus.ts | 87 -- site/src/hooks/useSiteToken.ts | 96 -- site/src/i18n.js | 32 - site/src/index.less | 87 -- site/src/layouts/BaseLayout.vue | 29 - site/src/layouts/Demo.vue | 52 -- site/src/layouts/Footer.vue | 132 --- site/src/layouts/Iframe.vue | 14 - site/src/layouts/Menu.vue | 117 --- site/src/layouts/PrevAndNext.vue | 67 -- site/src/layouts/header/Ecosystem.vue | 78 -- site/src/layouts/header/Github.less | 133 --- site/src/layouts/header/Github.vue | 97 -- site/src/layouts/header/Logo.vue | 58 -- site/src/layouts/header/Menu.vue | 82 -- site/src/layouts/header/More.vue | 46 - site/src/layouts/header/Navigation.vue | 206 ----- site/src/layouts/header/SearchBox.less | 132 --- site/src/layouts/header/SearchBox.vue | 37 - site/src/layouts/header/index.less | 77 -- site/src/layouts/header/index.vue | 217 ----- site/src/layouts/icons/Compact.tsx | 58 -- site/src/layouts/icons/Dark.tsx | 58 -- site/src/layouts/icons/Light.tsx | 65 -- site/src/layouts/icons/ThemeEditorIcon.tsx | 29 - site/src/layouts/icons/ThemeIcon.vue | 29 - site/src/layouts/index.vue | 315 ------- site/src/locale/en-US.js | 23 - site/src/locale/zh-CN.js | 28 - site/src/main.js | 67 -- site/src/mock/user.js | 52 -- site/src/router/index.js | 232 ----- site/src/services/login.js | 12 - site/src/services/user.js | 13 - site/src/theme/en-US.js | 152 --- site/src/theme/static/common.less | 262 ------ site/src/theme/static/demo.less | 359 -------- site/src/theme/static/docsearch.less | 26 - site/src/theme/static/footer.less | 77 -- site/src/theme/static/header.less | 47 - site/src/theme/static/highlight.dark.less | 16 - site/src/theme/static/highlight.less | 155 ---- site/src/theme/static/icons.less | 102 --- site/src/theme/static/index.less | 19 - site/src/theme/static/markdown.less | 490 ---------- site/src/theme/static/mock-browser.less | 53 -- site/src/theme/static/not-found.less | 34 - site/src/theme/static/nprogress.less | 14 - site/src/theme/static/page-nav.less | 101 -- site/src/theme/static/preview-img.less | 214 ----- site/src/theme/static/reset.css | 49 - site/src/theme/static/resource.less | 83 -- site/src/theme/static/responsive.less | 297 ------ site/src/theme/static/toc.less | 107 --- site/src/theme/static/var.less | 45 - .../theme/template/IconDisplay/Category.jsx | 51 -- .../template/IconDisplay/CopyableIcon.vue | 51 -- site/src/theme/template/IconDisplay/fields.js | 218 ----- site/src/theme/template/IconDisplay/index.jsx | 102 --- .../theme/template/IconDisplay/themeIcons.jsx | 44 - site/src/theme/zh-CN.js | 148 --- site/src/typings.d.ts | 25 - site/src/utils/generateOnlineDemo.ts | 101 -- site/src/utils/request.js | 56 -- site/src/utils/util.ts | 35 - site/src/views/ComponentOverview.less | 60 -- site/src/views/ComponentOverview.vue | 167 ---- .../views/theme-editor/JSONEditor/index.vue | 71 -- site/src/views/theme-editor/index.vue | 237 ----- site/src/views/theme-editor/locales.ts | 24 - site/src/vueDocs/compatible-style.en-US.md | 63 -- site/src/vueDocs/compatible-style.zh-CN.md | 63 -- site/src/vueDocs/customize-theme.en-US.md | 260 ------ site/src/vueDocs/customize-theme.zh-CN.md | 260 ------ site/src/vueDocs/download.en-US.md | 89 -- site/src/vueDocs/download.zh-CN.md | 77 -- site/src/vueDocs/extract-ssr.en-US.md | 46 - site/src/vueDocs/extract-ssr.zh-CN.md | 46 - site/src/vueDocs/faq.en-US.md | 55 -- site/src/vueDocs/faq.zh-CN.md | 49 - site/src/vueDocs/getting-started.en-US.md | 118 --- site/src/vueDocs/getting-started.zh-CN.md | 116 --- site/src/vueDocs/i18n.en-US.md | 105 --- site/src/vueDocs/i18n.zh-CN.md | 105 --- site/src/vueDocs/introduce.en-US.md | 164 ---- site/src/vueDocs/introduce.zh-CN.md | 164 ---- site/src/vueDocs/migration-v2.en-US.md | 101 -- site/src/vueDocs/migration-v2.zh-CN.md | 102 --- site/src/vueDocs/migration-v3.en-US.md | 132 --- site/src/vueDocs/migration-v3.zh-CN.md | 130 --- site/src/vueDocs/migration-v4.en-US.md | 160 ---- site/src/vueDocs/migration-v4.zh-CN.md | 162 ---- site/src/vueDocs/replace-date.en-US.md | 22 - site/src/vueDocs/replace-date.zh-CN.md | 22 - site/src/vueDocs/sponsor.en-US.md | 71 -- site/src/vueDocs/sponsor.zh-CN.md | 75 -- site/src/vueDocs/use-with-vue-cli.en-US.md | 88 -- site/src/vueDocs/use-with-vue-cli.zh-CN.md | 87 -- site/typings.d.ts | 8 - site/typings/shared.d.ts | 42 - site/vite.config.ts | 56 -- test.html | 23 - tests/__mocks__/copy-to-clipboard.js | 5 - tests/__snapshots__/index.test.js.snap | 138 --- tests/index.test.js | 13 - tests/setup.js | 52 -- tests/setupAfterEnv.ts | 4 - tests/shared/demoTest.js | 39 - tests/shared/focusTest.js | 67 -- tests/shared/mountTest.js | 24 - tests/utils.js | 28 - tsconfig.json | 37 +- turbo.json | 38 + webpack.build.conf.js | 76 -- 532 files changed, 1088 insertions(+), 28774 deletions(-) delete mode 100644 .antd-tools.config.js delete mode 100644 .codecov.yml delete mode 100644 .editorconfig delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js delete mode 100755 .husky/pre-commit delete mode 100644 .huskyrc delete mode 100644 .jest.js delete mode 100644 .prettierignore delete mode 100644 .prettierrc delete mode 100644 .stylelintrc delete mode 100644 .stylelintrc.json delete mode 100644 .vcmrc create mode 100644 apps/playground/assets/tailwind.css create mode 100644 apps/playground/eslint.config.js create mode 100644 apps/playground/favicon.ico create mode 100644 apps/playground/index.html create mode 100644 apps/playground/package.json create mode 100644 apps/playground/prettier.config.js create mode 100644 apps/playground/src/App.vue create mode 100644 apps/playground/src/main.ts create mode 100644 apps/playground/src/routes.ts create mode 100644 apps/playground/src/shims-vue.d.ts create mode 100644 apps/playground/src/utils/glob.ts create mode 100644 apps/playground/vite.config.ts delete mode 100644 babel.config.js delete mode 100644 build.sh create mode 100644 components/version/token-meta.json create mode 100644 components/version/token.json create mode 100644 components/version/version.ts create mode 100644 eslint.config.js create mode 100644 packages-config/eslint-config/config.d.ts create mode 100644 packages-config/eslint-config/eslint.config.base.js create mode 100644 packages-config/eslint-config/eslint.config.ignore.js create mode 100644 packages-config/eslint-config/eslint.config.typescript.js create mode 100644 packages-config/eslint-config/eslint.config.vue.js create mode 100644 packages-config/eslint-config/package.json create mode 100644 packages-config/prettier-config/config.d.ts create mode 100644 packages-config/prettier-config/package.json create mode 100644 packages-config/prettier-config/prettier.config.base.js create mode 100644 packages-config/prettier-config/prettier.config.tailwind.js create mode 100644 packages-config/tailwind-config/package.json create mode 100644 packages-config/tailwind-config/tailwind.css create mode 100644 packages-config/tailwind-config/themes/light.css create mode 100644 packages-config/typescript-config/package.json create mode 100644 packages-config/typescript-config/tsconfig.node.json create mode 100644 packages-config/typescript-config/tsconfig.vite.json create mode 100644 packages-config/typescript-config/tsconfig.vue.json create mode 100644 packages-config/vite-config/config.d.ts create mode 100644 packages-config/vite-config/index.d.ts create mode 100644 packages-config/vite-config/index.js create mode 100644 packages-config/vite-config/package.json create mode 100644 packages-config/vite-config/vite.config.lib.js create mode 100644 packages-config/vite-config/vite.config.typescript.js create mode 100644 packages-config/vite-config/vite.config.vue.js create mode 100644 packages/ui/README.md create mode 100644 packages/ui/eslint.config.js create mode 100644 packages/ui/package.json create mode 100644 packages/ui/prettier.config.js create mode 100644 packages/ui/src/index.ts create mode 100644 packages/ui/src/shims-app.d.ts create mode 100644 packages/ui/tsconfig.json create mode 100644 packages/ui/tsconfig.node.json create mode 100644 packages/ui/typings/global.d.ts create mode 100644 packages/ui/vite.config.ts delete mode 100644 postcss.config.js create mode 100644 prettier.config.js delete mode 100644 scripts/generate-token-meta.js delete mode 100644 site/404.html delete mode 100644 site/debugger/demo/demo.vue delete mode 100644 site/debugger/index.tsx delete mode 100644 site/index.html delete mode 100644 site/public/favicon.ico delete mode 100644 site/scripts/genrateRoutes.js delete mode 100644 site/scripts/pushToOSS.js delete mode 100644 site/src/App.vue delete mode 100644 site/src/SiteToken.vue delete mode 100644 site/src/SymbolKey.ts delete mode 100644 site/src/assets/ant-design-vue.svg delete mode 100644 site/src/assets/logo.png delete mode 100644 site/src/assets/logo.svg delete mode 100644 site/src/components/ColorChunk/index.tsx delete mode 100644 site/src/components/ComponentTokenTable/index.tsx delete mode 100644 site/src/components/Contributors/constants.ts delete mode 100644 site/src/components/Contributors/index.vue delete mode 100644 site/src/components/DemoBox.vue delete mode 100644 site/src/components/SimpleLayout.vue delete mode 100644 site/src/components/TokenTable/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/ColorPanel.tsx delete mode 100644 site/src/components/antdv-token-previewer/ColorPreview.tsx delete mode 100644 site/src/components/antdv-token-previewer/FilterPanel.tsx delete mode 100644 site/src/components/antdv-token-previewer/IconSwitch.tsx delete mode 100644 site/src/components/antdv-token-previewer/PreviewDemo.tsx delete mode 100644 site/src/components/antdv-token-previewer/ThemeEditor.tsx delete mode 100644 site/src/components/antdv-token-previewer/ThemeSelect.tsx delete mode 100644 site/src/components/antdv-token-previewer/TokenInput.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/alert/alert.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/alert/error.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/alert/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/alert/info.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/alert/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/alert/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/anchor/anchor.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/anchor/anchorInLayout.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/anchor/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/autoComplete/auto-complete.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/autoComplete/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/avatar/avatar.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/avatar/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/badge/badge.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/badge/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/badge/progress.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/badge/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/badge/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/breadcrumb/breadcrumb.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/breadcrumb/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/button/button-icon.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/button/button.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/button/dangerButton.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/button/defaultButton.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/button/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/button/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/calendar/calendar.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/calendar/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/calendar/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/card/card.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/card/cardGrid.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/card/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/card/inner.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/carousel/carousel.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/carousel/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/cascader/cascader.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/cascader/data.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/cascader/disable.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/cascader/highlight.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/cascader/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/checkbox/checkbox.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/checkbox/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/checkbox/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/collapse/collapse.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/collapse/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/datePicker/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/datePicker/date-picker.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/datePicker/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/datePicker/icon.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/datePicker/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/datePicker/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/descriptions/descriptions.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/descriptions/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/divider/divider.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/divider/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/drawer/drawer.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/drawer/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/dropdown/dropdown.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/dropdown/dropdownError.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/dropdown/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/dropdown/menu.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/empty/empty.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/empty/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/form/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/form/form.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/form/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/form/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/grid/grid.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/grid/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/icon/icon.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/icon/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/image/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/image/image.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/image/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/input/clearIcon.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/input/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/input/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/input/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/input/input.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/input/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/input/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/input/withAddon.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/inputNumber/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/inputNumber/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/inputNumber/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/inputNumber/inputNumber.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/inputNumber/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/list/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/list/list.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/mentions/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/mentions/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/mentions/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/mentions/mentions.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/mentions/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/menu/data.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/menu/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/menu/menu.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/menu/menuDanger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/menu/menuInLayout.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/message/error.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/message/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/message/info.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/message/message.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/message/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/message/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/modal/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/modal/info.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/modal/modal.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/modal/modalWithButton.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/modal/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/modal/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/notification/error.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/notification/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/notification/info.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/notification/notification.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/notification/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/notification/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/pagination/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/pagination/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/pagination/outline.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/pagination/pagination.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/popconfirm/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/popconfirm/popconfirm.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/popover/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/popover/popover.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/progress/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/progress/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/progress/info.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/progress/progress.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/progress/progressInBg.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/progress/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/radio/button.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/radio/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/radio/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/radio/radio.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/rate/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/rate/rate.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/result/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/result/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/result/info.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/result/result.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/result/resultWithDesc.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/result/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/result/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/segmented/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/segmented/segmented.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/select/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/select/data.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/select/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/select/icon.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/select/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/select/select.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/select/selectTag.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/select/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/skeleton/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/skeleton/skeleton.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/slider/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/slider/slider.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/slider/sliderInBg.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/space/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/space/space.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/spin/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/spin/spin.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/statistic/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/statistic/statistic.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/steps/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/steps/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/steps/steps.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/switch/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/switch/switch.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/table/filterTable.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/table/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/table/table.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tabs/cardTabs.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tabs/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tabs/tabs.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tag/closable.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tag/error.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tag/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tag/info.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tag/multiTags.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tag/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tag/tag.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tag/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/timePicker/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/timePicker/time-picker.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/timeline/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/timeline/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/timeline/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/timeline/timeline.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tooltip/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tooltip/tooltip.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/transfer/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/transfer/data.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/transfer/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/transfer/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/transfer/transfer.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/transfer/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tree/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tree/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/tree/tree.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/treeSelect/disabled.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/treeSelect/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/treeSelect/tree-select.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/typography/Heading4.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/typography/error.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/typography/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/typography/success.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/typography/typography.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/typography/typographyFull.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/typography/warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/typography/warningText.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/typography/warningTitle.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/upload/avatar.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/upload/danger.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-demos/upload/index.ts delete mode 100644 site/src/components/antdv-token-previewer/component-demos/upload/upload.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-panel/ComponentCard.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-panel/ComponentDemoGroup.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-panel/ComponentTokenDrawer.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-panel/ComponentTree.tsx delete mode 100644 site/src/components/antdv-token-previewer/component-panel/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/hooks/useControlledTheme.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/Arrow.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/Brush.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/Compact.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/Control.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/Dark.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/Light.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/Margin.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/Motion.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/Pick.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/SearchDropdown.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/ShapeLine.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/TokenPanel.tsx delete mode 100644 site/src/components/antdv-token-previewer/icons/index.ts delete mode 100644 site/src/components/antdv-token-previewer/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/interface.ts delete mode 100644 site/src/components/antdv-token-previewer/locale/context.ts delete mode 100644 site/src/components/antdv-token-previewer/locale/en-US.ts delete mode 100644 site/src/components/antdv-token-previewer/locale/index.ts delete mode 100644 site/src/components/antdv-token-previewer/locale/interface.tsx delete mode 100644 site/src/components/antdv-token-previewer/locale/zh-CN.ts delete mode 100644 site/src/components/antdv-token-previewer/meta/TokenRelation.ts delete mode 100644 site/src/components/antdv-token-previewer/meta/category.ts delete mode 100644 site/src/components/antdv-token-previewer/meta/index.ts delete mode 100644 site/src/components/antdv-token-previewer/meta/interface.ts delete mode 100644 site/src/components/antdv-token-previewer/overviews/Error.tsx delete mode 100644 site/src/components/antdv-token-previewer/overviews/Primary.tsx delete mode 100644 site/src/components/antdv-token-previewer/overviews/Success.tsx delete mode 100644 site/src/components/antdv-token-previewer/overviews/Warning.tsx delete mode 100644 site/src/components/antdv-token-previewer/overviews/index.ts delete mode 100644 site/src/components/antdv-token-previewer/previewer.tsx delete mode 100644 site/src/components/antdv-token-previewer/token-panel-pro/AliasPanel.tsx delete mode 100644 site/src/components/antdv-token-previewer/token-panel-pro/ComponentDemoPro.tsx delete mode 100644 site/src/components/antdv-token-previewer/token-panel-pro/InputNumberPlus.tsx delete mode 100644 site/src/components/antdv-token-previewer/token-panel-pro/TokenContent.tsx delete mode 100644 site/src/components/antdv-token-previewer/token-panel-pro/TokenDetail.tsx delete mode 100644 site/src/components/antdv-token-previewer/token-panel-pro/TokenPreview.tsx delete mode 100644 site/src/components/antdv-token-previewer/token-panel-pro/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/token-panel/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/token-panel/token-card/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/token-panel/token-item/index.tsx delete mode 100644 site/src/components/antdv-token-previewer/utils/classifyToken.ts delete mode 100644 site/src/components/antdv-token-previewer/utils/deepUpdateObj.ts delete mode 100644 site/src/components/antdv-token-previewer/utils/getColorBgImg.ts delete mode 100644 site/src/components/antdv-token-previewer/utils/getDesignToken.ts delete mode 100644 site/src/components/antdv-token-previewer/utils/getValueByPath.ts delete mode 100644 site/src/components/antdv-token-previewer/utils/isColor.ts delete mode 100644 site/src/components/antdv-token-previewer/utils/makeStyle.tsx delete mode 100644 site/src/components/antdv-token-previewer/utils/statistic.ts delete mode 100644 site/src/components/demoContainer.vue delete mode 100644 site/src/components/demoSort.jsx delete mode 100644 site/src/components/rice/CarbonAds.vue delete mode 100644 site/src/components/rice/GoogleAds.vue delete mode 100644 site/src/components/rice/GoogleAdsMin.vue delete mode 100644 site/src/components/rice/GoogleAdsTop.vue delete mode 100644 site/src/components/rice/WWAds.vue delete mode 100644 site/src/components/rice/geektime.vue delete mode 100644 site/src/components/rice/geektime_ads.vue delete mode 100644 site/src/components/rice/right_bottom_rice.vue delete mode 100644 site/src/components/rice/sponsors.vue delete mode 100644 site/src/components/rice/top_rice.vue delete mode 100644 site/src/components/surelyVue.vue delete mode 100644 site/src/components/vue-colorful/components/HexColorPicker.tsx delete mode 100644 site/src/components/vue-colorful/components/RgbaColorPicker.tsx delete mode 100644 site/src/components/vue-colorful/components/common/Alpha.tsx delete mode 100644 site/src/components/vue-colorful/components/common/AlphaColorPicker.tsx delete mode 100644 site/src/components/vue-colorful/components/common/ColorInput.tsx delete mode 100644 site/src/components/vue-colorful/components/common/ColorPicker.tsx delete mode 100644 site/src/components/vue-colorful/components/common/Hue.tsx delete mode 100644 site/src/components/vue-colorful/components/common/Interactive.tsx delete mode 100644 site/src/components/vue-colorful/components/common/Pointer.tsx delete mode 100644 site/src/components/vue-colorful/components/common/Saturation.tsx delete mode 100644 site/src/components/vue-colorful/css/styles.css delete mode 100644 site/src/components/vue-colorful/css/styles.css.d.ts delete mode 100644 site/src/components/vue-colorful/hooks/useColorManipulation.ts delete mode 100644 site/src/components/vue-colorful/hooks/useEventCallback.ts delete mode 100644 site/src/components/vue-colorful/hooks/useStyleSheet.ts delete mode 100644 site/src/components/vue-colorful/index.ts delete mode 100644 site/src/components/vue-colorful/types.ts delete mode 100644 site/src/components/vue-colorful/utils/clamp.ts delete mode 100644 site/src/components/vue-colorful/utils/compare.ts delete mode 100644 site/src/components/vue-colorful/utils/convert.ts delete mode 100644 site/src/components/vue-colorful/utils/format.ts delete mode 100644 site/src/components/vue-colorful/utils/nonce.ts delete mode 100644 site/src/components/vue-colorful/utils/round.ts delete mode 100644 site/src/components/vue-colorful/utils/validate.ts delete mode 100644 site/src/demo.js delete mode 100644 site/src/directives/clipboard/clipboard-action.js delete mode 100644 site/src/directives/clipboard/clipboard.js delete mode 100644 site/src/directives/clipboard/closest.js delete mode 100644 site/src/directives/clipboard/delegate.js delete mode 100644 site/src/directives/clipboard/index.js delete mode 100644 site/src/directives/clipboard/is.js delete mode 100644 site/src/directives/clipboard/listen.js delete mode 100644 site/src/directives/clipboard/select.js delete mode 100644 site/src/directives/clipboard/tiny-emitter.js delete mode 100644 site/src/hooks/useMediaQuery.ts delete mode 100644 site/src/hooks/useMenus.ts delete mode 100644 site/src/hooks/useSiteToken.ts delete mode 100644 site/src/i18n.js delete mode 100644 site/src/index.less delete mode 100644 site/src/layouts/BaseLayout.vue delete mode 100644 site/src/layouts/Demo.vue delete mode 100644 site/src/layouts/Footer.vue delete mode 100644 site/src/layouts/Iframe.vue delete mode 100644 site/src/layouts/Menu.vue delete mode 100644 site/src/layouts/PrevAndNext.vue delete mode 100644 site/src/layouts/header/Ecosystem.vue delete mode 100644 site/src/layouts/header/Github.less delete mode 100644 site/src/layouts/header/Github.vue delete mode 100644 site/src/layouts/header/Logo.vue delete mode 100644 site/src/layouts/header/Menu.vue delete mode 100644 site/src/layouts/header/More.vue delete mode 100644 site/src/layouts/header/Navigation.vue delete mode 100644 site/src/layouts/header/SearchBox.less delete mode 100644 site/src/layouts/header/SearchBox.vue delete mode 100644 site/src/layouts/header/index.less delete mode 100644 site/src/layouts/header/index.vue delete mode 100644 site/src/layouts/icons/Compact.tsx delete mode 100644 site/src/layouts/icons/Dark.tsx delete mode 100644 site/src/layouts/icons/Light.tsx delete mode 100644 site/src/layouts/icons/ThemeEditorIcon.tsx delete mode 100644 site/src/layouts/icons/ThemeIcon.vue delete mode 100644 site/src/layouts/index.vue delete mode 100644 site/src/locale/en-US.js delete mode 100644 site/src/locale/zh-CN.js delete mode 100644 site/src/main.js delete mode 100644 site/src/mock/user.js delete mode 100644 site/src/router/index.js delete mode 100644 site/src/services/login.js delete mode 100644 site/src/services/user.js delete mode 100644 site/src/theme/en-US.js delete mode 100644 site/src/theme/static/common.less delete mode 100644 site/src/theme/static/demo.less delete mode 100644 site/src/theme/static/docsearch.less delete mode 100644 site/src/theme/static/footer.less delete mode 100644 site/src/theme/static/header.less delete mode 100644 site/src/theme/static/highlight.dark.less delete mode 100644 site/src/theme/static/highlight.less delete mode 100644 site/src/theme/static/icons.less delete mode 100644 site/src/theme/static/index.less delete mode 100644 site/src/theme/static/markdown.less delete mode 100644 site/src/theme/static/mock-browser.less delete mode 100644 site/src/theme/static/not-found.less delete mode 100644 site/src/theme/static/nprogress.less delete mode 100644 site/src/theme/static/page-nav.less delete mode 100644 site/src/theme/static/preview-img.less delete mode 100644 site/src/theme/static/reset.css delete mode 100644 site/src/theme/static/resource.less delete mode 100644 site/src/theme/static/responsive.less delete mode 100644 site/src/theme/static/toc.less delete mode 100644 site/src/theme/static/var.less delete mode 100644 site/src/theme/template/IconDisplay/Category.jsx delete mode 100644 site/src/theme/template/IconDisplay/CopyableIcon.vue delete mode 100644 site/src/theme/template/IconDisplay/fields.js delete mode 100644 site/src/theme/template/IconDisplay/index.jsx delete mode 100644 site/src/theme/template/IconDisplay/themeIcons.jsx delete mode 100644 site/src/theme/zh-CN.js delete mode 100644 site/src/typings.d.ts delete mode 100644 site/src/utils/generateOnlineDemo.ts delete mode 100644 site/src/utils/request.js delete mode 100644 site/src/utils/util.ts delete mode 100644 site/src/views/ComponentOverview.less delete mode 100644 site/src/views/ComponentOverview.vue delete mode 100644 site/src/views/theme-editor/JSONEditor/index.vue delete mode 100644 site/src/views/theme-editor/index.vue delete mode 100644 site/src/views/theme-editor/locales.ts delete mode 100644 site/src/vueDocs/compatible-style.en-US.md delete mode 100644 site/src/vueDocs/compatible-style.zh-CN.md delete mode 100644 site/src/vueDocs/customize-theme.en-US.md delete mode 100644 site/src/vueDocs/customize-theme.zh-CN.md delete mode 100644 site/src/vueDocs/download.en-US.md delete mode 100644 site/src/vueDocs/download.zh-CN.md delete mode 100644 site/src/vueDocs/extract-ssr.en-US.md delete mode 100644 site/src/vueDocs/extract-ssr.zh-CN.md delete mode 100644 site/src/vueDocs/faq.en-US.md delete mode 100644 site/src/vueDocs/faq.zh-CN.md delete mode 100644 site/src/vueDocs/getting-started.en-US.md delete mode 100644 site/src/vueDocs/getting-started.zh-CN.md delete mode 100644 site/src/vueDocs/i18n.en-US.md delete mode 100644 site/src/vueDocs/i18n.zh-CN.md delete mode 100644 site/src/vueDocs/introduce.en-US.md delete mode 100644 site/src/vueDocs/introduce.zh-CN.md delete mode 100644 site/src/vueDocs/migration-v2.en-US.md delete mode 100644 site/src/vueDocs/migration-v2.zh-CN.md delete mode 100644 site/src/vueDocs/migration-v3.en-US.md delete mode 100644 site/src/vueDocs/migration-v3.zh-CN.md delete mode 100644 site/src/vueDocs/migration-v4.en-US.md delete mode 100644 site/src/vueDocs/migration-v4.zh-CN.md delete mode 100644 site/src/vueDocs/replace-date.en-US.md delete mode 100644 site/src/vueDocs/replace-date.zh-CN.md delete mode 100644 site/src/vueDocs/sponsor.en-US.md delete mode 100644 site/src/vueDocs/sponsor.zh-CN.md delete mode 100644 site/src/vueDocs/use-with-vue-cli.en-US.md delete mode 100644 site/src/vueDocs/use-with-vue-cli.zh-CN.md delete mode 100644 site/typings.d.ts delete mode 100644 site/typings/shared.d.ts delete mode 100644 site/vite.config.ts delete mode 100644 test.html delete mode 100644 tests/__mocks__/copy-to-clipboard.js delete mode 100644 tests/__snapshots__/index.test.js.snap delete mode 100644 tests/index.test.js delete mode 100644 tests/setup.js delete mode 100644 tests/setupAfterEnv.ts delete mode 100644 tests/shared/demoTest.js delete mode 100644 tests/shared/focusTest.js delete mode 100644 tests/shared/mountTest.js delete mode 100644 tests/utils.js create mode 100644 turbo.json delete mode 100644 webpack.build.conf.js diff --git a/.antd-tools.config.js b/.antd-tools.config.js deleted file mode 100644 index 36b9b7598..000000000 --- a/.antd-tools.config.js +++ /dev/null @@ -1,36 +0,0 @@ -const fs = require('fs'); -const path = require('path'); - -const restCssPath = path.join(process.cwd(), 'components', 'style', 'reset.css'); -const tokenStatisticPath = path.join(process.cwd(), 'components', 'version', 'token.json'); -const tokenMetaPath = path.join(process.cwd(), 'components', 'version', 'token-meta.json'); - -function finalizeCompile() { - if (fs.existsSync(path.join(__dirname, './es'))) { - fs.copyFileSync(restCssPath, path.join(process.cwd(), 'es', 'style', 'reset.css')); - fs.copyFileSync(tokenStatisticPath, path.join(process.cwd(), 'es', 'version', 'token.json')); - fs.copyFileSync(tokenMetaPath, path.join(process.cwd(), 'es', 'version', 'token-meta.json')); - } - - if (fs.existsSync(path.join(__dirname, './lib'))) { - fs.copyFileSync(restCssPath, path.join(process.cwd(), 'lib', 'style', 'reset.css')); - fs.copyFileSync(tokenStatisticPath, path.join(process.cwd(), 'lib', 'version', 'token.json')); - fs.copyFileSync(tokenMetaPath, path.join(process.cwd(), 'lib', 'version', 'token-meta.json')); - } -} - -function finalizeDist() { - if (fs.existsSync(path.join(__dirname, './dist'))) { - fs.copyFileSync(restCssPath, path.join(process.cwd(), 'dist', 'reset.css')); - } -} - -module.exports = { - compile: { - finalize: finalizeCompile, - }, - dist: { - finalize: finalizeDist, - }, - bail: true, -}; diff --git a/.codecov.yml b/.codecov.yml deleted file mode 100644 index 7966f407b..000000000 --- a/.codecov.yml +++ /dev/null @@ -1,2 +0,0 @@ -codecov: - branch: master diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 4c7f8a8ef..000000000 --- a/.editorconfig +++ /dev/null @@ -1,11 +0,0 @@ -# 🎨 editorconfig.org - -root = true - -[*] -charset = utf-8 -end_of_line = lf -indent_style = space -indent_size = 2 -trim_trailing_whitespace = true -insert_final_newline = true \ No newline at end of file diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 3a4678606..000000000 --- a/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -node_modules/ -**/*.spec.* -**/style/ -*.html -/components/test/* -es/ -lib/ -_site/ -dist/ -site/dist/ -components/version/version.ts -site/src/router/demoRoutes.js -locale/ \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index d6b5da49d..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,112 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - node: true, - jasmine: true, - jest: true, - es6: true, - }, - parser: '@typescript-eslint/parser', - parserOptions: { - parser: 'babel-eslint', - }, - extends: [ - 'plugin:vue/vue3-recommended', - 'plugin:import/recommended', - 'plugin:import/typescript', - '@vue/typescript/recommended', - '@vue/prettier', - // 'prettier', - ], - // extends: [ - // 'eslint:recommended', - // 'plugin:vue/vue3-recommended', - // '@vue/typescript/recommended', - // '@vue/prettier', - // ], - plugins: ['markdown', 'jest', '@typescript-eslint', 'import'], - globals: { - h: true, - defineProps: 'readonly', - }, - overrides: [ - { - files: ['*.md'], - processor: 'markdown/markdown', - rules: { - 'no-console': 'off', - }, - }, - { - files: ['*.ts', '*.tsx'], - // extends: ['@vue/typescript/recommended', '@vue/prettier'], - parserOptions: { - project: './tsconfig.json', - }, - rules: { - '@typescript-eslint/ban-types': 0, - '@typescript-eslint/consistent-type-imports': 'error', - '@typescript-eslint/explicit-module-boundary-types': 0, - '@typescript-eslint/no-empty-function': 0, - '@typescript-eslint/no-non-null-assertion': 0, - '@typescript-eslint/no-unused-vars': [ - 'error', - { vars: 'all', args: 'after-used', ignoreRestSiblings: true }, - ], - '@typescript-eslint/ban-ts-comment': 0, - }, - }, - { - files: ['*.vue'], - parser: 'vue-eslint-parser', - parserOptions: { - parser: '@typescript-eslint/parser', - ecmaVersion: 2021, - }, - rules: { - 'no-console': 'off', - 'vue/no-reserved-component-names': 'off', - }, - }, - ], - rules: { - '@typescript-eslint/no-explicit-any': 0, - '@typescript-eslint/no-empty-function': 0, - '@typescript-eslint/no-unused-vars': [ - 'error', - { vars: 'all', args: 'after-used', ignoreRestSiblings: true, argsIgnorePattern: '^_' }, - ], - 'import/no-named-as-default': 'off', - 'import/namespace': [2, { allowComputed: true }], - 'import/no-named-as-default-member': 'off', - 'import/no-unresolved': [2, { ignore: ['ant-design-vue'] }], - 'comma-dangle': [2, 'always-multiline'], - 'no-var': 'error', - 'no-console': [2, { allow: ['warn', 'error'] }], - 'object-shorthand': 2, - 'no-unused-vars': [2, { ignoreRestSiblings: true, argsIgnorePattern: '^_' }], - 'no-undef': 2, - camelcase: 'off', - 'no-extra-boolean-cast': 'off', - semi: ['error', 'always'], - 'vue/no-v-html': 'off', - 'vue/require-explicit-emits': 'off', - 'vue/require-prop-types': 'off', - 'vue/require-default-prop': 'off', - 'vue/no-reserved-keys': 'off', - 'vue/comment-directive': 'off', - 'vue/prop-name-casing': 'off', - 'vue/one-component-per-file': 'off', - 'vue/custom-event-name-casing': 'off', - 'vue/v-on-event-hyphenation': 'off', - 'vue/max-attributes-per-line': [ - 2, - { - singleline: 20, - multiline: 1, - }, - ], - 'vue/multi-word-component-names': 'off', - }, -}; diff --git a/.gitignore b/.gitignore index b45e673a2..49a141a31 100644 --- a/.gitignore +++ b/.gitignore @@ -66,9 +66,6 @@ package-lock.json pnpm-lock.yaml /coverage -# 备份文件 -/components/test/* -list.txt site/dev.js @@ -77,10 +74,39 @@ vetur/ report.html -site/src/router/demoRoutes.js -components/version/version.ts -components/version/version.tsx -components/version/token.json -components/version/token-meta.json -~component-api.json + +# Local env files +.env +.env.* +!.env.template + +# Testing +coverage + +# Turbo +.turbo + +# Vercel +.vercel + +# Build Outputs +.next/ +out/ +build/ +dist/ +storybook-static/ + + +# Debug +npm-debug.log* + +# Misc +.DS_Store +*.pem +vite.config.*.timestamp* +*.tsbuildinfo +*.log + +.npmrc +.tsup/ \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index f91359dc2..000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npx --no-install pretty-quick --staged diff --git a/.huskyrc b/.huskyrc deleted file mode 100644 index 1a7c5875b..000000000 --- a/.huskyrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "hooks": { - "pre-commit": "pretty-quick --staged", - "pre-publish": "npm run lint", - "commit-msg": "commitlint -x @commitlint/config-conventional -e $GIT_PARAMS" - } -} diff --git a/.jest.js b/.jest.js deleted file mode 100644 index f75b9b1a5..000000000 --- a/.jest.js +++ /dev/null @@ -1,60 +0,0 @@ -const libDir = process.env.LIB_DIR; - -const transformIgnorePatterns = [ - '/dist/', - // Ignore modules without es dir. - // Update: @babel/runtime should also be transformed - // 'node_modules/(?!.*(@babel|lodash-es))', - 'node_modules/(?!@ant-design/icons-vue|@ant-design/icons-svg|lodash-es)/', -]; -const testPathIgnorePatterns = ['/node_modules/', 'node']; - -function getTestRegex(libDir) { - if (libDir === 'dist') { - return 'demo\\.test\\.js$'; - } - return '.*\\.test\\.(j|t)sx?$'; -} -module.exports = { - verbose: true, - setupFiles: ['./tests/setup.js'], - setupFilesAfterEnv: ['./tests/setupAfterEnv.ts'], - moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json', 'vue', 'md', 'jpg'], - modulePathIgnorePatterns: ['/_site/'], - testPathIgnorePatterns: testPathIgnorePatterns, - transform: { - '\\.(vue|md)$': '/node_modules/@vue/vue3-jest', - '\\.(js|jsx)$': '/node_modules/babel-jest', - '\\.(ts|tsx)$': '/node_modules/ts-jest', - '\\.svg$': '/node_modules/jest-transform-stub', - }, - testRegex: getTestRegex(libDir), - moduleNameMapper: { - '^@/(.*)$/': '/$1', - '^ant-design-vue$': '/components/index', - '^ant-design-vue/es/(.*)$': '/components/$1', - }, - snapshotSerializers: ['/node_modules/jest-serializer-vue'], - collectCoverage: process.env.COVERAGE === 'true', - collectCoverageFrom: [ - 'components/**/*.{js,jsx,vue}', - '!components/*/__tests__/**/type.{js,jsx}', - '!components/vc-*/**/*', - '!components/*/demo/**/*', - '!components/_util/**/*', - '!components/align/**/*', - '!components/trigger/**/*', - '!**/node_modules/**', - ], - testEnvironment: 'jsdom', - testEnvironmentOptions: { - url: 'http://localhost', - customExportConditions: ['node', 'node-addons'], - }, - transformIgnorePatterns, - globals: { - 'ts-jest': { - babelConfig: true, - }, - }, -}; diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index b3b276aff..000000000 --- a/.prettierignore +++ /dev/null @@ -1,31 +0,0 @@ -**/*.svg -lib/ -es/ -dist/ -_site/ -coverage/ -CNAME -LICENSE -yarn.lock -netlify.toml -yarn-error.log -*.sh -*.snap -.gitignore -.npmignore -.prettierignore -.DS_Store -.editorconfig -.eslintignore -**/*.yml -**/assets -.gitattributes -.stylelintrc -.vcmrc -.png -.npmrc.template -.huskyrc -.gitmodules -*.png -v2-doc/ - diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 3ccb6b6be..000000000 --- a/.prettierrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all", - "endOfLine": "lf", - "printWidth": 100, - "proseWrap": "never", - "arrowParens": "avoid", - "htmlWhitespaceSensitivity": "ignore", - "overrides": [ - { - "files": ".prettierrc", - "options": { - "parser": "json" - } - } - ] -} diff --git a/.stylelintrc b/.stylelintrc deleted file mode 100644 index 9d422fb7c..000000000 --- a/.stylelintrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "extends": ["stylelint-config-standard", "stylelint-config-prettier"], - "rules": { - "comment-empty-line-before": null, - "declaration-empty-line-before": null, - "function-comma-newline-after": null, - "function-name-case": null, - "function-parentheses-newline-inside": null, - "function-max-empty-lines": null, - "function-whitespace-after": null, - "indentation": null, - "number-leading-zero": null, - "number-no-trailing-zeros": null, - "rule-empty-line-before": null, - "selector-combinator-space-after": null, - "selector-list-comma-newline-after": null, - "selector-pseudo-element-colon-notation": null, - "unit-no-unknown": null, - "value-list-max-empty-lines": null, - "font-family-no-missing-generic-family-keyword": null, - "no-descending-specificity": null - } -} diff --git a/.stylelintrc.json b/.stylelintrc.json deleted file mode 100644 index 4d48dbf97..000000000 --- a/.stylelintrc.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "extends": [ - "stylelint-config-standard", - "stylelint-config-rational-order", - "stylelint-config-prettier" - ], - "customSyntax": "postcss-less", - "plugins": ["stylelint-declaration-block-no-ignored-properties"], - "rules": { - "function-name-case": ["lower"], - "function-no-unknown": [ - true, - { - "ignoreFunctions": [ - "fade", - "fadeout", - "tint", - "darken", - "ceil", - "fadein", - "floor", - "unit", - "shade", - "lighten", - "percentage", - "-" - ] - } - ], - "import-notation": null, - "no-descending-specificity": null, - "no-invalid-position-at-import-rule": null, - "declaration-empty-line-before": null, - "keyframes-name-pattern": null, - "custom-property-pattern": null, - "number-max-precision": 8, - "alpha-value-notation": "number", - "color-function-notation": "legacy", - "selector-class-pattern": null, - "selector-id-pattern": null, - "selector-not-notation": null - } -} diff --git a/.vcmrc b/.vcmrc deleted file mode 100644 index e73eed9e4..000000000 --- a/.vcmrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "helpMessage": "\nPlease fix your commit message (and consider using https://www.npmjs.com/package/commitizen)\n", - "types": [ - "feat", - "fix", - "docs", - "style", - "refactor", - "perf", - "test", - "chore", - "revert", - "ci" - ], - "warnOnFail": false, - "autoFix": false -} diff --git a/apps/playground/assets/tailwind.css b/apps/playground/assets/tailwind.css new file mode 100644 index 000000000..1775e810a --- /dev/null +++ b/apps/playground/assets/tailwind.css @@ -0,0 +1,17 @@ +@import '@ant-design-vue/tailwind-config'; + +@source '../index.html'; +@source '../src/**/*.{vue,ts}'; +@source '../../../node_modules/ant-design-vue/dist/lib.mjs'; +* { + scrollbar-width: thin; + scrollbar-color: var(--color-base-300) transparent; +} +*:focus-visible { + outline: none; +} + +.shiki.github-dark, +.dark-scrollbar { + scrollbar-color: rgba(121, 121, 121, 0.4) transparent; +} diff --git a/apps/playground/eslint.config.js b/apps/playground/eslint.config.js new file mode 100644 index 000000000..f85a523dd --- /dev/null +++ b/apps/playground/eslint.config.js @@ -0,0 +1,3 @@ +// @ts-check + +export { default } from '@ant-design-vue/eslint-config/vue' diff --git a/apps/playground/favicon.ico b/apps/playground/favicon.ico new file mode 100644 index 000000000..e69de29bb diff --git a/apps/playground/index.html b/apps/playground/index.html new file mode 100644 index 000000000..b2ac62c61 --- /dev/null +++ b/apps/playground/index.html @@ -0,0 +1,12 @@ + + + + + + Playground + + +
+ + + diff --git a/apps/playground/package.json b/apps/playground/package.json new file mode 100644 index 000000000..4768ae7c9 --- /dev/null +++ b/apps/playground/package.json @@ -0,0 +1,50 @@ +{ + "name": "playground", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite", + "lint": "eslint . --fix", + "preview": "vite preview", + "tsc": "vue-tsc --noEmit" + }, + "dependencies": { + "@floating-ui/vue": "^1.1.5", + "@heroicons/vue": "^2.1.5", + "ant-design-vue": "*", + "@simonwep/pickr": "^1.9.1", + "@trpc/client": "^11.0.0", + "@trpc/server": "^11.0.0", + "@wdns/vue-code-block": "^2.3.3", + "clsx": "^2.1.1", + "cookies": "^0.9.1", + "react": "18", + "react-dom": "18", + "uuid": "^10.0.0", + "vue": "^3.4.34", + "vue-router": "^4.4.0" + }, + "devDependencies": { + "@ant-design-vue/eslint-config": "*", + "@ant-design-vue/prettier-config": "*", + "@ant-design-vue/tailwind-config": "*", + "@ant-design-vue/typescript-config": "*", + "@ant-design-vue/vite-config": "*", + "@tailwindcss/vite": "^4.1.3", + "@types/cookies": "^0.9.0", + "@types/node": "^20.0.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "@vitejs/plugin-vue": "^5.1.3", + "prettier-plugin-tailwindcss": "^0.6.11", + "tailwindcss": "^4.1.3", + "typescript": "^5.8.2", + "vite": "^5.3.5", + "vite-plugin-dts": "^3.9.1", + "vite-svg-loader": "^5.1.0", + "vue-tsc": "^3.0.3" + } +} diff --git a/apps/playground/prettier.config.js b/apps/playground/prettier.config.js new file mode 100644 index 000000000..9b2395e43 --- /dev/null +++ b/apps/playground/prettier.config.js @@ -0,0 +1,3 @@ +// @ts-check + +export { default } from "@ant-design-vue/prettier-config/tailwind"; diff --git a/apps/playground/src/App.vue b/apps/playground/src/App.vue new file mode 100644 index 000000000..4a9e23dab --- /dev/null +++ b/apps/playground/src/App.vue @@ -0,0 +1,3 @@ + diff --git a/apps/playground/src/main.ts b/apps/playground/src/main.ts new file mode 100644 index 000000000..f09c151a4 --- /dev/null +++ b/apps/playground/src/main.ts @@ -0,0 +1,12 @@ +import '~/tailwind.css' +import { createApp } from 'vue' +import { createRouter, createWebHistory } from 'vue-router' +import App from './App.vue' +import routes from './routes' + +const router = createRouter({ + history: createWebHistory(), + routes, +}) + +createApp(App).use(router).mount('#app') diff --git a/apps/playground/src/routes.ts b/apps/playground/src/routes.ts new file mode 100644 index 000000000..a10ca9034 --- /dev/null +++ b/apps/playground/src/routes.ts @@ -0,0 +1,4 @@ +import { RouteRecordRaw } from 'vue-router' + +const items = import.meta.glob('./pages/*/index.ts', { import: 'default', eager: true }) +export default Object.values(items) as RouteRecordRaw[] diff --git a/apps/playground/src/shims-vue.d.ts b/apps/playground/src/shims-vue.d.ts new file mode 100644 index 000000000..ed146e70c --- /dev/null +++ b/apps/playground/src/shims-vue.d.ts @@ -0,0 +1,5 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent, Record, any> + export default component +} diff --git a/apps/playground/src/utils/glob.ts b/apps/playground/src/utils/glob.ts new file mode 100644 index 000000000..2bbbd4705 --- /dev/null +++ b/apps/playground/src/utils/glob.ts @@ -0,0 +1,99 @@ +import { RouteRecordRaw } from 'vue-router' + +export function globRoutes( + baseName: string, + globs: Record Promise>, +): RouteRecordRaw { + const items = Object.entries(globs).map(([path, component]) => { + const match = path.match(/^\.\/pages\/(.+)\/index\.ts$/) + if (!match) { + throw new Error('invalid glob') + } + return { + name: match[1], + component, + } + }) + + const home: RouteRecordRaw = { + path: '', + components: { + default: () => import('@/components/HomePage.vue'), + breadcrumbs: () => import('@/components/TheBreadcrumbs.vue'), + }, + props: { + default: { + items: items.map(item => { + return { + name: item.name, + path: `/${baseName}/${item.name}`, + } + }), + }, + breadcrumbs: { + items: [ + { + name: 'home', + path: '/', + }, + { + name: baseName, + path: `/${baseName}`, + }, + ], + }, + }, + meta: { + name: baseName, + title: baseName, + }, + } + + const pages: RouteRecordRaw[] = items.map(item => { + return { + path: item.name, + components: { + default: item.component, + breadcrumbs: () => import('@/components/TheBreadcrumbs.vue'), + }, + props: { + breadcrumbs: { + items: [ + { + name: 'home', + path: '/', + }, + { + name: baseName, + path: `/${baseName}`, + }, + { + name: item.name, + path: `/${baseName}/${item.name}`, + }, + ], + }, + }, + meta: { + name: item.name, + title: `${baseName} - ${item.name}`, + }, + } + }) + + return { + path: `/${baseName}`, + component: () => import('@/components/BasicLayout.vue'), + props: { + navs: [ + { + name: 'home', + path: '/', + }, + ], + hideNavbar: true, + hideBreadcrumbs: true, + }, + children: [home, ...pages], + } as RouteRecordRaw +} diff --git a/apps/playground/vite.config.ts b/apps/playground/vite.config.ts new file mode 100644 index 000000000..c4b7c00ef --- /dev/null +++ b/apps/playground/vite.config.ts @@ -0,0 +1,70 @@ +import tailwindcss from '@tailwindcss/vite' +import react from '@vitejs/plugin-react' +import vue from '@vitejs/plugin-vue' +import { resolve } from 'node:path' +import { defineConfig, Plugin } from 'vite' + +// https://vitejs.dev/config/ +export default defineConfig({ + appType: 'mpa', + plugins: [ + vue(), + react(), + tailwindcss(), + ], + build: { + rollupOptions: { + input: { + main: resolve(__dirname, './index.html'), + }, + }, + }, + server: { + watch: { + ignored: ['!**/node_modules/@ant-design-vue/**'], + }, + }, + resolve: { + alias: { + '@': resolve(__dirname, './src'), + '~': resolve(__dirname, './assets'), + }, + }, +}) + +interface ImportmapOptions { + imports: Record +} +function importmapPlugin(options: ImportmapOptions): Plugin { + return { + name: 'vite-plugin-importmap', + apply: 'build', + config() { + return { + build: { + rollupOptions: { + external: Object.keys(options.imports), + }, + }, + } + }, + transformIndexHtml: { + order: 'pre', + handler(html) { + return { + html, + tags: [ + { + tag: 'script', + attrs: { + type: 'importmap', + }, + children: JSON.stringify(options), + injectTo: 'head-prepend', + }, + ], + } + }, + }, + } +} diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index dd104b4ca..000000000 --- a/babel.config.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = { - env: { - test: { - presets: [['@babel/preset-env']], - plugins: [ - ['@vue/babel-plugin-jsx', { mergeProps: false, enableObjectSlots: false }], - '@babel/plugin-proposal-optional-chaining', - '@babel/plugin-transform-object-assign', - '@babel/plugin-proposal-object-rest-spread', - '@babel/plugin-proposal-export-default-from', - '@babel/plugin-proposal-export-namespace-from', - '@babel/plugin-proposal-class-properties', - '@babel/plugin-syntax-dynamic-import', - '@babel/plugin-transform-runtime', - 'transform-require-context', - ], - }, - }, -}; diff --git a/build.sh b/build.sh deleted file mode 100644 index 2f07b2403..000000000 --- a/build.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -rm -rf dist -mkdir dist -./node_modules/.bin/webpack --config webpack.site.config.js -cp dist/index.html index.html diff --git a/components/version/token-meta.json b/components/version/token-meta.json new file mode 100644 index 000000000..9bafd7f6a --- /dev/null +++ b/components/version/token-meta.json @@ -0,0 +1 @@ +{"boxShadow":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"boxShadowSecondary":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"boxShadowTertiary":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorBgContainerDisabled":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorBgTextActive":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorBgTextHover":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorBorderBg":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorErrorOutline":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorFillAlter":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorFillContent":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorFillContentHover":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorHighlight":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorIcon":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorIconHover":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorLink":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorLinkActive":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorLinkHover":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorSplit":{"name":"分割线颜色","nameEn":"","desc":"用于作为分割线的颜色,此颜色和 colorBorderSecondary 的颜色一致,但是用的是透明色。","descEn":"","type":"string","source":"alias"},"colorTextDescription":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorTextDisabled":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorTextHeading":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorTextLabel":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorTextLightSolid":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorTextPlaceholder":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"colorWarningOutline":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"controlInteractiveSize":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"controlItemBgActive":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"controlItemBgActiveDisabled":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"controlItemBgActiveHover":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"controlItemBgHover":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"controlOutline":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"controlOutlineWidth":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"controlPaddingHorizontal":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"controlPaddingHorizontalSM":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"controlTmpOutline":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"alias"},"fontSizeIcon":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"fontWeightStrong":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"linkDecoration":{"name":"","nameEn":"","desc":"","descEn":"","type":"TextDecoration","source":"alias"},"linkFocusDecoration":{"name":"","nameEn":"","desc":"","descEn":"","type":"TextDecoration","source":"alias"},"linkHoverDecoration":{"name":"","nameEn":"","desc":"","descEn":"","type":"TextDecoration","source":"alias"},"margin":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"marginLG":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"marginMD":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"marginSM":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"marginXL":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"marginXS":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"marginXXL":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"marginXXS":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"opacityLoading":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"padding":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingContentHorizontal":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingContentHorizontalLG":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingContentHorizontalSM":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingContentVertical":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingContentVerticalLG":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingContentVerticalSM":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingLG":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingMD":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingSM":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingXL":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingXS":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"paddingXXS":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenLG":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenLGMax":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenLGMin":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenMD":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenMDMax":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenMDMin":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenSM":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenSMMax":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenSMMin":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXL":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXLMax":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXLMin":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXS":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXSMax":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXSMin":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXXL":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXXLMax":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXXLMin":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXXXL":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"screenXXXLMin":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"alias"},"borderRadiusLG":{"name":"LG号圆角","nameEn":"LG Border Radius","desc":"LG号圆角,用于组件中的一些大圆角,如 Card、Modal 等一些组件样式。","descEn":"LG size border radius, used in some large border radius components, such as Card, Modal and other components.","type":"number","source":"map"},"borderRadiusOuter":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"borderRadiusSM":{"name":"SM号圆角","nameEn":"SM Border Radius","desc":"SM号圆角,用于组件小尺寸下的圆角,如 Button、Input、Select 等输入类控件在 small size 下的圆角","descEn":"SM size border radius, used in small size components, such as Button, Input, Select and other input components in small size","type":"number","source":"map"},"borderRadiusXS":{"name":"XS号圆角","nameEn":"","desc":"XS号圆角,用于组件中的一些小圆角,如 Segmented 、Arrow 等一些内部圆角的组件样式中。","descEn":"XS size border radius, used in some small border radius components, such as Segmented, Arrow and other components.","type":"number","source":"map"},"colorBgContainer":{"name":"组件容器背景色","nameEn":"","desc":"组件的容器背景色,例如:默认按钮、输入框等。务必不要将其与 `colorBgElevated` 混淆。","descEn":"","type":"string","source":"map"},"colorBgElevated":{"name":"浮层容器背景色","nameEn":"","desc":"浮层容器背景色,在暗色模式下该 token 的色值会比 `colorBgContainer` 要亮一些。例如:模态框、弹出框、菜单等。","descEn":"","type":"string","source":"map"},"colorBgLayout":{"name":"布局背景色","nameEn":"","desc":"该色用于页面整体布局的背景色,只有需要在页面中处于 B1 的视觉层级时才会使用该 token,其他用法都是错误的","descEn":"","type":"string","source":"map"},"colorBgMask":{"name":"浮层的背景蒙层颜色","nameEn":"Background color of the mask","desc":"浮层的背景蒙层颜色,用于遮罩浮层下面的内容,Modal、Drawer 等组件的蒙层使用的是该 token","descEn":"The background color of the mask, used to cover the content below the mask, Modal, Drawer and other components use this token","type":"string","source":"map"},"colorBgSpotlight":{"name":"引起注意的背景色","nameEn":"","desc":"该色用于引起用户强烈关注注意的背景色,目前只用在 Tooltip 的背景色上。","descEn":"","type":"string","source":"map"},"colorBorder":{"name":"一级边框色","nameEn":"Default Border Color","desc":"默认使用的边框颜色, 用于分割不同的元素,例如:表单的分割线、卡片的分割线等。","descEn":"Default border color, used to separate different elements, such as: form separator, card separator, etc.","type":"string","source":"map"},"colorBorderSecondary":{"name":"二级边框色","nameEn":"Secondary Border Color","desc":"比默认使用的边框色要浅一级,此颜色和 colorSplit 的颜色一致。使用的是实色。","descEn":"Slightly lighter than the default border color, this color is the same as `colorSplit`. Solid color is used.","type":"string","source":"map"},"colorErrorActive":{"name":"错误色的深色激活态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorErrorBg":{"name":"错误色的浅色背景颜色","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorErrorBgHover":{"name":"错误色的浅色背景色悬浮态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorErrorBorder":{"name":"错误色的描边色","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorErrorBorderHover":{"name":"错误色的描边色悬浮态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorErrorHover":{"name":"错误色的深色悬浮态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorErrorText":{"name":"错误色的文本默认态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorErrorTextActive":{"name":"错误色的文本激活态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorErrorTextHover":{"name":"错误色的文本悬浮态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorFill":{"name":"一级填充色","nameEn":"","desc":"最深的填充色,用于拉开与二、三级填充色的区分度,目前只用在 Slider 的 hover 效果。","descEn":"","type":"string","source":"map"},"colorFillQuaternary":{"name":"四级填充色","nameEn":"","desc":"最弱一级的填充色,适用于不易引起注意的色块,例如斑马纹、区分边界的色块等。","descEn":"","type":"string","source":"map"},"colorFillSecondary":{"name":"二级填充色","nameEn":"","desc":"二级填充色可以较为明显地勾勒出元素形体,如 Rate、Skeleton 等。也可以作为三级填充色的 Hover 状态,如 Table 等。","descEn":"","type":"string","source":"map"},"colorFillTertiary":{"name":"三级填充色","nameEn":"","desc":"三级填充色用于勾勒出元素形体的场景,如 Slider、Segmented 等。如无强调需求的情况下,建议使用三级填色作为默认填色。","descEn":"","type":"string","source":"map"},"colorInfoActive":{"name":"信息色的深色激活态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorInfoBg":{"name":"信息色的浅色背景颜色","nameEn":"","desc":"信息色的浅色背景颜色","descEn":"","type":"string","source":"map"},"colorInfoBgHover":{"name":"信息色的浅色背景色悬浮态","nameEn":"","desc":"信息色的浅色背景色悬浮态","descEn":"","type":"string","source":"map"},"colorInfoBorder":{"name":"信息色的描边色","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorInfoBorderHover":{"name":"信息色的描边色悬浮态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorInfoHover":{"name":"信息色的深色悬浮态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorInfoText":{"name":"信息色的文本默认态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorInfoTextActive":{"name":"信息色的文本激活态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorInfoTextHover":{"name":"信息色的文本悬浮态","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorPrimaryActive":{"name":"主色激活态","nameEn":"","desc":"主色梯度下的深色激活态","descEn":"","type":"string","source":"map"},"colorPrimaryBg":{"name":"主色浅色背景色","nameEn":"Light Background Color of Primary Color","desc":"主色浅色背景颜色,一般用于视觉层级较弱的选中状态。","descEn":"Light background color of primary color, usually used for weak visual level selection state.","type":"string","source":"map"},"colorPrimaryBgHover":{"name":"主色浅色背景悬浮态","nameEn":"","desc":"与主色浅色背景颜色相对应的悬浮态颜色。","descEn":"","type":"string","source":"map"},"colorPrimaryBorder":{"name":"主色描边色","nameEn":"","desc":"主色梯度下的描边用色,用在 Slider 组件的描边上","descEn":"","type":"string","source":"map"},"colorPrimaryBorderHover":{"name":"主色描边色悬浮态","nameEn":"","desc":"主色梯度下的描边用色的悬浮态,Slider 、Button 等组件的描边 Hover 时会使用","descEn":"","type":"string","source":"map"},"colorPrimaryHover":{"name":"主色悬浮态","nameEn":"","desc":"主色梯度下的悬浮态,使用频率很高","descEn":"","type":"string","source":"map"},"colorPrimaryText":{"name":"主色文本","nameEn":"","desc":"主色梯度下的文本颜色","descEn":"","type":"string","source":"map"},"colorPrimaryTextActive":{"name":"主色文本","nameEn":"","desc":"主色梯度下的文本激活态","descEn":"","type":"string","source":"map"},"colorPrimaryTextHover":{"name":"主色文本悬浮态","nameEn":"","desc":"主色梯度下的文本悬浮态","descEn":"","type":"string","source":"map"},"colorSuccessActive":{"name":"成功色的深色激活态","nameEn":"","desc":"成功色的深色激活态","descEn":"","type":"string","source":"map"},"colorSuccessBg":{"name":"成功色的浅色背景颜色","nameEn":"Light Background Color of Success Color","desc":"成功色的浅色背景颜色,用于 Tag 和 Alert 的成功态背景色","descEn":"Light background color of success color, used for Tag and Alert success state background color","type":"string","source":"map"},"colorSuccessBgHover":{"name":"成功色的浅色背景色悬浮态","nameEn":"Hover State Color of Light Success Background","desc":"成功色浅色背景颜色,一般用于视觉层级较弱的选中状态,不过 antd 目前没有使用到该 token","descEn":"Light background color of success color, but antd does not use this token currently","type":"string","source":"map"},"colorSuccessBorder":{"name":"成功色的描边色","nameEn":"","desc":"成功色的描边色,用于 Tag 和 Alert 的成功态描边色","descEn":"","type":"string","source":"map"},"colorSuccessBorderHover":{"name":"成功色的描边色悬浮态","nameEn":"","desc":"成功色的描边色悬浮态","descEn":"","type":"string","source":"map"},"colorSuccessHover":{"name":"成功色的深色悬浮态","nameEn":"","desc":"成功色的深色悬浮态","descEn":"","type":"string","source":"map"},"colorSuccessText":{"name":"成功色的文本默认态","nameEn":"","desc":"成功色的文本默认态","descEn":"","type":"string","source":"map"},"colorSuccessTextActive":{"name":"成功色的文本激活态","nameEn":"","desc":"成功色的文本激活态","descEn":"","type":"string","source":"map"},"colorSuccessTextHover":{"name":"成功色的文本悬浮态","nameEn":"","desc":"成功色的文本悬浮态","descEn":"","type":"string","source":"map"},"colorText":{"name":"一级文本色","nameEn":"","desc":"最深的文本色。为了符合W3C标准,默认的文本颜色使用了该色,同时这个颜色也是最深的中性色。","descEn":"","type":"string","source":"map"},"colorTextQuaternary":{"name":"四级文本色","nameEn":"","desc":"第四级文本色是最浅的文本色,例如表单的输入提示文本、禁用色文本等。","descEn":"","type":"string","source":"map"},"colorTextSecondary":{"name":"二级文本色","nameEn":"","desc":"作为第二梯度的文本色,一般用在不那么需要强化文本颜色的场景,例如 Label 文本、Menu 的文本选中态等场景。","descEn":"","type":"string","source":"map"},"colorTextTertiary":{"name":"三级文本色","nameEn":"","desc":"第三级文本色一般用于描述性文本,例如表单的中的补充说明文本、列表的描述性文本等场景。","descEn":"","type":"string","source":"map"},"colorWarningActive":{"name":"警戒色的深色激活态","nameEn":"","desc":"警戒色的深色激活态","descEn":"","type":"string","source":"map"},"colorWarningBg":{"name":"警戒色的浅色背景颜色","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"colorWarningBgHover":{"name":"警戒色的浅色背景色悬浮态","nameEn":"","desc":"警戒色的浅色背景色悬浮态","descEn":"","type":"string","source":"map"},"colorWarningBorder":{"name":"警戒色的描边色","nameEn":"","desc":"警戒色的描边色","descEn":"","type":"string","source":"map"},"colorWarningBorderHover":{"name":"警戒色的描边色悬浮态","nameEn":"","desc":"警戒色的描边色悬浮态","descEn":"","type":"string","source":"map"},"colorWarningHover":{"name":"警戒色的深色悬浮态","nameEn":"","desc":"警戒色的深色悬浮态","descEn":"","type":"string","source":"map"},"colorWarningText":{"name":"警戒色的文本默认态","nameEn":"","desc":"警戒色的文本默认态","descEn":"","type":"string","source":"map"},"colorWarningTextActive":{"name":"警戒色的文本激活态","nameEn":"","desc":"警戒色的文本激活态","descEn":"","type":"string","source":"map"},"colorWarningTextHover":{"name":"警戒色的文本悬浮态","nameEn":"","desc":"警戒色的文本悬浮态","descEn":"","type":"string","source":"map"},"colorWhite":{"name":"纯白色","nameEn":"","desc":"不随主题变化的纯白色","descEn":"Pure white color don't changed by theme","type":"string","source":"map"},"controlHeightLG":{"name":"较高的组件高度","nameEn":"LG component height","desc":"","descEn":"","type":"number","source":"map"},"controlHeightSM":{"name":"较小的组件高度","nameEn":"SM component height","desc":"","descEn":"","type":"number","source":"map"},"controlHeightXS":{"name":"更小的组件高度","nameEn":"XS component height","desc":"","descEn":"","type":"number","source":"map"},"fontSizeHeading1":{"name":"一级标题字号","nameEn":"","desc":"H1 标签所使用的字号","descEn":"","type":"number","source":"map"},"fontSizeHeading2":{"name":"二级标题字号","nameEn":"","desc":"h2 标签所使用的字号","descEn":"","type":"number","source":"map"},"fontSizeHeading3":{"name":"三级标题字号","nameEn":"","desc":"h3 标签使用的字号","descEn":"","type":"number","source":"map"},"fontSizeHeading4":{"name":"四级标题字号","nameEn":"","desc":"h4 标签使用的字号","descEn":"","type":"number","source":"map"},"fontSizeHeading5":{"name":"五级标题字号","nameEn":"","desc":"h5 标签使用的字号","descEn":"","type":"number","source":"map"},"fontSizeLG":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"fontSizeSM":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"fontSizeXL":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"lineHeight":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"lineHeightHeading1":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"lineHeightHeading2":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"lineHeightHeading3":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"lineHeightHeading4":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"lineHeightHeading5":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"lineHeightLG":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"lineHeightSM":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"lineWidthBold":{"name":"线宽","nameEn":"Line Width","desc":"描边类组件的默认线宽,如 Button、Input、Select 等输入类控件。","descEn":"The default line width of the outline class components, such as Button, Input, Select, etc.","type":"number","source":"map"},"motionDurationFast":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"motionDurationMid":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"motionDurationSlow":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"map"},"size":{"name":"默认","nameEn":"","desc":"默认尺寸","descEn":"","type":"number","source":"map"},"sizeLG":{"name":"LG","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"sizeMD":{"name":"MD","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"sizeMS":{"name":"","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"sizeSM":{"name":"SM","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"sizeXL":{"name":"XL","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"sizeXS":{"name":"XS","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"sizeXXL":{"name":"XXL","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"sizeXXS":{"name":"XXS","nameEn":"","desc":"","descEn":"","type":"number","source":"map"},"borderRadius":{"name":"基础圆角","nameEn":"Base Border Radius","desc":"基础组件的圆角大小,例如按钮、输入框、卡片等","descEn":"Border radius of base components","type":"number","source":"seed"},"colorBgBase":{"name":"基础背景色","nameEn":"Seed Background Color","desc":"用于派生背景色梯度的基础变量,v5 中我们添加了一层背景色的派生算法可以产出梯度明确的背景色的梯度变量。但 **请不要在代码中直接使用该 Seed Token** !","descEn":"Used to derive the base variable of the background color gradient. In v5, we added a layer of background color derivation algorithm to produce map token of background color. But PLEASE DO NOT USE this Seed Token directly in the code!","type":"string","source":"seed"},"colorError":{"name":"错误色","nameEn":"Error Color","desc":"用于表示操作失败的 Token 序列,如失败按钮、错误状态提示(Result)组件等。","descEn":"Used to represent the visual elements of the operation failure, such as the error Button, error Result component, etc.","type":"string","source":"seed"},"colorInfo":{"name":"信息色","nameEn":"Info Color","desc":"用于表示操作信息的 Token 序列,如 Alert 、Tag、 Progress 等组件都有用到该组梯度变量。","descEn":"Used to represent the operation information of the Token sequence, such as Alert, Tag, Progress, and other components use these map tokens.","type":"string","source":"seed"},"colorPrimary":{"name":"品牌主色","nameEn":"Brand Color","desc":"品牌色是体现产品特性和传播理念最直观的视觉元素之一。在你完成品牌主色的选取之后,我们会自动帮你生成一套完整的色板,并赋予它们有效的设计语义","descEn":"Brand color is one of the most direct visual elements to reflect the characteristics and communication of the product. After you have selected the brand color, we will automatically generate a complete color palette and assign it effective design semantics.","type":"string","source":"seed"},"colorSuccess":{"name":"成功色","nameEn":"Success Color","desc":"用于表示操作成功的 Token 序列,如 Result、Progress 等组件会使用该组梯度变量。","descEn":"Used to represent the token sequence of operation success, such as Result, Progress and other components will use these map tokens.","type":"string","source":"seed"},"colorTextBase":{"name":"基础文本色","nameEn":"Seed Text Color","desc":"用于派生文本色梯度的基础变量,v5 中我们添加了一层文本色的派生算法可以产出梯度明确的文本色的梯度变量。但**请不要在代码中直接使用该 Seed Token**!","descEn":"Used to derive the base variable of the text color gradient. In v5, we added a layer of text color derivation algorithm to produce gradient variables of text color gradient. But please do not use this Seed Token directly in the code!","type":"string","source":"seed"},"colorWarning":{"name":"警戒色","nameEn":"Warning Color","desc":"用于表示操作警告的 Token 序列,如 Notification、 Alert等警告类组件或 Input 输入类等组件会使用该组梯度变量。","descEn":"Used to represent the warning map token, such as Notification, Alert, etc. Alert or Control component(like Input) will use these map tokens.","type":"string","source":"seed"},"controlHeight":{"name":"基础高度","nameEn":"Base Control Height","desc":"Ant Design 中按钮和输入框等基础控件的高度","descEn":"The height of the basic controls such as buttons and input boxes in Ant Design","type":"number","source":"seed"},"fontFamily":{"name":"字体","nameEn":"FontFamily","desc":"Ant Design 的字体家族中优先使用系统默认的界面字体,同时提供了一套利于屏显的备用字体库,来维护在不同平台以及浏览器的显示下,字体始终保持良好的易读性和可读性,体现了友好、稳定和专业的特性。","descEn":"","type":"string","source":"seed"},"fontSize":{"name":"默认字号","nameEn":"Default Font Size","desc":"设计系统中使用最广泛的字体大小,文本梯度也将基于该字号进行派生。","descEn":"","type":"number","source":"seed"},"lineType":{"name":"线条样式","nameEn":"Line Style","desc":"用于控制组件边框、分割线等的样式,默认是实线","descEn":"Border style of base components","type":"string","source":"seed"},"lineWidth":{"name":"基础线宽","nameEn":"Base Line Width","desc":"用于控制组件边框、分割线等的宽度","descEn":"Border width of base components","type":"number","source":"seed"},"motionBase":{"name":"动画基础时长","nameEn":"","desc":"","descEn":"","type":"number","source":"seed"},"motionEaseInBack":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"seed"},"motionEaseInOut":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"seed"},"motionEaseInOutCirc":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"seed"},"motionEaseInQuint":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"seed"},"motionEaseOut":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"seed"},"motionEaseOutBack":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"seed"},"motionEaseOutCirc":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"seed"},"motionEaseOutQuint":{"name":"","nameEn":"","desc":"","descEn":"","type":"string","source":"seed"},"motionUnit":{"name":"动画时长变化单位","nameEn":"Animation Duration Unit","desc":"用于控制动画时长的变化单位","descEn":"The unit of animation duration change","type":"number","source":"seed"},"opacityImage":{"name":"图片不透明度","nameEn":"Define default Image opacity. Useful when in dark-like theme","desc":"","descEn":"","type":"number","source":"seed"},"sizePopupArrow":{"name":"组件箭头尺寸","nameEn":"","desc":"","descEn":"","type":"number","source":"seed"},"sizeStep":{"name":"尺寸步长","nameEn":"Size Base Step","desc":"用于控制组件尺寸的基础步长,尺寸步长结合尺寸变化单位,就可以派生各种尺寸梯度。通过调整步长即可得到不同的布局模式,例如 V5 紧凑模式下的尺寸步长为 2","descEn":"The base step of size change, the size step combined with the size change unit, can derive various size steps. By adjusting the step, you can get different layout modes, such as the size step of the compact mode of V5 is 2","type":"number","source":"seed"},"sizeUnit":{"name":"尺寸变化单位","nameEn":"Size Change Unit","desc":"用于控制组件尺寸的变化单位,在 Ant Design 中我们的基础单位为 4 ,便于更加细致地控制尺寸梯度","descEn":"The unit of size change, in Ant Design, our base unit is 4, which is more fine-grained control of the size step","type":"number","source":"seed"},"wireframe":{"name":"线框风格","nameEn":"Wireframe Style","desc":"用于将组件的视觉效果变为线框化,如果需要使用 V4 的效果,需要开启配置项","descEn":"","type":"boolean","source":"seed"},"zIndexBase":{"name":"基础 zIndex","nameEn":"Base zIndex","desc":"所有组件的基础 Z 轴值,用于一些悬浮类的组件的可以基于该值 Z 轴控制层级,例如 BackTop、 Affix 等","descEn":"The base Z axis value of all components, which can be used to control the level of some floating components based on the Z axis value, such as BackTop, Affix, etc.","type":"number","source":"seed"},"zIndexPopupBase":{"name":"浮层基础 zIndex","nameEn":"popup base zIndex","desc":"浮层类组件的基础 Z 轴值,用于一些悬浮类的组件的可以基于该值 Z 轴控制层级,例如 FloatButton、 Affix、Modal 等","descEn":"Base zIndex of component like FloatButton, Affix which can be cover by large popup","type":"number","source":"seed"}} diff --git a/components/version/token.json b/components/version/token.json new file mode 100644 index 000000000..2e2ec3896 --- /dev/null +++ b/components/version/token.json @@ -0,0 +1 @@ +{"Affix":{"global":["zIndexBase"],"component":{}},"Alert":{"global":["fontSizeHeading3","motionDurationSlow","marginXS","marginSM","fontSize","fontSizeLG","lineHeight","borderRadiusLG","motionEaseInOutCirc","colorText","paddingContentVerticalSM","paddingMD","paddingContentHorizontalLG","fontFamily","colorSuccess","colorSuccessBorder","colorSuccessBg","colorWarning","colorWarningBorder","colorWarningBg","colorError","colorErrorBorder","colorErrorBg","colorInfo","colorInfoBorder","colorInfoBg","lineWidth","lineType","motionDurationMid","fontSizeIcon","colorIcon","colorIconHover"],"component":{}},"Anchor":{"global":["fontSize","fontSizeLG","padding","paddingXXS","motionDurationSlow","lineWidthBold","colorPrimary","lineType","colorSplit","colorText","lineHeight","fontFamily"],"component":{}},"App":{"global":["colorText","fontSize","lineHeight","fontFamily"],"component":{}},"Avatar":{"global":["controlHeight","controlHeightLG","controlHeightSM","fontSize","fontSizeLG","fontSizeXL","fontSizeHeading3","marginXS","marginXXS","colorBorderBg","colorTextLightSolid","colorTextPlaceholder","borderRadius","borderRadiusLG","borderRadiusSM","lineWidth","lineType","colorText","lineHeight","fontFamily"],"component":{"containerSize":32,"containerSizeLG":40,"containerSizeSM":24,"textFontSize":18,"textFontSizeLG":24,"textFontSizeSM":14,"groupSpace":4,"groupOverlapping":-8,"groupBorderColor":"#ffffff"}},"Badge":{"global":["fontSize","lineHeight","fontSizeSM","lineWidth","marginXS","colorBorderBg","colorBgContainer","colorError","colorErrorHover","motionDurationSlow","blue-1","blue-3","blue-6","blue-7","purple-1","purple-3","purple-6","purple-7","cyan-1","cyan-3","cyan-6","cyan-7","green-1","green-3","green-6","green-7","magenta-1","magenta-3","magenta-6","magenta-7","pink-1","pink-3","pink-6","pink-7","red-1","red-3","red-6","red-7","orange-1","orange-3","orange-6","orange-7","yellow-1","yellow-3","yellow-6","yellow-7","volcano-1","volcano-3","volcano-6","volcano-7","geekblue-1","geekblue-3","geekblue-6","geekblue-7","lime-1","lime-3","lime-6","lime-7","gold-1","gold-3","gold-6","gold-7","colorText","fontFamily","motionDurationMid","paddingXS","colorSuccess","colorPrimary","colorTextPlaceholder","colorWarning","motionEaseOutBack","borderRadiusSM","colorTextLightSolid"],"component":{}},"Breadcrumb":{"global":["colorTextDescription","fontSize","colorText","marginXS","lineHeight","fontFamily","motionDurationMid","paddingXXS","borderRadiusSM","marginXXS","colorBgTextHover","lineWidthBold","colorPrimaryBorder","fontSizeIcon"],"component":{}},"Button":{"global":["controlTmpOutline","paddingContentHorizontal","lineWidth","lineType","motionDurationMid","motionEaseInOut","lineHeight","colorText","marginXS","lineWidthBold","colorPrimaryBorder","colorPrimaryHover","controlHeightSM","paddingXS","borderRadiusSM","fontSize","opacityLoading","motionDurationSlow","controlHeight","borderRadius","controlHeightLG","fontSizeLG","borderRadiusLG","colorBorder","colorTextDisabled","colorBgContainerDisabled","colorBgContainer","controlOutlineWidth","colorPrimaryActive","colorError","colorErrorHover","colorErrorBorderHover","colorErrorActive","colorTextLightSolid","colorPrimary","controlOutline","colorErrorOutline","colorLink","colorLinkHover","colorLinkActive","colorBgTextHover","colorBgTextActive","colorErrorBg"],"component":{}},"Calendar":{"global":["paddingXXS","controlHeight","fontSize","lineHeight","lineWidth","controlHeightLG","fontSizeLG","lineHeightLG","controlHeightSM","paddingSM","paddingXS","controlPaddingHorizontal","colorPrimaryHover","colorPrimary","colorBgContainer","controlItemBgActive","fontSizeSM","lineHeightSM","marginXS","lineType","borderRadiusLG","colorTextHeading","colorSplit","colorIcon","motionDurationMid","colorIconHover","fontWeightStrong","colorTextDisabled","colorText","motionDurationSlow","colorLink","colorLinkActive","colorLinkHover","borderRadiusSM","colorTextLightSolid","borderRadius","controlItemBgHover","marginXXS","colorBgContainerDisabled","fontFamily","lineWidthBold","screenXS"],"component":{"yearControlWidth":80,"monthControlWidth":70,"miniContentHeight":256}},"Card":{"global":["boxShadowCard","fontSizeLG","lineHeightLG","padding","fontSize","lineHeight","paddingXS","paddingLG","lineWidth","paddingSM","colorBorderSecondary","boxShadow","colorText","fontFamily","colorBgContainer","borderRadiusLG","colorTextHeading","fontWeightStrong","lineType","motionDurationMid","colorTextDescription","colorPrimary","marginXXS","marginXS","colorFillAlter"],"component":{}},"Carousel":{"global":["controlHeightLG","controlHeightSM","marginXXS","colorText","fontSize","lineHeight","fontFamily","motionDurationSlow","colorBgContainer"],"component":{"dotWidth":16,"dotHeight":3,"dotWidthActive":24}},"Cascader":{"global":["controlHeight","fontSize","lineHeight","controlInteractiveSize","colorText","fontFamily","marginXS","lineWidthBold","colorPrimaryBorder","colorBgContainer","lineWidth","lineType","colorBorder","borderRadiusSM","motionDurationSlow","colorWhite","motionDurationFast","motionEaseInBack","paddingXS","fontSizeLG","colorPrimary","colorPrimaryHover","motionDurationMid","motionEaseOutBack","colorBgContainerDisabled","colorTextDisabled","paddingXXS","colorSplit","paddingSM","controlItemBgHover","fontWeightStrong","controlItemBgActive","colorTextDescription","fontSizeIcon","colorHighlight"],"component":{"controlWidth":184,"controlItemWidth":111,"dropdownHeight":180}},"Checkbox":{"global":["controlInteractiveSize","colorText","fontSize","lineHeight","fontFamily","marginXS","lineWidthBold","colorPrimaryBorder","colorBgContainer","lineWidth","lineType","colorBorder","borderRadiusSM","motionDurationSlow","colorWhite","motionDurationFast","motionEaseInBack","paddingXS","fontSizeLG","colorPrimary","colorPrimaryHover","motionDurationMid","motionEaseOutBack","colorBgContainerDisabled","colorTextDisabled"],"component":{}},"Collapse":{"global":["colorBgContainer","colorFillAlter","paddingSM","padding","borderRadiusLG","lineWidth","lineType","colorBorder","colorText","colorTextHeading","colorTextDisabled","fontSize","lineHeight","marginSM","motionDurationSlow","fontSizeIcon","fontFamily","paddingXXS","motionDurationMid","motionEaseInOut"],"component":{}},"Comment":{"global":["paddingMD","fontSize","fontSizeSM","colorTextTertiary","colorTextPlaceholder","colorTextSecondary","marginSM","marginXXS","paddingXS","motionDurationSlow"],"component":{}},"DatePicker":{"global":["zIndexPopupBase","paddingXXS","controlHeight","fontSize","lineHeight","lineWidth","controlHeightLG","fontSizeLG","lineHeightLG","controlHeightSM","paddingSM","paddingXS","controlPaddingHorizontal","colorPrimaryHover","colorPrimary","boxShadowPopoverArrow","colorBgContainer","lineType","colorBorder","borderRadius","motionDurationMid","colorBgContainerDisabled","colorTextDisabled","colorTextPlaceholder","marginXS","colorTextDescription","lineWidthBold","motionDurationSlow","controlItemBgActive","colorPrimaryBorder","sizePopupArrow","borderRadiusXS","borderRadiusOuter","colorBgElevated","borderRadiusLG","boxShadowSecondary","borderRadiusSM","colorSplit","controlItemBgHover","colorText","fontFamily","controlOutlineWidth","controlOutline","controlPaddingHorizontalSM","colorTextHeading","colorIcon","colorIconHover","fontWeightStrong","colorLink","colorLinkActive","colorLinkHover","colorTextLightSolid","marginXXS","motionEaseOutQuint","motionEaseInQuint","motionEaseOutCirc","motionEaseInOutCirc","colorError","colorErrorOutline","colorWarning","colorWarningOutline"],"component":{"presetsWidth":120,"presetsMaxWidth":200,"zIndexPopup":1050}},"Descriptions":{"global":["colorFillAlter","fontSizeSM","lineHeightSM","colorText","paddingXS","padding","paddingLG","paddingSM","marginXS","marginXXS","fontSize","lineHeight","fontFamily","lineWidth","lineType","colorSplit","fontWeightStrong","fontSizeLG","lineHeightLG","borderRadiusLG"],"component":{}},"Divider":{"global":["marginXS","margin","marginLG","colorSplit","lineWidth","colorText","fontSize","lineHeight","fontFamily","colorTextHeading","fontSizeLG"],"component":{"sizePaddingEdgeHorizontal":0}},"Drawer":{"global":["zIndexPopupBase","paddingXS","padding","colorBgMask","colorBgElevated","motionDurationSlow","motionDurationMid","paddingLG","fontSizeLG","lineHeightLG","lineWidth","lineType","colorSplit","marginSM","colorIcon","colorIconHover","colorText","fontWeightStrong","boxShadowDrawerLeft","boxShadowDrawerRight","boxShadowDrawerUp","boxShadowDrawerDown"],"component":{"zIndexPopup":1000}},"Dropdown":{"global":["zIndexPopupBase","marginXXS","sizePopupArrow","controlHeight","fontSize","lineHeight","paddingXXS","borderRadiusOuter","borderRadiusLG","motionDurationMid","colorTextDisabled","fontSizeIcon","controlPaddingHorizontal","colorBgElevated","boxShadowPopoverArrow","colorText","fontFamily","borderRadiusXS","boxShadowSecondary","lineWidthBold","colorPrimaryBorder","colorTextDescription","borderRadiusSM","marginXS","fontSizeSM","controlItemBgHover","colorPrimary","controlItemBgActive","controlItemBgActiveHover","colorSplit","paddingXS","motionEaseOutQuint","motionEaseInQuint","motionEaseOutCirc","motionEaseInOutCirc","opacityLoading","colorError","colorTextLightSolid"],"component":{"zIndexPopup":1050}},"Empty":{"global":["controlHeightLG","margin","marginXS","marginXL","fontSize","lineHeight","opacityImage","colorTextDisabled"],"component":{}},"Flex":{"global":["paddingXS","padding","paddingLG"],"component":{}},"FloatButton":{"global":["colorTextLightSolid","colorBgElevated","controlHeightLG","marginXXL","marginLG","fontSize","fontSizeIcon","controlItemBgHover","paddingXXS","borderRadiusLG","margin","borderRadiusSM","colorText","lineHeight","fontFamily","lineWidth","lineType","colorSplit","boxShadowSecondary","motionDurationMid","colorFillContent","fontSizeLG","fontSizeSM","colorPrimary","colorPrimaryHover","motionDurationSlow","motionEaseInOutCirc"],"component":{}},"Form":{"global":["colorText","fontSize","lineHeight","fontFamily","marginLG","colorTextDescription","fontSizeLG","lineWidth","lineType","colorBorder","controlOutlineWidth","controlOutline","paddingSM","controlHeightSM","controlHeightLG","colorError","colorWarning","controlHeight","colorTextHeading","marginXXS","marginXS","motionDurationMid","motionEaseOut","motionEaseOutBack","colorSuccess","colorPrimary","motionDurationSlow","motionEaseInOut","margin","paddingXS","screenXSMax","screenSMMax","screenMDMax","screenLGMax"],"component":{}},"Grid":{"global":[],"component":{}},"Image":{"global":["zIndexPopupBase","colorTextLightSolid","fontSizeIcon","controlHeightLG","colorBgContainerDisabled","motionDurationSlow","paddingXXS","marginXXS","motionEaseOut","paddingSM","colorText","fontSize","lineHeight","fontFamily","marginSM","colorBgMask","motionDurationMid","motionEaseOutCirc","motionEaseInOutCirc"],"component":{"zIndexPopup":1080,"previewOperationColor":"rgb(255, 255, 255)","previewOperationColorDisabled":"rgba(255, 255, 255, 0.25)","previewOperationSize":18}},"InputNumber":{"global":["controlHeightSM","lineWidth","fontSize","paddingXXS","controlHeight","lineHeight","controlHeightLG","fontSizeLG","lineHeightLG","paddingSM","paddingXS","controlPaddingHorizontal","colorPrimaryHover","lineType","colorBorder","borderRadius","colorError","colorTextDescription","motionDurationMid","colorPrimary","colorBgContainer","colorTextDisabled","borderRadiusSM","borderRadiusLG","colorText","fontFamily","colorTextPlaceholder","controlOutlineWidth","controlOutline","colorBgContainerDisabled","motionDurationSlow","controlPaddingHorizontalSM","colorWarning","colorErrorOutline","colorWarningOutline","colorErrorBorderHover","colorWarningBorderHover","colorFillAlter","fontSizeSM"],"component":{"controlWidth":90,"handleWidth":22,"handleFontSize":7,"handleVisible":"auto"}},"Input":{"global":["paddingXXS","controlHeight","fontSize","lineHeight","lineWidth","controlHeightLG","fontSizeLG","lineHeightLG","controlHeightSM","paddingSM","paddingXS","controlPaddingHorizontal","colorPrimaryHover","colorText","fontFamily","colorBgContainer","lineType","colorBorder","borderRadius","motionDurationMid","colorTextPlaceholder","controlOutlineWidth","controlOutline","colorTextDisabled","colorBgContainerDisabled","motionDurationSlow","borderRadiusLG","controlPaddingHorizontalSM","borderRadiusSM","colorError","colorWarning","colorErrorOutline","colorWarningOutline","colorErrorBorderHover","colorWarningBorderHover","paddingLG","colorTextDescription","colorIcon","colorIconHover","colorTextQuaternary","fontSizeIcon","colorTextTertiary","colorSuccess","colorFillAlter","colorPrimary","fontSizeSM","colorPrimaryActive"],"component":{}},"Layout":{"global":["colorBgLayout","colorText","controlHeightSM","controlHeight","controlHeightLG","marginXXS","colorTextLightSolid","motionDurationMid","motionDurationSlow","fontSize","borderRadius","fontSizeXL","colorBgContainer"],"component":{"colorBgHeader":"#001529","colorBgBody":"#f5f5f5","colorBgTrigger":"#002140"}},"List":{"global":["controlHeightLG","paddingContentVertical","paddingContentHorizontalLG","paddingContentVerticalSM","paddingContentHorizontal","paddingContentVerticalLG","controlHeight","paddingSM","marginLG","padding","colorPrimary","paddingXS","margin","colorText","colorTextDescription","motionDurationSlow","lineWidth","fontSize","lineHeight","fontFamily","marginXXS","marginXXL","colorSplit","fontSizeSM","colorTextDisabled","fontSizeLG","lineHeightLG","lineType","paddingLG","borderRadiusLG","colorBorder","screenSM","screenMD","marginSM"],"component":{"contentWidth":220}},"Mentions":{"global":["zIndexPopupBase","paddingXXS","controlHeight","fontSize","lineHeight","lineWidth","controlHeightLG","fontSizeLG","lineHeightLG","controlHeightSM","paddingSM","paddingXS","controlPaddingHorizontal","colorPrimaryHover","colorTextDisabled","controlItemBgHover","colorText","motionDurationSlow","colorBgElevated","borderRadiusLG","boxShadowSecondary","fontFamily","colorBgContainer","lineType","colorBorder","borderRadius","motionDurationMid","colorTextPlaceholder","controlOutlineWidth","controlOutline","colorBgContainerDisabled","controlPaddingHorizontalSM","borderRadiusSM","colorError","colorWarning","colorErrorOutline","colorWarningOutline","colorErrorBorderHover","colorWarningBorderHover","fontWeightStrong"],"component":{"dropdownHeight":250,"controlItemWidth":100,"zIndexPopup":1050}},"Menu":{"global":["colorPrimary","colorError","colorTextDisabled","colorErrorBg","colorText","colorTextDescription","colorBgContainer","colorFillAlter","colorFillContent","lineWidth","lineWidthBold","controlItemBgActive","colorBgTextHover","zIndexPopupBase","borderRadiusLG","borderRadiusSM","marginXXS","colorBgElevated","colorErrorHover","colorTextLightSolid","controlHeightLG","fontSize","margin","motionDurationSlow","motionDurationMid","motionEaseInOut","lineHeight","paddingXS","padding","colorSplit","lineType","fontFamily","motionEaseOut","controlHeightSM","borderRadius","paddingXL","fontSizeSM","fontSizeLG","boxShadowSecondary","marginXS","colorPrimaryBorder","motionEaseOutQuint","motionEaseInQuint","motionEaseOutCirc","motionEaseInOutCirc"],"component":{"dropdownWidth":160,"zIndexPopup":1050,"radiusItem":8,"radiusSubMenuItem":4,"colorItemText":"rgba(0, 0, 0, 0.88)","colorItemTextHover":"rgba(0, 0, 0, 0.88)","colorItemTextHoverHorizontal":"#1677ff","colorGroupTitle":"rgba(0, 0, 0, 0.45)","colorItemTextSelected":"#1677ff","colorItemTextSelectedHorizontal":"#1677ff","colorItemBg":"#ffffff","colorItemBgHover":"rgba(0, 0, 0, 0.06)","colorItemBgActive":"rgba(0, 0, 0, 0.06)","colorSubItemBg":"rgba(0, 0, 0, 0.02)","colorItemBgSelected":"#e6f4ff","colorItemBgSelectedHorizontal":"transparent","colorActiveBarWidth":0,"colorActiveBarHeight":2,"colorActiveBarBorderSize":1,"colorItemTextDisabled":"rgba(0, 0, 0, 0.25)","colorDangerItemText":"#ff4d4f","colorDangerItemTextHover":"#ff4d4f","colorDangerItemTextSelected":"#ff4d4f","colorDangerItemBgActive":"#fff2f0","colorDangerItemBgSelected":"#fff2f0","itemMarginInline":4}},"Message":{"global":["zIndexPopupBase","controlHeightLG","fontSize","lineHeight","paddingSM","boxShadowSecondary","colorBgElevated","colorSuccess","colorError","colorWarning","colorInfo","fontSizeLG","motionEaseInOutCirc","motionDurationSlow","marginXS","paddingXS","borderRadiusLG","colorText","fontFamily"],"component":{"height":150,"zIndexPopup":1010}},"Modal":{"global":["padding","fontSizeHeading5","lineHeightHeading5","paddingLG","colorBgElevated","lineWidth","lineType","colorSplit","colorTextHeading","colorTextDescription","paddingXS","fontSizeLG","colorIconHover","fontSize","lineHeight","controlHeightLG","zIndexPopupBase","screenSMMax","marginXS","colorText","fontFamily","margin","fontWeightStrong","borderRadiusLG","boxShadowSecondary","paddingMD","paddingContentHorizontalLG","borderRadiusSM","motionDurationMid","wireframe","lineWidthBold","colorPrimaryBorder","marginSM","colorError","colorWarning","colorInfo","colorSuccess","motionDurationSlow","colorBgMask","marginLG","motionEaseOutCirc","motionEaseInOutCirc"],"component":{}},"Notification":{"global":["zIndexPopupBase","paddingMD","paddingLG","colorBgElevated","paddingContentHorizontalLG","margin","marginLG","fontSizeLG","lineHeightLG","controlHeightLG","boxShadowSecondary","borderRadiusLG","colorSuccess","colorInfo","colorWarning","colorError","colorTextHeading","motionDurationMid","motionEaseInOut","fontSize","lineHeight","colorText","fontFamily","marginXS","marginSM","colorIcon","borderRadiusSM","colorIconHover","wireframe"],"component":{"zIndexPopup":1050,"width":384}},"PageHeader":{"global":["paddingLG","paddingMD","paddingSM","colorTextBase","fontSizeHeading4","fontSize","fontSizeLG","colorText","lineHeight","fontFamily","colorBgContainer","marginMD","colorLink","motionDurationSlow","colorLinkHover","colorLinkActive","marginSM","marginXS","colorTextHeading","controlHeight","colorTextDescription","paddingXS"],"component":{}},"Pagination":{"global":["controlHeight","fontFamily","colorBgContainer","fontWeightStrong","controlHeightSM","controlItemBgActiveDisabled","colorTextDisabled","marginXXS","controlHeightLG","marginSM","paddingXXS","fontSize","lineHeight","lineWidth","fontSizeLG","lineHeightLG","paddingSM","paddingXS","controlPaddingHorizontal","colorPrimaryHover","colorText","marginXS","lineType","borderRadius","motionDurationMid","colorBgTextHover","colorBgTextActive","lineWidthBold","colorPrimaryBorder","colorPrimary","fontSizeSM","margin","colorBorder","colorTextPlaceholder","controlOutlineWidth","controlOutline","colorBgContainerDisabled","motionDurationSlow","borderRadiusLG","controlPaddingHorizontalSM","borderRadiusSM","screenLG","screenSM","wireframe"],"component":{}},"Popconfirm":{"global":["zIndexPopupBase","colorText","colorWarning","marginXS","fontSize","fontWeightStrong","lineHeight"],"component":{"zIndexPopup":1060}},"Popover":{"global":["zIndexPopupBase","colorBgElevated","colorText","wireframe","fontWeightStrong","boxShadowSecondary","colorTextHeading","borderRadiusLG","marginXS","fontSize","lineHeight","fontFamily","sizePopupArrow","marginXXS","borderRadiusXS","borderRadiusOuter","boxShadowPopoverArrow","blue-6","purple-6","cyan-6","green-6","magenta-6","pink-6","red-6","orange-6","yellow-6","volcano-6","geekblue-6","lime-6","gold-6","lineWidth","lineType","colorSplit","paddingSM","controlHeight","padding","motionDurationMid","motionEaseOutCirc","motionEaseInOutCirc"],"component":{"zIndexPopup":1030,"width":177}},"Progress":{"global":["marginXXS","colorText","colorInfo","colorFillSecondary","fontSize","lineHeight","fontFamily","marginXS","paddingXS","motionDurationSlow","motionEaseInOutCirc","colorSuccess","colorBgContainer","motionEaseOutQuint","colorError","fontSizeSM"],"component":{}},"QRCode":{"global":["colorText","fontSize","lineHeight","fontFamily","paddingSM","colorWhite","borderRadiusLG","lineWidth","lineType","colorSplit","marginXS","controlHeight"],"component":{}},"Radio":{"global":["padding","lineWidth","controlItemBgActiveDisabled","colorTextDisabled","colorBgContainer","fontSizeLG","controlOutline","colorPrimaryHover","colorPrimaryActive","colorText","colorPrimary","marginXS","controlOutlineWidth","colorTextLightSolid","wireframe","fontSize","lineHeight","fontFamily","motionDurationSlow","motionDurationMid","motionEaseInOut","motionEaseInOutCirc","colorBorder","colorBgContainerDisabled","paddingXS","lineType","colorWhite","lineWidthBold","colorPrimaryBorder","controlHeight","controlHeightLG","controlHeightSM","borderRadius","borderRadiusSM","borderRadiusLG"],"component":{}},"Rate":{"global":["colorFillContent","yellow-6","controlHeightLG","colorText","fontSize","lineHeight","fontFamily","marginXS","motionDurationMid","lineWidth"],"component":{}},"Result":{"global":["paddingLG","fontSizeHeading3","fontSize","colorInfo","colorError","colorSuccess","colorWarning","lineHeightHeading3","padding","paddingXL","paddingXS","marginXS","lineHeight","colorTextHeading","colorTextDescription","colorFillAlter"],"component":{"imageWidth":250,"imageHeight":295}},"Segmented":{"global":["lineWidthBold","lineWidth","colorTextLabel","colorText","colorFillSecondary","colorBgLayout","colorBgElevated","controlPaddingHorizontal","controlPaddingHorizontalSM","fontSize","lineHeight","fontFamily","borderRadius","motionDurationMid","motionEaseInOut","borderRadiusSM","boxShadow","controlHeight","marginSM","paddingXXS","borderRadiusLG","controlHeightLG","fontSizeLG","controlHeightSM","borderRadiusXS","colorTextDisabled","motionDurationSlow"],"component":{}},"Select":{"global":["zIndexPopupBase","paddingSM","colorText","fontSize","lineHeight","fontFamily","colorBgContainer","lineWidth","lineType","colorBorder","motionDurationMid","motionEaseInOut","colorTextDisabled","colorBgContainerDisabled","colorTextPlaceholder","fontSizeIcon","colorTextQuaternary","motionDurationSlow","colorTextTertiary","paddingXXS","controlPaddingHorizontalSM","borderRadius","controlHeight","controlHeightSM","borderRadiusSM","controlHeightLG","fontSizeLG","borderRadiusLG","controlHeightXS","borderRadiusXS","controlPaddingHorizontal","colorFillSecondary","colorSplit","paddingXS","colorIcon","colorIconHover","colorBgElevated","boxShadowSecondary","colorTextDescription","fontSizeSM","controlItemBgHover","fontWeightStrong","controlItemBgActive","colorPrimary","motionEaseOutQuint","motionEaseInQuint","motionEaseOutCirc","motionEaseInOutCirc","colorPrimaryHover","controlOutline","controlOutlineWidth","colorErrorHover","colorErrorOutline","colorWarningHover","colorWarningOutline"],"component":{"zIndexPopup":1050}},"Skeleton":{"global":["colorFillContent","colorFill","controlHeight","borderRadiusSM","marginLG","marginXXS","controlHeightLG","controlHeightSM","padding","marginSM","controlHeightXS"],"component":{"color":"rgba(0, 0, 0, 0.06)","colorGradientEnd":"rgba(0, 0, 0, 0.15)"}},"Slider":{"global":["controlHeightLG","controlHeightSM","lineWidth","controlHeight","colorFillContentHover","colorText","fontSize","lineHeight","fontFamily","colorFillTertiary","borderRadiusXS","motionDurationMid","colorPrimaryBorder","colorFillSecondary","colorPrimaryBorderHover","colorPrimary","colorBgElevated","colorTextDescription","colorBorderSecondary","motionDurationSlow","colorTextDisabled","colorBgContainer"],"component":{"controlSize":10,"railSize":4,"handleSize":10,"handleSizeHover":12,"dotSize":8,"handleLineWidth":2,"handleLineWidthHover":4}},"Space":{"global":[],"component":{}},"Spin":{"global":["colorTextDescription","controlHeightLG","controlHeight","colorText","fontSize","lineHeight","fontFamily","colorPrimary","motionDurationSlow","motionEaseInOutCirc","colorBgContainer","marginXXS"],"component":{"contentHeight":400}},"Statistic":{"global":["fontSizeHeading3","fontSize","fontFamily","marginXXS","padding","colorTextDescription","colorTextHeading","colorText","lineHeight"],"component":{}},"Steps":{"global":["wireframe","colorTextDisabled","fontSizeHeading3","fontSize","controlHeight","controlHeightLG","colorTextLightSolid","colorText","colorPrimary","colorTextLabel","colorTextDescription","colorTextQuaternary","colorFillContent","controlItemBgActive","colorError","colorBgContainer","colorBorderSecondary","colorSplit","lineHeight","fontFamily","motionDurationSlow","marginXS","lineWidth","lineType","paddingXXS","padding","fontSizeLG","fontWeightStrong","fontSizeSM","paddingSM","margin","marginXXS","paddingLG","marginSM","paddingXS","controlHeightSM","fontSizeIcon","lineWidthBold","marginLG","borderRadiusSM","motionDurationMid","controlItemBgHover","lineHeightSM","colorBorderBg"],"component":{"descriptionWidth":140}},"Switch":{"global":["fontSize","lineHeight","controlHeight","motionDurationMid","colorPrimary","opacityLoading","colorBgContainer","fontSizeIcon","colorText","fontFamily","colorTextQuaternary","colorTextTertiary","lineWidthBold","colorPrimaryBorder","colorPrimaryHover","colorTextLightSolid","fontSizeSM","colorWhite","marginXXS"],"component":{}},"Table":{"global":["controlItemBgActive","controlItemBgActiveHover","colorTextPlaceholder","colorTextHeading","colorSplit","colorBorderSecondary","fontSize","padding","paddingXS","paddingSM","controlHeight","colorFillAlter","colorIcon","colorIconHover","opacityLoading","colorBgContainer","borderRadiusLG","colorFillContent","colorFillSecondary","controlInteractiveSize","fontWeightStrong","lineWidth","lineType","motionDurationMid","paddingContentVerticalLG","colorText","lineHeight","fontFamily","margin","marginXXS","fontSizeIcon","motionDurationSlow","colorPrimary","paddingXXS","fontSizeSM","borderRadius","colorTextDescription","colorTextDisabled","controlItemBgHover","boxShadowSecondary","colorLink","colorLinkHover","colorLinkActive"],"component":{}},"Tabs":{"global":["zIndexPopupBase","controlHeightLG","colorPrimaryHover","colorPrimaryActive","fontSize","lineHeight","lineWidth","padding","marginXXS","colorFillAlter","paddingXXS","paddingXS","fontSizeLG","borderRadius","marginSM","marginXS","margin","colorSplit","lineType","lineWidthBold","motionDurationSlow","controlHeight","boxShadowTabsOverflowLeft","boxShadowTabsOverflowRight","paddingLG","boxShadowTabsOverflowTop","boxShadowTabsOverflowBottom","colorBorder","colorText","fontFamily","colorBgContainer","borderRadiusLG","boxShadowSecondary","paddingSM","colorTextDescription","fontSizeSM","controlItemBgHover","colorTextDisabled","motionEaseInOut","colorPrimary","colorPrimaryBorder","colorTextHeading","motionDurationMid","motionEaseOutQuint","motionEaseInQuint"],"component":{"zIndexPopup":1050}},"Tag":{"global":["fontSize","lineHeight","lineWidth","fontSizeIcon","fontSizeSM","colorFillAlter","colorText","colorFillTertiary","paddingXXS","fontFamily","marginXS","lineType","colorBorder","borderRadiusSM","motionDurationMid","colorTextDescription","colorTextHeading","colorTextLightSolid","colorPrimary","colorFillSecondary","colorPrimaryHover","colorPrimaryActive","blue-1","blue-3","blue-6","blue-7","purple-1","purple-3","purple-6","purple-7","cyan-1","cyan-3","cyan-6","cyan-7","green-1","green-3","green-6","green-7","magenta-1","magenta-3","magenta-6","magenta-7","pink-1","pink-3","pink-6","pink-7","red-1","red-3","red-6","red-7","orange-1","orange-3","orange-6","orange-7","yellow-1","yellow-3","yellow-6","yellow-7","volcano-1","volcano-3","volcano-6","volcano-7","geekblue-1","geekblue-3","geekblue-6","geekblue-7","lime-1","lime-3","lime-6","lime-7","gold-1","gold-3","gold-6","gold-7","colorSuccess","colorSuccessBg","colorSuccessBorder","colorInfo","colorInfoBg","colorInfoBorder","colorError","colorErrorBg","colorErrorBorder","colorWarning","colorWarningBg","colorWarningBorder"],"component":{}},"Timeline":{"global":["padding","paddingXXS","lineWidthBold","wireframe","colorText","fontSize","lineHeight","fontFamily","lineType","colorSplit","fontSizeSM","colorBgContainer","colorPrimary","colorError","colorSuccess","colorTextDisabled","lineWidth","margin","controlHeightLG","marginXXS","marginSM","marginXS"],"component":{}},"Tooltip":{"global":["zIndexPopupBase","colorBgSpotlight","borderRadius","colorTextLightSolid","borderRadiusOuter","controlHeight","boxShadowSecondary","paddingSM","paddingXS","colorText","fontSize","lineHeight","fontFamily","blue-1","blue-3","blue-6","blue-7","purple-1","purple-3","purple-6","purple-7","cyan-1","cyan-3","cyan-6","cyan-7","green-1","green-3","green-6","green-7","magenta-1","magenta-3","magenta-6","magenta-7","pink-1","pink-3","pink-6","pink-7","red-1","red-3","red-6","red-7","orange-1","orange-3","orange-6","orange-7","yellow-1","yellow-3","yellow-6","yellow-7","volcano-1","volcano-3","volcano-6","volcano-7","geekblue-1","geekblue-3","geekblue-6","geekblue-7","lime-1","lime-3","lime-6","lime-7","gold-1","gold-3","gold-6","gold-7","sizePopupArrow","marginXXS","borderRadiusXS","boxShadowPopoverArrow","motionDurationFast","motionEaseOutCirc","motionEaseInOutCirc"],"component":{"zIndexPopup":1070,"colorBgDefault":"rgba(0, 0, 0, 0.85)"}},"Tour":{"global":["borderRadiusLG","fontSize","lineHeight","zIndexPopupBase","padding","paddingXS","borderRadius","borderRadiusXS","colorPrimary","colorText","colorFill","boxShadowTertiary","colorBgContainer","fontWeightStrong","marginXS","colorTextLightSolid","colorWhite","colorBgTextHover","motionDurationSlow","fontFamily","colorIcon","borderRadiusSM","motionDurationMid","colorIconHover","wireframe","sizePopupArrow","marginXXS","borderRadiusOuter","boxShadowPopoverArrow"],"component":{}},"Transfer":{"global":["fontSize","lineHeight","lineWidth","controlHeightLG","controlHeight","marginXS","marginXXS","fontSizeIcon","colorText","fontFamily","colorBgContainerDisabled","colorBorder","colorSplit","controlItemBgActive","controlItemBgActiveHover","colorTextDisabled","paddingSM","lineType","motionDurationSlow","borderRadiusLG","colorBgContainer","colorLinkHover","controlItemBgHover","paddingXS","margin","colorError","colorWarning"],"component":{"listWidth":180,"listHeight":200,"listWidthLG":250}},"TreeSelect":{"global":["colorBgElevated","paddingXS","controlHeightSM","fontSizeLG","colorText","fontSize","lineHeight","fontFamily","borderRadius","motionDurationSlow","lineWidthBold","colorPrimaryBorder","colorPrimary","colorTextDisabled","colorBorder","motionDurationMid","controlItemBgHover","controlItemBgActive","colorTextLightSolid","controlInteractiveSize","marginXS","colorBgContainer","lineWidth","lineType","borderRadiusSM","colorWhite","motionDurationFast","motionEaseInBack","colorPrimaryHover","motionEaseOutBack","colorBgContainerDisabled"],"component":{}},"Tree":{"global":["controlInteractiveSize","colorText","fontSize","lineHeight","fontFamily","marginXS","lineWidthBold","colorPrimaryBorder","colorBgContainer","lineWidth","lineType","colorBorder","borderRadiusSM","motionDurationSlow","colorWhite","motionDurationFast","motionEaseInBack","paddingXS","fontSizeLG","colorPrimary","colorPrimaryHover","motionDurationMid","motionEaseOutBack","colorBgContainerDisabled","colorTextDisabled","controlHeightSM","borderRadius","controlItemBgHover","controlItemBgActive","colorTextLightSolid","motionEaseInOut"],"component":{}},"Typography":{"global":["colorText","lineHeight","colorTextDescription","colorSuccess","colorWarning","colorError","colorErrorActive","colorErrorHover","colorTextDisabled","fontSizeHeading1","lineHeightHeading1","colorTextHeading","fontWeightStrong","fontSizeHeading2","lineHeightHeading2","fontSizeHeading3","lineHeightHeading3","fontSizeHeading4","lineHeightHeading4","fontSizeHeading5","lineHeightHeading5","colorLink","motionDurationSlow","colorLinkHover","colorLinkActive","linkDecoration","linkHoverDecoration","marginXXS","paddingXXS","controlHeight","fontSize","lineWidth","controlHeightLG","fontSizeLG","lineHeightLG","controlHeightSM","paddingSM","paddingXS","controlPaddingHorizontal","colorPrimaryHover","marginXS"],"component":{"sizeMarginHeadingVerticalStart":"1.2em","sizeMarginHeadingVerticalEnd":"0.5em"}},"Upload":{"global":["fontSizeHeading3","fontSize","lineHeight","lineWidth","controlHeightLG","colorTextDisabled","colorText","fontFamily","colorFillAlter","colorBorder","borderRadiusLG","motionDurationSlow","padding","colorPrimaryHover","margin","colorPrimary","marginXXS","colorTextHeading","fontSizeLG","colorTextDescription","paddingXS","lineType","paddingSM","fontSizeHeading2","colorError","colorErrorBg","colorTextLightSolid","marginXS","colorBgMask","marginXL","controlItemBgHover","motionEaseInOutCirc","motionDurationMid","motionEaseInOut"],"component":{}}} diff --git a/components/version/version.ts b/components/version/version.ts new file mode 100644 index 000000000..8dfefd146 --- /dev/null +++ b/components/version/version.ts @@ -0,0 +1 @@ +export default '4.2.6'; \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..d8ce644bc --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,13 @@ +// @ts-check + +import typescript from '@ant-design-vue/eslint-config/typescript' + +/** + * @type {import('eslint').Linter.Config[]} + */ +export default [ + ...typescript, + { + ignores: ['apps/**', 'packages/**', 'packages-*/**'], + }, +] diff --git a/package.json b/package.json index 3597f199f..054522ee5 100644 --- a/package.json +++ b/package.json @@ -1,316 +1,34 @@ { - "name": "ant-design-vue", - "version": "4.2.6", + "name": "@ant-design-vue/ant-design-vue", + "private": true, + "version": "5.0.0-alpha.1", "title": "Ant Design Vue", - "description": "An enterprise-class UI design language and Vue-based implementation", - "keywords": [ - "vue", - "vue3", - "ant", - "design", - "antd", - "vueComponent", - "component", - "components", - "ui", - "framework", - "frontend" - ], - "main": "lib/index.js", - "module": "es/index.js", - "unpkg": "dist/antd.min.js", - "typings": "es/index.d.ts", - "files": [ - "dist", - "lib", - "es", - "scripts", - "vetur", - "typings/global.d.ts", - "locale" + "description": "An enterprise-class UI design language and Vue-based implementation for Ant Design", + "type": "module", + "workspaces": [ + "apps/*", + "packages/*", + "packages-*/*" ], "scripts": { - "collect-token-statistic": "tsx scripts/collect-token-statistic.js", - "token-meta": "node scripts/generate-token-meta.js", - "predev": "npm run version & npm run collect-token-statistic & npm run token-meta && node node_modules/esbuild/install.js", - "precompile": "npm run version & npm run collect-token-statistic & npm run token-meta", - "pretest": "npm run version", - "predist": "npm run version", - "presite": "npm run version & npm run routes & npm run collect-token-statistic & npm run token-meta", - "dev": "npm run routes && vite serve site", - "fast-dev": "npm run routes && vite serve site", - "test": "cross-env NODE_ENV=test jest --config .jest.js", - "compile": "node antd-tools/cli/run.js compile", - "generator-webtypes": "tsc -p antd-tools/generator-types/tsconfig.json && node antd-tools/generator-types/index.js", - "pub": "npm run version & npm run collect-token-statistic & npm run token-meta && node --max_old_space_size=8192 antd-tools/cli/run.js pub", - "pub-with-ci": "npm run version & npm run collect-token-statistic & npm run token-meta && node antd-tools/cli/run.js pub-with-ci", - "prepublishOnly": "node antd-tools/cli/run.js guard", - "pre-publish": "npm run generator-webtypes", - "prettier": "prettier -c --write **/*", - "pretty-quick": "pretty-quick", - "dist": "node --max_old_space_size=8192 antd-tools/cli/run.js dist", - "lint": "npm run tsc && npm run lint:demo && npm run lint:md && npm run lint:script && npm run lint:site", - "lint:components": "eslint --fix --ext .jsx,.js,.ts,.tsx ./components", - "lint:demo": "eslint --fix components/*/demo/*.vue", - "lint:md": "eslint --fix *.md", - "lint:script": "eslint . --ext '.js,.jsx,.ts,.tsx'", - "lint:site": "eslint --fix -c ./.eslintrc.js --ext .jsx,.js,.ts,.tsx,vue ./site", - "lint:style": "stylelint \"{site,components}/**/*.less\" --syntax less", - "codecov": "codecov", - "routes": "node site/scripts/genrateRoutes.js", - "tsc": "tsc --noEmit", - "vue-tsc": "vue-tsc --noEmit", - "site": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build site --base=https://next.antdv.com/", - "pub:site": "npm run site && node site/scripts/pushToOSS.js", - "prepare": "husky install", - "version": "node ./scripts/generate-version", - "sort-api": "node antd-tools/cli/run.js sort-api-table" - }, - "browserslist": [ - "> 0.5%", - "last 2 versions", - "Firefox ESR", - "not dead" - ], - "repository": { - "type": "git", - "url": "https://github.com/vueComponent/ant-design-vue.git" - }, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ant-design-vue" - }, - "bugs": { - "url": "https://github.com/vueComponent/ant-design-vue/issues" - }, - "homepage": "https://www.antdv.com/", - "peerDependencies": { - "vue": ">=3.2.0" - }, - "engines": { - "node": ">=12.22.0" + "build": "turbo build", + "dev": "turbo dev", + "dev:apps": "turbo dev --filter=\"./apps/*\"", + "lint": "turbo lint" }, "devDependencies": { - "@babel/cli": "^7.8.4", - "@babel/core": "^7.10.5", - "@babel/plugin-proposal-class-properties": "^7.8.3", - "@babel/plugin-proposal-export-default-from": "^7.8.3", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.9.6", - "@babel/plugin-proposal-optional-chaining": "^7.10.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-object-assign": "^7.8.3", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.10.5", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typescript": "^7.12.1", - "@babel/polyfill": "^7.8.7", - "@babel/preset-env": "^7.9.6", - "@babel/preset-typescript": "^7.10.4", - "@commitlint/cli": "^12.0.0", - "@commitlint/config-conventional": "^12.0.0", - "@octokit/rest": "^18.0.0", - "@rollup/plugin-babel": "^5.3.0", - "@types/compression": "^1.7.0", - "@types/fs-extra": "^9.0.8", - "@types/jest": "^28.1.4", - "@types/koa": "^2.11.6", - "@types/lodash-es": "^4.17.3", - "@types/lru-cache": "^5.1.0", - "@types/markdown-it": "^10.0.2", - "@types/node": "^14.0.0", - "@types/postcss-load-config": "^2.0.1", - "@typescript-eslint/eslint-plugin": "^5.4.0", - "@typescript-eslint/parser": "^5.4.0", - "@vitejs/plugin-legacy": "^2.2.0", - "@vitejs/plugin-vue": "^3.0.0", - "@vitejs/plugin-vue-jsx": "^2.0.0", - "@vue/babel-plugin-jsx": "^1.0.0", - "@vue/cli-plugin-eslint": "^5.0.0", - "@vue/eslint-config-prettier": "^8.0.0", - "@vue/eslint-config-typescript": "^11.0.0", - "@vue/test-utils": "^2.0.2", - "@vue/vue3-jest": "28", - "@vueuse/core": "^8.3.1", - "@webpack-cli/serve": "^1.3.1", - "acorn": "^8.0.0", - "ali-oss": "^6.16.0", - "autoprefixer": "^10.2.0", - "axios": "^0.22.0", - "babel-eslint": "^10.0.1", - "babel-jest": "^28.1.2", - "babel-loader": "^8.0.0", - "babel-plugin-import": "^1.1.1", - "babel-plugin-inline-import-data-uri": "^1.0.1", - "babel-plugin-istanbul": "^6.0.0", - "babel-plugin-transform-require-context": "^0.1.1", - "case-sensitive-paths-webpack-plugin": "^2.1.2", - "chalk": "^4.1.1", - "cheerio": "^1.0.0-rc.2", - "codecov": "^3.0.0", - "codesandbox": "^2.2.3", - "colorful": "^2.1.0", - "commander": "^6.1.0", - "compare-versions": "^3.3.0", - "cross-env": "^7.0.0", - "css-loader": "^5.0.0", - "css-minimizer-webpack-plugin": "^3.0.0", - "cz-git": "^1.3.8", - "date-fns": "^2.24.0", - "diacritics": "^1.3.0", - "docsearch.js": "^2.6.3", - "duplicate-package-checker-webpack-plugin": "^3.0.0", - "enquire-js": "^0.2.1", - "esbuild": "~0.12.29", - "esbuild-loader": "^3.0.0", - "escape-html": "^1.0.3", - "eslint": "^8.3.0", - "eslint-config-prettier": "^8.0.0", - "eslint-plugin-html": "^6.0.0", - "eslint-plugin-import": "^2.24.2", - "eslint-plugin-jest": "^26.0.0", - "eslint-plugin-markdown": "^2.0.0", - "eslint-plugin-no-explicit-type-exports": "^0.12.0", - "eslint-plugin-prettier": "^3.1.0", - "eslint-plugin-vue": "^9.17.0", - "fast-glob": "^3.2.7", - "fetch-jsonp": "^1.1.3", - "fs-extra": "^10.0.0", - "glob": "^7.1.2", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "gulp": "^4.0.1", - "gulp-babel": "^8.0.0", - "gulp-strip-code": "^0.1.4", - "gulp-typescript": "^6.0.0-alpha.1", - "html-webpack-plugin": "^5.3.1", - "husky": "^6.0.0", - "ignore-emit-webpack-plugin": "^2.0.6", - "is-windows": "^1.0.2", - "jest": "^28.1.2", - "jest-environment-jsdom": "^28.0.0", - "jest-environment-node": "^28.0.2", - "jest-serializer-vue": "^2.0.0", - "jest-transform-stub": "^2.0.0", - "js-base64": "^3.0.0", - "json-templater": "^1.2.0", - "jsonp": "^0.2.1", - "less": "^4.0.0", - "less-loader": "^10.0.0", - "less-plugin-npm-import": "^2.1.0", - "less-vars-to-js": "^1.3.0", - "lint-staged": "^11.0.0", - "majo": "^0.10.1", - "markdown-it": "^8.4.2", - "markdown-it-anchor": "^8.0.4", - "markdown-it-container": "^3.0.0", - "markdown-it-emoji": "^2.0.0", - "markdown-it-table-of-contents": "^0.5.2", - "marked": "0.3.18", - "merge2": "^1.2.1", - "mini-css-extract-plugin": "^2.4.5", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "mockdate": "^2.0.2", - "moment": "^2.29.1", - "nprogress": "^0.2.0", - "postcss": "^8.2.12", - "postcss-loader": "^6.0.0", - "prettier": "^2.2.0", - "pretty-quick": "^3.0.0", - "prismjs": "^1.23.0", - "progress": "^2.0.3", - "raw-loader": "^4.0.2", - "remark-frontmatter": "^2.0.0", - "remark-parse": "^8.0.0", - "remark-stringify": "^8.0.0", - "remark-yaml-config": "^4.1.0", - "remove-files-webpack-plugin": "^1.5.0", - "reqwest": "^2.0.5", - "rimraf": "^3.0.0", - "rucksack-css": "^1.0.2", - "selenium-server": "^3.0.1", - "semver": "^7.0.0", - "slash": "^3.0.0", - "string-replace-loader": "^3.1.0", - "style-loader": "^3.0.0", - "stylelint": "^14.0.0", - "stylelint-config-prettier": "^9.0.0", - "stylelint-config-rational-order": "^0.1.2", - "stylelint-config-standard": "^25.0.0", - "stylelint-declaration-block-no-ignored-properties": "^2.1.0", - "stylelint-order": "^5.0.0", - "terser-webpack-plugin": "^5.1.1", - "through2": "^3.0.0", - "tinycolor2": "^1.6.0", - "ts-jest": "^28.0.5", - "ts-loader": "^9.1.0", - "tsx": "^4.0.0", - "typedoc": "^0.23.25", - "typescript": "~4.9.3", - "umi-request": "^1.3.5", - "unified": "9.2.2", - "url-loader": "^3.0.0", - "vanilla-jsoneditor": "^0.15.1", - "vite": "^3.0.0", - "vue": "^3.2.0", - "vue-clipboard2": "0.3.3", - "vue-drag-resize": "^2.0.3", - "vue-eslint-parser": "^9.3.1", - "vue-i18n": "^9.1.7", - "vue-infinite-scroll": "^2.0.2", - "vue-loader": "^17.0.0", - "vue-request": "^2.0.4", - "vue-router": "^4.0.0", - "vue-style-loader": "^4.1.2", - "vue-tsc": "^1.0.6", - "vuex": "^4.0.0", - "webpack": "^5.0.0", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-cli": "^4.6.0", - "webpack-dev-server": "^4.0.0", - "webpack-merge": "^5.0.0", - "webpackbar": "^5.0.2", - "xhr-mock": "^2.5.1" + "@ant-design-vue/eslint-config": "*", + "@ant-design-vue/prettier-config": "*", + "@ant-design-vue/typescript-config": "*", + "@types/node": "^20.0.0", + "eslint": "^8.56.0", + "prettier": "^3.3.3", + "esbuild": "^0.25.8", + "turbo": "^2.4.4", + "typescript": "^5.8.2" }, - "dependencies": { - "@ant-design/colors": "^6.0.0", - "@ant-design/icons-vue": "^7.0.0", - "@babel/runtime": "^7.10.5", - "@ctrl/tinycolor": "^3.5.0", - "@emotion/hash": "^0.9.0", - "@emotion/unitless": "^0.8.0", - "@simonwep/pickr": "~1.8.0", - "array-tree-filter": "^2.1.0", - "async-validator": "^4.0.0", - "csstype": "^3.1.3", - "dayjs": "^1.10.5", - "dom-align": "^1.12.1", - "dom-scroll-into-view": "^2.0.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.15", - "resize-observer-polyfill": "^1.5.1", - "scroll-into-view-if-needed": "^2.2.25", - "shallow-equal": "^1.0.0", - "stylis": "^4.1.3", - "throttle-debounce": "^5.0.0", - "vue-types": "^3.0.0", - "warning": "^4.0.0" - }, - "sideEffects": [ - "site/*", - "*.vue", - "*.md", - "dist/*", - "*.css" - ], - "config": { - "commitizen": { - "path": "node_modules/cz-git", - "czConfig": "./scripts/commitizen.js" - } - }, - "web-types": "vetur/web-types.json" + "packageManager": "npm@10.8.2", + "engines": { + "node": ">=20" + } } diff --git a/packages-config/eslint-config/config.d.ts b/packages-config/eslint-config/config.d.ts new file mode 100644 index 000000000..4565b9e79 --- /dev/null +++ b/packages-config/eslint-config/config.d.ts @@ -0,0 +1,5 @@ +import { Linter } from 'eslint' + +declare const e: Linter.Config[] + +export default e diff --git a/packages-config/eslint-config/eslint.config.base.js b/packages-config/eslint-config/eslint.config.base.js new file mode 100644 index 000000000..ebc130c6c --- /dev/null +++ b/packages-config/eslint-config/eslint.config.base.js @@ -0,0 +1,21 @@ +// @ts-check + +/** + * @type {Pick} + */ +export default { + rules: { + 'no-redeclare': 'off', + '@typescript-eslint/no-namespace': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + vars: 'all', + args: 'after-used', + ignoreRestSiblings: true, + argsIgnorePattern: '^_', + }, + ], + }, +} diff --git a/packages-config/eslint-config/eslint.config.ignore.js b/packages-config/eslint-config/eslint.config.ignore.js new file mode 100644 index 000000000..f6bcc2233 --- /dev/null +++ b/packages-config/eslint-config/eslint.config.ignore.js @@ -0,0 +1,20 @@ +// @ts-check + +/** + * @type {Pick} + */ +export default { + ignores: [ + '**/node_modules/', + '**/dist/', + '**/public/', + '**/assets/', + '**/*.js', + '**/.turbo/', + '**/.next/', + '**/*.html', + '.github/', + '.vscode/', + '**/.tsup/', + ], +} diff --git a/packages-config/eslint-config/eslint.config.typescript.js b/packages-config/eslint-config/eslint.config.typescript.js new file mode 100644 index 000000000..a9b8d2220 --- /dev/null +++ b/packages-config/eslint-config/eslint.config.typescript.js @@ -0,0 +1,31 @@ +// @ts-check + +import eslint from '@eslint/js' +import prettier from 'eslint-config-prettier' +import checkFile from 'eslint-plugin-check-file' +import tseslint from 'typescript-eslint' +import base from './eslint.config.base.js' +import ignore from './eslint.config.ignore.js' + +export default tseslint.config( + ignore, + eslint.configs.recommended, + ...tseslint.configs.recommended, + { + files: ['**/src/**/*.{ts}'], + plugins: { + 'check-file': checkFile, + }, + rules: { + 'check-file/filename-naming-convention': [ + 'warn', + { + '**/*.ts': 'KEBAB_CASE', + }, + { ignoreMiddleExtensions: true }, + ], + }, + }, + base, + prettier, +) diff --git a/packages-config/eslint-config/eslint.config.vue.js b/packages-config/eslint-config/eslint.config.vue.js new file mode 100644 index 000000000..4815dfd7f --- /dev/null +++ b/packages-config/eslint-config/eslint.config.vue.js @@ -0,0 +1,77 @@ +// @ts-check + +import eslint from '@eslint/js'; +import prettier from 'eslint-config-prettier'; +import checkFile from 'eslint-plugin-check-file'; +import pluginVue from 'eslint-plugin-vue'; +import tseslint from 'typescript-eslint'; +import base from './eslint.config.base.js'; +import ignore from './eslint.config.ignore.js'; + +export default tseslint.config( + ignore, + { + files: ['**/*.vue'], + languageOptions: { + parserOptions: { + parser: tseslint.parser, + sourceType: 'module', + }, + }, + }, + { + files: ['**/src/**/*.{ts,vue}'], + plugins: { + 'check-file': checkFile, + }, + rules: { + 'check-file/filename-naming-convention': [ + 'warn', + { + '**/*.vue': 'PASCAL_CASE', + '**/*.ts': 'KEBAB_CASE', + }, + { ignoreMiddleExtensions: true }, + ], + }, + }, + { + files: ['**/*.vue'], + rules: { + 'check-file/no-index': 'warn', + }, + }, + eslint.configs.recommended, + ...tseslint.configs.recommended, + // @ts-ignore + ...pluginVue.configs['flat/recommended'], + base, + { + rules: { + 'vue/require-default-prop': 'off', + 'vue/no-mutating-props': 'off', + 'vue/multi-word-component-names': 'off', + 'vue/no-v-html': 'off', + semi: ['error', 'always'], + quotes: [ + 2, + 'single', + { + avoidEscape: true, + allowTemplateLiterals: true, + }, + ], + 'vue/require-prop-types': 0, + 'vue/v-on-event-hyphenation': 0, + 'import/no-unresolved': [2, { ignore: ['^@ant-design-vue/table'] }], + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-non-null-asserted-optional-chain': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/ban-types': 0, + '@typescript-eslint/explicit-module-boundary-types': 0, + '@typescript-eslint/consistent-type-imports': 'error', + }, + }, + prettier, +); diff --git a/packages-config/eslint-config/package.json b/packages-config/eslint-config/package.json new file mode 100644 index 000000000..1b4a85fa9 --- /dev/null +++ b/packages-config/eslint-config/package.json @@ -0,0 +1,27 @@ +{ + "name": "@ant-design-vue/eslint-config", + "version": "0.0.0", + "private": true, + "type": "module", + "exports": { + "./typescript": { + "import": "./eslint.config.typescript.js", + "types": "./config.d.ts" + }, + "./vue": { + "import": "./eslint.config.vue.js", + "types": "./config.d.ts" + } + }, + "devDependencies": { + "@eslint/js": "^8.56.0", + "@types/eslint__js": "^8.42.3", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-check-file": "^2.8.0", + "eslint-plugin-vue": "^9.27.0", + "typescript": "^5.8.2", + "typescript-eslint": "^7.17.0", + "globby": "^14.1.0" + } +} diff --git a/packages-config/prettier-config/config.d.ts b/packages-config/prettier-config/config.d.ts new file mode 100644 index 000000000..2b8842184 --- /dev/null +++ b/packages-config/prettier-config/config.d.ts @@ -0,0 +1,5 @@ +import { Config } from 'prettier' + +declare const e: Config + +export default e diff --git a/packages-config/prettier-config/package.json b/packages-config/prettier-config/package.json new file mode 100644 index 000000000..ecc067ad2 --- /dev/null +++ b/packages-config/prettier-config/package.json @@ -0,0 +1,22 @@ +{ + "name": "@ant-design-vue/prettier-config", + "version": "0.0.0", + "private": true, + "type": "module", + "exports": { + ".": { + "import": "./prettier.config.base.js", + "types": "./config.d.ts" + }, + "./tailwind": { + "import": "./prettier.config.tailwind.js", + "types": "./config.d.ts" + } + }, + "devDependencies": { + "prettier": "^3.3.3" + }, + "peerDependencies": { + "prettier-plugin-tailwindcss": "*" + } +} diff --git a/packages-config/prettier-config/prettier.config.base.js b/packages-config/prettier-config/prettier.config.base.js new file mode 100644 index 000000000..b6afadbbd --- /dev/null +++ b/packages-config/prettier-config/prettier.config.base.js @@ -0,0 +1,15 @@ +// @ts-check + +/** + * @type {import('prettier').Config} + */ +export default { + semi: false, + tabWidth: 2, + singleQuote: true, + printWidth: 100, + trailingComma: 'all', + proseWrap: 'never', + arrowParens: 'avoid', + htmlWhitespaceSensitivity: 'ignore', +} diff --git a/packages-config/prettier-config/prettier.config.tailwind.js b/packages-config/prettier-config/prettier.config.tailwind.js new file mode 100644 index 000000000..3ce613f73 --- /dev/null +++ b/packages-config/prettier-config/prettier.config.tailwind.js @@ -0,0 +1,11 @@ +// @ts-check + +import base from './prettier.config.base.js' + +/** + * @type {import('prettier').Config} + */ +export default { + ...base, + plugins: ['prettier-plugin-tailwindcss'], +} diff --git a/packages-config/tailwind-config/package.json b/packages-config/tailwind-config/package.json new file mode 100644 index 000000000..78eccf7fe --- /dev/null +++ b/packages-config/tailwind-config/package.json @@ -0,0 +1,21 @@ +{ + "name": "@ant-design-vue/tailwind-config", + "version": "0.0.0", + "private": true, + "exports": { + ".": { + "default": "./tailwind.css" + }, + "./themes/*": { + "default": "./themes/*.css" + } + }, + "devDependencies": { + "tailwindcss": "^4.0.9", + "@tailwindcss/typography": "^0.5.16" + }, + "peerDependencies": { + "tailwindcss": "^4", + "@tailwindcss/typography": "^0.5.16" + } +} diff --git a/packages-config/tailwind-config/tailwind.css b/packages-config/tailwind-config/tailwind.css new file mode 100644 index 000000000..6bdf734c5 --- /dev/null +++ b/packages-config/tailwind-config/tailwind.css @@ -0,0 +1,35 @@ +@import 'tailwindcss' source(none); +@import './themes/light.css'; +@plugin '@tailwindcss/typography'; + +@utility text-tint-* { + color: color-mix(in srgb, --value(--color- *, [ *]), white calc(--modifier(integer) * 1%)); +} + +@utility text-shade-* { + color: color-mix(in srgb, --value(--color- *, [ *]), black calc(--modifier(integer) * 1%)); +} + +@utility bg-tint-* { + background-color: color-mix( + in srgb, + --value(--color- *, [ *]), + white calc(--modifier(integer) * 1%) + ); +} + +@utility bg-shade-* { + background-color: color-mix( + in srgb, + --value(--color- *, [ *]), + black calc(--modifier(integer) * 1%) + ); +} + +@utility border-tint-* { + border-color: color-mix(in srgb, --value(--color- *, [ *]), white calc(--modifier(integer) * 1%)); +} + +@utility border-shade-* { + border-color: color-mix(in srgb, --value(--color- *, [ *]), black calc(--modifier(integer) * 1%)); +} diff --git a/packages-config/tailwind-config/themes/light.css b/packages-config/tailwind-config/themes/light.css new file mode 100644 index 000000000..46857dd4c --- /dev/null +++ b/packages-config/tailwind-config/themes/light.css @@ -0,0 +1,22 @@ +@theme { + --color-base-100: #ffffff; + --color-base-200: #f7f7f7; + --color-base-300: #ededed; + --color-base-content: #222222; + --color-primary: #151415; + --color-primary-content: #ffffff; + --color-secondary: #0d58fc; + --color-secondary-content: #ffffff; + --color-accent: #0289ff; + --color-accent-content: #ffffff; + --color-neutral: #666666; + --color-neutral-content: #ffffff; + --color-info: #0d58fc; + --color-info-content: #ffffff; + --color-success: #00c573; + --color-success-content: #ffffff; + --color-warning: #ff9900; + --color-warning-content: #ffffff; + --color-error: #ff3333; + --color-error-content: #ffffff; +} diff --git a/packages-config/typescript-config/package.json b/packages-config/typescript-config/package.json new file mode 100644 index 000000000..3370d5e73 --- /dev/null +++ b/packages-config/typescript-config/package.json @@ -0,0 +1,5 @@ +{ + "name": "@ant-design-vue/typescript-config", + "version": "0.0.0", + "private": true +} diff --git a/packages-config/typescript-config/tsconfig.node.json b/packages-config/typescript-config/tsconfig.node.json new file mode 100644 index 000000000..3ba6222b6 --- /dev/null +++ b/packages-config/typescript-config/tsconfig.node.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "bundler" + } +} diff --git a/packages-config/typescript-config/tsconfig.vite.json b/packages-config/typescript-config/tsconfig.vite.json new file mode 100644 index 000000000..ce9a43b4b --- /dev/null +++ b/packages-config/typescript-config/tsconfig.vite.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "allowImportingTsExtensions": true, + "allowJs": false, + "allowSyntheticDefaultImports": true, + "esModuleInterop": false, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "jsx": "preserve", + "lib": ["DOM", "DOM.Iterable", "ES2020"], + "module": "ESNext", + "moduleDetection": "force", + "moduleResolution": "bundler", + "noEmit": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": false, + "target": "ES2020", + "types": ["vite/client"] + } +} diff --git a/packages-config/typescript-config/tsconfig.vue.json b/packages-config/typescript-config/tsconfig.vue.json new file mode 100644 index 000000000..ca9dd5859 --- /dev/null +++ b/packages-config/typescript-config/tsconfig.vue.json @@ -0,0 +1,7 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "./tsconfig.vite.json", + "compilerOptions": { + "types": ["vite/client"] + } +} diff --git a/packages-config/vite-config/config.d.ts b/packages-config/vite-config/config.d.ts new file mode 100644 index 000000000..4c3773aff --- /dev/null +++ b/packages-config/vite-config/config.d.ts @@ -0,0 +1,5 @@ +import { GetUserConfig } from './index.d' + +declare const e: GetUserConfig + +export default e diff --git a/packages-config/vite-config/index.d.ts b/packages-config/vite-config/index.d.ts new file mode 100644 index 000000000..c97b64595 --- /dev/null +++ b/packages-config/vite-config/index.d.ts @@ -0,0 +1,8 @@ +import { UserConfig, UserConfigFnObject } from 'vite' + +export type GetUserConfig = (dirname: string) => UserConfig | UserConfigFnObject + +export declare function extendsConfig( + base: UserConfig | UserConfigFnObject, + overwrite: UserConfig | UserConfigFnObject, +): UserConfigFnObject diff --git a/packages-config/vite-config/index.js b/packages-config/vite-config/index.js new file mode 100644 index 000000000..22b42085f --- /dev/null +++ b/packages-config/vite-config/index.js @@ -0,0 +1,14 @@ +// @ts-check + +import { mergeConfig } from 'vite' + +/** + * @type {typeof import('./index.d.ts').extendsConfig} + */ +export function extendsConfig(base, overwrite) { + return env => + mergeConfig( + typeof base === 'function' ? base(env) : base, + typeof overwrite === 'function' ? overwrite(env) : overwrite, + ) +} diff --git a/packages-config/vite-config/package.json b/packages-config/vite-config/package.json new file mode 100644 index 000000000..68cbb907c --- /dev/null +++ b/packages-config/vite-config/package.json @@ -0,0 +1,32 @@ +{ + "name": "@ant-design-vue/vite-config", + "version": "0.0.0", + "private": true, + "type": "module", + "exports": { + ".": { + "import": "./index.js", + "types": "./index.d.ts" + }, + "./typescript": { + "import": "./vite.config.typescript.js", + "types": "./config.d.ts" + }, + "./vue": { + "import": "./vite.config.vue.js", + "types": "./config.d.ts" + } + }, + "devDependencies": { + "@types/node": "^20.0.0", + "@vitejs/plugin-vue": "^5.1.3", + "vite": "^5.3.5", + "vite-plugin-dts": "^4.5.4" + }, + "peerDependencies": { + "@vitejs/plugin-vue": "*", + "typescript": "*", + "vite": "5", + "vite-plugin-dts": "*" + } +} diff --git a/packages-config/vite-config/vite.config.lib.js b/packages-config/vite-config/vite.config.lib.js new file mode 100644 index 000000000..d09b92bae --- /dev/null +++ b/packages-config/vite-config/vite.config.lib.js @@ -0,0 +1,67 @@ +// @ts-nocheck + +import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { defineConfig } from 'vite'; +import dts from 'vite-plugin-dts'; + +/** + * @type {import('./index.d.ts').GetUserConfig} + */ +export default dirname => + defineConfig(({ mode }) => { + const pkg = JSON.parse(readFileSync(resolve(dirname, './package.json'), 'utf-8')); + const isDev = mode === 'development'; + return { + plugins: [ + dts({ + outDir: 'dist', + compilerOptions: { declarationMap: isDev }, + include: ['src/**/*.ts', 'src/**/*.vue', 'src/**/*.d.ts'], + insertTypesEntry: true, + skipDiagnostics: false, + }), + ], + build: { + cssCodeSplit: true, + lib: { + entry: { + lib: resolve(dirname, 'src/index.ts'), + }, + lib: { + entry: { + lib: resolve(dirname, 'src/index.ts'), + }, + formats: ['es', 'cjs'], + fileName: (format, entryName) => `${entryName}.${format === 'es' ? 'mjs' : 'cjs'}`, + }, + }, + rollupOptions: { + external: isDev + ? id => { + if (pkg.peerDependencies && id in pkg.peerDependencies) { + return true; + } + if (/^@(ant-design-vue)\//.test(id) || id === 'ant-design-vue') { + return true; + } + return false; + } + : pkg.peerDependencies && Object.keys(pkg.peerDependencies), + }, + sourcemap: isDev ? 'inline' : undefined, + minify: !isDev, + emptyOutDir: !isDev, + watch: process.argv.includes('--watch') + ? { + buildDelay: 300, + } + : null, + }, + resolve: { + alias: { + '@': resolve(dirname, './src'), + }, + }, + }; + }); diff --git a/packages-config/vite-config/vite.config.typescript.js b/packages-config/vite-config/vite.config.typescript.js new file mode 100644 index 000000000..7529d2d3c --- /dev/null +++ b/packages-config/vite-config/vite.config.typescript.js @@ -0,0 +1,16 @@ +// @ts-check + +import { defineConfig } from 'vite' +import { extendsConfig } from './index.js' +import lib from './vite.config.lib.js' + +/** + * @type {import('./index.d.ts').GetUserConfig} + */ +export default dirname => + extendsConfig( + lib(dirname), + defineConfig({ + plugins: [], + }), + ) diff --git a/packages-config/vite-config/vite.config.vue.js b/packages-config/vite-config/vite.config.vue.js new file mode 100644 index 000000000..bcab619ea --- /dev/null +++ b/packages-config/vite-config/vite.config.vue.js @@ -0,0 +1,28 @@ +import vue from '@vitejs/plugin-vue' +import { defineConfig } from 'vite' +import { extendsConfig } from './index.js' +import lib from './vite.config.lib.js' + +/** + * @type {import('./index.d.ts').GetUserConfig} + */ +export default dirname => + extendsConfig( + lib(dirname), + defineConfig(({ mode }) => { + return { + plugins: [vue()], + build: { + cssCodeSplit: true, + rollupOptions: { + output: { + exports: 'named', + globals: { + vue: 'Vue', + }, + }, + }, + }, + } + }), + ) diff --git a/packages/ui/README.md b/packages/ui/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/ui/eslint.config.js b/packages/ui/eslint.config.js new file mode 100644 index 000000000..d151c6789 --- /dev/null +++ b/packages/ui/eslint.config.js @@ -0,0 +1,4 @@ +// @ts-check + +export { default } from '@ant-design-vue/eslint-config/vue'; + diff --git a/packages/ui/package.json b/packages/ui/package.json new file mode 100644 index 000000000..7511e5160 --- /dev/null +++ b/packages/ui/package.json @@ -0,0 +1,88 @@ +{ + "name": "ant-design-vue", + "version": "5.0.0-alpha.1", + "title": "Ant Design Vue", + "description": "An enterprise-class UI design language and Vue-based implementation", + "keywords": [ + "vue", + "vue3", + "ant", + "design", + "antd", + "vueComponent", + "component", + "components", + "ui", + "framework", + "frontend" + ], + "scripts": { + "build": "vite build", + "build:dev": "vite build --mode development", + "dev": "vite build --watch --mode development", + "lint": "eslint . --fix", + "tsc": "tsc --noEmit", + "tsg": "tsc --declaration --declarationMap --emitDeclarationOnly --noEmit false --outDir dist/types" + }, + "type": "module", + "exports": { + ".": { + "import": "./dist/index.esm.js", + "require": "./dist/index.umd.js" + }, + "./style.css": { + "import": "./dist/index.css", + "require": "./dist/index.css" + } + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ant-design-vue/core.git" + }, + "bugs": { + "url": "https://github.com/ant-design-vue/table/issues" + }, + "license": "MIT", + "main": "./dist/index.umd.js", + "module": "./dist/index.esm.js", + "types": "./dist/src/index.d.ts", + "files": [ + "dist", + "src/style", + "typings" + ], + "sideEffects": [ + "dist/*", + "*.less" + ], + "peerDependencies": { + "vue": "^3.2.34" + }, + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-vue": "^6.0.1", + "@floating-ui/dom": "^1.6.13", + "@floating-ui/vue": "^1.1.6", + "lodash-es": "^4.17.21", + "resize-observer-polyfill": "^1.5.1" + }, + "devDependencies": { + "@ant-design-vue/eslint-config": "*", + "@ant-design-vue/prettier-config": "*", + "@ant-design-vue/tailwind-config": "*", + "@ant-design-vue/typescript-config": "*", + "@ant-design-vue/vite-config": "*", + "@tailwindcss/vite": "^4.1.3", + "@vitejs/plugin-vue": "^5.1.3", + "@vueuse/core": "^12.0.0", + "@types/node": "^20.19.7", + "prettier-plugin-tailwindcss": "^0.6.11", + "tailwindcss": "^4.0.14", + "typescript": "^5.8.2", + "vite": "^5.3.5", + "vite-plugin-dts": "^4.5.4", + "vite-svg-loader": "^5.1.0", + "vue": "^3.4.34", + "vue-tsc": "^3.0.3" + } +} diff --git a/packages/ui/prettier.config.js b/packages/ui/prettier.config.js new file mode 100644 index 000000000..9b2395e43 --- /dev/null +++ b/packages/ui/prettier.config.js @@ -0,0 +1,3 @@ +// @ts-check + +export { default } from "@ant-design-vue/prettier-config/tailwind"; diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts new file mode 100644 index 000000000..25821cdad --- /dev/null +++ b/packages/ui/src/index.ts @@ -0,0 +1,24 @@ +import { App } from 'vue' + +const components = {} as any +export const install = function (app: App) { + Object.keys(components).forEach(key => { + const component = components[key] + if (component.install) { + app.use(component) + } + }) + app.config.globalProperties.$message = components.message + app.config.globalProperties.$notification = components.notification + app.config.globalProperties.$info = components.Modal.info + app.config.globalProperties.$success = components.Modal.success + app.config.globalProperties.$error = components.Modal.error + app.config.globalProperties.$warning = components.Modal.warning + app.config.globalProperties.$confirm = components.Modal.confirm + app.config.globalProperties.$destroyAll = components.Modal.destroyAll + return app +} + +export default { + install, +} diff --git a/packages/ui/src/shims-app.d.ts b/packages/ui/src/shims-app.d.ts new file mode 100644 index 000000000..2b97bd961 --- /dev/null +++ b/packages/ui/src/shims-app.d.ts @@ -0,0 +1,5 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json new file mode 100644 index 000000000..328fc9bcf --- /dev/null +++ b/packages/ui/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@ant-design-vue/typescript-config/tsconfig.vue.json", + "include": ["src/**/*.ts", "src/**/*.vue", "src/**/*.d.ts"], + "references": [{ "path": "./tsconfig.node.json" }], + "compilerOptions": { + "paths": { + "@/*": ["./src/*"], + "~/*": ["./assets/*"] + } + } +} diff --git a/packages/ui/tsconfig.node.json b/packages/ui/tsconfig.node.json new file mode 100644 index 000000000..0ae8edbee --- /dev/null +++ b/packages/ui/tsconfig.node.json @@ -0,0 +1,4 @@ +{ + "extends": "@ant-design-vue/typescript-config/tsconfig.node.json", + "include": ["vite.config.*"] +} diff --git a/packages/ui/typings/global.d.ts b/packages/ui/typings/global.d.ts new file mode 100644 index 000000000..b35ed8c70 --- /dev/null +++ b/packages/ui/typings/global.d.ts @@ -0,0 +1,5 @@ +/* eslint-disable @typescript-eslint/consistent-type-imports */ +declare module 'vue' { + export interface GlobalComponents {} +} +export {} diff --git a/packages/ui/vite.config.ts b/packages/ui/vite.config.ts new file mode 100644 index 000000000..bdf04cb19 --- /dev/null +++ b/packages/ui/vite.config.ts @@ -0,0 +1,23 @@ +import { extendsConfig } from '@ant-design-vue/vite-config'; +import vue from '@ant-design-vue/vite-config/vue'; +import { resolve } from 'node:path'; +import tailwindcss from '@tailwindcss/vite'; + +export default extendsConfig(vue(__dirname), { + resolve: { + alias: { + '~': resolve(__dirname, './assets'), + }, + }, + plugins: [tailwindcss()], + build: { + lib: { + name: 'antd', + entry: { + lib: resolve(__dirname, 'src/index.ts'), + }, + formats: ['umd'], + fileName: (format, entryName) => `${entryName}.${format}.js`, + }, + }, +}) diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index a0fa32b9c..000000000 --- a/postcss.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - plugins: [require('autoprefixer')], -}; diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 000000000..dac5fa5e8 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,3 @@ +// @ts-check + +export { default } from '@ant-design-vue/prettier-config' diff --git a/scripts/generate-token-meta.js b/scripts/generate-token-meta.js deleted file mode 100644 index 6c594e5f0..000000000 --- a/scripts/generate-token-meta.js +++ /dev/null @@ -1,102 +0,0 @@ -const TypeDoc = require('typedoc'); -const fs = require('fs-extra'); - -const getTokenList = (list, source) => - list - .filter( - item => - !item.comment?.blockTags.some(tag => tag.tag === '@internal' || tag.tag === '@private'), - ) - .map(item => ({ - source, - token: item.name, - type: item.type.toString(), - desc: - item.comment?.blockTags - ?.find(tag => tag.tag === '@desc') - ?.content.reduce((result, str) => result.concat(str.text), '') || '', - descEn: - item.comment?.blockTags - ?.find(tag => tag.tag === '@descEN') - ?.content.reduce((result, str) => result.concat(str.text), '') || '', - name: - item.comment?.blockTags - ?.find(tag => tag.tag === '@nameZH') - ?.content.reduce((result, str) => result.concat(str.text), '') || '', - nameEn: - item.comment?.blockTags - ?.find(tag => tag.tag === '@nameEN') - ?.content.reduce((result, str) => result.concat(str.text), '') || '', - })); - -function main() { - const app = new TypeDoc.Application(); - - // If you want TypeDoc to load tsconfig.json / typedoc.json files - app.options.addReader(new TypeDoc.TSConfigReader()); - app.options.addReader(new TypeDoc.TypeDocReader()); - - app.bootstrap({ - // typedoc options here - entryPoints: ['components/theme/interface/index.ts'], - skipErrorChecking: true, - }); - - const project = app.convert(); - - if (project) { - // Project may not have converted correctly - const output = 'components/version/token-meta.json'; - const tokenMeta = {}; - let presetColors = []; - project.children.forEach(type => { - if (type.name === 'SeedToken') { - tokenMeta.seed = getTokenList(type.children, 'seed'); - } else if (type.name === 'MapToken') { - tokenMeta.map = getTokenList(type.children, 'map'); - } else if (type.name === 'AliasToken') { - tokenMeta.alias = getTokenList(type.children, 'alias'); - } else if (type.name === 'PresetColors') { - presetColors = type.type.target.elements.map(item => item.value); - } - }); - - // Exclude preset colors - tokenMeta.seed = tokenMeta.seed.filter( - item => !presetColors.some(color => item.token.startsWith(color)), - ); - tokenMeta.map = tokenMeta.map.filter( - item => !presetColors.some(color => item.token.startsWith(color)), - ); - tokenMeta.alias = tokenMeta.alias.filter( - item => !presetColors.some(color => item.token.startsWith(color)), - ); - - tokenMeta.alias = tokenMeta.alias.filter( - item => !tokenMeta.map.some(mapItem => mapItem.token === item.token), - ); - tokenMeta.map = tokenMeta.map.filter( - item => !tokenMeta.seed.some(seedItem => seedItem.token === item.token), - ); - - const finalMeta = Object.entries(tokenMeta).reduce((acc, [key, value]) => { - value.forEach(item => { - acc[item.token] = { - name: item.name, - nameEn: item.nameEn, - desc: item.desc, - descEn: item.descEn, - type: item.type, - source: key, - }; - }); - return acc; - }, {}); - - fs.writeJsonSync(output, finalMeta, 'utf8'); - // eslint-disable-next-line no-console - console.log(`✅ Token Meta has been written to ${output}`); - } -} - -main(); diff --git a/site/404.html b/site/404.html deleted file mode 100644 index a96663407..000000000 --- a/site/404.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - - - - Ant Design Vue - - - - - - -
-
-
-

404

-

- 你要找的页面不存在 - 返回首页 -

-
- -
-
- - - - - diff --git a/site/debugger/demo/demo.vue b/site/debugger/demo/demo.vue deleted file mode 100644 index 50bf1c6e9..000000000 --- a/site/debugger/demo/demo.vue +++ /dev/null @@ -1,17 +0,0 @@ - diff --git a/site/debugger/index.tsx b/site/debugger/index.tsx deleted file mode 100644 index 5be9164ab..000000000 --- a/site/debugger/index.tsx +++ /dev/null @@ -1,10 +0,0 @@ -// debugger tsx -// import Demo from '../../components/select/demo/field-names.vue'; -import Demo from './demo/demo.vue'; - -export default { - setup() {}, - render() { - return ; - }, -}; diff --git a/site/index.html b/site/index.html deleted file mode 100644 index 3941e826e..000000000 --- a/site/index.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js - - - - - - - -
- - - - - - - - - diff --git a/site/public/favicon.ico b/site/public/favicon.ico deleted file mode 100644 index df36fcfb72584e00488330b560ebcf34a41c64c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/site/scripts/genrateRoutes.js b/site/scripts/genrateRoutes.js deleted file mode 100644 index 2eb1d06d8..000000000 --- a/site/scripts/genrateRoutes.js +++ /dev/null @@ -1,40 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -const globby = require('globby'); -const fs = require('fs'); -const path = require('path'); -const matter = require('gray-matter'); -const { ESLint } = require('eslint'); - -(async () => { - const paths = await globby('components/*/index.*.md'); - const components = {}; - - paths.forEach(path => { - const content = fs.readFileSync(path).toString(); - const componentName = path.split('/')[1]; - - const { data } = matter(content); - components[componentName] = { ...components[componentName], ...data }; - }); - const TEMPLATE = ` -export default [ - ${Object.keys(components).map( - component => ` - { - path: '${component}:lang(-cn)?', - meta: ${JSON.stringify(components[component])}, - component: () => import('../../../components/${component}/demo/index.vue'), - }`, - )} -];`; - - const engine = new ESLint({ - fix: true, - useEslintrc: false, - baseConfig: require(path.join(process.cwd(), '.eslintrc.js')), - }); - - const report = await engine.lintText(TEMPLATE); - - fs.writeFileSync('site/src/router/demoRoutes.js', report[0].output); -})(); diff --git a/site/scripts/pushToOSS.js b/site/scripts/pushToOSS.js deleted file mode 100644 index 8f98d5c14..000000000 --- a/site/scripts/pushToOSS.js +++ /dev/null @@ -1,59 +0,0 @@ -/* eslint-disable no-console */ -/* eslint-disable @typescript-eslint/no-var-requires */ -const OSS = require('ali-oss'); -const path = require('path'); -const fs = require('fs'); - -const accessKeyId = process.env.ALI_OSS_ACCESSKEY; -const accessKeySecret = process.env.ALI_OSS_SECRETKEY; - -const client = new OSS({ - bucket: '4x-antdv', - cname: 'true', - endpoint: '4x-antdv.oss-cn-beijing.aliyuncs.com', - region: 'oss-cn-beijing', - accessKeyId, - accessKeySecret, -}); - -const assetsPath = path.join(process.cwd(), 'site', 'dist', 'assets'); - -const put = (target, source) => { - return new Promise((reslove, reject) => { - client - .put(target, source) - .then(res => { - if (res.res.status !== 200) { - console.log(`${res.name} upload failed!`); - reject(); - process.exit(500); - } else { - console.log(`${res.name} upload success!`); - reslove(); - } - }) - .catch(err => { - if (err) { - err && console.log(err); - process.exit(500); - } - }); - }); -}; - -async function upload() { - try { - const files = await fs.promises.readdir(assetsPath, { - withFileTypes: true, - }); - for (const file of files) { - if (file.isFile()) { - await put(`assets/${file.name}`, path.join(assetsPath, file.name)); - } - } - await put('index.html', path.join(process.cwd(), 'site', 'dist', 'index.html')); - } catch (err) { - console.error(err); - } -} -upload(); diff --git a/site/src/App.vue b/site/src/App.vue deleted file mode 100644 index 5192a6686..000000000 --- a/site/src/App.vue +++ /dev/null @@ -1,148 +0,0 @@ - - - diff --git a/site/src/SiteToken.vue b/site/src/SiteToken.vue deleted file mode 100644 index 090deaf6e..000000000 --- a/site/src/SiteToken.vue +++ /dev/null @@ -1,7 +0,0 @@ - - diff --git a/site/src/SymbolKey.ts b/site/src/SymbolKey.ts deleted file mode 100644 index 9d14bbefa..000000000 --- a/site/src/SymbolKey.ts +++ /dev/null @@ -1 +0,0 @@ -export const GLOBAL_CONFIG = Symbol('globalConfig'); diff --git a/site/src/assets/ant-design-vue.svg b/site/src/assets/ant-design-vue.svg deleted file mode 100644 index 4fe899edc..000000000 --- a/site/src/assets/ant-design-vue.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - Ant Design Vue Copy 5 - Created with Sketch. - - - - - - \ No newline at end of file diff --git a/site/src/assets/logo.png b/site/src/assets/logo.png deleted file mode 100644 index f6305e2f82facb9997163e9734e1ade330d1b0ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158274 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 - - - Vue - Created with Sketch. - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/site/src/components/ColorChunk/index.tsx b/site/src/components/ColorChunk/index.tsx deleted file mode 100644 index 6e5451d2e..000000000 --- a/site/src/components/ColorChunk/index.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { defineComponent, toRefs, computed } from 'vue'; -import type { CSSProperties, PropType } from 'vue'; -import { TinyColor, type ColorInput } from '@ctrl/tinycolor'; -import useSiteToken from '../../hooks/useSiteToken'; - -const ColorChunk = defineComponent({ - props: { - color: { - type: String as PropType, - default: '#000', - }, - }, - setup(props, { attrs, slots }) { - const SiteToken = useSiteToken(); - - const token = computed(() => SiteToken.value.token); - - const { color } = toRefs(props); - - const dotColor = computed(() => { - const _color = new TinyColor(color.value).toHex8String(); - return _color.endsWith('ff') ? _color.slice(0, -2) : _color; - }); - - return () => { - return ( - - - {slots.default ? slots.default() : dotColor.value} - - ); - }; - }, -}); - -export default ColorChunk; diff --git a/site/src/components/ComponentTokenTable/index.tsx b/site/src/components/ComponentTokenTable/index.tsx deleted file mode 100644 index c57c6c1b6..000000000 --- a/site/src/components/ComponentTokenTable/index.tsx +++ /dev/null @@ -1,205 +0,0 @@ -import { defineComponent, toRefs, computed } from 'vue'; -import type { PropType } from 'vue'; -import { ConfigProvider, Table } from 'ant-design-vue'; -import { getDesignToken } from '../antdv-token-previewer'; -import tokenMeta from 'ant-design-vue/es/version/token-meta.json'; -import tokenData from 'ant-design-vue/es/version/token.json'; -import { useLocale } from '../../i18n'; -import useSiteToken from '../../hooks/useSiteToken'; -import { useColumns } from '../TokenTable'; -import ColorChunk from '../ColorChunk'; - -const defaultToken = getDesignToken(); - -const locales = { - cn: { - token: 'Token 名称', - description: '描述', - type: '类型', - value: '默认值', - }, - en: { - token: 'Token Name', - description: 'Description', - type: 'Type', - value: 'Default Value', - }, -}; - -interface SubTokenTableProps { - defaultOpen?: boolean; - title: string; - tokens: string[]; -} - -const SubTokenTable = defineComponent({ - props: { - defaultOpen: { - type: Boolean as PropType, - }, - title: { - type: String as PropType, - }, - tokens: { - type: Array as PropType, - }, - }, - setup(props) { - const { defaultOpen, title, tokens } = toRefs(props); - const [, lang] = useLocale(locales); - const siteToken = useSiteToken(); - const token = computed(() => siteToken.value.token); - const columns = useColumns(); - - return () => { - if (!tokens.value.length) { - return null; - } - - const data = tokens.value - .sort((token1, token2) => { - const hasColor1 = token1.toLowerCase().includes('color'); - const hasColor2 = token2.toLowerCase().includes('color'); - - if (hasColor1 && !hasColor2) { - return -1; - } - - if (!hasColor1 && hasColor2) { - return 1; - } - - return token1 < token2 ? -1 : 1; - }) - .map(name => { - const meta = tokenMeta[name]; - - if (!meta) { - return null; - } - - return { - name, - desc: lang.value === 'cn' ? meta.desc : meta.descEn, - type: meta.type, - value: (defaultToken as any)[name], - }; - }) - .filter(info => info); - - return ( - // Reuse `.markdown` style -
- -

{title.value}

-
- - record.name} - v-slots={{ - bodyCell: ({ text, record, column }) => { - if (column.key === 'type') { - return ( - - {record.type} - - ); - } - if (column.key === 'value') { - const isColor = - typeof record.value === 'string' && - (record.value.startsWith('#') || record.value.startsWith('rgb')); - if (isColor) { - return {record.value}; - } - return ( - - {typeof record.value !== 'string' - ? JSON.stringify(record.value) - : record.value} - - ); - } - return {text} ; - }, - }} - /> - - - ); - }; - }, -}); - -export interface ComponentTokenTableProps { - component: string; -} - -const ComponentTokenTable = defineComponent({ - props: { - component: { - type: String as PropType, - }, - }, - setup(props) { - const { component } = toRefs(props); - - const mergedTokens = computed(() => { - const globalTokenSet = new Set(); - let componentTokens: Record = {}; - - component.value.split(',').forEach(comp => { - const { global: globalTokens = [], component: singleComponentTokens = [] } = - tokenData[comp] || {}; - - globalTokens.forEach((token: string) => { - globalTokenSet.add(token); - }); - - componentTokens = { - ...componentTokens, - ...singleComponentTokens, - }; - }); - - return { - mergedGlobalTokens: Array.from(globalTokenSet), - mergedComponentTokens: componentTokens, - }; - }); - - return () => { - return ( - <> - {/* Component Token 先不展示 */} - {/* */} - - - ); - }; - }, -}); - -export default ComponentTokenTable; diff --git a/site/src/components/Contributors/constants.ts b/site/src/components/Contributors/constants.ts deleted file mode 100644 index cbeef08a8..000000000 --- a/site/src/components/Contributors/constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const REPO_OWNER = 'VueComponent'; -export const REPO_NAME = 'ant-design-vue'; -export const REPO_PATH = `${REPO_OWNER}/${REPO_NAME}`; -export const REPO_BRANCH = 'main'; diff --git a/site/src/components/Contributors/index.vue b/site/src/components/Contributors/index.vue deleted file mode 100644 index 8dda1feb0..000000000 --- a/site/src/components/Contributors/index.vue +++ /dev/null @@ -1,112 +0,0 @@ - - - - - diff --git a/site/src/components/DemoBox.vue b/site/src/components/DemoBox.vue deleted file mode 100644 index ebb8ea149..000000000 --- a/site/src/components/DemoBox.vue +++ /dev/null @@ -1,265 +0,0 @@ -